From 02015ca5e3deda44fc5297352a60575d70ac4109 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 3 Aug 2014 17:48:18 +0400 Subject: [PATCH 0001/1204] Init --- .travis.yml | 10 +++++++ LICENSE | 22 +++++++++++++++ high-sql.cabal | 55 ++++++++++++++++++++++++++++++++++++++ library/HighSQL.hs | 18 +++++++++++++ library/HighSQL/Backend.hs | 10 +++++++ library/HighSQL/Prelude.hs | 31 +++++++++++++++++++++ 6 files changed, 146 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 high-sql.cabal create mode 100644 library/HighSQL.hs create mode 100644 library/HighSQL/Backend.hs create mode 100644 library/HighSQL/Prelude.hs diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..e5c0294dc2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: haskell + +ghc: + - 7.6 + - 7.8 + +install: + - cabal install happy # a "haskell-src-exts" implicit dependency workaround + - cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..fe32f2b745 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014, Nikita Volkov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/high-sql.cabal b/high-sql.cabal new file mode 100644 index 0000000000..f6ca1f41ec --- /dev/null +++ b/high-sql.cabal @@ -0,0 +1,55 @@ +name: + high-sql +version: + 0.1.0 +synopsis: +description: +category: +homepage: + https://github.com/nikita-volkov/high-sql +bug-reports: + https://github.com/nikita-volkov/high-sql/issues +author: + Nikita Volkov +maintainer: + Nikita Volkov +copyright: + (c) 2014, Nikita Volkov +license: + MIT +license-file: + LICENSE +build-type: + Simple +cabal-version: + >=1.10 + + +source-repository head + type: + git + location: + git://github.com/nikita-volkov/high-sql.git + + +library + hs-source-dirs: + library + other-modules: + HighSQL.Prelude + exposed-modules: + HighSQL + HighSQL.Backend + build-depends: + -- database: + ex-pool == 0.2.*, + -- errors: + loch-th == 0.2.*, + placeholders == 0.1.*, + -- general: + mtl-prelude == 0.1.*, + base-prelude == 0.1.* + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 diff --git a/library/HighSQL.hs b/library/HighSQL.hs new file mode 100644 index 0000000000..6c235db8d1 --- /dev/null +++ b/library/HighSQL.hs @@ -0,0 +1,18 @@ +module HighSQL where + +import HighSQL.Prelude hiding (read, Read, write, Write) +import qualified HighSQL.Backend as Backend +import qualified Data.Pool as Pool + + +-- | +-- A session, in which transactions are executed. +-- It maintains the shared state between transactions. +type S = + ReaderT (Pool.Pool Backend.Connection) + +-- | +-- Run the session monad transformer in the base monad. +session :: Backend.Backend -> S m r -> m r +session b s = + $notImplemented diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs new file mode 100644 index 0000000000..9bbf62dcb0 --- /dev/null +++ b/library/HighSQL/Backend.hs @@ -0,0 +1,10 @@ +-- | +-- An open API for implementation of specific drivers. +module HighSQL.Backend where + +import HighSQL.Prelude + + +data Backend + +data Connection diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs new file mode 100644 index 0000000000..dd3af2dc2d --- /dev/null +++ b/library/HighSQL/Prelude.hs @@ -0,0 +1,31 @@ +module HighSQL.Prelude +( + module Exports, + bug, + bottom, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports + +-- mtl-prelude +------------------------- +import MTLPrelude as Exports hiding (shift) + +-- placeholders +------------------------- +import Development.Placeholders as Exports + +-- custom +------------------------- +import qualified Debug.Trace.LocationTH + + +bug = [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] + where + msg = "A \"stream\" package bug: " :: String + +bottom = [e| $bug "Bottom evaluated" |] From f51dcd425a7f8d8e1738fe971fbefb2002f0ff06 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 3 Aug 2014 20:15:33 +0400 Subject: [PATCH 0002/1204] Docs --- high-sql.cabal | 2 ++ 1 file changed, 2 insertions(+) diff --git a/high-sql.cabal b/high-sql.cabal index f6ca1f41ec..eef648fa9f 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -3,8 +3,10 @@ name: version: 0.1.0 synopsis: + A general high level and high quality API for relational databases description: category: + Database homepage: https://github.com/nikita-volkov/high-sql bug-reports: From dfd65582e04ffa556e52e9acb3d721595aa9f5cf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 3 Aug 2014 20:16:02 +0400 Subject: [PATCH 0003/1204] CompositionT --- high-sql.cabal | 1 + library/HighSQL/CompositionT.hs | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 library/HighSQL/CompositionT.hs diff --git a/high-sql.cabal b/high-sql.cabal index eef648fa9f..aa2617f8a1 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -39,6 +39,7 @@ library library other-modules: HighSQL.Prelude + HighSQL.CompositionT exposed-modules: HighSQL HighSQL.Backend diff --git a/library/HighSQL/CompositionT.hs b/library/HighSQL/CompositionT.hs new file mode 100644 index 0000000000..f214dbb476 --- /dev/null +++ b/library/HighSQL/CompositionT.hs @@ -0,0 +1,40 @@ +module HighSQL.CompositionT where + +import HighSQL.Prelude + + +-- | +-- A monad transformer, +-- which serves a purpose of detecting composition of the inner monad. +data T m r = + T Bool (m r) + +-- | +-- Unwrap into a boolean signifying whether the base monad is a composition and +-- the base monad itself. +run :: T m r -> (Bool, m r) +run (T c m) = (c, m) + +instance Monad m => Monad (T m) where + return a = + T False (return a) + (>>=) (T _ m) k = + T True (m >>= \a -> case k a of T _ m' -> m') + +instance Functor f => Functor (T f) where + fmap f (T c m) = T c (fmap f m) + +instance Applicative f => Applicative (T f) where + pure a = + T False (pure a) + (<*>) (T _ a) (T _ b) = + T True (a <*> b) + +instance MonadTrans T where + lift m = + T False m + +instance MonadIO m => MonadIO (T m) where + liftIO io = + T False (liftIO io) + From 0c28e6ccaea89ae3db379f159a41d9f03ba0ca6d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 3 Aug 2014 20:16:17 +0400 Subject: [PATCH 0004/1204] Levels and Privileges sketch --- library/HighSQL.hs | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/library/HighSQL.hs b/library/HighSQL.hs index 6c235db8d1..de848f1dc9 100644 --- a/library/HighSQL.hs +++ b/library/HighSQL.hs @@ -2,6 +2,7 @@ module HighSQL where import HighSQL.Prelude hiding (read, Read, write, Write) import qualified HighSQL.Backend as Backend +import qualified HighSQL.CompositionT as CompositionT import qualified Data.Pool as Pool @@ -16,3 +17,58 @@ type S = session :: Backend.Backend -> S m r -> m r session b s = $notImplemented + + +-- * Transactions +------------------------- + +-- | +-- A transaction with a level @l@ and a result @r@. +data T l r + + +-- ** Privileges +------------------------- + +class SelectPrivilege l + +select :: SelectPrivilege l => Select r -> T l r +select = + $notImplemented + + +class UpdatePrivilege l + +update :: UpdatePrivilege l => Update -> T l () +update = + $notImplemented + +-- class AlterPrivilege p where +-- alter :: Alter -> T p () + + +-- ** Levels +------------------------- + +data Read + +instance SelectPrivilege Read + + +data Write + +instance SelectPrivilege Write +instance UpdatePrivilege Write + +data Admin + + +-- * Statements +------------------------- + +newtype Select r = + Select (Backend.Connection -> IO r) + +newtype Update = + Update (Backend.Connection -> IO ()) + From dad0f81e2d3bc40e5e4ae22901090ce49a7d000e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 3 Aug 2014 20:57:45 +0400 Subject: [PATCH 0005/1204] Results Stream sketch --- library/HighSQL.hs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/library/HighSQL.hs b/library/HighSQL.hs index de848f1dc9..c22a700caf 100644 --- a/library/HighSQL.hs +++ b/library/HighSQL.hs @@ -24,7 +24,10 @@ session b s = -- | -- A transaction with a level @l@ and a result @r@. -data T l r +data T l s r + +transaction :: MonadIO m => (forall s. T l s r) -> S m r +transaction = $notImplemented -- ** Privileges @@ -32,17 +35,18 @@ data T l r class SelectPrivilege l -select :: SelectPrivilege l => Select r -> T l r +select :: SelectPrivilege l => Select r -> ResultsStream s (T l s) r select = $notImplemented class UpdatePrivilege l -update :: UpdatePrivilege l => Update -> T l () +update :: UpdatePrivilege l => Update -> T l s () update = $notImplemented + -- class AlterPrivilege p where -- alter :: Alter -> T p () @@ -72,3 +76,16 @@ newtype Select r = newtype Update = Update (Backend.Connection -> IO ()) + +-- * Results Stream +------------------------- + +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- Uses the same trick as 'ST' to become impossible to run outside of +-- its transaction. +-- Hence you can only access it while remaining in transaction, +-- and when the transaction finishes it safely gets automatically released. +data ResultsStream s (m :: * -> *) r From 3e0490e59f6afc332b674aeb7ad6bb958b875641 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Aug 2014 02:36:41 +0400 Subject: [PATCH 0006/1204] Data deps --- high-sql.cabal | 5 +++++ library/HighSQL/Prelude.hs | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/high-sql.cabal b/high-sql.cabal index f6ca1f41ec..1df9c188a3 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -43,6 +43,11 @@ library build-depends: -- database: ex-pool == 0.2.*, + -- data: + unordered-containers == 0.2.*, + bytestring == 0.10.*, + text == 0.11.*, + hashable == 1.2.*, -- errors: loch-th == 0.2.*, placeholders == 0.1.*, diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index dd3af2dc2d..32ea8043dd 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -15,6 +15,23 @@ import BasePrelude as Exports ------------------------- import MTLPrelude as Exports hiding (shift) +-- text +------------------------- +import Data.Text as Exports (Text) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- unordered-containers +------------------------- +import Data.HashMap.Strict as Exports (HashMap) +import Data.HashSet as Exports (HashSet) + +-- hashable +------------------------- +import Data.Hashable as Exports (Hashable) + -- placeholders ------------------------- import Development.Placeholders as Exports From 1e39675dbefd0c742b0ff277e02b90dd80fa0a09 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Aug 2014 02:37:01 +0400 Subject: [PATCH 0007/1204] Parser --- high-sql.cabal | 5 ++- library/HighSQL/Statement/QQ/Parser.hs | 62 ++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 library/HighSQL/Statement/QQ/Parser.hs diff --git a/high-sql.cabal b/high-sql.cabal index 1df9c188a3..f2392ac1ea 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -37,10 +37,13 @@ library library other-modules: HighSQL.Prelude + HighSQL.Statement.QQ.Parser exposed-modules: HighSQL HighSQL.Backend build-depends: + -- parsing: + attoparsec == 0.11.*, -- database: ex-pool == 0.2.*, -- data: @@ -53,7 +56,7 @@ library placeholders == 0.1.*, -- general: mtl-prelude == 0.1.*, - base-prelude == 0.1.* + base-prelude >= 0.1.3 && < 0.2 default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: diff --git a/library/HighSQL/Statement/QQ/Parser.hs b/library/HighSQL/Statement/QQ/Parser.hs new file mode 100644 index 0000000000..87ba86f33f --- /dev/null +++ b/library/HighSQL/Statement/QQ/Parser.hs @@ -0,0 +1,62 @@ +module HighSQL.Statement.QQ.Parser where + +import HighSQL.Prelude hiding (takeWhile) +import Data.Attoparsec.Text hiding (Result) +import qualified Data.Text as Text + + +-- | +-- The kind of a statement and the amount of placeholders. +type Result = + (Kind, Int) + +data Kind = + Select | + Update | + Create + deriving (Show, Read, Eq, Ord, Enum) + +parse :: Text -> Either String Result +parse = + parseOnly statement + where + statement = + (,) <$> (skipSpace *> kind) <*> countPlaceholders + kind = + asum (map assocToParser assocs) + where + assocToParser (word, kind) = + asciiCI word *> pure kind + assocs = + do + (kind, words) <- groups + word <- words + return (word, kind) + groups = + [ + (Select, ["select"]), + (Update, ["update", "insert", "delete"]), + (Create, ["create", "alter", "drop", "truncate"]) + ] + countPlaceholders = + count <|> pure 0 + where + count = + do + many $ void stringLit <|> void (notChar '?') + char '?' + fmap succ countPlaceholders + +stringLit :: Parser Text +stringLit = + do + quote <- + char '"' <|> char '\'' + text <- + fmap mconcat $ many $ + string "\\\\" <|> + string (fromString ['\\', quote]) <|> + (Text.singleton <$> notChar '"') + char quote + return text + From c8fddfff66df06e5b9d7256b8b6c71b4388c218b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Aug 2014 15:29:41 +0400 Subject: [PATCH 0008/1204] QQ --- high-sql.cabal | 7 +++++ library/HighSQL/Statement/Model.hs | 27 ++++++++++++++++ library/HighSQL/Statement/QQ.hs | 49 ++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 library/HighSQL/Statement/Model.hs create mode 100644 library/HighSQL/Statement/QQ.hs diff --git a/high-sql.cabal b/high-sql.cabal index f2392ac1ea..12dba34818 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -37,14 +37,19 @@ library library other-modules: HighSQL.Prelude + HighSQL.Statement.Model + HighSQL.Statement.QQ HighSQL.Statement.QQ.Parser exposed-modules: HighSQL HighSQL.Backend build-depends: + -- template-haskell: + template-haskell == 2.8.*, -- parsing: attoparsec == 0.11.*, -- database: + HDBC == 2.4.*, ex-pool == 0.2.*, -- data: unordered-containers == 0.2.*, @@ -57,6 +62,8 @@ library -- general: mtl-prelude == 0.1.*, base-prelude >= 0.1.3 && < 0.2 + ghc-options: + -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: diff --git a/library/HighSQL/Statement/Model.hs b/library/HighSQL/Statement/Model.hs new file mode 100644 index 0000000000..67d85aaa5e --- /dev/null +++ b/library/HighSQL/Statement/Model.hs @@ -0,0 +1,27 @@ +module HighSQL.Statement.Model where + +import HighSQL.Prelude +import qualified Database.HDBC as HDBC + + +data Statement = + Statement !ByteString ![HDBC.SqlValue] + deriving (Show, Eq) + +-- | +-- "select" +newtype Select r = + Select Statement + deriving (Show, Eq) + +-- | +-- "update", "insert", "delete" +newtype Update = + Update Statement + deriving (Show, Eq) + +-- | +-- "create", "alter", "drop", "truncate" +newtype Create = + Create Statement + deriving (Show, Eq) diff --git a/library/HighSQL/Statement/QQ.hs b/library/HighSQL/Statement/QQ.hs new file mode 100644 index 0000000000..bf2c5f0692 --- /dev/null +++ b/library/HighSQL/Statement/QQ.hs @@ -0,0 +1,49 @@ +module HighSQL.Statement.QQ where + +import HighSQL.Prelude +import Language.Haskell.TH +import Language.Haskell.TH.Quote +import qualified HighSQL.Statement.QQ.Parser as Parser +import qualified HighSQL.Statement.Model as Model +import qualified Database.HDBC as HDBC + + +qq :: QuasiQuoter +qq = + QuasiQuoter + parseExp + (const $ fail "Pattern context is not supported") + (const $ fail "Type context is not supported") + (const $ fail "Declaration context is not supported") + + +parseExp :: String -> Q Exp +parseExp s = + do + (k, n) <- + either (fail . (showString "Parsing failure: ")) return (Parser.parse (fromString s)) + return $ fmapLamE (AppE (ConE (conName k))) (statementF s n) + where + conName = + \case + Parser.Select -> 'Model.Select + Parser.Update -> 'Model.Update + Parser.Create -> 'Model.Create + +-- | +-- An expression of an arbitrary arg-length function, +-- which produces a "Model.Statement". +statementF :: String -> Int -> Exp +statementF s n = + LamE pats exp + where + vars = map (mkName . ('_' :) . show) [1 .. n] + pats = map VarP vars + exp = AppE (AppE (ConE 'Model.Statement) (LitE (StringL s))) (ListE exps) + where + exps = map (AppE (VarE 'HDBC.toSql) . VarE) vars + +fmapLamE :: (Exp -> Exp) -> Exp -> Exp +fmapLamE f = + \case + LamE pats exp -> LamE pats (f exp) From 48cea97398494a49886a8aff290407759137753d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Aug 2014 16:04:53 +0400 Subject: [PATCH 0009/1204] Cabal updates --- high-sql.cabal | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/high-sql.cabal b/high-sql.cabal index aa2617f8a1..725f26a361 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -51,7 +51,9 @@ library placeholders == 0.1.*, -- general: mtl-prelude == 0.1.*, - base-prelude == 0.1.* + base-prelude >= 0.1.3 && < 0.2 + ghc-options: + -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: From 6f3ad257030d7471db08d72aea36f10e348b8a68 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Aug 2014 16:40:04 +0400 Subject: [PATCH 0010/1204] Major rearrangement --- high-sql.cabal | 5 +- library/HighSQL.hs | 92 +------------------- library/HighSQL/Backend.hs | 2 - library/HighSQL/{Statement => }/QQ.hs | 18 ++-- library/HighSQL/{Statement => }/QQ/Parser.hs | 2 +- library/HighSQL/Session.hs | 21 +++++ library/HighSQL/Statement/Model.hs | 27 ------ library/HighSQL/Transaction.hs | 86 ++++++++++++++++++ 8 files changed, 122 insertions(+), 131 deletions(-) rename library/HighSQL/{Statement => }/QQ.hs (66%) rename library/HighSQL/{Statement => }/QQ/Parser.hs (97%) create mode 100644 library/HighSQL/Session.hs delete mode 100644 library/HighSQL/Statement/Model.hs create mode 100644 library/HighSQL/Transaction.hs diff --git a/high-sql.cabal b/high-sql.cabal index 0145de646e..1a38c07954 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -40,9 +40,8 @@ library other-modules: HighSQL.Prelude HighSQL.CompositionT - HighSQL.Statement.Model - HighSQL.Statement.QQ - HighSQL.Statement.QQ.Parser + HighSQL.QQ + HighSQL.QQ.Parser exposed-modules: HighSQL HighSQL.Backend diff --git a/library/HighSQL.hs b/library/HighSQL.hs index c22a700caf..fc7ddad6aa 100644 --- a/library/HighSQL.hs +++ b/library/HighSQL.hs @@ -1,91 +1,5 @@ module HighSQL where -import HighSQL.Prelude hiding (read, Read, write, Write) -import qualified HighSQL.Backend as Backend -import qualified HighSQL.CompositionT as CompositionT -import qualified Data.Pool as Pool - - --- | --- A session, in which transactions are executed. --- It maintains the shared state between transactions. -type S = - ReaderT (Pool.Pool Backend.Connection) - --- | --- Run the session monad transformer in the base monad. -session :: Backend.Backend -> S m r -> m r -session b s = - $notImplemented - - --- * Transactions -------------------------- - --- | --- A transaction with a level @l@ and a result @r@. -data T l s r - -transaction :: MonadIO m => (forall s. T l s r) -> S m r -transaction = $notImplemented - - --- ** Privileges -------------------------- - -class SelectPrivilege l - -select :: SelectPrivilege l => Select r -> ResultsStream s (T l s) r -select = - $notImplemented - - -class UpdatePrivilege l - -update :: UpdatePrivilege l => Update -> T l s () -update = - $notImplemented - - --- class AlterPrivilege p where --- alter :: Alter -> T p () - - --- ** Levels -------------------------- - -data Read - -instance SelectPrivilege Read - - -data Write - -instance SelectPrivilege Write -instance UpdatePrivilege Write - -data Admin - - --- * Statements -------------------------- - -newtype Select r = - Select (Backend.Connection -> IO r) - -newtype Update = - Update (Backend.Connection -> IO ()) - - --- * Results Stream -------------------------- - --- | --- A stream of results, --- which fetches only those that you reach. --- --- Uses the same trick as 'ST' to become impossible to run outside of --- its transaction. --- Hence you can only access it while remaining in transaction, --- and when the transaction finishes it safely gets automatically released. -data ResultsStream s (m :: * -> *) r +import HighSQL.Prelude +import qualified HighSQL.Session as Session +import qualified HighSQL.Transaction as Transaction diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 9bbf62dcb0..05f01d0550 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -6,5 +6,3 @@ import HighSQL.Prelude data Backend - -data Connection diff --git a/library/HighSQL/Statement/QQ.hs b/library/HighSQL/QQ.hs similarity index 66% rename from library/HighSQL/Statement/QQ.hs rename to library/HighSQL/QQ.hs index bf2c5f0692..39e623e21f 100644 --- a/library/HighSQL/Statement/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -1,10 +1,10 @@ -module HighSQL.Statement.QQ where +module HighSQL.QQ where import HighSQL.Prelude import Language.Haskell.TH import Language.Haskell.TH.Quote -import qualified HighSQL.Statement.QQ.Parser as Parser -import qualified HighSQL.Statement.Model as Model +import qualified HighSQL.QQ.Parser as Parser +import qualified HighSQL.Transaction as Transaction import qualified Database.HDBC as HDBC @@ -22,24 +22,24 @@ parseExp s = do (k, n) <- either (fail . (showString "Parsing failure: ")) return (Parser.parse (fromString s)) - return $ fmapLamE (AppE (ConE (conName k))) (statementF s n) + return $ fmapLamE (AppE (VarE (conName k))) (statementF s n) where conName = \case - Parser.Select -> 'Model.Select - Parser.Update -> 'Model.Update - Parser.Create -> 'Model.Create + Parser.Select -> 'Transaction.select + Parser.Update -> 'Transaction.update + Parser.Create -> 'Transaction.create -- | -- An expression of an arbitrary arg-length function, --- which produces a "Model.Statement". +-- which produces a "Transaction.Statement". statementF :: String -> Int -> Exp statementF s n = LamE pats exp where vars = map (mkName . ('_' :) . show) [1 .. n] pats = map VarP vars - exp = AppE (AppE (ConE 'Model.Statement) (LitE (StringL s))) (ListE exps) + exp = AppE (AppE (ConE 'Transaction.Statement) (LitE (StringL s))) (ListE exps) where exps = map (AppE (VarE 'HDBC.toSql) . VarE) vars diff --git a/library/HighSQL/Statement/QQ/Parser.hs b/library/HighSQL/QQ/Parser.hs similarity index 97% rename from library/HighSQL/Statement/QQ/Parser.hs rename to library/HighSQL/QQ/Parser.hs index 87ba86f33f..564a1c55ab 100644 --- a/library/HighSQL/Statement/QQ/Parser.hs +++ b/library/HighSQL/QQ/Parser.hs @@ -1,4 +1,4 @@ -module HighSQL.Statement.QQ.Parser where +module HighSQL.QQ.Parser where import HighSQL.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) diff --git a/library/HighSQL/Session.hs b/library/HighSQL/Session.hs new file mode 100644 index 0000000000..967a77b65c --- /dev/null +++ b/library/HighSQL/Session.hs @@ -0,0 +1,21 @@ +module HighSQL.Session where + +import HighSQL.Prelude +import qualified Data.Pool as Pool +import qualified Database.HDBC as HDBC +import qualified HighSQL.Backend as Backend + + +-- | +-- A session, in which transactions are executed. +-- It maintains the shared state between transactions. +type S = + ReaderT (Pool.Pool HDBC.ConnWrapper) + +-- | +-- Run the session monad transformer in the base monad. +session :: Backend.Backend -> S m r -> m r +session b s = + $notImplemented + + diff --git a/library/HighSQL/Statement/Model.hs b/library/HighSQL/Statement/Model.hs deleted file mode 100644 index 67d85aaa5e..0000000000 --- a/library/HighSQL/Statement/Model.hs +++ /dev/null @@ -1,27 +0,0 @@ -module HighSQL.Statement.Model where - -import HighSQL.Prelude -import qualified Database.HDBC as HDBC - - -data Statement = - Statement !ByteString ![HDBC.SqlValue] - deriving (Show, Eq) - --- | --- "select" -newtype Select r = - Select Statement - deriving (Show, Eq) - --- | --- "update", "insert", "delete" -newtype Update = - Update Statement - deriving (Show, Eq) - --- | --- "create", "alter", "drop", "truncate" -newtype Create = - Create Statement - deriving (Show, Eq) diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs new file mode 100644 index 0000000000..559d38fb8f --- /dev/null +++ b/library/HighSQL/Transaction.hs @@ -0,0 +1,86 @@ +module HighSQL.Transaction where + +import HighSQL.Prelude hiding (read, Read, write, Write) +import qualified Data.Pool as Pool +import qualified Database.HDBC as HDBC +import qualified HighSQL.CompositionT as CompositionT +import qualified HighSQL.Session as Session + + +-- | +-- A transaction with a level @l@ and a result @r@. +data T l s r + +transaction :: MonadIO m => (forall s. T l s r) -> Session.S m r +transaction = $notImplemented + + +-- * Levels +------------------------- + +data Read + +instance SelectPrivilege Read + + +data Write + +instance SelectPrivilege Write +instance UpdatePrivilege Write + + +data Admin + +instance CreatePrivilege Admin + + +-- * Privileges +------------------------- + +-- | +-- "select" +class SelectPrivilege l + +select :: SelectPrivilege l => Statement -> ResultsStream s (T l s) r +select = + $notImplemented + + +-- | +-- "update", "insert", "delete" +class UpdatePrivilege l + +update :: UpdatePrivilege l => Statement -> T l s () +update = + $notImplemented + + +-- | +-- "create", "alter", "drop", "truncate" +class CreatePrivilege l + +create :: CreatePrivilege l => Statement -> T l s () +create = + $notImplemented + + +-- * Statements +------------------------- + +data Statement = + Statement !ByteString ![HDBC.SqlValue] + deriving (Show, Eq) + + +-- * Results Stream +------------------------- + +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- Uses the same trick as 'ST' to become impossible to run outside of +-- its transaction. +-- Hence you can only access it while remaining in transaction, +-- and when the transaction finishes it safely gets automatically released. +data ResultsStream s (m :: * -> *) r From 28b30c3bc8101fc5d95b54f8d5793003efaf008a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 00:21:32 +0400 Subject: [PATCH 0011/1204] Updates and more rearrangement --- high-sql.cabal | 6 ++ library/HighSQL.hs | 3 +- library/HighSQL/API.hs | 144 +++++++++++++++++++++++++++++++++ library/HighSQL/Backend.hs | 3 + library/HighSQL/Prelude.hs | 6 +- library/HighSQL/QQ.hs | 12 +-- library/HighSQL/Session.hs | 21 ----- library/HighSQL/Transaction.hs | 86 -------------------- 8 files changed, 165 insertions(+), 116 deletions(-) create mode 100644 library/HighSQL/API.hs delete mode 100644 library/HighSQL/Session.hs delete mode 100644 library/HighSQL/Transaction.hs diff --git a/high-sql.cabal b/high-sql.cabal index 1a38c07954..1b5ff5ad62 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -42,6 +42,7 @@ library HighSQL.CompositionT HighSQL.QQ HighSQL.QQ.Parser + HighSQL.API exposed-modules: HighSQL HighSQL.Backend @@ -58,7 +59,12 @@ library bytestring == 0.10.*, text == 0.11.*, hashable == 1.2.*, + -- control: + list-t >= 0.2.1 && < 0.3, + monad-control == 0.3.*, + transformers-base == 0.4.*, -- errors: + errors >= 1.4.7 && < 1.5, loch-th == 0.2.*, placeholders == 0.1.*, -- general: diff --git a/library/HighSQL.hs b/library/HighSQL.hs index fc7ddad6aa..44bb9d319d 100644 --- a/library/HighSQL.hs +++ b/library/HighSQL.hs @@ -1,5 +1,4 @@ module HighSQL where import HighSQL.Prelude -import qualified HighSQL.Session as Session -import qualified HighSQL.Transaction as Transaction +import qualified HighSQL.API as API diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs new file mode 100644 index 0000000000..321e990d97 --- /dev/null +++ b/library/HighSQL/API.hs @@ -0,0 +1,144 @@ +module HighSQL.API where + +import HighSQL.Prelude hiding (read, Read, write, Write) +import qualified Data.Pool as Pool +import qualified Database.HDBC as HDBC +import qualified HighSQL.CompositionT as CompositionT +import qualified HighSQL.Backend as Backend +import qualified ListT + + +-- * Session +------------------------- + +-- | +-- A session, in which transactions are executed. +-- It maintains a shared state between transactions. +newtype S m r = + S (ReaderT (Pool.Pool Backend.Connection) (EitherT SessionError m) r) + deriving (Functor, Applicative, Monad, MonadIO) + +-- | +-- Run the session monad transformer in the base monad. +session :: Backend.Backend -> S m r -> m r +session b s = + $notImplemented + + +-- ** Error +------------------------- + +data SessionError = + TransactionError TransactionError + + +-- * Transaction +------------------------- + +-- | +-- A transaction with a level @l@ and a result @r@. +newtype T l s r = + T (ReaderT Backend.Connection (EitherT TransactionError IO) r) + deriving (Functor, Applicative, Monad) + +transaction :: MonadIO m => (forall s. T l s r) -> S m r +transaction t = + do + pool <- S $ ask + e <- + liftIO $ Pool.withResource pool $ \c -> + runEitherT $ runReaderT (case t of T r -> r) c + either (S . lift . left . TransactionError) return e + + +-- ** Error +------------------------- + +data TransactionError + + +-- * Levels +------------------------- + +data Read + +read :: MonadIO m => (forall s. T Read s r) -> S m r +read = transaction + + +data Write + +write :: MonadIO m => (forall s. T Write s r) -> S m r +write = transaction + + +data Admin + +admin :: MonadIO m => (forall s. T Admin s r) -> S m r +admin = transaction + + +-- * Privileges +------------------------- + +-- | +-- "SELECT" +class SelectPrivilege l + +instance SelectPrivilege Read +instance SelectPrivilege Write + +select :: SelectPrivilege l => Statement -> ResultsStream s (T l s) r +select = + $notImplemented + + +-- | +-- "UPDATE", "INSERT", "DELETE" +class UpdatePrivilege l + +instance UpdatePrivilege Write + +update :: UpdatePrivilege l => Statement -> T l s () +update = + $notImplemented + + +-- | +-- "CREATE", "ALTER", "DROP", "TRUNCATE" +class CreatePrivilege l + +instance CreatePrivilege Admin + +create :: CreatePrivilege l => Statement -> T l s () +create = + $notImplemented + + +-- * Statement +------------------------- + +data Statement = + Statement !ByteString ![HDBC.SqlValue] + deriving (Show, Eq) + + +-- * Results Stream +------------------------- + +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- Uses the same trick as 'ST' to become impossible to be run outside of +-- its transaction. +-- Hence you can only access it while remaining in transaction, +-- and when the transaction finishes it safely gets automatically released. +-- +-- It is implemented as a wrapper around 'ListT.ListT', +-- hence all the utility functions of the list transformer API +-- are applicable to this type. +newtype ResultsStream s m r = + ResultsStream (ListT.ListT m r) + deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, + Monoid, ListT.ListMonad, ListT.ListTrans) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 05f01d0550..b20ca6ac93 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -6,3 +6,6 @@ import HighSQL.Prelude data Backend + + +data Connection diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index 32ea8043dd..60bc78388b 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -9,7 +9,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports +import BasePrelude as Exports hiding (left, right, tryJust, bool) -- mtl-prelude ------------------------- @@ -32,6 +32,10 @@ import Data.HashSet as Exports (HashSet) ------------------------- import Data.Hashable as Exports (Hashable) +-- errors +------------------------- +import Control.Error as Exports + -- placeholders ------------------------- import Development.Placeholders as Exports diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs index 39e623e21f..0a886ae5b6 100644 --- a/library/HighSQL/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -4,7 +4,7 @@ import HighSQL.Prelude import Language.Haskell.TH import Language.Haskell.TH.Quote import qualified HighSQL.QQ.Parser as Parser -import qualified HighSQL.Transaction as Transaction +import qualified HighSQL.API as API import qualified Database.HDBC as HDBC @@ -26,20 +26,20 @@ parseExp s = where conName = \case - Parser.Select -> 'Transaction.select - Parser.Update -> 'Transaction.update - Parser.Create -> 'Transaction.create + Parser.Select -> 'API.select + Parser.Update -> 'API.update + Parser.Create -> 'API.create -- | -- An expression of an arbitrary arg-length function, --- which produces a "Transaction.Statement". +-- which produces a "API.Statement". statementF :: String -> Int -> Exp statementF s n = LamE pats exp where vars = map (mkName . ('_' :) . show) [1 .. n] pats = map VarP vars - exp = AppE (AppE (ConE 'Transaction.Statement) (LitE (StringL s))) (ListE exps) + exp = AppE (AppE (ConE 'API.Statement) (LitE (StringL s))) (ListE exps) where exps = map (AppE (VarE 'HDBC.toSql) . VarE) vars diff --git a/library/HighSQL/Session.hs b/library/HighSQL/Session.hs deleted file mode 100644 index 967a77b65c..0000000000 --- a/library/HighSQL/Session.hs +++ /dev/null @@ -1,21 +0,0 @@ -module HighSQL.Session where - -import HighSQL.Prelude -import qualified Data.Pool as Pool -import qualified Database.HDBC as HDBC -import qualified HighSQL.Backend as Backend - - --- | --- A session, in which transactions are executed. --- It maintains the shared state between transactions. -type S = - ReaderT (Pool.Pool HDBC.ConnWrapper) - --- | --- Run the session monad transformer in the base monad. -session :: Backend.Backend -> S m r -> m r -session b s = - $notImplemented - - diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs deleted file mode 100644 index 559d38fb8f..0000000000 --- a/library/HighSQL/Transaction.hs +++ /dev/null @@ -1,86 +0,0 @@ -module HighSQL.Transaction where - -import HighSQL.Prelude hiding (read, Read, write, Write) -import qualified Data.Pool as Pool -import qualified Database.HDBC as HDBC -import qualified HighSQL.CompositionT as CompositionT -import qualified HighSQL.Session as Session - - --- | --- A transaction with a level @l@ and a result @r@. -data T l s r - -transaction :: MonadIO m => (forall s. T l s r) -> Session.S m r -transaction = $notImplemented - - --- * Levels -------------------------- - -data Read - -instance SelectPrivilege Read - - -data Write - -instance SelectPrivilege Write -instance UpdatePrivilege Write - - -data Admin - -instance CreatePrivilege Admin - - --- * Privileges -------------------------- - --- | --- "select" -class SelectPrivilege l - -select :: SelectPrivilege l => Statement -> ResultsStream s (T l s) r -select = - $notImplemented - - --- | --- "update", "insert", "delete" -class UpdatePrivilege l - -update :: UpdatePrivilege l => Statement -> T l s () -update = - $notImplemented - - --- | --- "create", "alter", "drop", "truncate" -class CreatePrivilege l - -create :: CreatePrivilege l => Statement -> T l s () -create = - $notImplemented - - --- * Statements -------------------------- - -data Statement = - Statement !ByteString ![HDBC.SqlValue] - deriving (Show, Eq) - - --- * Results Stream -------------------------- - --- | --- A stream of results, --- which fetches only those that you reach. --- --- Uses the same trick as 'ST' to become impossible to run outside of --- its transaction. --- Hence you can only access it while remaining in transaction, --- and when the transaction finishes it safely gets automatically released. -data ResultsStream s (m :: * -> *) r From 268acdafdcc5ae8509182282d37fd82977c62ecd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 04:07:18 +0400 Subject: [PATCH 0012/1204] Get rid of HDBC --- high-sql.cabal | 4 +- library/HighSQL/API.hs | 5 +- library/HighSQL/Backend.hs | 144 +++++++++++++++++++++++++++++++++++-- library/HighSQL/Prelude.hs | 8 +++ library/HighSQL/QQ.hs | 4 +- 5 files changed, 154 insertions(+), 11 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 1b5ff5ad62..663795765f 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -52,12 +52,12 @@ library -- parsing: attoparsec == 0.11.*, -- database: - HDBC == 2.4.*, ex-pool == 0.2.*, -- data: - unordered-containers == 0.2.*, + time == 1.4.*, bytestring == 0.10.*, text == 0.11.*, + unordered-containers == 0.2.*, hashable == 1.2.*, -- control: list-t >= 0.2.1 && < 0.3, diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index 321e990d97..0dca193654 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -2,7 +2,6 @@ module HighSQL.API where import HighSQL.Prelude hiding (read, Read, write, Write) import qualified Data.Pool as Pool -import qualified Database.HDBC as HDBC import qualified HighSQL.CompositionT as CompositionT import qualified HighSQL.Backend as Backend import qualified ListT @@ -119,8 +118,8 @@ create = ------------------------- data Statement = - Statement !ByteString ![HDBC.SqlValue] - deriving (Show, Eq) + Statement !ByteString ![Backend.Value] + deriving (Show) -- * Results Stream diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index b20ca6ac93..ac7f1517de 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -1,11 +1,147 @@ -- | --- An open API for implementation of specific drivers. +-- An open API for implementation of specific backend drivers. module HighSQL.Backend where -import HighSQL.Prelude +import HighSQL.Prelude hiding (Error) +import qualified Data.Text as Text +import qualified Language.Haskell.TH as TH -data Backend +data Backend = + Backend { + connect :: IO Connection + } -data Connection +data Connection = + forall s. + Connection { + -- | + -- Start a transaction in a write mode if the flag is true. + beginTransaction :: Bool -> IO (), + -- | + -- Finish the transaction, + -- while releasing all the resources acquired with 'executeAndStream'. + -- + -- The boolean defines whether to commit the updates, + -- otherwise it rolls back. + finishTransaction :: Bool -> IO (), + -- | + -- Compile a statement with placeholders. + prepare :: ByteString -> IO s, + -- | + -- Execute a statement with values for placeholders + execute :: s -> [Value] -> IO Int, + -- | + -- Execute a statement with values and an expected results stream size. + -- The expected stream size can be used by the backend to determine + -- an optimal fetching method. + executeAndStream :: s -> [Value] -> Int -> IO ResultSet, + -- | + -- Close the connection. + disconnect :: IO () + } + + +data Error = + -- | + -- A transaction failed and should be retried. + TransactionError | + -- | + -- A wrapper for a free-form backend-specific exception. + BackendError SomeException + deriving (Show, Typeable) + +instance Exception Error + + +-- | +-- A row width and a stream of values. +-- The length of the stream must be a multiple of the row width. +type ResultSet = + (Int, ListT IO Value) + + +-- * Value +------------------------- + +data Value = + Value_Text !Text | + Value_ByteString !ByteString | + Value_Word32 !Word32 | + Value_Word64 !Word64 | + Value_Int32 !Int32 | + Value_Int64 !Int64 | + Value_Integer !Integer | + Value_Char !Char | + Value_Bool !Bool | + Value_Double !Double | + Value_Rational !Rational | + Value_Day !Day | + Value_LocalTime !LocalTime | + Value_TimeOfDay !TimeOfDay | + Value_ZonedTime !ZonedTime | + Value_UTCTime !UTCTime | + Value_NominalDiffTime !NominalDiffTime | + Value_Null + deriving (Show, Data, Typeable, Generic) + + +class ValueConversion a where + toValue :: a -> Value + fromValue :: Value -> Maybe a + +-- Generate standard instances using Template Haskell: +$( + let + assocs = + [ + (''NominalDiffTime, 'Value_NominalDiffTime), + (''UTCTime, 'Value_UTCTime), + (''ZonedTime, 'Value_ZonedTime), + (''TimeOfDay, 'Value_TimeOfDay), + (''LocalTime, 'Value_LocalTime), + (''Day, 'Value_Day), + (''Rational, 'Value_Rational), + (''Double, 'Value_Double), + (''Bool, 'Value_Bool), + (''Char, 'Value_Char), + (''Integer, 'Value_Integer), + (''Int64, 'Value_Int64), + (''Int32, 'Value_Int32), + (''Word64, 'Value_Word64), + (''Word32, 'Value_Word32), + (''ByteString, 'Value_ByteString), + (''Text, 'Value_Text) + ] + inst :: TH.Name -> TH.Name -> TH.Dec + inst t c = + TH.InstanceD [] (TH.AppT (TH.ConT ''ValueConversion) (TH.ConT t)) [d1, d2] + where + d1 = + TH.FunD 'toValue [TH.Clause [] (TH.NormalB (TH.ConE c)) []] + d2 = + TH.FunD 'fromValue [c1, c2] + where + c1 = + TH.Clause [p] (TH.NormalB e) [] + where + p = TH.ConP c [TH.VarP v] + v = TH.mkName "a" + e = TH.AppE (TH.ConE 'Just) (TH.VarE v) + c2 = + TH.Clause [TH.WildP] (TH.NormalB (TH.ConE 'Nothing)) [] + in return $ map (uncurry inst) assocs + ) + +instance ValueConversion String where + toValue = Value_Text . Text.pack + fromValue = \case Value_Text a -> Just (Text.unpack a); _ -> Nothing + +instance ValueConversion Word where + toValue = Value_Word64 . fromIntegral + fromValue = \case Value_Word64 a -> Just (fromIntegral a); _ -> Nothing + +instance ValueConversion Int where + toValue = Value_Int64 . fromIntegral + fromValue = \case Value_Int64 a -> Just (fromIntegral a); _ -> Nothing diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index 60bc78388b..bbd6cacff1 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -15,6 +15,10 @@ import BasePrelude as Exports hiding (left, right, tryJust, bool) ------------------------- import MTLPrelude as Exports hiding (shift) +-- list-t +------------------------- +import ListT as Exports (ListT) + -- text ------------------------- import Data.Text as Exports (Text) @@ -23,6 +27,10 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) +-- time +------------------------- +import Data.Time as Exports + -- unordered-containers ------------------------- import Data.HashMap.Strict as Exports (HashMap) diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs index 0a886ae5b6..4f26c4898c 100644 --- a/library/HighSQL/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -5,7 +5,7 @@ import Language.Haskell.TH import Language.Haskell.TH.Quote import qualified HighSQL.QQ.Parser as Parser import qualified HighSQL.API as API -import qualified Database.HDBC as HDBC +import qualified HighSQL.Backend as Backend qq :: QuasiQuoter @@ -41,7 +41,7 @@ statementF s n = pats = map VarP vars exp = AppE (AppE (ConE 'API.Statement) (LitE (StringL s))) (ListE exps) where - exps = map (AppE (VarE 'HDBC.toSql) . VarE) vars + exps = map (AppE (VarE 'Backend.toValue) . VarE) vars fmapLamE :: (Exp -> Exp) -> Exp -> Exp fmapLamE f = From 399d5172ae5dc38993755121650cd95481765ad5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 14:18:57 +0400 Subject: [PATCH 0013/1204] Switch from transformer-based resource management to IO due to potential concurrency issues --- library/HighSQL/API.hs | 85 ++++++++++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 23 deletions(-) diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index 0dca193654..aef1870f2b 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -10,18 +10,46 @@ import qualified ListT -- * Session ------------------------- --- | --- A session, in which transactions are executed. --- It maintains a shared state between transactions. -newtype S m r = - S (ReaderT (Pool.Pool Backend.Connection) (EitherT SessionError m) r) - deriving (Functor, Applicative, Monad, MonadIO) +data Session = + Session !(Pool.Pool Backend.Connection) -- | --- Run the session monad transformer in the base monad. -session :: Backend.Backend -> S m r -> m r -session b s = - $notImplemented +-- Session settings. +data Settings = + Settings { + -- | + -- The number of stripes (distinct sub-pools) to maintain. + -- The smallest acceptable value is 1. + striping1 :: Word32, + -- | + -- Maximum number of connections to keep open per stripe. + -- The smallest acceptable value is 1. + -- Requests for connections will block if this limit is reached + -- on a single stripe, + -- even if other stripes have idle connections available. + striping2 :: Word32, + -- | + -- The amount of time for which an unused resource is kept open. + -- The smallest acceptable value is 0.5 seconds. + -- The elapsed time before destroying a resource + -- may be a little longer than requested, + -- as the reaper thread wakes at 1-second intervals. + connectionTimeout :: NominalDiffTime + } + +withSession :: Backend.Backend -> Settings -> (Session -> IO a) -> IO a +withSession b s = + bracket acquire release + where + acquire = + do + pool <- + Pool.createPool + (Backend.connect b) (Backend.disconnect) (striping1 s) + (connectionTimeout s) (striping2 s) + return (Session pool) + release (Session pool) = + Pool.purgePool pool -- ** Error @@ -29,6 +57,7 @@ session b s = data SessionError = TransactionError TransactionError + deriving (Show, Typeable) -- * Transaction @@ -37,23 +66,33 @@ data SessionError = -- | -- A transaction with a level @l@ and a result @r@. newtype T l s r = - T (ReaderT Backend.Connection (EitherT TransactionError IO) r) + T (CompositionT.T (ReaderT Backend.Connection (EitherT TransactionError IO)) r) deriving (Functor, Applicative, Monad) -transaction :: MonadIO m => (forall s. T l s r) -> S m r -transaction t = +transaction :: Session -> (forall s. T l s r) -> IO r +transaction (Session p) t = do - pool <- S $ ask - e <- - liftIO $ Pool.withResource pool $ \c -> - runEitherT $ runReaderT (case t of T r -> r) c - either (S . lift . left . TransactionError) return e + e <- + Pool.withResource p $ runEitherT . \c -> + case composed of + False -> + runReaderT r c + True -> + do + $notImplemented + either throwIO return e + where + (composed, r) = case t of T t -> CompositionT.run t -- ** Error ------------------------- -data TransactionError +data TransactionError = + TE + deriving (Show, Typeable) + +instance Exception TransactionError -- * Levels @@ -61,19 +100,19 @@ data TransactionError data Read -read :: MonadIO m => (forall s. T Read s r) -> S m r +read :: MonadIO m => Session -> (forall s. T Read s r) -> IO r read = transaction data Write -write :: MonadIO m => (forall s. T Write s r) -> S m r +write :: MonadIO m => Session -> (forall s. T Write s r) -> IO r write = transaction data Admin -admin :: MonadIO m => (forall s. T Admin s r) -> S m r +admin :: MonadIO m => Session -> (forall s. T Admin s r) -> IO r admin = transaction @@ -98,7 +137,7 @@ class UpdatePrivilege l instance UpdatePrivilege Write -update :: UpdatePrivilege l => Statement -> T l s () +update :: UpdatePrivilege l => Statement -> T l s (Maybe Integer) update = $notImplemented From 4988ae501b0e10eb28b840783e4a834d054478a2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 15:01:16 +0400 Subject: [PATCH 0014/1204] Prelude correction --- library/HighSQL/Prelude.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index bbd6cacff1..f062af99ec 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -55,6 +55,6 @@ import qualified Debug.Trace.LocationTH bug = [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] where - msg = "A \"stream\" package bug: " :: String + msg = "A \"high-sql\" package bug: " :: String bottom = [e| $bug "Bottom evaluated" |] From 247905564102370ac38993f9b3b43be370d368c1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 15:21:20 +0400 Subject: [PATCH 0015/1204] Implement transaction and update errors --- high-sql.cabal | 1 - library/HighSQL/API.hs | 118 ++++++++++++++++++++++++------------- library/HighSQL/Backend.hs | 6 +- library/HighSQL/Prelude.hs | 4 -- 4 files changed, 81 insertions(+), 48 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 663795765f..8287e9322f 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -64,7 +64,6 @@ library monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: - errors >= 1.4.7 && < 1.5, loch-th == 0.2.*, placeholders == 0.1.*, -- general: diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index aef1870f2b..830d36944b 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -1,6 +1,6 @@ module HighSQL.API where -import HighSQL.Prelude hiding (read, Read, write, Write) +import HighSQL.Prelude hiding (read, Read, write, Write, Error) import qualified Data.Pool as Pool import qualified HighSQL.CompositionT as CompositionT import qualified HighSQL.Backend as Backend @@ -22,18 +22,15 @@ data Settings = -- The smallest acceptable value is 1. striping1 :: Word32, -- | - -- Maximum number of connections to keep open per stripe. + -- The maximum number of connections to keep open per a pool stripe. -- The smallest acceptable value is 1. -- Requests for connections will block if this limit is reached -- on a single stripe, -- even if other stripes have idle connections available. striping2 :: Word32, -- | - -- The amount of time for which an unused resource is kept open. + -- The amount of time for which an unused connection is kept open. -- The smallest acceptable value is 0.5 seconds. - -- The elapsed time before destroying a resource - -- may be a little longer than requested, - -- as the reaper thread wakes at 1-second intervals. connectionTimeout :: NominalDiffTime } @@ -52,71 +49,108 @@ withSession b s = Pool.purgePool pool --- ** Error +-- * Error ------------------------- -data SessionError = - TransactionError TransactionError +-- | +-- The only exception type that this API can raise. +data Error = + -- | + -- Cannot connect to a server + -- or the connection got interrupted. + ConnectionError Text | + -- | + -- A free-form backend-specific exception. + BackendError SomeException deriving (Show, Typeable) +instance Exception Error + -- * Transaction ------------------------- -- | --- A transaction with a level @l@ and a result @r@. +-- A transaction with a level @l@, +-- running on an anonymous state-thread @s@ +-- and gaining a result @r@. newtype T l s r = - T (CompositionT.T (ReaderT Backend.Connection (EitherT TransactionError IO)) r) + T (CompositionT.T (ReaderT Backend.Connection IO) r) deriving (Functor, Applicative, Monad) -transaction :: Session -> (forall s. T l s r) -> IO r -transaction (Session p) t = - do - e <- - Pool.withResource p $ runEitherT . \c -> - case composed of - False -> - runReaderT r c - True -> - do - $notImplemented - either throwIO return e - where - (composed, r) = case t of T t -> CompositionT.run t - - --- ** Error -------------------------- - -data TransactionError = - TE - deriving (Show, Typeable) - -instance Exception TransactionError - - --- * Levels +-- | +-- Execute a transaction in a write mode (if 'True') using a session. +-- +-- * Automatically determines, +-- whether it's actually a transaction or just a single action +-- and executes accordingly. +-- +-- * Automatically retries the transaction in case of a +-- 'Backend.TransactionError' exception. +-- +-- * Rethrows all the other exceptions after wrapping them in 'Error'. +transaction :: Bool -> Session -> (forall s. T l s r) -> IO r +transaction w (Session p) (T t) = + do + e <- + try $ Pool.withResource p $ + \c -> + case CompositionT.run t of + (False, r) -> + runReaderT r c + (True, r) -> + retry + where + retry = + do + Backend.beginTransaction c w + e <- try $ runReaderT r c + case e of + Left (Backend.TransactionError) -> + do + Backend.finishTransaction c False + retry + Left e -> + do + Backend.finishTransaction c False + throwIO e + Right r -> + do + Backend.finishTransaction c True + return r + case e of + Left (Backend.ConnectionError t) -> + throwIO (ConnectionError t) + Left (Backend.BackendError e) -> + throwIO (BackendError e) + Left (Backend.TransactionError) -> + $bug "Unexpected TransactionError" + Right r -> + return r + + +-- ** Levels ------------------------- data Read read :: MonadIO m => Session -> (forall s. T Read s r) -> IO r -read = transaction +read = transaction False data Write write :: MonadIO m => Session -> (forall s. T Write s r) -> IO r -write = transaction +write = transaction True data Admin admin :: MonadIO m => Session -> (forall s. T Admin s r) -> IO r -admin = transaction +admin = transaction True --- * Privileges +-- ** Privileges ------------------------- -- | diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index ac7f1517de..4b87ace2cc 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -48,7 +48,11 @@ data Error = -- A transaction failed and should be retried. TransactionError | -- | - -- A wrapper for a free-form backend-specific exception. + -- Cannot connect to a server + -- or the connection got interrupted. + ConnectionError Text | + -- | + -- A free-form backend-specific exception. BackendError SomeException deriving (Show, Typeable) diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index f062af99ec..ca6d24d770 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -40,10 +40,6 @@ import Data.HashSet as Exports (HashSet) ------------------------- import Data.Hashable as Exports (Hashable) --- errors -------------------------- -import Control.Error as Exports - -- placeholders ------------------------- import Development.Placeholders as Exports From 50c7b53dc75f1ed5d08bc3ba7821a274fe134c63 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 17:02:08 +0400 Subject: [PATCH 0016/1204] Select with parsing --- high-sql.cabal | 1 + library/HighSQL/API.hs | 46 ++++++++++++++++++++++++++++++-------- library/HighSQL/Backend.hs | 13 ++++++++--- library/HighSQL/Prelude.hs | 4 ++++ 4 files changed, 52 insertions(+), 12 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 8287e9322f..24df06f171 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -61,6 +61,7 @@ library hashable == 1.2.*, -- control: list-t >= 0.2.1 && < 0.3, + mmorph == 1.0.*, monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index 830d36944b..beb9afa148 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -60,6 +60,10 @@ data Error = -- or the connection got interrupted. ConnectionError Text | -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + ResultParsingError [Backend.Value] TypeRep | + -- | -- A free-form backend-specific exception. BackendError SomeException deriving (Show, Typeable) @@ -154,22 +158,37 @@ admin = transaction True ------------------------- -- | --- "SELECT" +-- \"SELECT\" class SelectPrivilege l instance SelectPrivilege Read instance SelectPrivilege Write - -select :: SelectPrivilege l => Statement -> ResultsStream s (T l s) r -select = - $notImplemented - +instance SelectPrivilege Admin + +select :: + forall l s r. + (SelectPrivilege l, Row r, Typeable r) => + Statement -> ResultsStream s (T l s) r +select (Statement bs vl) = + do + (w, s) <- + lift $ T $ lift $ do + Backend.Connection {..} <- ask + liftIO $ do + ps <- prepare bs + executeAndStream ps vl Nothing + l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s + maybe (throwParsingError l (typeOf (undefined :: r))) return $ parse l + where + throwParsingError vl t = + ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t -- | --- "UPDATE", "INSERT", "DELETE" +-- \"UPDATE\", \"INSERT\", \"DELETE\" class UpdatePrivilege l instance UpdatePrivilege Write +instance UpdatePrivilege Admin update :: UpdatePrivilege l => Statement -> T l s (Maybe Integer) update = @@ -177,7 +196,7 @@ update = -- | --- "CREATE", "ALTER", "DROP", "TRUNCATE" +-- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" class CreatePrivilege l instance CreatePrivilege Admin @@ -204,7 +223,7 @@ data Statement = -- -- Uses the same trick as 'ST' to become impossible to be run outside of -- its transaction. --- Hence you can only access it while remaining in transaction, +-- Hence you can only access it while remaining in a transaction, -- and when the transaction finishes it safely gets automatically released. -- -- It is implemented as a wrapper around 'ListT.ListT', @@ -214,3 +233,12 @@ newtype ResultsStream s m r = ResultsStream (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.ListMonad, ListT.ListTrans) + + +-- * Row Parsing +------------------------- + +class Row r where + parse :: [Backend.Value] -> Maybe r + + diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 4b87ace2cc..aa972ca1d3 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -27,16 +27,23 @@ data Connection = -- otherwise it rolls back. finishTransaction :: Bool -> IO (), -- | - -- Compile a statement with placeholders. + -- If the backend supports statement preparation, + -- this function sompiles a bytestring statement + -- with placeholders if it's not compiled already, + -- and otherwise returns the cached statement. + -- IOW, implements memoization. + -- + -- If the backend does not support this, + -- then this function should simply be implemented as a 'return'. prepare :: ByteString -> IO s, -- | - -- Execute a statement with values for placeholders + -- Execute a statement with values for placeholders. execute :: s -> [Value] -> IO Int, -- | -- Execute a statement with values and an expected results stream size. -- The expected stream size can be used by the backend to determine -- an optimal fetching method. - executeAndStream :: s -> [Value] -> Int -> IO ResultSet, + executeAndStream :: s -> [Value] -> Maybe Int -> IO ResultSet, -- | -- Close the connection. disconnect :: IO () diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index ca6d24d770..d397416612 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -15,6 +15,10 @@ import BasePrelude as Exports hiding (left, right, tryJust, bool) ------------------------- import MTLPrelude as Exports hiding (shift) +-- mmorph +------------------------- +import Control.Monad.Morph as Exports + -- list-t ------------------------- import ListT as Exports (ListT) From cca38b52559b8e7c9d3c1c4d5fe78b1f3af1b5e4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 18:11:37 +0400 Subject: [PATCH 0017/1204] Row instances --- high-sql.cabal | 1 + library/HighSQL/API.hs | 13 ++---- library/HighSQL/Row.hs | 89 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 library/HighSQL/Row.hs diff --git a/high-sql.cabal b/high-sql.cabal index 24df06f171..b2cb936e20 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -43,6 +43,7 @@ library HighSQL.QQ HighSQL.QQ.Parser HighSQL.API + HighSQL.Row exposed-modules: HighSQL HighSQL.Backend diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index beb9afa148..753fa2bf92 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -4,6 +4,7 @@ import HighSQL.Prelude hiding (read, Read, write, Write, Error) import qualified Data.Pool as Pool import qualified HighSQL.CompositionT as CompositionT import qualified HighSQL.Backend as Backend +import qualified HighSQL.Row as Row import qualified ListT @@ -167,7 +168,7 @@ instance SelectPrivilege Admin select :: forall l s r. - (SelectPrivilege l, Row r, Typeable r) => + (SelectPrivilege l, Row.Row r, Typeable r) => Statement -> ResultsStream s (T l s) r select (Statement bs vl) = do @@ -178,7 +179,7 @@ select (Statement bs vl) = ps <- prepare bs executeAndStream ps vl Nothing l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s - maybe (throwParsingError l (typeOf (undefined :: r))) return $ parse l + maybe (throwParsingError l (typeOf (undefined :: r))) return $ Row.fromRow l where throwParsingError vl t = ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t @@ -234,11 +235,3 @@ newtype ResultsStream s m r = deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.ListMonad, ListT.ListTrans) - --- * Row Parsing -------------------------- - -class Row r where - parse :: [Backend.Value] -> Maybe r - - diff --git a/library/HighSQL/Row.hs b/library/HighSQL/Row.hs new file mode 100644 index 0000000000..9d778419fc --- /dev/null +++ b/library/HighSQL/Row.hs @@ -0,0 +1,89 @@ +-- | +-- An open API for implementation of specific backend drivers. +module HighSQL.Row where + +import HighSQL.Prelude +import Language.Haskell.TH +import qualified Data.Text as Text +import qualified HighSQL.Backend as Backend + + +class Row r where + fromRow :: [Backend.Value] -> Maybe r + +-- Generate tuple instaces using Template Haskell: +$( + let + inst :: Int -> Dec + inst arity = + InstanceD constraints head [fromRowDec] + where + varNames = + [1 .. arity] >>= \i -> return (mkName ('_' : show i)) + varTypes = + map VarT varNames + constraints = + map (ClassP ''Backend.ValueConversion . pure) varTypes + head = + AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes) + fromRowDec = + FunD 'fromRow [c1, c2] + where + c1 = + Clause [ListP (map VarP varNames)] (NormalB e) [] + where + e = + foldQueue queue + where + con = ConE (tupleDataName arity) + queue = + (con :) $ + (VarE '(<$>) :) $ + intersperse (VarE '(<*>)) $ + map (AppE (VarE 'Backend.fromValue) . VarE) varNames + foldQueue = + \case + e : o : t -> UInfixE e o (foldQueue t) + e : [] -> e + _ -> $bug "Unexpected queue size" + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . inst) [2 .. 24] + ) + +-- Generate single-type instaces using Template Haskell: +$( + let + inst :: Name -> Dec + inst n = + InstanceD [] (AppT (ConT ''Row) (ConT n)) [fromRowDec] + where + fromRowDec = + FunD 'fromRow [c1, c2] + where + c1 = + Clause [ListP [VarP v]] (NormalB e) [] + where + v = mkName "a" + e = AppE (VarE 'Backend.fromValue) (VarE v) + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . inst) + [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, + ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, + ''Int32, ''Word64, ''Word32, ''ByteString, ''Text] + ) + +instance Row () where + fromRow = \case [] -> Just (); _ -> Nothing + +instance Row String where + fromRow = fmap Text.unpack . fromRow + +instance Row Word where + fromRow = fmap (fromIntegral :: Word64 -> Word) . fromRow + +instance Row Int where + fromRow = fmap (fromIntegral :: Int64 -> Int) . fromRow From 4d0f57a1e8e01d5d823166fe7ff860b47548be2d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 18:27:15 +0400 Subject: [PATCH 0018/1204] Maybe Value --- library/HighSQL/Backend.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index aa972ca1d3..8ecbef3c26 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -94,7 +94,8 @@ data Value = Value_ZonedTime !ZonedTime | Value_UTCTime !UTCTime | Value_NominalDiffTime !NominalDiffTime | - Value_Null + -- | Yes, this encodes @NULL@s. + Value_Maybe !(Maybe Value) deriving (Show, Data, Typeable, Generic) @@ -156,3 +157,7 @@ instance ValueConversion Word where instance ValueConversion Int where toValue = Value_Int64 . fromIntegral fromValue = \case Value_Int64 a -> Just (fromIntegral a); _ -> Nothing + +instance ValueConversion a => ValueConversion (Maybe a) where + toValue = Value_Maybe . fmap toValue + fromValue = \case Value_Maybe a -> traverse fromValue a; _ -> Nothing From 7262c148f807dfbc4342a5e20023910682a13099 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 18:36:29 +0400 Subject: [PATCH 0019/1204] Rearrange Row and ValueConversion into Conversion --- high-sql.cabal | 2 +- library/HighSQL/API.hs | 6 +- library/HighSQL/Backend.hs | 64 -------------- library/HighSQL/Conversion.hs | 153 ++++++++++++++++++++++++++++++++++ library/HighSQL/QQ.hs | 3 +- library/HighSQL/Row.hs | 89 -------------------- 6 files changed, 159 insertions(+), 158 deletions(-) create mode 100644 library/HighSQL/Conversion.hs delete mode 100644 library/HighSQL/Row.hs diff --git a/high-sql.cabal b/high-sql.cabal index b2cb936e20..67796917aa 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -43,7 +43,7 @@ library HighSQL.QQ HighSQL.QQ.Parser HighSQL.API - HighSQL.Row + HighSQL.Conversion exposed-modules: HighSQL HighSQL.Backend diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index 753fa2bf92..b821fed916 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -4,7 +4,7 @@ import HighSQL.Prelude hiding (read, Read, write, Write, Error) import qualified Data.Pool as Pool import qualified HighSQL.CompositionT as CompositionT import qualified HighSQL.Backend as Backend -import qualified HighSQL.Row as Row +import qualified HighSQL.Conversion as Conversion import qualified ListT @@ -168,7 +168,7 @@ instance SelectPrivilege Admin select :: forall l s r. - (SelectPrivilege l, Row.Row r, Typeable r) => + (SelectPrivilege l, Conversion.Row r, Typeable r) => Statement -> ResultsStream s (T l s) r select (Statement bs vl) = do @@ -179,7 +179,7 @@ select (Statement bs vl) = ps <- prepare bs executeAndStream ps vl Nothing l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s - maybe (throwParsingError l (typeOf (undefined :: r))) return $ Row.fromRow l + maybe (throwParsingError l (typeOf (undefined :: r))) return $ Conversion.fromRow l where throwParsingError vl t = ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 8ecbef3c26..1ef69f7abe 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -97,67 +97,3 @@ data Value = -- | Yes, this encodes @NULL@s. Value_Maybe !(Maybe Value) deriving (Show, Data, Typeable, Generic) - - -class ValueConversion a where - toValue :: a -> Value - fromValue :: Value -> Maybe a - --- Generate standard instances using Template Haskell: -$( - let - assocs = - [ - (''NominalDiffTime, 'Value_NominalDiffTime), - (''UTCTime, 'Value_UTCTime), - (''ZonedTime, 'Value_ZonedTime), - (''TimeOfDay, 'Value_TimeOfDay), - (''LocalTime, 'Value_LocalTime), - (''Day, 'Value_Day), - (''Rational, 'Value_Rational), - (''Double, 'Value_Double), - (''Bool, 'Value_Bool), - (''Char, 'Value_Char), - (''Integer, 'Value_Integer), - (''Int64, 'Value_Int64), - (''Int32, 'Value_Int32), - (''Word64, 'Value_Word64), - (''Word32, 'Value_Word32), - (''ByteString, 'Value_ByteString), - (''Text, 'Value_Text) - ] - inst :: TH.Name -> TH.Name -> TH.Dec - inst t c = - TH.InstanceD [] (TH.AppT (TH.ConT ''ValueConversion) (TH.ConT t)) [d1, d2] - where - d1 = - TH.FunD 'toValue [TH.Clause [] (TH.NormalB (TH.ConE c)) []] - d2 = - TH.FunD 'fromValue [c1, c2] - where - c1 = - TH.Clause [p] (TH.NormalB e) [] - where - p = TH.ConP c [TH.VarP v] - v = TH.mkName "a" - e = TH.AppE (TH.ConE 'Just) (TH.VarE v) - c2 = - TH.Clause [TH.WildP] (TH.NormalB (TH.ConE 'Nothing)) [] - in return $ map (uncurry inst) assocs - ) - -instance ValueConversion String where - toValue = Value_Text . Text.pack - fromValue = \case Value_Text a -> Just (Text.unpack a); _ -> Nothing - -instance ValueConversion Word where - toValue = Value_Word64 . fromIntegral - fromValue = \case Value_Word64 a -> Just (fromIntegral a); _ -> Nothing - -instance ValueConversion Int where - toValue = Value_Int64 . fromIntegral - fromValue = \case Value_Int64 a -> Just (fromIntegral a); _ -> Nothing - -instance ValueConversion a => ValueConversion (Maybe a) where - toValue = Value_Maybe . fmap toValue - fromValue = \case Value_Maybe a -> traverse fromValue a; _ -> Nothing diff --git a/library/HighSQL/Conversion.hs b/library/HighSQL/Conversion.hs new file mode 100644 index 0000000000..9c778246f5 --- /dev/null +++ b/library/HighSQL/Conversion.hs @@ -0,0 +1,153 @@ +-- | +-- An open API for implementation of specific backend drivers. +module HighSQL.Conversion where + +import HighSQL.Prelude +import Language.Haskell.TH +import qualified Data.Text as Text +import qualified HighSQL.Backend as Backend + + +-- * Value +------------------------- + +class Value a where + toValue :: a -> Backend.Value + fromValue :: Backend.Value -> Maybe a + +-- Generate standard instances using Template Haskell: +let + inst :: Name -> Name -> Dec + inst t c = + InstanceD [] (AppT (ConT ''Value) (ConT t)) [d1, d2] + where + d1 = + FunD 'toValue [Clause [] (NormalB (ConE c)) []] + d2 = + FunD 'fromValue [c1, c2] + where + c1 = + Clause [p] (NormalB e) [] + where + p = ConP c [VarP v] + v = mkName "a" + e = AppE (ConE 'Just) (VarE v) + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . uncurry inst) + [ + (''NominalDiffTime, 'Backend.Value_NominalDiffTime), + (''UTCTime, 'Backend.Value_UTCTime), + (''ZonedTime, 'Backend.Value_ZonedTime), + (''TimeOfDay, 'Backend.Value_TimeOfDay), + (''LocalTime, 'Backend.Value_LocalTime), + (''Day, 'Backend.Value_Day), + (''Rational, 'Backend.Value_Rational), + (''Double, 'Backend.Value_Double), + (''Bool, 'Backend.Value_Bool), + (''Char, 'Backend.Value_Char), + (''Integer, 'Backend.Value_Integer), + (''Int64, 'Backend.Value_Int64), + (''Int32, 'Backend.Value_Int32), + (''Word64, 'Backend.Value_Word64), + (''Word32, 'Backend.Value_Word32), + (''ByteString, 'Backend.Value_ByteString), + (''Text, 'Backend.Value_Text) + ] + +instance Value String where + toValue = Backend.Value_Text . Text.pack + fromValue = \case Backend.Value_Text a -> Just (Text.unpack a); _ -> Nothing + +instance Value Word where + toValue = Backend.Value_Word64 . fromIntegral + fromValue = \case Backend.Value_Word64 a -> Just (fromIntegral a); _ -> Nothing + +instance Value Int where + toValue = Backend.Value_Int64 . fromIntegral + fromValue = \case Backend.Value_Int64 a -> Just (fromIntegral a); _ -> Nothing + +instance Value a => Value (Maybe a) where + toValue = Backend.Value_Maybe . fmap toValue + fromValue = \case Backend.Value_Maybe a -> traverse fromValue a; _ -> Nothing + + +-- * Row +------------------------- + +class Row r where + fromRow :: [Backend.Value] -> Maybe r + +-- Generate tuple instaces using Template Haskell: +let + inst :: Int -> Dec + inst arity = + InstanceD constraints head [fromRowDec] + where + varNames = + [1 .. arity] >>= \i -> return (mkName ('_' : show i)) + varTypes = + map VarT varNames + constraints = + map (ClassP ''Value . pure) varTypes + head = + AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes) + fromRowDec = + FunD 'fromRow [c1, c2] + where + c1 = + Clause [ListP (map VarP varNames)] (NormalB e) [] + where + e = + foldQueue queue + where + con = ConE (tupleDataName arity) + queue = + (con :) $ + (VarE '(<$>) :) $ + intersperse (VarE '(<*>)) $ + map (AppE (VarE 'fromValue) . VarE) varNames + foldQueue = + \case + e : o : t -> UInfixE e o (foldQueue t) + e : [] -> e + _ -> $bug "Unexpected queue size" + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . inst) [2 .. 24] + +-- Generate single-type instaces using Template Haskell: +let + inst :: Name -> Dec + inst n = + InstanceD [] (AppT (ConT ''Row) (ConT n)) [fromRowDec] + where + fromRowDec = + FunD 'fromRow [c1, c2] + where + c1 = + Clause [ListP [VarP v]] (NormalB e) [] + where + v = mkName "a" + e = AppE (VarE 'fromValue) (VarE v) + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . inst) + [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, + ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, + ''Int32, ''Word64, ''Word32, ''ByteString, ''Text] + +instance Row () where + fromRow = \case [] -> Just (); _ -> Nothing + +instance Row String where + fromRow = fmap Text.unpack . fromRow + +instance Row Word where + fromRow = fmap (fromIntegral :: Word64 -> Word) . fromRow + +instance Row Int where + fromRow = fmap (fromIntegral :: Int64 -> Int) . fromRow diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs index 4f26c4898c..64bb4a6798 100644 --- a/library/HighSQL/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -6,6 +6,7 @@ import Language.Haskell.TH.Quote import qualified HighSQL.QQ.Parser as Parser import qualified HighSQL.API as API import qualified HighSQL.Backend as Backend +import qualified HighSQL.Conversion as Conversion qq :: QuasiQuoter @@ -41,7 +42,7 @@ statementF s n = pats = map VarP vars exp = AppE (AppE (ConE 'API.Statement) (LitE (StringL s))) (ListE exps) where - exps = map (AppE (VarE 'Backend.toValue) . VarE) vars + exps = map (AppE (VarE 'Conversion.toValue) . VarE) vars fmapLamE :: (Exp -> Exp) -> Exp -> Exp fmapLamE f = diff --git a/library/HighSQL/Row.hs b/library/HighSQL/Row.hs deleted file mode 100644 index 9d778419fc..0000000000 --- a/library/HighSQL/Row.hs +++ /dev/null @@ -1,89 +0,0 @@ --- | --- An open API for implementation of specific backend drivers. -module HighSQL.Row where - -import HighSQL.Prelude -import Language.Haskell.TH -import qualified Data.Text as Text -import qualified HighSQL.Backend as Backend - - -class Row r where - fromRow :: [Backend.Value] -> Maybe r - --- Generate tuple instaces using Template Haskell: -$( - let - inst :: Int -> Dec - inst arity = - InstanceD constraints head [fromRowDec] - where - varNames = - [1 .. arity] >>= \i -> return (mkName ('_' : show i)) - varTypes = - map VarT varNames - constraints = - map (ClassP ''Backend.ValueConversion . pure) varTypes - head = - AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes) - fromRowDec = - FunD 'fromRow [c1, c2] - where - c1 = - Clause [ListP (map VarP varNames)] (NormalB e) [] - where - e = - foldQueue queue - where - con = ConE (tupleDataName arity) - queue = - (con :) $ - (VarE '(<$>) :) $ - intersperse (VarE '(<*>)) $ - map (AppE (VarE 'Backend.fromValue) . VarE) varNames - foldQueue = - \case - e : o : t -> UInfixE e o (foldQueue t) - e : [] -> e - _ -> $bug "Unexpected queue size" - c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] - in - mapM (return . inst) [2 .. 24] - ) - --- Generate single-type instaces using Template Haskell: -$( - let - inst :: Name -> Dec - inst n = - InstanceD [] (AppT (ConT ''Row) (ConT n)) [fromRowDec] - where - fromRowDec = - FunD 'fromRow [c1, c2] - where - c1 = - Clause [ListP [VarP v]] (NormalB e) [] - where - v = mkName "a" - e = AppE (VarE 'Backend.fromValue) (VarE v) - c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] - in - mapM (return . inst) - [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, - ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, - ''Int32, ''Word64, ''Word32, ''ByteString, ''Text] - ) - -instance Row () where - fromRow = \case [] -> Just (); _ -> Nothing - -instance Row String where - fromRow = fmap Text.unpack . fromRow - -instance Row Word where - fromRow = fmap (fromIntegral :: Word64 -> Word) . fromRow - -instance Row Int where - fromRow = fmap (fromIntegral :: Int64 -> Int) . fromRow From 129731fe7cb86adad6d884e5b4faa2ed57c044d5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 18:47:20 +0400 Subject: [PATCH 0020/1204] Update Value instances generation --- library/HighSQL/Conversion.hs | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/library/HighSQL/Conversion.hs b/library/HighSQL/Conversion.hs index 9c778246f5..8323adf370 100644 --- a/library/HighSQL/Conversion.hs +++ b/library/HighSQL/Conversion.hs @@ -17,10 +17,12 @@ class Value a where -- Generate standard instances using Template Haskell: let - inst :: Name -> Name -> Dec - inst t c = + inst :: Name -> Dec + inst t = InstanceD [] (AppT (ConT ''Value) (ConT t)) [d1, d2] where + c = + mkName $ "Backend.Value_" ++ nameBase t d1 = FunD 'toValue [Clause [] (NormalB (ConE c)) []] d2 = @@ -35,26 +37,10 @@ let c2 = Clause [WildP] (NormalB (ConE 'Nothing)) [] in - mapM (return . uncurry inst) - [ - (''NominalDiffTime, 'Backend.Value_NominalDiffTime), - (''UTCTime, 'Backend.Value_UTCTime), - (''ZonedTime, 'Backend.Value_ZonedTime), - (''TimeOfDay, 'Backend.Value_TimeOfDay), - (''LocalTime, 'Backend.Value_LocalTime), - (''Day, 'Backend.Value_Day), - (''Rational, 'Backend.Value_Rational), - (''Double, 'Backend.Value_Double), - (''Bool, 'Backend.Value_Bool), - (''Char, 'Backend.Value_Char), - (''Integer, 'Backend.Value_Integer), - (''Int64, 'Backend.Value_Int64), - (''Int32, 'Backend.Value_Int32), - (''Word64, 'Backend.Value_Word64), - (''Word32, 'Backend.Value_Word32), - (''ByteString, 'Backend.Value_ByteString), - (''Text, 'Backend.Value_Text) - ] + mapM (return . inst) + [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, + ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, ''Int32, + ''Word64, ''Word32, ''ByteString, ''Text] instance Value String where toValue = Backend.Value_Text . Text.pack From 873ccbf63383e574c6ab3a91d5e4ec237cd8fc35 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 20:24:58 +0400 Subject: [PATCH 0021/1204] Implement API --- library/HighSQL/API.hs | 74 ++++++++++++++++++++++-------------- library/HighSQL/Backend.hs | 12 +++++- library/HighSQL/QQ.hs | 11 ++++-- library/HighSQL/QQ/Parser.hs | 22 ++++------- 4 files changed, 71 insertions(+), 48 deletions(-) diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index b821fed916..e2f31c24cf 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -160,52 +160,70 @@ admin = transaction True -- | -- \"SELECT\" -class SelectPrivilege l +class SelectPrivilege l where + -- | + -- Produce a results stream from a statement. + select :: + forall s r. + (Conversion.Row r, Typeable r) => Statement -> ResultsStream s (T l s) r + select (Statement bs vl) = + do + (w, s) <- + lift $ T $ lift $ do + Backend.Connection {..} <- ask + liftIO $ do + ps <- prepare bs + executeStreaming ps vl Nothing + l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s + maybe (throwParsingError l (typeOf (undefined :: r))) return $ Conversion.fromRow l + where + throwParsingError vl t = + ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t instance SelectPrivilege Read instance SelectPrivilege Write instance SelectPrivilege Admin -select :: - forall l s r. - (SelectPrivilege l, Conversion.Row r, Typeable r) => - Statement -> ResultsStream s (T l s) r -select (Statement bs vl) = - do - (w, s) <- - lift $ T $ lift $ do - Backend.Connection {..} <- ask - liftIO $ do - ps <- prepare bs - executeAndStream ps vl Nothing - l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s - maybe (throwParsingError l (typeOf (undefined :: r))) return $ Conversion.fromRow l - where - throwParsingError vl t = - ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t -- | -- \"UPDATE\", \"INSERT\", \"DELETE\" -class UpdatePrivilege l +class UpdatePrivilege l where + -- | + -- Execute and count the amount of affected rows. + update :: Statement -> T l s Integer + update (Statement bs vl) = + T $ do + Backend.Connection {..} <- lift $ ask + liftIO $ do + ps <- prepare bs + executeCountingEffects ps vl + -- | + -- Execute and return the possibly auto-incremented number. + insert :: Statement -> T l s (Maybe Integer) + insert (Statement bs vl) = + T $ do + Backend.Connection {..} <- lift $ ask + liftIO $ do + ps <- prepare bs + executeIncrementing ps vl instance UpdatePrivilege Write instance UpdatePrivilege Admin -update :: UpdatePrivilege l => Statement -> T l s (Maybe Integer) -update = - $notImplemented - -- | -- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" -class CreatePrivilege l +class CreatePrivilege l where + create :: Statement -> T l s () + create (Statement bs vl) = + T $ do + Backend.Connection {..} <- lift $ ask + liftIO $ do + ps <- prepare bs + execute ps vl instance CreatePrivilege Admin -create :: CreatePrivilege l => Statement -> T l s () -create = - $notImplemented - -- * Statement ------------------------- diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 1ef69f7abe..99b90dc25e 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -38,12 +38,20 @@ data Connection = prepare :: ByteString -> IO s, -- | -- Execute a statement with values for placeholders. - execute :: s -> [Value] -> IO Int, + execute :: s -> [Value] -> IO (), + -- | + -- Execute a statement with values for placeholders, + -- returning the amount of affected rows. + executeCountingEffects :: s -> [Value] -> IO Integer, + -- | + -- Execute a statement with values for placeholders, + -- returning the possibly generated auto-incremented value. + executeIncrementing :: s -> [Value] -> IO (Maybe Integer), -- | -- Execute a statement with values and an expected results stream size. -- The expected stream size can be used by the backend to determine -- an optimal fetching method. - executeAndStream :: s -> [Value] -> Maybe Int -> IO ResultSet, + executeStreaming :: s -> [Value] -> Maybe Integer -> IO ResultSet, -- | -- Close the connection. disconnect :: IO () diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs index 64bb4a6798..4e1f233d4a 100644 --- a/library/HighSQL/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -27,9 +27,14 @@ parseExp s = where conName = \case - Parser.Select -> 'API.select - Parser.Update -> 'API.update - Parser.Create -> 'API.create + Parser.Select -> 'API.select + Parser.Update -> 'API.update + Parser.Insert -> 'API.insert + Parser.Delete -> 'API.update + Parser.Create -> 'API.create + Parser.Alter -> 'API.create + Parser.Drop -> 'API.create + Parser.Truncate -> 'API.create -- | -- An expression of an arbitrary arg-length function, diff --git a/library/HighSQL/QQ/Parser.hs b/library/HighSQL/QQ/Parser.hs index 564a1c55ab..64387e80d8 100644 --- a/library/HighSQL/QQ/Parser.hs +++ b/library/HighSQL/QQ/Parser.hs @@ -3,17 +3,16 @@ module HighSQL.QQ.Parser where import HighSQL.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) import qualified Data.Text as Text +import qualified Language.Haskell.TH as TH -- | -- The kind of a statement and the amount of placeholders. type Result = - (Kind, Int) + (Statement, Int) -data Kind = - Select | - Update | - Create +data Statement = + Select | Update | Insert | Delete | Create | Alter | Drop | Truncate deriving (Show, Read, Eq, Ord, Enum) parse :: Text -> Either String Result @@ -28,16 +27,9 @@ parse = assocToParser (word, kind) = asciiCI word *> pure kind assocs = - do - (kind, words) <- groups - word <- words - return (word, kind) - groups = - [ - (Select, ["select"]), - (Update, ["update", "insert", "delete"]), - (Create, ["create", "alter", "drop", "truncate"]) - ] + [("select", Select), ("update", Update), ("insert", Insert), + ("delete", Delete), ("create", Create), ("alter", Alter), + ("drop", Drop), ("truncate", Truncate)] countPlaceholders = count <|> pure 0 where From 8e245cd6e8a558d3c42d75dbe0d36d19ea69528b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Aug 2014 20:55:28 +0400 Subject: [PATCH 0022/1204] Docs, exports and API finishing --- library/HighSQL.hs | 28 +++++++++++++++-- library/HighSQL/API.hs | 62 ++++++++++++++++++++++++++------------ library/HighSQL/Backend.hs | 13 ++++---- library/HighSQL/QQ.hs | 53 ++++++++++++++++++++++++++++++-- 4 files changed, 126 insertions(+), 30 deletions(-) diff --git a/library/HighSQL.hs b/library/HighSQL.hs index 44bb9d319d..245a7e9dba 100644 --- a/library/HighSQL.hs +++ b/library/HighSQL.hs @@ -1,4 +1,26 @@ -module HighSQL where +module HighSQL +( + -- * Pool + Pool, + Settings(..), + withPool, + -- * Error + Error(..), + -- * Transaction + T, + -- ** Execution + -- | + -- Functions for execution of transactions. + -- They determine the transactional locking strategy of the database. + read, + write, + admin, + -- ** Statement Quasi-Quote + q, + -- * Results Stream + ResultsStream, +) +where -import HighSQL.Prelude -import qualified HighSQL.API as API +import HighSQL.API as API +import HighSQL.QQ as QQ diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index e2f31c24cf..27e321d18d 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -8,14 +8,16 @@ import qualified HighSQL.Conversion as Conversion import qualified ListT --- * Session +-- * Pool ------------------------- -data Session = - Session !(Pool.Pool Backend.Connection) +-- | +-- A pool of connections to the database. +newtype Pool = + Pool (Pool.Pool Backend.Connection) -- | --- Session settings. +-- Pool initization settings. data Settings = Settings { -- | @@ -35,8 +37,12 @@ data Settings = connectionTimeout :: NominalDiffTime } -withSession :: Backend.Backend -> Settings -> (Session -> IO a) -> IO a -withSession b s = +-- | +-- Initialize a pool given a backend and settings +-- and run an IO computation with it, +-- while automating the resource management. +withPool :: Backend.Backend -> Settings -> (Pool -> IO a) -> IO a +withPool b s = bracket acquire release where acquire = @@ -45,8 +51,8 @@ withSession b s = Pool.createPool (Backend.connect b) (Backend.disconnect) (striping1 s) (connectionTimeout s) (striping2 s) - return (Session pool) - release (Session pool) = + return (Pool pool) + release (Pool pool) = Pool.purgePool pool @@ -84,7 +90,7 @@ newtype T l s r = deriving (Functor, Applicative, Monad) -- | --- Execute a transaction in a write mode (if 'True') using a session. +-- Execute a transaction in a write mode (if 'True') using a connections pool. -- -- * Automatically determines, -- whether it's actually a transaction or just a single action @@ -94,8 +100,8 @@ newtype T l s r = -- 'Backend.TransactionError' exception. -- -- * Rethrows all the other exceptions after wrapping them in 'Error'. -transaction :: Bool -> Session -> (forall s. T l s r) -> IO r -transaction w (Session p) (T t) = +transaction :: Bool -> Pool -> (forall s. T l s r) -> IO r +transaction w (Pool p) (T t) = do e <- try $ Pool.withResource p $ @@ -139,19 +145,37 @@ transaction w (Session p) (T t) = data Read -read :: MonadIO m => Session -> (forall s. T Read s r) -> IO r +-- | +-- Execute a transaction on a connections pool. +-- +-- Requires minimal locking from the database, +-- however you can only execute the \"SELECT\" statements in it. +-- The API ensures of that on the type-level. +read :: Pool -> (forall s. T Read s r) -> IO r read = transaction False data Write -write :: MonadIO m => Session -> (forall s. T Write s r) -> IO r +-- | +-- Execute a transaction on a connections pool. +-- +-- Allows to execute the \"SELECT\", \"UPDATE\", \"INSERT\" +-- and \"DELETE\" statements. +-- However, compared to 'read', this transaction requires the database to choose +-- a more resource-demanding locking strategy. +write :: Pool -> (forall s. T Write s r) -> IO r write = transaction True data Admin -admin :: MonadIO m => Session -> (forall s. T Admin s r) -> IO r +-- | +-- Execute a transaction on a connections pool. +-- +-- Same as 'write', but allows you to perform any kind of statements, +-- including \"CREATE\", \"DROP\" and \"ALTER\". +admin :: Pool -> (forall s. T Admin s r) -> IO r admin = transaction True @@ -240,14 +264,14 @@ data Statement = -- A stream of results, -- which fetches only those that you reach. -- --- Uses the same trick as 'ST' to become impossible to be run outside of --- its transaction. --- Hence you can only access it while remaining in a transaction, --- and when the transaction finishes it safely gets automatically released. --- -- It is implemented as a wrapper around 'ListT.ListT', -- hence all the utility functions of the list transformer API -- are applicable to this type. +-- +-- It uses the same trick as 'ST' to become impossible to be run outside of +-- its transaction. +-- Hence you can only access it while remaining in a transaction, +-- and when the transaction finishes it safely gets automatically released. newtype ResultsStream s m r = ResultsStream (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 99b90dc25e..1a83b259e9 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -7,6 +7,10 @@ import qualified Data.Text as Text import qualified Language.Haskell.TH as TH +-- | +-- A database interface. +-- +-- Implementations are provided by driver libraries. data Backend = Backend { connect :: IO Connection @@ -28,10 +32,10 @@ data Connection = finishTransaction :: Bool -> IO (), -- | -- If the backend supports statement preparation, - -- this function sompiles a bytestring statement + -- this function compiles a bytestring statement -- with placeholders if it's not compiled already, - -- and otherwise returns the cached statement. - -- IOW, implements memoization. + -- and otherwise returns the cached already compiled statement. + -- IOW, it implements memoization. -- -- If the backend does not support this, -- then this function should simply be implemented as a 'return'. @@ -81,9 +85,6 @@ type ResultSet = (Int, ListT IO Value) --- * Value -------------------------- - data Value = Value_Text !Text | Value_ByteString !ByteString | diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs index 4e1f233d4a..2b82f0f26c 100644 --- a/library/HighSQL/QQ.hs +++ b/library/HighSQL/QQ.hs @@ -9,8 +9,57 @@ import qualified HighSQL.Backend as Backend import qualified HighSQL.Conversion as Conversion -qq :: QuasiQuoter -qq = +-- | +-- Produces a lambda-expression, +-- which takes as many parameters as there are placeholders in the statement +-- and, depending on the statement kind, results in one of the following types: +-- +-- [@SELECT@] +-- +-- A stream of results, with 'API.T' as the inner monad: +-- +-- @'API.ResultsStream' s ('API.T' l s) r@ +-- +-- [@INSERT@] +-- +-- A transaction, +-- which returns the possibly auto-incremented value +-- (of the @id@ column typically): +-- +-- @'API.T' l s (Maybe Integer)@ +-- +-- [@UPDATE, DELETE@] +-- +-- A transaction, +-- which returns the amount of affected rows: +-- +-- @'API.T' l s Integer@ +-- +-- [@CREATE, ALTER, DROP, TRUNCATE@] +-- +-- A unit transaction: +-- +-- @'API.T' l s ()@ +-- +-- Example: +-- +-- >write session $ do +-- > artistIDMaybe <- ListT.head $ [q| SELECT id FROM artists WHERE name = ? |] "Metallica" +-- > userIDMaybe <- ListT.head $ [q| SELECT id FROM users WHERE name = ? |] "Nikita Volkov" +-- > forM_ ((,) <$> artistIDMaybe <*> userIDMaybe) $ \(artistID, userID) -> +-- > [q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] artistID userID +-- +-- Of course, the same thing can be implemented a bit smarter: +-- +-- >write session $ sequence_ $ ListT.head $ do +-- > artistID <- [q| SELECT id FROM artists WHERE name = ? |] "Metallica" +-- > userID <- [q| SELECT id FROM users WHERE name = ? |] "Nikita Volkov" +-- > return $ [q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] artistID userID +-- +-- In both examples above we execute a 'write' transaction, +-- in which we query two tables and insert a row into a third one. +q :: QuasiQuoter +q = QuasiQuoter parseExp (const $ fail "Pattern context is not supported") From 30b3593b402a2606e54d3f460dcf514321dba78c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Aug 2014 03:59:31 +0400 Subject: [PATCH 0023/1204] Drop redundant dependency --- high-sql.cabal | 1 - library/HighSQL/Prelude.hs | 13 ++++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 67796917aa..8a72f36d98 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -58,7 +58,6 @@ library time == 1.4.*, bytestring == 0.10.*, text == 0.11.*, - unordered-containers == 0.2.*, hashable == 1.2.*, -- control: list-t >= 0.2.1 && < 0.3, diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index d397416612..fcb03b41c1 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -31,19 +31,14 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) --- time -------------------------- -import Data.Time as Exports - --- unordered-containers -------------------------- -import Data.HashMap.Strict as Exports (HashMap) -import Data.HashSet as Exports (HashSet) - -- hashable ------------------------- import Data.Hashable as Exports (Hashable) +-- time +------------------------- +import Data.Time as Exports + -- placeholders ------------------------- import Development.Placeholders as Exports From e4fee82adf120f937d958afe5b893196cee7f90b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Aug 2014 04:03:29 +0400 Subject: [PATCH 0024/1204] Lose the "Value_" prefix --- library/HighSQL/Backend.hs | 36 +++++++++++++++++------------------ library/HighSQL/Conversion.hs | 18 +++++++++--------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 1a83b259e9..9be2d0dcd3 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -86,23 +86,23 @@ type ResultSet = data Value = - Value_Text !Text | - Value_ByteString !ByteString | - Value_Word32 !Word32 | - Value_Word64 !Word64 | - Value_Int32 !Int32 | - Value_Int64 !Int64 | - Value_Integer !Integer | - Value_Char !Char | - Value_Bool !Bool | - Value_Double !Double | - Value_Rational !Rational | - Value_Day !Day | - Value_LocalTime !LocalTime | - Value_TimeOfDay !TimeOfDay | - Value_ZonedTime !ZonedTime | - Value_UTCTime !UTCTime | - Value_NominalDiffTime !NominalDiffTime | + Text !Text | + ByteString !ByteString | + Word32 !Word32 | + Word64 !Word64 | + Int32 !Int32 | + Int64 !Int64 | + Integer !Integer | + Char !Char | + Bool !Bool | + Double !Double | + Rational !Rational | + Day !Day | + LocalTime !LocalTime | + TimeOfDay !TimeOfDay | + ZonedTime !ZonedTime | + UTCTime !UTCTime | + NominalDiffTime !NominalDiffTime | -- | Yes, this encodes @NULL@s. - Value_Maybe !(Maybe Value) + Maybe !(Maybe Value) deriving (Show, Data, Typeable, Generic) diff --git a/library/HighSQL/Conversion.hs b/library/HighSQL/Conversion.hs index 8323adf370..21d76e27e3 100644 --- a/library/HighSQL/Conversion.hs +++ b/library/HighSQL/Conversion.hs @@ -22,7 +22,7 @@ let InstanceD [] (AppT (ConT ''Value) (ConT t)) [d1, d2] where c = - mkName $ "Backend.Value_" ++ nameBase t + mkName $ "Backend." ++ nameBase t d1 = FunD 'toValue [Clause [] (NormalB (ConE c)) []] d2 = @@ -43,20 +43,20 @@ let ''Word64, ''Word32, ''ByteString, ''Text] instance Value String where - toValue = Backend.Value_Text . Text.pack - fromValue = \case Backend.Value_Text a -> Just (Text.unpack a); _ -> Nothing + toValue = Backend.Text . Text.pack + fromValue = \case Backend.Text a -> Just (Text.unpack a); _ -> Nothing instance Value Word where - toValue = Backend.Value_Word64 . fromIntegral - fromValue = \case Backend.Value_Word64 a -> Just (fromIntegral a); _ -> Nothing + toValue = Backend.Word64 . fromIntegral + fromValue = \case Backend.Word64 a -> Just (fromIntegral a); _ -> Nothing instance Value Int where - toValue = Backend.Value_Int64 . fromIntegral - fromValue = \case Backend.Value_Int64 a -> Just (fromIntegral a); _ -> Nothing + toValue = Backend.Int64 . fromIntegral + fromValue = \case Backend.Int64 a -> Just (fromIntegral a); _ -> Nothing instance Value a => Value (Maybe a) where - toValue = Backend.Value_Maybe . fmap toValue - fromValue = \case Backend.Value_Maybe a -> traverse fromValue a; _ -> Nothing + toValue = Backend.Maybe . fmap toValue + fromValue = \case Backend.Maybe a -> traverse fromValue a; _ -> Nothing -- * Row From d5e432769f6adc10a429880e54c775fe403c7fa0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 11 Aug 2014 18:13:37 +0400 Subject: [PATCH 0025/1204] Add Decimal --- high-sql.cabal | 1 + library/HighSQL/Backend.hs | 1 + library/HighSQL/Prelude.hs | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 8a72f36d98..4f9999414d 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -55,6 +55,7 @@ library -- database: ex-pool == 0.2.*, -- data: + Decimal == 0.4.*, time == 1.4.*, bytestring == 0.10.*, text == 0.11.*, diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 9be2d0dcd3..3c0ee7b3a7 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -5,6 +5,7 @@ module HighSQL.Backend where import HighSQL.Prelude hiding (Error) import qualified Data.Text as Text import qualified Language.Haskell.TH as TH +import qualified Data.Decimal as Decimal -- | diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index fcb03b41c1..b1d8245d86 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -23,6 +23,10 @@ import Control.Monad.Morph as Exports ------------------------- import ListT as Exports (ListT) +-- hashable +------------------------- +import Data.Hashable as Exports (Hashable) + -- text ------------------------- import Data.Text as Exports (Text) @@ -31,9 +35,9 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) --- hashable +-- decimal ------------------------- -import Data.Hashable as Exports (Hashable) +import Data.Decimal as Exports (Decimal, DecimalRaw) -- time ------------------------- From 5fb0fe331f45b5324cb090e23d61f2ebf525433c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 11 Aug 2014 19:10:18 +0400 Subject: [PATCH 0026/1204] Update the deps --- high-sql.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 4f9999414d..26105a2d7d 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -49,16 +49,16 @@ library HighSQL.Backend build-depends: -- template-haskell: - template-haskell == 2.8.*, + template-haskell >= 2.8 && < 2.10, -- parsing: - attoparsec == 0.11.*, + attoparsec == 0.12.*, -- database: ex-pool == 0.2.*, -- data: Decimal == 0.4.*, time == 1.4.*, bytestring == 0.10.*, - text == 0.11.*, + text == 1.1.*, hashable == 1.2.*, -- control: list-t >= 0.2.1 && < 0.3, From d7fb2ce0b9159bebdaff3cbdca109d6a85db077e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 11 Aug 2014 19:10:55 +0400 Subject: [PATCH 0027/1204] Clean up --- high-sql.cabal | 5 - library/HighSQL.hs | 26 --- library/HighSQL/API.hs | 279 -------------------------------- library/HighSQL/CompositionT.hs | 40 ----- library/HighSQL/Conversion.hs | 139 ---------------- library/HighSQL/QQ.hs | 104 ------------ 6 files changed, 593 deletions(-) delete mode 100644 library/HighSQL.hs delete mode 100644 library/HighSQL/API.hs delete mode 100644 library/HighSQL/CompositionT.hs delete mode 100644 library/HighSQL/Conversion.hs delete mode 100644 library/HighSQL/QQ.hs diff --git a/high-sql.cabal b/high-sql.cabal index 26105a2d7d..9a882fb331 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -39,13 +39,8 @@ library library other-modules: HighSQL.Prelude - HighSQL.CompositionT - HighSQL.QQ HighSQL.QQ.Parser - HighSQL.API - HighSQL.Conversion exposed-modules: - HighSQL HighSQL.Backend build-depends: -- template-haskell: diff --git a/library/HighSQL.hs b/library/HighSQL.hs deleted file mode 100644 index 245a7e9dba..0000000000 --- a/library/HighSQL.hs +++ /dev/null @@ -1,26 +0,0 @@ -module HighSQL -( - -- * Pool - Pool, - Settings(..), - withPool, - -- * Error - Error(..), - -- * Transaction - T, - -- ** Execution - -- | - -- Functions for execution of transactions. - -- They determine the transactional locking strategy of the database. - read, - write, - admin, - -- ** Statement Quasi-Quote - q, - -- * Results Stream - ResultsStream, -) -where - -import HighSQL.API as API -import HighSQL.QQ as QQ diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs deleted file mode 100644 index 27e321d18d..0000000000 --- a/library/HighSQL/API.hs +++ /dev/null @@ -1,279 +0,0 @@ -module HighSQL.API where - -import HighSQL.Prelude hiding (read, Read, write, Write, Error) -import qualified Data.Pool as Pool -import qualified HighSQL.CompositionT as CompositionT -import qualified HighSQL.Backend as Backend -import qualified HighSQL.Conversion as Conversion -import qualified ListT - - --- * Pool -------------------------- - --- | --- A pool of connections to the database. -newtype Pool = - Pool (Pool.Pool Backend.Connection) - --- | --- Pool initization settings. -data Settings = - Settings { - -- | - -- The number of stripes (distinct sub-pools) to maintain. - -- The smallest acceptable value is 1. - striping1 :: Word32, - -- | - -- The maximum number of connections to keep open per a pool stripe. - -- The smallest acceptable value is 1. - -- Requests for connections will block if this limit is reached - -- on a single stripe, - -- even if other stripes have idle connections available. - striping2 :: Word32, - -- | - -- The amount of time for which an unused connection is kept open. - -- The smallest acceptable value is 0.5 seconds. - connectionTimeout :: NominalDiffTime - } - --- | --- Initialize a pool given a backend and settings --- and run an IO computation with it, --- while automating the resource management. -withPool :: Backend.Backend -> Settings -> (Pool -> IO a) -> IO a -withPool b s = - bracket acquire release - where - acquire = - do - pool <- - Pool.createPool - (Backend.connect b) (Backend.disconnect) (striping1 s) - (connectionTimeout s) (striping2 s) - return (Pool pool) - release (Pool pool) = - Pool.purgePool pool - - --- * Error -------------------------- - --- | --- The only exception type that this API can raise. -data Error = - -- | - -- Cannot connect to a server - -- or the connection got interrupted. - ConnectionError Text | - -- | - -- Attempt to parse a statement execution result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError [Backend.Value] TypeRep | - -- | - -- A free-form backend-specific exception. - BackendError SomeException - deriving (Show, Typeable) - -instance Exception Error - - --- * Transaction -------------------------- - --- | --- A transaction with a level @l@, --- running on an anonymous state-thread @s@ --- and gaining a result @r@. -newtype T l s r = - T (CompositionT.T (ReaderT Backend.Connection IO) r) - deriving (Functor, Applicative, Monad) - --- | --- Execute a transaction in a write mode (if 'True') using a connections pool. --- --- * Automatically determines, --- whether it's actually a transaction or just a single action --- and executes accordingly. --- --- * Automatically retries the transaction in case of a --- 'Backend.TransactionError' exception. --- --- * Rethrows all the other exceptions after wrapping them in 'Error'. -transaction :: Bool -> Pool -> (forall s. T l s r) -> IO r -transaction w (Pool p) (T t) = - do - e <- - try $ Pool.withResource p $ - \c -> - case CompositionT.run t of - (False, r) -> - runReaderT r c - (True, r) -> - retry - where - retry = - do - Backend.beginTransaction c w - e <- try $ runReaderT r c - case e of - Left (Backend.TransactionError) -> - do - Backend.finishTransaction c False - retry - Left e -> - do - Backend.finishTransaction c False - throwIO e - Right r -> - do - Backend.finishTransaction c True - return r - case e of - Left (Backend.ConnectionError t) -> - throwIO (ConnectionError t) - Left (Backend.BackendError e) -> - throwIO (BackendError e) - Left (Backend.TransactionError) -> - $bug "Unexpected TransactionError" - Right r -> - return r - - --- ** Levels -------------------------- - -data Read - --- | --- Execute a transaction on a connections pool. --- --- Requires minimal locking from the database, --- however you can only execute the \"SELECT\" statements in it. --- The API ensures of that on the type-level. -read :: Pool -> (forall s. T Read s r) -> IO r -read = transaction False - - -data Write - --- | --- Execute a transaction on a connections pool. --- --- Allows to execute the \"SELECT\", \"UPDATE\", \"INSERT\" --- and \"DELETE\" statements. --- However, compared to 'read', this transaction requires the database to choose --- a more resource-demanding locking strategy. -write :: Pool -> (forall s. T Write s r) -> IO r -write = transaction True - - -data Admin - --- | --- Execute a transaction on a connections pool. --- --- Same as 'write', but allows you to perform any kind of statements, --- including \"CREATE\", \"DROP\" and \"ALTER\". -admin :: Pool -> (forall s. T Admin s r) -> IO r -admin = transaction True - - --- ** Privileges -------------------------- - --- | --- \"SELECT\" -class SelectPrivilege l where - -- | - -- Produce a results stream from a statement. - select :: - forall s r. - (Conversion.Row r, Typeable r) => Statement -> ResultsStream s (T l s) r - select (Statement bs vl) = - do - (w, s) <- - lift $ T $ lift $ do - Backend.Connection {..} <- ask - liftIO $ do - ps <- prepare bs - executeStreaming ps vl Nothing - l <- ResultsStream $ hoist (T . liftIO) $ replicateM w s - maybe (throwParsingError l (typeOf (undefined :: r))) return $ Conversion.fromRow l - where - throwParsingError vl t = - ResultsStream $ lift $ T $ liftIO $ throwIO $ ResultParsingError vl t - -instance SelectPrivilege Read -instance SelectPrivilege Write -instance SelectPrivilege Admin - - --- | --- \"UPDATE\", \"INSERT\", \"DELETE\" -class UpdatePrivilege l where - -- | - -- Execute and count the amount of affected rows. - update :: Statement -> T l s Integer - update (Statement bs vl) = - T $ do - Backend.Connection {..} <- lift $ ask - liftIO $ do - ps <- prepare bs - executeCountingEffects ps vl - -- | - -- Execute and return the possibly auto-incremented number. - insert :: Statement -> T l s (Maybe Integer) - insert (Statement bs vl) = - T $ do - Backend.Connection {..} <- lift $ ask - liftIO $ do - ps <- prepare bs - executeIncrementing ps vl - -instance UpdatePrivilege Write -instance UpdatePrivilege Admin - - --- | --- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" -class CreatePrivilege l where - create :: Statement -> T l s () - create (Statement bs vl) = - T $ do - Backend.Connection {..} <- lift $ ask - liftIO $ do - ps <- prepare bs - execute ps vl - -instance CreatePrivilege Admin - - --- * Statement -------------------------- - -data Statement = - Statement !ByteString ![Backend.Value] - deriving (Show) - - --- * Results Stream -------------------------- - --- | --- A stream of results, --- which fetches only those that you reach. --- --- It is implemented as a wrapper around 'ListT.ListT', --- hence all the utility functions of the list transformer API --- are applicable to this type. --- --- It uses the same trick as 'ST' to become impossible to be run outside of --- its transaction. --- Hence you can only access it while remaining in a transaction, --- and when the transaction finishes it safely gets automatically released. -newtype ResultsStream s m r = - ResultsStream (ListT.ListT m r) - deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.ListMonad, ListT.ListTrans) - diff --git a/library/HighSQL/CompositionT.hs b/library/HighSQL/CompositionT.hs deleted file mode 100644 index f214dbb476..0000000000 --- a/library/HighSQL/CompositionT.hs +++ /dev/null @@ -1,40 +0,0 @@ -module HighSQL.CompositionT where - -import HighSQL.Prelude - - --- | --- A monad transformer, --- which serves a purpose of detecting composition of the inner monad. -data T m r = - T Bool (m r) - --- | --- Unwrap into a boolean signifying whether the base monad is a composition and --- the base monad itself. -run :: T m r -> (Bool, m r) -run (T c m) = (c, m) - -instance Monad m => Monad (T m) where - return a = - T False (return a) - (>>=) (T _ m) k = - T True (m >>= \a -> case k a of T _ m' -> m') - -instance Functor f => Functor (T f) where - fmap f (T c m) = T c (fmap f m) - -instance Applicative f => Applicative (T f) where - pure a = - T False (pure a) - (<*>) (T _ a) (T _ b) = - T True (a <*> b) - -instance MonadTrans T where - lift m = - T False m - -instance MonadIO m => MonadIO (T m) where - liftIO io = - T False (liftIO io) - diff --git a/library/HighSQL/Conversion.hs b/library/HighSQL/Conversion.hs deleted file mode 100644 index 21d76e27e3..0000000000 --- a/library/HighSQL/Conversion.hs +++ /dev/null @@ -1,139 +0,0 @@ --- | --- An open API for implementation of specific backend drivers. -module HighSQL.Conversion where - -import HighSQL.Prelude -import Language.Haskell.TH -import qualified Data.Text as Text -import qualified HighSQL.Backend as Backend - - --- * Value -------------------------- - -class Value a where - toValue :: a -> Backend.Value - fromValue :: Backend.Value -> Maybe a - --- Generate standard instances using Template Haskell: -let - inst :: Name -> Dec - inst t = - InstanceD [] (AppT (ConT ''Value) (ConT t)) [d1, d2] - where - c = - mkName $ "Backend." ++ nameBase t - d1 = - FunD 'toValue [Clause [] (NormalB (ConE c)) []] - d2 = - FunD 'fromValue [c1, c2] - where - c1 = - Clause [p] (NormalB e) [] - where - p = ConP c [VarP v] - v = mkName "a" - e = AppE (ConE 'Just) (VarE v) - c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] - in - mapM (return . inst) - [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, - ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, ''Int32, - ''Word64, ''Word32, ''ByteString, ''Text] - -instance Value String where - toValue = Backend.Text . Text.pack - fromValue = \case Backend.Text a -> Just (Text.unpack a); _ -> Nothing - -instance Value Word where - toValue = Backend.Word64 . fromIntegral - fromValue = \case Backend.Word64 a -> Just (fromIntegral a); _ -> Nothing - -instance Value Int where - toValue = Backend.Int64 . fromIntegral - fromValue = \case Backend.Int64 a -> Just (fromIntegral a); _ -> Nothing - -instance Value a => Value (Maybe a) where - toValue = Backend.Maybe . fmap toValue - fromValue = \case Backend.Maybe a -> traverse fromValue a; _ -> Nothing - - --- * Row -------------------------- - -class Row r where - fromRow :: [Backend.Value] -> Maybe r - --- Generate tuple instaces using Template Haskell: -let - inst :: Int -> Dec - inst arity = - InstanceD constraints head [fromRowDec] - where - varNames = - [1 .. arity] >>= \i -> return (mkName ('_' : show i)) - varTypes = - map VarT varNames - constraints = - map (ClassP ''Value . pure) varTypes - head = - AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes) - fromRowDec = - FunD 'fromRow [c1, c2] - where - c1 = - Clause [ListP (map VarP varNames)] (NormalB e) [] - where - e = - foldQueue queue - where - con = ConE (tupleDataName arity) - queue = - (con :) $ - (VarE '(<$>) :) $ - intersperse (VarE '(<*>)) $ - map (AppE (VarE 'fromValue) . VarE) varNames - foldQueue = - \case - e : o : t -> UInfixE e o (foldQueue t) - e : [] -> e - _ -> $bug "Unexpected queue size" - c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] - in - mapM (return . inst) [2 .. 24] - --- Generate single-type instaces using Template Haskell: -let - inst :: Name -> Dec - inst n = - InstanceD [] (AppT (ConT ''Row) (ConT n)) [fromRowDec] - where - fromRowDec = - FunD 'fromRow [c1, c2] - where - c1 = - Clause [ListP [VarP v]] (NormalB e) [] - where - v = mkName "a" - e = AppE (VarE 'fromValue) (VarE v) - c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] - in - mapM (return . inst) - [''NominalDiffTime, ''UTCTime, ''ZonedTime, ''TimeOfDay, ''LocalTime, - ''Day, ''Rational, ''Double, ''Bool, ''Char, ''Integer, ''Int64, - ''Int32, ''Word64, ''Word32, ''ByteString, ''Text] - -instance Row () where - fromRow = \case [] -> Just (); _ -> Nothing - -instance Row String where - fromRow = fmap Text.unpack . fromRow - -instance Row Word where - fromRow = fmap (fromIntegral :: Word64 -> Word) . fromRow - -instance Row Int where - fromRow = fmap (fromIntegral :: Int64 -> Int) . fromRow diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs deleted file mode 100644 index 2b82f0f26c..0000000000 --- a/library/HighSQL/QQ.hs +++ /dev/null @@ -1,104 +0,0 @@ -module HighSQL.QQ where - -import HighSQL.Prelude -import Language.Haskell.TH -import Language.Haskell.TH.Quote -import qualified HighSQL.QQ.Parser as Parser -import qualified HighSQL.API as API -import qualified HighSQL.Backend as Backend -import qualified HighSQL.Conversion as Conversion - - --- | --- Produces a lambda-expression, --- which takes as many parameters as there are placeholders in the statement --- and, depending on the statement kind, results in one of the following types: --- --- [@SELECT@] --- --- A stream of results, with 'API.T' as the inner monad: --- --- @'API.ResultsStream' s ('API.T' l s) r@ --- --- [@INSERT@] --- --- A transaction, --- which returns the possibly auto-incremented value --- (of the @id@ column typically): --- --- @'API.T' l s (Maybe Integer)@ --- --- [@UPDATE, DELETE@] --- --- A transaction, --- which returns the amount of affected rows: --- --- @'API.T' l s Integer@ --- --- [@CREATE, ALTER, DROP, TRUNCATE@] --- --- A unit transaction: --- --- @'API.T' l s ()@ --- --- Example: --- --- >write session $ do --- > artistIDMaybe <- ListT.head $ [q| SELECT id FROM artists WHERE name = ? |] "Metallica" --- > userIDMaybe <- ListT.head $ [q| SELECT id FROM users WHERE name = ? |] "Nikita Volkov" --- > forM_ ((,) <$> artistIDMaybe <*> userIDMaybe) $ \(artistID, userID) -> --- > [q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] artistID userID --- --- Of course, the same thing can be implemented a bit smarter: --- --- >write session $ sequence_ $ ListT.head $ do --- > artistID <- [q| SELECT id FROM artists WHERE name = ? |] "Metallica" --- > userID <- [q| SELECT id FROM users WHERE name = ? |] "Nikita Volkov" --- > return $ [q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] artistID userID --- --- In both examples above we execute a 'write' transaction, --- in which we query two tables and insert a row into a third one. -q :: QuasiQuoter -q = - QuasiQuoter - parseExp - (const $ fail "Pattern context is not supported") - (const $ fail "Type context is not supported") - (const $ fail "Declaration context is not supported") - - -parseExp :: String -> Q Exp -parseExp s = - do - (k, n) <- - either (fail . (showString "Parsing failure: ")) return (Parser.parse (fromString s)) - return $ fmapLamE (AppE (VarE (conName k))) (statementF s n) - where - conName = - \case - Parser.Select -> 'API.select - Parser.Update -> 'API.update - Parser.Insert -> 'API.insert - Parser.Delete -> 'API.update - Parser.Create -> 'API.create - Parser.Alter -> 'API.create - Parser.Drop -> 'API.create - Parser.Truncate -> 'API.create - --- | --- An expression of an arbitrary arg-length function, --- which produces a "API.Statement". -statementF :: String -> Int -> Exp -statementF s n = - LamE pats exp - where - vars = map (mkName . ('_' :) . show) [1 .. n] - pats = map VarP vars - exp = AppE (AppE (ConE 'API.Statement) (LitE (StringL s))) (ListE exps) - where - exps = map (AppE (VarE 'Conversion.toValue) . VarE) vars - -fmapLamE :: (Exp -> Exp) -> Exp -> Exp -fmapLamE f = - \case - LamE pats exp -> LamE pats (f exp) From e877f2b9861c9202e2864113e3c139a464ecd50a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 12 Oct 2014 18:00:14 +0400 Subject: [PATCH 0028/1204] Update description --- high-sql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/high-sql.cabal b/high-sql.cabal index 9a882fb331..b2eac5ec22 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -3,7 +3,7 @@ name: version: 0.1.0 synopsis: - A general high level and high quality API for relational databases + A minimalistic general high level API for relational databases description: category: Database From e940079a4cedb38f263dfc108ebe9ff9c3964504 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 12 Oct 2014 22:32:51 +0400 Subject: [PATCH 0029/1204] Reimplement Backend --- high-sql.cabal | 1 + library/HighSQL/Backend.hs | 153 ++++++++++++++++--------------------- library/HighSQL/Prelude.hs | 6 +- 3 files changed, 70 insertions(+), 90 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index b2eac5ec22..aeb5fca2ad 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -56,6 +56,7 @@ library text == 1.1.*, hashable == 1.2.*, -- control: + errors == 1.4.*, list-t >= 0.2.1 && < 0.3, mmorph == 1.0.*, monad-control == 0.3.*, diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 3c0ee7b3a7..f5ac3def09 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -2,108 +2,83 @@ -- An open API for implementation of specific backend drivers. module HighSQL.Backend where -import HighSQL.Prelude hiding (Error) +import HighSQL.Prelude import qualified Data.Text as Text import qualified Language.Haskell.TH as TH import qualified Data.Decimal as Decimal --- | --- A database interface. --- --- Implementations are provided by driver libraries. -data Backend = - Backend { - connect :: IO Connection - } - - -data Connection = - forall s. - Connection { - -- | - -- Start a transaction in a write mode if the flag is true. - beginTransaction :: Bool -> IO (), - -- | - -- Finish the transaction, - -- while releasing all the resources acquired with 'executeAndStream'. - -- - -- The boolean defines whether to commit the updates, - -- otherwise it rolls back. - finishTransaction :: Bool -> IO (), - -- | - -- If the backend supports statement preparation, - -- this function compiles a bytestring statement - -- with placeholders if it's not compiled already, - -- and otherwise returns the cached already compiled statement. - -- IOW, it implements memoization. - -- - -- If the backend does not support this, - -- then this function should simply be implemented as a 'return'. - prepare :: ByteString -> IO s, - -- | - -- Execute a statement with values for placeholders. - execute :: s -> [Value] -> IO (), - -- | - -- Execute a statement with values for placeholders, - -- returning the amount of affected rows. - executeCountingEffects :: s -> [Value] -> IO Integer, - -- | - -- Execute a statement with values for placeholders, - -- returning the possibly generated auto-incremented value. - executeIncrementing :: s -> [Value] -> IO (Maybe Integer), - -- | - -- Execute a statement with values and an expected results stream size. - -- The expected stream size can be used by the backend to determine - -- an optimal fetching method. - executeStreaming :: s -> [Value] -> Maybe Integer -> IO ResultSet, - -- | - -- Close the connection. - disconnect :: IO () - } - - -data Error = +data Failure b = -- | -- A transaction failed and should be retried. - TransactionError | + TransactionFailure | -- | -- Cannot connect to a server -- or the connection got interrupted. - ConnectionError Text | - -- | - -- A free-form backend-specific exception. - BackendError SomeException - deriving (Show, Typeable) + ConnectionFailure Text -instance Exception Error + +type M b = + ExceptT (Failure b) IO -- | --- A row width and a stream of values. --- The length of the stream must be a multiple of the row width. -type ResultSet = - (Int, ListT IO Value) +-- A width of a row and a stream of serialized values. +type ResultsStream = + (Int, ListT IO ByteString) + + +class Backend b where + -- | + -- An argument prepared for a statement. + type StatementArgument b + -- | + -- A raw value returned from the database. + data Result b + type Connection b + -- | + -- Open a connection using the backend's settings. + connect :: b -> M b (Connection b) + -- | + -- Close the connection. + disconnect :: Connection b -> M b () + -- | + -- If the backend supports statement preparation, + -- this function compiles a bytestring statement + -- with placeholders if it's not compiled already, + -- and otherwise returns the cached already compiled statement. + -- IOW, it implements memoization. + -- + -- If the backend does not support this, + -- then this function should simply be implemented as a 'return'. + prepare :: ByteString -> Connection b -> M b s + -- | + -- Execute a statement with values for placeholders. + execute :: ByteString -> [StatementArgument b] -> Connection b -> M b () + -- | + -- Execute a statement with values for placeholders + -- and an expected results stream size. + -- The expected stream size can be used by the backend to determine + -- an optimal fetching method. + executeStreaming :: ByteString -> [StatementArgument b] -> Maybe Integer -> Connection b -> ListT (M b) r + -- | + -- Execute a statement with values for placeholders, + -- returning the amount of affected rows. + executeCountingEffects :: s -> [StatementArgument b] -> Connection b -> M b Integer + -- | + -- Start a transaction in a write mode if the flag is true. + beginTransaction :: Bool -> Connection b -> M b () + -- | + -- Finish the transaction, + -- while releasing all the resources acquired with 'executeAndStream'. + -- + -- The boolean defines whether to commit the updates, + -- otherwise it rolls back. + finishTransaction :: Bool -> Connection b -> M b () + + +class Backend b => Value v b where + renderArgument :: v -> StatementArgument b + parseResult :: Result b -> Maybe v -data Value = - Text !Text | - ByteString !ByteString | - Word32 !Word32 | - Word64 !Word64 | - Int32 !Int32 | - Int64 !Int64 | - Integer !Integer | - Char !Char | - Bool !Bool | - Double !Double | - Rational !Rational | - Day !Day | - LocalTime !LocalTime | - TimeOfDay !TimeOfDay | - ZonedTime !ZonedTime | - UTCTime !UTCTime | - NominalDiffTime !NominalDiffTime | - -- | Yes, this encodes @NULL@s. - Maybe !(Maybe Value) - deriving (Show, Data, Typeable, Generic) diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index b1d8245d86..6cf3e9c9e6 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -9,7 +9,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (left, right, tryJust, bool) +import BasePrelude as Exports hiding (left, right, tryJust, bool, isRight, isLeft) -- mtl-prelude ------------------------- @@ -19,6 +19,10 @@ import MTLPrelude as Exports hiding (shift) ------------------------- import Control.Monad.Morph as Exports +-- errors +------------------------- +import Control.Error as Exports + -- list-t ------------------------- import ListT as Exports (ListT) From 928f89c0654d2696ff7e578c1b65d216fc528d9f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 12 Oct 2014 22:32:56 +0400 Subject: [PATCH 0030/1204] Row --- high-sql.cabal | 1 + library/HighSQL/Row.hs | 58 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 library/HighSQL/Row.hs diff --git a/high-sql.cabal b/high-sql.cabal index aeb5fca2ad..5f0b900e1b 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -40,6 +40,7 @@ library other-modules: HighSQL.Prelude HighSQL.QQ.Parser + HighSQL.Row exposed-modules: HighSQL.Backend build-depends: diff --git a/library/HighSQL/Row.hs b/library/HighSQL/Row.hs new file mode 100644 index 0000000000..f0c621add9 --- /dev/null +++ b/library/HighSQL/Row.hs @@ -0,0 +1,58 @@ +{-# LANGUAGE UndecidableInstances #-} +module HighSQL.Row where + +import HighSQL.Prelude +import Language.Haskell.TH +import qualified Data.Text as Text +import qualified HighSQL.Backend as Backend + + +class Row r b where + parseResults :: [Backend.Result b] -> Maybe r + +instance Row () b where + parseResults = \case [] -> Just (); _ -> Nothing + +instance Backend.Value v b => Row v b where + parseResults = join . fmap (Backend.parseResult :: Backend.Result b -> Maybe v) . headMay + +-- Generate tuple instaces using Template Haskell: +let + inst :: Int -> Dec + inst arity = + InstanceD constraints head [fromRowDec] + where + varNames = + [1 .. arity] >>= \i -> return (mkName ('_' : show i)) + varTypes = + map VarT varNames + backendType = + VarT (mkName "b") + constraints = + map (\t -> ClassP ''Backend.Value [t, backendType]) varTypes + head = + AppT (AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes)) backendType + fromRowDec = + FunD 'parseResults [c1, c2] + where + c1 = + Clause [ListP (map VarP varNames)] (NormalB e) [] + where + e = + foldQueue queue + where + con = ConE (tupleDataName arity) + queue = + (con :) $ + (VarE '(<$>) :) $ + intersperse (VarE '(<*>)) $ + map (AppE (VarE 'Backend.parseResult) . VarE) varNames + foldQueue = + \case + e : o : t -> UInfixE e o (foldQueue t) + e : [] -> e + _ -> $bug "Unexpected queue size" + c2 = + Clause [WildP] (NormalB (ConE 'Nothing)) [] + in + mapM (return . inst) [2 .. 24] From a5d44188247ceaa68a2e601e0b93a7073ed497ea Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 12 Oct 2014 23:12:35 +0400 Subject: [PATCH 0031/1204] Cleanup deps --- high-sql.cabal | 9 ++++----- library/HighSQL/Backend.hs | 4 +--- library/HighSQL/Prelude.hs | 12 ++---------- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 5f0b900e1b..f23469ec31 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -51,23 +51,22 @@ library -- database: ex-pool == 0.2.*, -- data: - Decimal == 0.4.*, - time == 1.4.*, + time >= 1.4 && < 1.6, bytestring == 0.10.*, text == 1.1.*, hashable == 1.2.*, -- control: - errors == 1.4.*, list-t >= 0.2.1 && < 0.3, - mmorph == 1.0.*, monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: loch-th == 0.2.*, placeholders == 0.1.*, -- general: + safe >= 0.3.8 && < 0.4, mtl-prelude == 0.1.*, - base-prelude >= 0.1.3 && < 0.2 + base-prelude >= 0.1.3 && < 0.2, + base >= 4.5 && < 4.8 ghc-options: -funbox-strict-fields default-extensions: diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index f5ac3def09..e5129a2ede 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -3,9 +3,7 @@ module HighSQL.Backend where import HighSQL.Prelude -import qualified Data.Text as Text import qualified Language.Haskell.TH as TH -import qualified Data.Decimal as Decimal data Failure b = @@ -78,7 +76,7 @@ class Backend b where class Backend b => Value v b where - renderArgument :: v -> StatementArgument b + renderValue :: v -> StatementArgument b parseResult :: Result b -> Maybe v diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index 6cf3e9c9e6..f058756b62 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -15,13 +15,9 @@ import BasePrelude as Exports hiding (left, right, tryJust, bool, isRight, isLef ------------------------- import MTLPrelude as Exports hiding (shift) --- mmorph +-- safe ------------------------- -import Control.Monad.Morph as Exports - --- errors -------------------------- -import Control.Error as Exports +import Safe as Exports -- list-t ------------------------- @@ -39,10 +35,6 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) --- decimal -------------------------- -import Data.Decimal as Exports (Decimal, DecimalRaw) - -- time ------------------------- import Data.Time as Exports From 14981bf21e76a824d41217e1a39bba2c0773a163 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 13 Oct 2014 02:21:27 +0400 Subject: [PATCH 0032/1204] Partially reimplement API --- high-sql.cabal | 4 +- library/HighSQL/API.hs | 288 +++++++++++++++++++++++++++++++++++++ library/HighSQL/Backend.hs | 51 +++---- library/HighSQL/Prelude.hs | 4 + library/HighSQL/Row.hs | 10 +- 5 files changed, 320 insertions(+), 37 deletions(-) create mode 100644 library/HighSQL/API.hs diff --git a/high-sql.cabal b/high-sql.cabal index f23469ec31..bfa2c5ddf5 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -41,6 +41,7 @@ library HighSQL.Prelude HighSQL.QQ.Parser HighSQL.Row + HighSQL.API exposed-modules: HighSQL.Backend build-depends: @@ -53,7 +54,7 @@ library -- data: time >= 1.4 && < 1.6, bytestring == 0.10.*, - text == 1.1.*, + text >= 1.1 && < 1.3, hashable == 1.2.*, -- control: list-t >= 0.2.1 && < 0.3, @@ -64,6 +65,7 @@ library placeholders == 0.1.*, -- general: safe >= 0.3.8 && < 0.4, + mmorph == 1.0.*, mtl-prelude == 0.1.*, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs new file mode 100644 index 0000000000..e06673ab37 --- /dev/null +++ b/library/HighSQL/API.hs @@ -0,0 +1,288 @@ +module HighSQL.API where + +import HighSQL.Prelude hiding (read, Read, write, Write, Error) +import qualified Data.Pool as Pool +import qualified HighSQL.Backend as Backend +import qualified HighSQL.Row as Row +import qualified ListT + + +-- * Pool +------------------------- + +-- | +-- A pool of connections to the database. +newtype Pool b = + Pool (Pool.Pool (Backend.Connection b)) + +-- | +-- Pool initization settings. +data Settings = + Settings { + -- | + -- The number of stripes (distinct sub-pools) to maintain. + -- The smallest acceptable value is 1. + striping1 :: Word32, + -- | + -- The maximum number of connections to keep open per a pool stripe. + -- The smallest acceptable value is 1. + -- Requests for connections will block if this limit is reached + -- on a single stripe, + -- even if other stripes have idle connections available. + striping2 :: Word32, + -- | + -- The amount of time for which an unused connection is kept open. + -- The smallest acceptable value is 0.5 seconds. + connectionTimeout :: NominalDiffTime + } + +-- | +-- Initialize a pool given a backend and settings +-- and run an IO computation with it, +-- while automating the resource management. +withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a +withPool b s = + bracket acquire release + where + acquire = + do + pool <- + Pool.createPool + (Backend.connect b) (Backend.disconnect) + (striping1 s) (connectionTimeout s) (striping2 s) + return (Pool pool) + release (Pool pool) = + Pool.purgePool pool + +-- * Error +------------------------- + +-- | +-- The only exception type that this API can raise. +data Error = + -- | + -- Cannot connect to a server + -- or the connection got interrupted. + Disconnected Text | + -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + ResultParsingError ByteString TypeRep + deriving (Show, Typeable) + +instance Exception Error + + + + +-- * Transaction +------------------------- + +-- | +-- A transaction with a level @l@, +-- running on an anonymous state-thread @s@ +-- and gaining a result @r@. +newtype Transaction b l s r = + Transaction (ReaderT (Backend.Connection b) IO r) + deriving (Functor, Applicative, Monad) + +-- | +-- Execute a transaction using a connections pool. +-- Do it in the atomic mode if the first flag is true +-- and in the write mode if the second one is true. +-- +-- * Automatically retries the transaction in case of a +-- 'Backend.TransactionConflict' exception. +-- +-- * Rethrows all the other exceptions. +transaction :: (Backend.Backend b) => Bool -> Bool -> Pool b -> (forall s. Transaction b l s r) -> IO r +transaction a w (Pool p) (Transaction t) = + do + e <- try $ Pool.withResource p $ loop + case e of + Left (Backend.Disconnected t) -> + throwIO (Disconnected t) + Left (Backend.TransactionConflict) -> + $bug "Unexpected TransactionConflict" + Right r -> + return r + where + loop c = + do + Backend.beginTransaction a w c + e <- try $ runReaderT t c + case e of + Left Backend.TransactionConflict -> + do + Backend.finishTransaction False c + loop c + Left e -> + do + Backend.finishTransaction False c + throwIO e + Right r -> + do + Backend.finishTransaction True c + return r + + +-- ** Levels +------------------------- + +data Read + +-- -- | +-- -- Execute a transaction on a connections pool. +-- -- +-- -- Requires minimal locking from the database, +-- -- however you can only execute the \"SELECT\" statements in it. +-- -- The API ensures of that on the type-level. +-- read :: Pool -> (forall s. Transaction Read s r) -> IO r +-- read = transaction False + + +data Write + +-- -- | +-- -- Execute a transaction on a connections pool. +-- -- +-- -- Allows to execute the \"SELECT\", \"UPDATE\", \"INSERT\" +-- -- and \"DELETE\" statements. +-- -- However, compared to 'read', this transaction requires the database to choose +-- -- a more resource-demanding locking strategy. +-- write :: Pool -> (forall s. Transaction Write s r) -> IO r +-- write = transaction True + + +data Admin + +-- -- | +-- -- Execute a transaction on a connections pool. +-- -- +-- -- Same as 'write', but allows you to perform any kind of statements, +-- -- including \"CREATE\", \"DROP\" and \"ALTER\". +-- admin :: Pool -> (forall s. Transaction Admin s r) -> IO r +-- admin = transaction True + + +-- ** Privileges +------------------------- + +-- | +-- Produce a results stream from the statement. +select :: + forall b l s r. + (SelectPrivilege l, Row.Row b r, Backend.Backend b, Typeable r) => + Statement b -> ResultsStream s (Transaction b l s) r +select (bs, vl) = + do + (w, s) <- + lift $ Transaction $ do + connection <- ask + liftIO $ do + Backend.executeStreaming bs vl Nothing connection + l <- ResultsStream $ hoist (Transaction . liftIO) $ replicateM w s + maybe throwParsingError return $ Row.parseResults l + where + throwParsingError = + ResultsStream $ lift $ Transaction $ liftIO $ throwIO $ + ResultParsingError bs (typeOf (undefined :: r)) + +-- | +-- \"SELECT\" +class SelectPrivilege l + +instance SelectPrivilege Read +instance SelectPrivilege Write +instance SelectPrivilege Admin + + +-- | +-- \"UPDATE\", \"INSERT\", \"DELETE\" +class UpdatePrivilege l + +instance UpdatePrivilege Write +instance UpdatePrivilege Admin + +-- | +-- Execute and count the amount of affected rows. +update :: (UpdatePrivilege l, Backend.Backend b) => Statement b -> Transaction b l s Integer +update (bs, vl) = + Transaction $ do + connection <- ask + liftIO $ do + Backend.executeCountingEffects bs vl connection + +-- | +-- Execute and return the possibly auto-incremented number. +insert :: (UpdatePrivilege l, Backend.Backend b, Backend.Mapping b Integer) => Statement b -> Transaction b l s (Maybe Integer) +insert (bs, vl) = + Transaction $ do + connection <- ask + liftIO $ do + (w, l) <- Backend.executeStreaming bs vl (Just 1) connection + case w of + 1 -> do + traverse (maybe throwParsingError return . Row.parseResults . pure) =<< ListT.head l + _ -> $bug "Unexpected result" + where + throwParsingError = + liftIO $ throwIO $ ResultParsingError bs (typeOf (undefined :: Integer)) + + +-- | +-- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" +class CreatePrivilege l + +instance CreatePrivilege Admin + +create :: (CreatePrivilege l, Backend.Backend b) => Statement b -> Transaction b l s () +create (bs, vl) = + Transaction $ do + connection <- ask + liftIO $ do + Backend.execute bs vl connection + + +-- * Statement +------------------------- + +type Statement b = + (ByteString, [Backend.StatementArgument b]) + +mkStatement :: forall b. ByteString -> [Value b] -> Statement b +mkStatement sql values = + (,) sql (map renderValue values) + where + renderValue (Value v) = + Backend.renderValue v :: Backend.StatementArgument b + +data Value b = + forall v. (Backend.Mapping b v) => Value !v + + +-- * Results Stream +------------------------- + +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- It is implemented as a wrapper around 'ListT.ListT', +-- hence all the utility functions of the list transformer API +-- are applicable to this type. +-- +-- It uses the same trick as 'ST' to become impossible to be +-- executed outside of its transaction. +-- Hence you can only access it while remaining in a transaction, +-- and, when the transaction finishes, +-- all the acquired resources get automatically released. +newtype ResultsStream s m r = + ResultsStream (ListT.ListT m r) + deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, + Monoid, ListT.ListMonad) + +instance ListT.ListTrans (ResultsStream s) where + uncons = + unsafeCoerce + (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index e5129a2ede..a941cbc9fd 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -6,18 +6,16 @@ import HighSQL.Prelude import qualified Language.Haskell.TH as TH -data Failure b = +data TransactionError = -- | - -- A transaction failed and should be retried. - TransactionFailure | + -- The transaction failed and should be retried. + TransactionConflict | -- | - -- Cannot connect to a server - -- or the connection got interrupted. - ConnectionFailure Text + -- The connection got interrupted. + Disconnected Text + deriving (Show, Typeable) - -type M b = - ExceptT (Failure b) IO +instance Exception TransactionError -- | @@ -29,53 +27,44 @@ type ResultsStream = class Backend b where -- | -- An argument prepared for a statement. - type StatementArgument b + data StatementArgument b -- | -- A raw value returned from the database. data Result b - type Connection b + data Connection b -- | -- Open a connection using the backend's settings. - connect :: b -> M b (Connection b) + connect :: b -> IO (Connection b) -- | -- Close the connection. - disconnect :: Connection b -> M b () - -- | - -- If the backend supports statement preparation, - -- this function compiles a bytestring statement - -- with placeholders if it's not compiled already, - -- and otherwise returns the cached already compiled statement. - -- IOW, it implements memoization. - -- - -- If the backend does not support this, - -- then this function should simply be implemented as a 'return'. - prepare :: ByteString -> Connection b -> M b s + disconnect :: Connection b -> IO () -- | -- Execute a statement with values for placeholders. - execute :: ByteString -> [StatementArgument b] -> Connection b -> M b () + execute :: ByteString -> [StatementArgument b] -> Connection b -> IO () -- | -- Execute a statement with values for placeholders -- and an expected results stream size. -- The expected stream size can be used by the backend to determine -- an optimal fetching method. - executeStreaming :: ByteString -> [StatementArgument b] -> Maybe Integer -> Connection b -> ListT (M b) r + executeStreaming :: ByteString -> [StatementArgument b] -> Maybe Integer -> Connection b -> IO (Int, ListT IO (Result b)) -- | -- Execute a statement with values for placeholders, -- returning the amount of affected rows. - executeCountingEffects :: s -> [StatementArgument b] -> Connection b -> M b Integer + executeCountingEffects :: ByteString -> [StatementArgument b] -> Connection b -> IO Integer -- | - -- Start a transaction in a write mode if the flag is true. - beginTransaction :: Bool -> Connection b -> M b () + -- Start a transaction in an atomic mode if the first flag is true + -- and in a write mode if the second one is true. + beginTransaction :: Bool -> Bool -> Connection b -> IO () -- | -- Finish the transaction, - -- while releasing all the resources acquired with 'executeAndStream'. + -- while releasing all the resources acquired with 'executeStreaming'. -- -- The boolean defines whether to commit the updates, -- otherwise it rolls back. - finishTransaction :: Bool -> Connection b -> M b () + finishTransaction :: Bool -> Connection b -> IO () -class Backend b => Value v b where +class Backend b => Mapping b v where renderValue :: v -> StatementArgument b parseResult :: Result b -> Maybe v diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index f058756b62..bd13ca4e24 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -15,6 +15,10 @@ import BasePrelude as Exports hiding (left, right, tryJust, bool, isRight, isLef ------------------------- import MTLPrelude as Exports hiding (shift) +-- mmorph +------------------------- +import Control.Monad.Morph as Exports + -- safe ------------------------- import Safe as Exports diff --git a/library/HighSQL/Row.hs b/library/HighSQL/Row.hs index f0c621add9..239cc509c1 100644 --- a/library/HighSQL/Row.hs +++ b/library/HighSQL/Row.hs @@ -7,13 +7,13 @@ import qualified Data.Text as Text import qualified HighSQL.Backend as Backend -class Row r b where +class Row b r where parseResults :: [Backend.Result b] -> Maybe r -instance Row () b where +instance Row b () where parseResults = \case [] -> Just (); _ -> Nothing -instance Backend.Value v b => Row v b where +instance Backend.Mapping b v => Row b v where parseResults = join . fmap (Backend.parseResult :: Backend.Result b -> Maybe v) . headMay -- Generate tuple instaces using Template Haskell: @@ -29,9 +29,9 @@ let backendType = VarT (mkName "b") constraints = - map (\t -> ClassP ''Backend.Value [t, backendType]) varTypes + map (\t -> ClassP ''Backend.Mapping [backendType, t]) varTypes head = - AppT (AppT (ConT ''Row) (foldl AppT (TupleT arity) varTypes)) backendType + AppT (AppT (ConT ''Row) backendType) (foldl AppT (TupleT arity) varTypes) fromRowDec = FunD 'parseResults [c1, c2] where From fec1f2ba427eae1a29d5cffd5068027617a9afdc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 13 Oct 2014 23:49:53 +0400 Subject: [PATCH 0033/1204] New API with example --- Example.hs | 40 +++ high-sql.cabal | 2 +- library/HighSQL/API.hs | 357 ++++++++++++----------- library/HighSQL/Backend.hs | 83 ++++-- library/HighSQL/{Row.hs => RowParser.hs} | 18 +- 5 files changed, 293 insertions(+), 207 deletions(-) create mode 100644 Example.hs rename library/HighSQL/{Row.hs => RowParser.hs} (76%) diff --git a/Example.hs b/Example.hs new file mode 100644 index 0000000000..2e2d5dc007 --- /dev/null +++ b/Example.hs @@ -0,0 +1,40 @@ + + + +main = + do + H.withPool $ \pool -> do + artistID <- + join $ fmap ListT.head $ H.runExecutor pool $ H.selectExecutor $ + [H.q| SELECT id FROM artists WHERE name = ? |] + "Metallica" + userID <- + join $ fmap ListT.head $ H.runExecutor pool $ H.selectExecutor $ + [H.q| SELECT id FROM users WHERE name = ? |] + "Nikita Volkov" + + undefined + + + +main = + do + H.withPool $ \pool -> do + H.runExecutor pool $ do + H.writeTransactionExecutor H.Serialized $ do + artistIDMaybe <- + H.selectTransaction $ + [H.q| SELECT id FROM artists WHERE name = ? |] + "Metallica" + userIDMaybe <- + H.selectTransaction $ + [H.q| SELECT id FROM users WHERE name = ? |] + "Nikita Volkov" + forM_ ((,) <$> artistIDMaybe <*> userIDMaybe) $ \(artistID, userID) -> do + H.insertTransaction $ + [H.q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] + artistID + userID + + + diff --git a/high-sql.cabal b/high-sql.cabal index bfa2c5ddf5..3b47f030cb 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -40,7 +40,7 @@ library other-modules: HighSQL.Prelude HighSQL.QQ.Parser - HighSQL.Row + HighSQL.RowParser HighSQL.API exposed-modules: HighSQL.Backend diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs index e06673ab37..0e36cb1508 100644 --- a/library/HighSQL/API.hs +++ b/library/HighSQL/API.hs @@ -3,17 +3,24 @@ module HighSQL.API where import HighSQL.Prelude hiding (read, Read, write, Write, Error) import qualified Data.Pool as Pool import qualified HighSQL.Backend as Backend -import qualified HighSQL.Row as Row +import qualified HighSQL.RowParser as RowParser import qualified ListT +type Backend = + Backend.Backend + +type RowParser = + RowParser.RowParser + + -- * Pool ------------------------- -- | -- A pool of connections to the database. -newtype Pool b = - Pool (Pool.Pool (Backend.Connection b)) +type Pool b = + Pool.Pool (Backend.Connection b) -- | -- Pool initization settings. @@ -40,9 +47,9 @@ data Settings = -- Initialize a pool given a backend and settings -- and run an IO computation with it, -- while automating the resource management. -withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a +withPool :: Backend b => b -> Settings -> (Pool b -> IO a) -> IO a withPool b s = - bracket acquire release + bracket acquire Pool.purgePool where acquire = do @@ -50,9 +57,8 @@ withPool b s = Pool.createPool (Backend.connect b) (Backend.disconnect) (striping1 s) (connectionTimeout s) (striping2 s) - return (Pool pool) - release (Pool pool) = - Pool.purgePool pool + return pool + -- * Error ------------------------- @@ -63,7 +69,7 @@ data Error = -- | -- Cannot connect to a server -- or the connection got interrupted. - Disconnected Text | + ConnectionLost Text | -- | -- Attempt to parse a statement execution result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. @@ -73,6 +79,67 @@ data Error = instance Exception Error +-- * Executors +------------------------- + +-- | +-- A connections 'Pool' context monad. +type Executor b = + ReaderT (Pool b) IO + +executorIO :: Pool b -> Executor b r -> IO r +executorIO = + flip runReaderT + +writeTransactionExecutor :: + Backend b => + Backend.IsolationLevel -> (forall s. Transaction b Write s r) -> Executor b r +writeTransactionExecutor isolation (Transaction t) = + withConnectionExecutor $ \c -> + Backend.inTransaction (isolation, True) (runReaderT t c) c + +streamingExecutor :: + forall b r. + Backend b => RowParser b r => Typeable r => + Backend.Statement b -> Executor b (ListT (Executor b) r) +streamingExecutor s = + withConnectionExecutor $ \c -> do + (w, s) <- Backend.executeAndStream s c + return $ do + row <- hoist lift $ replicateM w s + maybe (lift $ lift $ throwIO parsingError) return $ RowParser.parse row + where + parsingError = + ResultParsingError (fst s) (typeOf (undefined :: r)) + +countingExecutor :: + Backend b => + Backend.Statement b -> Executor b Integer +countingExecutor s = + withConnectionExecutor $ \c -> do + Backend.executeAndCountEffects s c + +generatingExecutor :: + Backend b => Backend.Mapping b Integer => + Backend.Statement b -> Executor b (Maybe Integer) +generatingExecutor s = + streamingExecutor s >>= ListT.head + +unitExecutor :: + Backend b => + Backend.Statement b -> Executor b () +unitExecutor s = + withConnectionExecutor $ \c -> do + Backend.execute s c + +withConnectionExecutor :: + (Backend.Connection b -> IO r) -> Executor b r +withConnectionExecutor f = + ReaderT $ \pool -> Pool.withResource pool $ \c -> handle handler $ f c + where + handler = + \case + Backend.ConnectionLost m -> throwIO $ ConnectionLost m -- * Transaction @@ -86,203 +153,155 @@ newtype Transaction b l s r = Transaction (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) +streamingTransaction :: + Backend b => RowParser b r => ReadingPrivilege l => + Backend.Statement b -> Transaction b l s (ListT (Transaction b l s) r) +streamingTransaction statement = + Transaction $ ReaderT $ \connection -> + $notImplemented + -- | --- Execute a transaction using a connections pool. --- Do it in the atomic mode if the first flag is true --- and in the write mode if the second one is true. +-- Perform a select, while utilizing the database cursors functionality, +-- which allows to query for virtually unlimited result sets +-- in constant memory by utilizing streaming. -- --- * Automatically retries the transaction in case of a --- 'Backend.TransactionConflict' exception. +-- However using this function for small result sets isn't beneficial, +-- since it introduces a small overhead due to bookkeeping related to cursors. -- --- * Rethrows all the other exceptions. -transaction :: (Backend.Backend b) => Bool -> Bool -> Pool b -> (forall s. Transaction b l s r) -> IO r -transaction a w (Pool p) (Transaction t) = - do - e <- try $ Pool.withResource p $ loop - case e of - Left (Backend.Disconnected t) -> - throwIO (Disconnected t) - Left (Backend.TransactionConflict) -> - $bug "Unexpected TransactionConflict" - Right r -> - return r - where - loop c = - do - Backend.beginTransaction a w c - e <- try $ runReaderT t c - case e of - Left Backend.TransactionConflict -> - do - Backend.finishTransaction False c - loop c - Left e -> - do - Backend.finishTransaction False c - throwIO e - Right r -> - do - Backend.finishTransaction True c - return r +-- All resources are automatically managed +-- and get released on transaction finish. +streamingWithCursorTransaction :: + Backend b => RowParser b r => ReadingPrivilege l => + Backend.Statement b -> Transaction b l s (TransactionListT s (Transaction b l s) r) +streamingWithCursorTransaction = + undefined --- ** Levels +-- * Results Stream ------------------------- -data Read - --- -- | --- -- Execute a transaction on a connections pool. --- -- --- -- Requires minimal locking from the database, --- -- however you can only execute the \"SELECT\" statements in it. --- -- The API ensures of that on the type-level. --- read :: Pool -> (forall s. Transaction Read s r) -> IO r --- read = transaction False - +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- It is implemented as a wrapper around 'ListT.ListT', +-- hence all the utility functions of the list transformer API +-- are applicable to this type. +-- +-- It uses the same trick as 'ST' to become impossible to be +-- executed outside of its transaction. +-- Hence you can only access it while remaining in a transaction, +-- and, when the transaction finishes, +-- all the acquired resources get automatically released. +newtype TransactionListT s m r = + TransactionListT (ListT.ListT m r) + deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, + Monoid, ListT.ListMonad) -data Write +instance ListT.ListTrans (TransactionListT s) where + uncons = + unsafeCoerce + (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) --- -- | --- -- Execute a transaction on a connections pool. --- -- --- -- Allows to execute the \"SELECT\", \"UPDATE\", \"INSERT\" --- -- and \"DELETE\" statements. --- -- However, compared to 'read', this transaction requires the database to choose --- -- a more resource-demanding locking strategy. --- write :: Pool -> (forall s. Transaction Write s r) -> IO r --- write = transaction True +-- ** Levels +------------------------- -data Admin +-- | +-- Requires minimal locking from the database, +-- however you can only execute the \"SELECT\" statements in it. +data Read --- -- | --- -- Execute a transaction on a connections pool. --- -- --- -- Same as 'write', but allows you to perform any kind of statements, --- -- including \"CREATE\", \"DROP\" and \"ALTER\". --- admin :: Pool -> (forall s. Transaction Admin s r) -> IO r --- admin = transaction True +-- | +-- Allows you to perform any kind of statements, +-- including \"SELECT\", \"UPDATE\", \"INSERT\", \"DELETE\", +-- \"CREATE\", \"DROP\" and \"ALTER\". +-- +-- However, compared to 'Read', +-- this transaction level requires the database to choose +-- a more resource-demanding locking strategy. +data Write -- ** Privileges ------------------------- --- | --- Produce a results stream from the statement. -select :: - forall b l s r. - (SelectPrivilege l, Row.Row b r, Backend.Backend b, Typeable r) => - Statement b -> ResultsStream s (Transaction b l s) r -select (bs, vl) = - do - (w, s) <- - lift $ Transaction $ do - connection <- ask - liftIO $ do - Backend.executeStreaming bs vl Nothing connection - l <- ResultsStream $ hoist (Transaction . liftIO) $ replicateM w s - maybe throwParsingError return $ Row.parseResults l - where - throwParsingError = - ResultsStream $ lift $ Transaction $ liftIO $ throwIO $ - ResultParsingError bs (typeOf (undefined :: r)) - -- | -- \"SELECT\" -class SelectPrivilege l - -instance SelectPrivilege Read -instance SelectPrivilege Write -instance SelectPrivilege Admin +class ReadingPrivilege l +instance ReadingPrivilege Read +instance ReadingPrivilege Write -- | --- \"UPDATE\", \"INSERT\", \"DELETE\" -class UpdatePrivilege l +-- \"UPDATE\", \"INSERT\", \"DELETE\", +-- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" +class ModificationPrivilege l -instance UpdatePrivilege Write -instance UpdatePrivilege Admin +instance ModificationPrivilege Write --- | --- Execute and count the amount of affected rows. -update :: (UpdatePrivilege l, Backend.Backend b) => Statement b -> Transaction b l s Integer -update (bs, vl) = - Transaction $ do - connection <- ask - liftIO $ do - Backend.executeCountingEffects bs vl connection --- | --- Execute and return the possibly auto-incremented number. -insert :: (UpdatePrivilege l, Backend.Backend b, Backend.Mapping b Integer) => Statement b -> Transaction b l s (Maybe Integer) -insert (bs, vl) = - Transaction $ do - connection <- ask - liftIO $ do - (w, l) <- Backend.executeStreaming bs vl (Just 1) connection - case w of - 1 -> do - traverse (maybe throwParsingError return . Row.parseResults . pure) =<< ListT.head l - _ -> $bug "Unexpected result" - where - throwParsingError = - liftIO $ throwIO $ ResultParsingError bs (typeOf (undefined :: Integer)) +-- * Statement +------------------------- +-- type Backend.Statement b = +-- (ByteString, [Backend.StatementArgument b]) --- | --- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" -class CreatePrivilege l +-- data Backend.Statement b = +-- Statement !ByteString ![Backend.StatementArgument b] -instance CreatePrivilege Admin +-- mkStatement :: forall b. ByteString -> [Value b] -> Backend.Statement b +-- mkStatement sql values = +-- (,) sql (map renderValue values) +-- where +-- renderValue (Value v) = +-- Backend.renderValue v :: Backend.StatementArgument b -create :: (CreatePrivilege l, Backend.Backend b) => Statement b -> Transaction b l s () -create (bs, vl) = - Transaction $ do - connection <- ask - liftIO $ do - Backend.execute bs vl connection +-- data Value b = +-- forall v. (Backend.Mapping b v) => Value !v --- * Statement +-- * Aliases ------------------------- -type Statement b = - (ByteString, [Backend.StatementArgument b]) +-- | +-- A short form alias to 'Executor'. +type E b = + Executor b -mkStatement :: forall b. ByteString -> [Value b] -> Statement b -mkStatement sql values = - (,) sql (map renderValue values) - where - renderValue (Value v) = - Backend.renderValue v :: Backend.StatementArgument b +-- | +-- A short form alias to 'executorIO'. +runE :: Pool b -> E b r -> IO r +runE = executorIO -data Value b = - forall v. (Backend.Mapping b v) => Value !v +-- | +-- A short form alias to 'writeTransactionExecutor'. +writeE :: Backend b => Backend.IsolationLevel -> (forall s. T b W s r) -> E b r +writeE = writeTransactionExecutor +-- | +-- A short form alias to 'streamingExecutor'. +streamingE :: Typeable r => Backend b => RowParser b r => S b -> E b (ListT (E b) r) +streamingE = streamingExecutor --- * Results Stream -------------------------- +-- | +-- A short form alias to 'streamingTransaction'. +streamingT :: Backend b => RowParser b r => ReadingPrivilege l => S b -> T b l s (ListT (T b l s) r) +streamingT = streamingTransaction -- | --- A stream of results, --- which fetches only those that you reach. --- --- It is implemented as a wrapper around 'ListT.ListT', --- hence all the utility functions of the list transformer API --- are applicable to this type. --- --- It uses the same trick as 'ST' to become impossible to be --- executed outside of its transaction. --- Hence you can only access it while remaining in a transaction, --- and, when the transaction finishes, --- all the acquired resources get automatically released. -newtype ResultsStream s m r = - ResultsStream (ListT.ListT m r) - deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.ListMonad) +-- A short form alias to 'Transaction'. +type T = + Transaction -instance ListT.ListTrans (ResultsStream s) where - uncons = - unsafeCoerce - (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) +type W = + Write + +type R = + Read + +type TListT = + TransactionListT + +type S b = + Backend.Statement b diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index a941cbc9fd..83bcef7880 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -6,22 +6,45 @@ import HighSQL.Prelude import qualified Language.Haskell.TH as TH -data TransactionError = - -- | - -- The transaction failed and should be retried. - TransactionConflict | +data BackendError = + -- -- | + -- -- The transaction failed and should be retried. + -- TransactionConflict | -- | -- The connection got interrupted. - Disconnected Text + ConnectionLost Text deriving (Show, Typeable) -instance Exception TransactionError +instance Exception BackendError + + +-- | +-- For reference see +-- . +data IsolationLevel = + Serializable | + RepeatableReads | + ReadCommitted | + ReadUncommitted + + +-- | +-- An isolation level and a boolean, +-- defining, whether the transaction will perform the "write" operations. +type TransactionMode = + (IsolationLevel, Bool) -- | -- A width of a row and a stream of serialized values. -type ResultsStream = - (Int, ListT IO ByteString) +type ResultsStream b = + (Int, ListT IO (Result b)) + + +-- | +-- A template statement with values for placeholders. +type Statement b = + (ByteString, [StatementArgument b]) class Backend b where @@ -39,29 +62,32 @@ class Backend b where -- Close the connection. disconnect :: Connection b -> IO () -- | - -- Execute a statement with values for placeholders. - execute :: ByteString -> [StatementArgument b] -> Connection b -> IO () + -- Execute a statement. + execute :: Statement b -> Connection b -> IO () -- | - -- Execute a statement with values for placeholders - -- and an expected results stream size. - -- The expected stream size can be used by the backend to determine - -- an optimal fetching method. - executeStreaming :: ByteString -> [StatementArgument b] -> Maybe Integer -> Connection b -> IO (Int, ListT IO (Result b)) + -- Execute a statement + -- and stream the results. + executeAndStream :: Statement b -> Connection b -> IO (ResultsStream b) -- | - -- Execute a statement with values for placeholders, - -- returning the amount of affected rows. - executeCountingEffects :: ByteString -> [StatementArgument b] -> Connection b -> IO Integer + -- Execute a statement + -- and stream the results using a cursor. + -- This function will only be used from inside of transactions. + executeAndStreamWithCursor :: Statement b -> Connection b -> IO (ResultsStream b) -- | - -- Start a transaction in an atomic mode if the first flag is true - -- and in a write mode if the second one is true. - beginTransaction :: Bool -> Bool -> Connection b -> IO () - -- | - -- Finish the transaction, - -- while releasing all the resources acquired with 'executeStreaming'. - -- - -- The boolean defines whether to commit the updates, - -- otherwise it rolls back. - finishTransaction :: Bool -> Connection b -> IO () + -- Execute a statement, + -- returning the amount of affected rows. + executeAndCountEffects :: Statement b -> Connection b -> IO Integer + -- -- | + -- -- Start a transaction in the specified mode. + -- beginTransaction :: TransactionMode -> Connection b -> IO () + -- -- | + -- -- Finish the transaction, + -- -- while releasing all the resources acquired with 'executeAndStream'. + -- -- + -- -- The boolean defines whether to commit the updates, + -- -- otherwise it rolls back. + -- finishTransaction :: Bool -> Connection b -> IO () + inTransaction :: TransactionMode -> IO r -> Connection b -> IO r class Backend b => Mapping b v where @@ -69,3 +95,4 @@ class Backend b => Mapping b v where parseResult :: Result b -> Maybe v + diff --git a/library/HighSQL/Row.hs b/library/HighSQL/RowParser.hs similarity index 76% rename from library/HighSQL/Row.hs rename to library/HighSQL/RowParser.hs index 239cc509c1..bc1e5785bb 100644 --- a/library/HighSQL/Row.hs +++ b/library/HighSQL/RowParser.hs @@ -1,5 +1,5 @@ {-# LANGUAGE UndecidableInstances #-} -module HighSQL.Row where +module HighSQL.RowParser where import HighSQL.Prelude import Language.Haskell.TH @@ -7,14 +7,14 @@ import qualified Data.Text as Text import qualified HighSQL.Backend as Backend -class Row b r where - parseResults :: [Backend.Result b] -> Maybe r +class RowParser b r where + parse :: [Backend.Result b] -> Maybe r -instance Row b () where - parseResults = \case [] -> Just (); _ -> Nothing +instance RowParser b () where + parse = \case [] -> Just (); _ -> Nothing -instance Backend.Mapping b v => Row b v where - parseResults = join . fmap (Backend.parseResult :: Backend.Result b -> Maybe v) . headMay +instance Backend.Mapping b v => RowParser b v where + parse = join . fmap (Backend.parseResult :: Backend.Result b -> Maybe v) . headMay -- Generate tuple instaces using Template Haskell: let @@ -31,9 +31,9 @@ let constraints = map (\t -> ClassP ''Backend.Mapping [backendType, t]) varTypes head = - AppT (AppT (ConT ''Row) backendType) (foldl AppT (TupleT arity) varTypes) + AppT (AppT (ConT ''RowParser) backendType) (foldl AppT (TupleT arity) varTypes) fromRowDec = - FunD 'parseResults [c1, c2] + FunD 'parse [c1, c2] where c1 = Clause [ListP (map VarP varNames)] (NormalB e) [] From 2508b7294fcc88286b59758870e63ae8c9d0e7dd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 14 Oct 2014 22:59:32 +0400 Subject: [PATCH 0034/1204] New Transaction API --- Example.hs | 15 +++ high-sql.cabal | 1 + library/HighSQL/Backend.hs | 6 +- library/HighSQL/Transaction.hs | 189 +++++++++++++++++++++++++++++++++ 4 files changed, 208 insertions(+), 3 deletions(-) create mode 100644 library/HighSQL/Transaction.hs diff --git a/Example.hs b/Example.hs index 2e2d5dc007..9c8aeff170 100644 --- a/Example.hs +++ b/Example.hs @@ -36,5 +36,20 @@ main = artistID userID +main = + do + H.withPool $ \pool -> do + H.txIO pool (H.NoACID) $ do + H.noResultTx $ + [H.q| INSERT INTO users (name, birth_date, gender) VALUES (?, ?, ?) |] + "Nikita Volkov" + "1358-10-12" + (H.Enum Male) + + H.txIO pool (H.Write H.Serialized) $ do + artistID <- + H.streamWithCursorTx $ + [H.q| SELECT id FROM artists WHERE name = ? |] + ("Metallica") diff --git a/high-sql.cabal b/high-sql.cabal index 3b47f030cb..89991f19e3 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -41,6 +41,7 @@ library HighSQL.Prelude HighSQL.QQ.Parser HighSQL.RowParser + HighSQL.Transaction HighSQL.API exposed-modules: HighSQL.Backend diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index 83bcef7880..f40fdbe64c 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -2,11 +2,11 @@ -- An open API for implementation of specific backend drivers. module HighSQL.Backend where -import HighSQL.Prelude +import HighSQL.Prelude hiding (Error) import qualified Language.Haskell.TH as TH -data BackendError = +data Error = -- -- | -- -- The transaction failed and should be retried. -- TransactionConflict | @@ -15,7 +15,7 @@ data BackendError = ConnectionLost Text deriving (Show, Typeable) -instance Exception BackendError +instance Exception Error -- | diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs new file mode 100644 index 0000000000..4075c5bf19 --- /dev/null +++ b/library/HighSQL/Transaction.hs @@ -0,0 +1,189 @@ +module HighSQL.Transaction where + +import HighSQL.Prelude hiding (Read, Write, Error) +import qualified HighSQL.Backend as Backend +import qualified HighSQL.RowParser as RowParser +import qualified ListT + + +-- | +-- A transaction with a level @l@, +-- running on an anonymous state-thread @s@ +-- and gaining a result @r@. +newtype Transaction b l s r = + Transaction (ReaderT (Backend.Connection b) IO r) + deriving (Functor, Applicative, Monad) + + +class Level l where + run :: Backend b => Backend.Connection b -> l -> (forall s. Transaction b l s r) -> IO r + +instance Level NoLocking where + run c NoLocking (Transaction r) = + handle backendHandler $ runReaderT r c + +instance Level Read where + run c (Read isolation) (Transaction r) = + handle backendHandler $ Backend.inTransaction (isolation, False) (runReaderT r c) c + +instance Level Write where + run c (Write isolation) (Transaction r) = + handle backendHandler $ Backend.inTransaction (isolation, True) (runReaderT r c) c + + +backendHandler :: Backend.Error -> IO a +backendHandler = + \case + Backend.ConnectionLost t -> throwIO $ ConnectionLost t + + +-- * Locking Levels +------------------------- + +-- | +-- A level requiring no locking by the transaction +-- and hence providing no ACID guarantees. +-- Essentially this means that there will be no +-- traditional transaction established on the backend. +data NoLocking = + NoLocking + +-- | +-- A level requiring minimal locking from the database, +-- however it only allows to execute the \"SELECT\" statements. +data Read = + Read (Backend.IsolationLevel) + +-- | +-- A level, which allows to perform any kind of statements, +-- including \"SELECT\", \"UPDATE\", \"INSERT\", \"DELETE\", +-- \"CREATE\", \"DROP\" and \"ALTER\". +-- +-- However, compared to 'Read', +-- it requires the database to choose +-- a more resource-demanding locking strategy. +data Write = + Write (Backend.IsolationLevel) + + +-- * Privileges +------------------------- + +class CursorsPrivilege l + +instance CursorsPrivilege Read +instance CursorsPrivilege Write + +class ModificationPrivilege l + +instance ModificationPrivilege Write +instance ModificationPrivilege NoLocking + + +-- * Results Stream +------------------------- + +type ResultsStream b l s r = + TransactionListT s (Transaction b l s) r + +-- | +-- A select of results, +-- which fetches only those that you reach. +-- +-- It is implemented as a wrapper around 'ListT.ListT', +-- hence all the utility functions of the list transformer API +-- are applicable to this type. +-- +-- It uses the same trick as 'ST' to become impossible to be +-- executed outside of its transaction. +-- Hence you can only access it while remaining in a transaction, +-- and, when the transaction finishes, +-- all the acquired resources get automatically released. +newtype TransactionListT s m r = + TransactionListT (ListT.ListT m r) + deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, + Monoid, ListT.ListMonad) + +instance ListT.ListTrans (TransactionListT s) where + uncons = + unsafeCoerce + (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) + + +-- * Error +------------------------- + +-- | +-- The only exception type that this API can raise. +data Error = + -- | + -- Cannot connect to a server + -- or the connection got interrupted. + ConnectionLost Text | + -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + ResultParsingError ByteString TypeRep + deriving (Show, Typeable) + +instance Exception Error + + +-- * Transactions +------------------------- + +type Backend = + Backend.Backend + +type RowParser = + RowParser.RowParser + +-- | +-- Execute a modification statement producing no result. +modify :: + Backend b => ModificationPrivilege l => + Backend.Statement b -> Transaction b l s () +modify s = + Transaction $ ReaderT $ Backend.execute s + +-- | +-- Execute a statement, which generates an auto-increment value. +modifyAndGenerate :: + Backend b => Backend.Mapping b Integer => ModificationPrivilege l => + Backend.Statement b -> Transaction b l s (Maybe Integer) +modifyAndGenerate s = + select s >>= ListT.head + +modifyAndCount :: + Backend b => Backend.Mapping b Integer => ModificationPrivilege l => + Backend.Statement b -> Transaction b l s Integer +modifyAndCount s = + Transaction $ ReaderT $ Backend.executeAndCountEffects s + +select :: + forall b l s r. + Backend b => RowParser b r => Typeable r => + Backend.Statement b -> Transaction b l s (ResultsStream b l s r) +select s = + Transaction $ ReaderT $ \c -> do + (w, s) <- Backend.executeAndStream s c + return $ TransactionListT $ hoist (Transaction . lift) $ do + row <- replicateM w s + maybe (lift $ throwIO parsingError) return $ RowParser.parse row + where + parsingError = + ResultParsingError (fst s) (typeOf (undefined :: r)) + +selectWithCursor :: + forall b l s r. + Backend b => RowParser b r => Typeable r => CursorsPrivilege l => + Backend.Statement b -> Transaction b l s (ResultsStream b l s r) +selectWithCursor s = + Transaction $ ReaderT $ \c -> do + (w, s) <- Backend.executeAndStreamWithCursor s c + return $ TransactionListT $ hoist (Transaction . lift) $ do + row <- replicateM w s + maybe (lift $ throwIO parsingError) return $ RowParser.parse row + where + parsingError = + ResultParsingError (fst s) (typeOf (undefined :: r)) From 1e686028db50b6d933d34c479c9bf5cd1c8719a4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 15 Oct 2014 00:28:49 +0400 Subject: [PATCH 0035/1204] Remove class --- library/HighSQL/Transaction.hs | 44 ++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs index 4075c5bf19..b20951a824 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/HighSQL/Transaction.hs @@ -14,22 +14,23 @@ newtype Transaction b l s r = Transaction (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) - -class Level l where - run :: Backend b => Backend.Connection b -> l -> (forall s. Transaction b l s r) -> IO r - -instance Level NoLocking where - run c NoLocking (Transaction r) = - handle backendHandler $ runReaderT r c - -instance Level Read where - run c (Read isolation) (Transaction r) = - handle backendHandler $ Backend.inTransaction (isolation, False) (runReaderT r c) c - -instance Level Write where - run c (Write isolation) (Transaction r) = - handle backendHandler $ Backend.inTransaction (isolation, True) (runReaderT r c) c - +runWithoutLocking :: + Backend b => + Backend.Connection b -> (forall s. Transaction b WithoutLocking s r) -> IO r +runWithoutLocking c (Transaction r) = + handle backendHandler $ runReaderT r c + +runRead :: + Backend b => + Backend.IsolationLevel -> Backend.Connection b -> (forall s. Transaction b Read s r) -> IO r +runRead isolation c (Transaction r) = + handle backendHandler $ Backend.inTransaction (isolation, False) (runReaderT r c) c + +runWrite :: + Backend b => + Backend.IsolationLevel -> Backend.Connection b -> (forall s. Transaction b Write s r) -> IO r +runWrite isolation c (Transaction r) = + handle backendHandler $ Backend.inTransaction (isolation, True) (runReaderT r c) c backendHandler :: Backend.Error -> IO a backendHandler = @@ -45,14 +46,12 @@ backendHandler = -- and hence providing no ACID guarantees. -- Essentially this means that there will be no -- traditional transaction established on the backend. -data NoLocking = - NoLocking +data WithoutLocking -- | -- A level requiring minimal locking from the database, -- however it only allows to execute the \"SELECT\" statements. -data Read = - Read (Backend.IsolationLevel) +data Read -- | -- A level, which allows to perform any kind of statements, @@ -62,8 +61,7 @@ data Read = -- However, compared to 'Read', -- it requires the database to choose -- a more resource-demanding locking strategy. -data Write = - Write (Backend.IsolationLevel) +data Write -- * Privileges @@ -77,7 +75,7 @@ instance CursorsPrivilege Write class ModificationPrivilege l instance ModificationPrivilege Write -instance ModificationPrivilege NoLocking +instance ModificationPrivilege WithoutLocking -- * Results Stream From 7ef9f79a8b9fe352df4dbb2b5b9153673a69da53 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 15 Oct 2014 00:44:05 +0400 Subject: [PATCH 0036/1204] Extract Pool from API --- high-sql.cabal | 2 +- library/HighSQL/API.hs | 307 ---------------------------------------- library/HighSQL/Pool.hs | 50 +++++++ 3 files changed, 51 insertions(+), 308 deletions(-) delete mode 100644 library/HighSQL/API.hs create mode 100644 library/HighSQL/Pool.hs diff --git a/high-sql.cabal b/high-sql.cabal index 89991f19e3..13808e4edc 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -42,7 +42,7 @@ library HighSQL.QQ.Parser HighSQL.RowParser HighSQL.Transaction - HighSQL.API + HighSQL.Pool exposed-modules: HighSQL.Backend build-depends: diff --git a/library/HighSQL/API.hs b/library/HighSQL/API.hs deleted file mode 100644 index 0e36cb1508..0000000000 --- a/library/HighSQL/API.hs +++ /dev/null @@ -1,307 +0,0 @@ -module HighSQL.API where - -import HighSQL.Prelude hiding (read, Read, write, Write, Error) -import qualified Data.Pool as Pool -import qualified HighSQL.Backend as Backend -import qualified HighSQL.RowParser as RowParser -import qualified ListT - - -type Backend = - Backend.Backend - -type RowParser = - RowParser.RowParser - - --- * Pool -------------------------- - --- | --- A pool of connections to the database. -type Pool b = - Pool.Pool (Backend.Connection b) - --- | --- Pool initization settings. -data Settings = - Settings { - -- | - -- The number of stripes (distinct sub-pools) to maintain. - -- The smallest acceptable value is 1. - striping1 :: Word32, - -- | - -- The maximum number of connections to keep open per a pool stripe. - -- The smallest acceptable value is 1. - -- Requests for connections will block if this limit is reached - -- on a single stripe, - -- even if other stripes have idle connections available. - striping2 :: Word32, - -- | - -- The amount of time for which an unused connection is kept open. - -- The smallest acceptable value is 0.5 seconds. - connectionTimeout :: NominalDiffTime - } - --- | --- Initialize a pool given a backend and settings --- and run an IO computation with it, --- while automating the resource management. -withPool :: Backend b => b -> Settings -> (Pool b -> IO a) -> IO a -withPool b s = - bracket acquire Pool.purgePool - where - acquire = - do - pool <- - Pool.createPool - (Backend.connect b) (Backend.disconnect) - (striping1 s) (connectionTimeout s) (striping2 s) - return pool - - --- * Error -------------------------- - --- | --- The only exception type that this API can raise. -data Error = - -- | - -- Cannot connect to a server - -- or the connection got interrupted. - ConnectionLost Text | - -- | - -- Attempt to parse a statement execution result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError ByteString TypeRep - deriving (Show, Typeable) - -instance Exception Error - - --- * Executors -------------------------- - --- | --- A connections 'Pool' context monad. -type Executor b = - ReaderT (Pool b) IO - -executorIO :: Pool b -> Executor b r -> IO r -executorIO = - flip runReaderT - -writeTransactionExecutor :: - Backend b => - Backend.IsolationLevel -> (forall s. Transaction b Write s r) -> Executor b r -writeTransactionExecutor isolation (Transaction t) = - withConnectionExecutor $ \c -> - Backend.inTransaction (isolation, True) (runReaderT t c) c - -streamingExecutor :: - forall b r. - Backend b => RowParser b r => Typeable r => - Backend.Statement b -> Executor b (ListT (Executor b) r) -streamingExecutor s = - withConnectionExecutor $ \c -> do - (w, s) <- Backend.executeAndStream s c - return $ do - row <- hoist lift $ replicateM w s - maybe (lift $ lift $ throwIO parsingError) return $ RowParser.parse row - where - parsingError = - ResultParsingError (fst s) (typeOf (undefined :: r)) - -countingExecutor :: - Backend b => - Backend.Statement b -> Executor b Integer -countingExecutor s = - withConnectionExecutor $ \c -> do - Backend.executeAndCountEffects s c - -generatingExecutor :: - Backend b => Backend.Mapping b Integer => - Backend.Statement b -> Executor b (Maybe Integer) -generatingExecutor s = - streamingExecutor s >>= ListT.head - -unitExecutor :: - Backend b => - Backend.Statement b -> Executor b () -unitExecutor s = - withConnectionExecutor $ \c -> do - Backend.execute s c - -withConnectionExecutor :: - (Backend.Connection b -> IO r) -> Executor b r -withConnectionExecutor f = - ReaderT $ \pool -> Pool.withResource pool $ \c -> handle handler $ f c - where - handler = - \case - Backend.ConnectionLost m -> throwIO $ ConnectionLost m - - --- * Transaction -------------------------- - --- | --- A transaction with a level @l@, --- running on an anonymous state-thread @s@ --- and gaining a result @r@. -newtype Transaction b l s r = - Transaction (ReaderT (Backend.Connection b) IO r) - deriving (Functor, Applicative, Monad) - -streamingTransaction :: - Backend b => RowParser b r => ReadingPrivilege l => - Backend.Statement b -> Transaction b l s (ListT (Transaction b l s) r) -streamingTransaction statement = - Transaction $ ReaderT $ \connection -> - $notImplemented - --- | --- Perform a select, while utilizing the database cursors functionality, --- which allows to query for virtually unlimited result sets --- in constant memory by utilizing streaming. --- --- However using this function for small result sets isn't beneficial, --- since it introduces a small overhead due to bookkeeping related to cursors. --- --- All resources are automatically managed --- and get released on transaction finish. -streamingWithCursorTransaction :: - Backend b => RowParser b r => ReadingPrivilege l => - Backend.Statement b -> Transaction b l s (TransactionListT s (Transaction b l s) r) -streamingWithCursorTransaction = - undefined - - --- * Results Stream -------------------------- - --- | --- A stream of results, --- which fetches only those that you reach. --- --- It is implemented as a wrapper around 'ListT.ListT', --- hence all the utility functions of the list transformer API --- are applicable to this type. --- --- It uses the same trick as 'ST' to become impossible to be --- executed outside of its transaction. --- Hence you can only access it while remaining in a transaction, --- and, when the transaction finishes, --- all the acquired resources get automatically released. -newtype TransactionListT s m r = - TransactionListT (ListT.ListT m r) - deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.ListMonad) - -instance ListT.ListTrans (TransactionListT s) where - uncons = - unsafeCoerce - (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) - - --- ** Levels -------------------------- - --- | --- Requires minimal locking from the database, --- however you can only execute the \"SELECT\" statements in it. -data Read - --- | --- Allows you to perform any kind of statements, --- including \"SELECT\", \"UPDATE\", \"INSERT\", \"DELETE\", --- \"CREATE\", \"DROP\" and \"ALTER\". --- --- However, compared to 'Read', --- this transaction level requires the database to choose --- a more resource-demanding locking strategy. -data Write - - --- ** Privileges -------------------------- - --- | --- \"SELECT\" -class ReadingPrivilege l - -instance ReadingPrivilege Read -instance ReadingPrivilege Write - --- | --- \"UPDATE\", \"INSERT\", \"DELETE\", --- \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\" -class ModificationPrivilege l - -instance ModificationPrivilege Write - - --- * Statement -------------------------- - --- type Backend.Statement b = --- (ByteString, [Backend.StatementArgument b]) - --- data Backend.Statement b = --- Statement !ByteString ![Backend.StatementArgument b] - --- mkStatement :: forall b. ByteString -> [Value b] -> Backend.Statement b --- mkStatement sql values = --- (,) sql (map renderValue values) --- where --- renderValue (Value v) = --- Backend.renderValue v :: Backend.StatementArgument b - --- data Value b = --- forall v. (Backend.Mapping b v) => Value !v - - --- * Aliases -------------------------- - --- | --- A short form alias to 'Executor'. -type E b = - Executor b - --- | --- A short form alias to 'executorIO'. -runE :: Pool b -> E b r -> IO r -runE = executorIO - --- | --- A short form alias to 'writeTransactionExecutor'. -writeE :: Backend b => Backend.IsolationLevel -> (forall s. T b W s r) -> E b r -writeE = writeTransactionExecutor - --- | --- A short form alias to 'streamingExecutor'. -streamingE :: Typeable r => Backend b => RowParser b r => S b -> E b (ListT (E b) r) -streamingE = streamingExecutor - --- | --- A short form alias to 'streamingTransaction'. -streamingT :: Backend b => RowParser b r => ReadingPrivilege l => S b -> T b l s (ListT (T b l s) r) -streamingT = streamingTransaction - --- | --- A short form alias to 'Transaction'. -type T = - Transaction - -type W = - Write - -type R = - Read - -type TListT = - TransactionListT - -type S b = - Backend.Statement b diff --git a/library/HighSQL/Pool.hs b/library/HighSQL/Pool.hs new file mode 100644 index 0000000000..d6f2e006ec --- /dev/null +++ b/library/HighSQL/Pool.hs @@ -0,0 +1,50 @@ +module HighSQL.Pool where + +import HighSQL.Prelude hiding (read, Read, write, Write, Error) +import qualified Data.Pool as Pool +import qualified HighSQL.Backend as Backend +import qualified HighSQL.RowParser as RowParser +import qualified ListT + + +-- | +-- A pool of connections to the database. +type Pool b = + Pool.Pool (Backend.Connection b) + +-- | +-- Pool initization settings. +data Settings = + Settings { + -- | + -- The number of stripes (distinct sub-pools) to maintain. + -- The smallest acceptable value is 1. + striping1 :: Word32, + -- | + -- The maximum number of connections to keep open per a pool stripe. + -- The smallest acceptable value is 1. + -- Requests for connections will block if this limit is reached + -- on a single stripe, + -- even if other stripes have idle connections available. + striping2 :: Word32, + -- | + -- The amount of time for which an unused connection is kept open. + -- The smallest acceptable value is 0.5 seconds. + connectionTimeout :: NominalDiffTime + } + +-- | +-- Initialize a pool given a backend and settings +-- and run an IO computation with it, +-- while automating the resource management. +withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a +withPool b s = + bracket acquire Pool.purgePool + where + acquire = + do + pool <- + Pool.createPool + (Backend.connect b) (Backend.disconnect) + (striping1 s) (connectionTimeout s) (striping2 s) + return pool From c6261216f81f1a7f6866ac022d20a7587d8fb45d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Oct 2014 19:52:49 +0400 Subject: [PATCH 0037/1204] WIP --- high-sql.cabal | 2 + library/HighSQL.hs | 70 ++++++++++++++++++++++++++++++++++ library/HighSQL/Backend.hs | 29 +++++++------- library/HighSQL/Pool.hs | 3 ++ library/HighSQL/QQ.hs | 43 +++++++++++++++++++++ library/HighSQL/QQ/Parser.hs | 3 +- library/HighSQL/Transaction.hs | 63 ++++++++++++++++++------------ 7 files changed, 173 insertions(+), 40 deletions(-) create mode 100644 library/HighSQL.hs create mode 100644 library/HighSQL/QQ.hs diff --git a/high-sql.cabal b/high-sql.cabal index 13808e4edc..32443e8a38 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -40,11 +40,13 @@ library other-modules: HighSQL.Prelude HighSQL.QQ.Parser + HighSQL.QQ HighSQL.RowParser HighSQL.Transaction HighSQL.Pool exposed-modules: HighSQL.Backend + HighSQL build-depends: -- template-haskell: template-haskell >= 2.8 && < 2.10, diff --git a/library/HighSQL.hs b/library/HighSQL.hs new file mode 100644 index 0000000000..68f6727e5c --- /dev/null +++ b/library/HighSQL.hs @@ -0,0 +1,70 @@ +module HighSQL +( + -- * Pool + Pool.Pool, + Pool.Settings(..), + Pool.withPool, + -- * Transaction + Transaction.Transaction, + -- ** Execution + -- | + -- Functions for execution of transactions. + -- They determine the transactional locking strategy of the database. + runWithoutLocking, + runRead, + runWrite, + -- ** Transactions + Transaction.modify, + Transaction.modifyAndGenerate, + Transaction.modifyAndCount, + Transaction.select, + Transaction.selectWithCursor, + -- ** Statement Quasi-Quoter + QQ.q, + -- ** Error + Transaction.Error(..), + -- ** Isolation + Backend.IsolationLevel(..), + -- ** Locking Levels + Transaction.WithoutLocking, + Transaction.Read, + Transaction.Write, + -- ** Privileges + Transaction.CursorsPrivilege, + Transaction.ModificationPrivilege, + -- ** Results Stream + Transaction.ResultsStream, + Transaction.TransactionListT, + -- ** Backend + Backend.Backend, + Backend.Mapping, + -- ** Row parser + RowParser.RowParser, +) +where + +import HighSQL.Prelude +import qualified HighSQL.Backend as Backend +import qualified HighSQL.Transaction as Transaction +import qualified HighSQL.Pool as Pool +import qualified HighSQL.RowParser as RowParser +import qualified HighSQL.QQ as QQ + + +runWithoutLocking :: + Backend.Backend b => + (forall s. Transaction.Transaction b Transaction.WithoutLocking s r) -> Pool.Pool b -> IO r +runWithoutLocking t = + Pool.withConnection (Transaction.runWithoutLocking t) + +runRead :: + Backend.Backend b => + Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Read s r) -> Pool.Pool b -> IO r +runRead i t = + Pool.withConnection (Transaction.runRead i t) + +runWrite :: + Backend.Backend b => + Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Write s r) -> Pool.Pool b -> IO r +runWrite i t = + Pool.withConnection (Transaction.runWrite i t) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index f40fdbe64c..d79ffd69c4 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -7,12 +7,20 @@ import qualified Language.Haskell.TH as TH data Error = - -- -- | - -- -- The transaction failed and should be retried. - -- TransactionConflict | + -- | + -- Cannot connect to a server. + CantConnect Text | -- | -- The connection got interrupted. - ConnectionLost Text + ConnectionLost Text | + -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + -- + -- The first parameter is maybe a pair of an original statement + -- and a target type rep. + -- The second parameter is maybe a text message. + ResultParsingError (Maybe (ByteString, TypeRep)) (Maybe Text) deriving (Show, Typeable) instance Exception Error @@ -77,16 +85,9 @@ class Backend b where -- Execute a statement, -- returning the amount of affected rows. executeAndCountEffects :: Statement b -> Connection b -> IO Integer - -- -- | - -- -- Start a transaction in the specified mode. - -- beginTransaction :: TransactionMode -> Connection b -> IO () - -- -- | - -- -- Finish the transaction, - -- -- while releasing all the resources acquired with 'executeAndStream'. - -- -- - -- -- The boolean defines whether to commit the updates, - -- -- otherwise it rolls back. - -- finishTransaction :: Bool -> Connection b -> IO () + -- | + -- Execute an IO action in a transaction context. + -- The action will be automatically retried in case of transaction conflicts. inTransaction :: TransactionMode -> IO r -> Connection b -> IO r diff --git a/library/HighSQL/Pool.hs b/library/HighSQL/Pool.hs index d6f2e006ec..b32c2eb562 100644 --- a/library/HighSQL/Pool.hs +++ b/library/HighSQL/Pool.hs @@ -48,3 +48,6 @@ withPool b s = (Backend.connect b) (Backend.disconnect) (striping1 s) (connectionTimeout s) (striping2 s) return pool + +withConnection :: (Backend.Connection b -> IO r) -> Pool b -> IO r +withConnection = flip Pool.withResource diff --git a/library/HighSQL/QQ.hs b/library/HighSQL/QQ.hs new file mode 100644 index 0000000000..5e2125924a --- /dev/null +++ b/library/HighSQL/QQ.hs @@ -0,0 +1,43 @@ +module HighSQL.QQ where + +import HighSQL.Prelude +import Language.Haskell.TH +import Language.Haskell.TH.Quote +import qualified HighSQL.QQ.Parser as Parser +import qualified HighSQL.Backend as Backend + + +-- | +-- Produces a lambda-expression, +-- which takes as many parameters as there are placeholders in the quoted text +-- and results in an expression of type 'Backend.Statement'. +q :: QuasiQuoter +q = + QuasiQuoter + parseExp + (const $ fail "Pattern context is not supported") + (const $ fail "Type context is not supported") + (const $ fail "Declaration context is not supported") + + +parseExp :: String -> Q Exp +parseExp s = + do + (k, n) <- + either (fail . (showString "Parsing failure: ")) return (Parser.parse (fromString s)) + return $ statementF s n + where + +-- | +-- An expression of a function with an arbitrary arity, +-- which produces a "Backend.Statement". +statementF :: String -> Int -> Exp +statementF s n = + LamE pats exp + where + vars = map (mkName . ('_' :) . show) [1 .. n] + pats = map VarP vars + exp = AppE (AppE (ConE '(,)) (LitE (StringL s))) (ListE exps) + where + exps = map (AppE (VarE 'Backend.renderValue) . VarE) vars + diff --git a/library/HighSQL/QQ/Parser.hs b/library/HighSQL/QQ/Parser.hs index 64387e80d8..fda3f59c3e 100644 --- a/library/HighSQL/QQ/Parser.hs +++ b/library/HighSQL/QQ/Parser.hs @@ -3,7 +3,6 @@ module HighSQL.QQ.Parser where import HighSQL.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) import qualified Data.Text as Text -import qualified Language.Haskell.TH as TH -- | @@ -48,7 +47,7 @@ stringLit = fmap mconcat $ many $ string "\\\\" <|> string (fromString ['\\', quote]) <|> - (Text.singleton <$> notChar '"') + (Text.singleton <$> notChar quote) char quote return text diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs index b20951a824..a55347cfbd 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/HighSQL/Transaction.hs @@ -1,41 +1,45 @@ module HighSQL.Transaction where import HighSQL.Prelude hiding (Read, Write, Error) +import HighSQL.Backend (Backend) +import HighSQL.RowParser (RowParser) import qualified HighSQL.Backend as Backend import qualified HighSQL.RowParser as RowParser import qualified ListT -- | --- A transaction with a level @l@, +-- A transaction specialized for backend @b@, with a level @l@, -- running on an anonymous state-thread @s@ --- and gaining a result @r@. +-- and producing a result @r@. newtype Transaction b l s r = Transaction (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) runWithoutLocking :: Backend b => - Backend.Connection b -> (forall s. Transaction b WithoutLocking s r) -> IO r -runWithoutLocking c (Transaction r) = + (forall s. Transaction b WithoutLocking s r) -> Backend.Connection b -> IO r +runWithoutLocking (Transaction r) c = handle backendHandler $ runReaderT r c runRead :: Backend b => - Backend.IsolationLevel -> Backend.Connection b -> (forall s. Transaction b Read s r) -> IO r -runRead isolation c (Transaction r) = + Backend.IsolationLevel -> (forall s. Transaction b Read s r) -> Backend.Connection b -> IO r +runRead isolation (Transaction r) c = handle backendHandler $ Backend.inTransaction (isolation, False) (runReaderT r c) c runWrite :: Backend b => - Backend.IsolationLevel -> Backend.Connection b -> (forall s. Transaction b Write s r) -> IO r -runWrite isolation c (Transaction r) = + Backend.IsolationLevel -> (forall s. Transaction b Write s r) -> Backend.Connection b -> IO r +runWrite isolation (Transaction r) c = handle backendHandler $ Backend.inTransaction (isolation, True) (runReaderT r c) c backendHandler :: Backend.Error -> IO a backendHandler = \case + Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.ResultParsingError a b -> throwIO $ ResultParsingError a b -- * Locking Levels @@ -81,11 +85,8 @@ instance ModificationPrivilege WithoutLocking -- * Results Stream ------------------------- -type ResultsStream b l s r = - TransactionListT s (Transaction b l s) r - -- | --- A select of results, +-- A stream of results, -- which fetches only those that you reach. -- -- It is implemented as a wrapper around 'ListT.ListT', @@ -94,9 +95,12 @@ type ResultsStream b l s r = -- -- It uses the same trick as 'ST' to become impossible to be -- executed outside of its transaction. --- Hence you can only access it while remaining in a transaction, +-- Therefore you can only access it while remaining in a transaction, -- and, when the transaction finishes, -- all the acquired resources get automatically released. +type ResultsStream b l s r = + TransactionListT s (Transaction b l s) r + newtype TransactionListT s m r = TransactionListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, @@ -115,13 +119,19 @@ instance ListT.ListTrans (TransactionListT s) where -- The only exception type that this API can raise. data Error = -- | - -- Cannot connect to a server - -- or the connection got interrupted. + -- Cannot connect to a server. + CantConnect Text | + -- | + -- The connection got interrupted. ConnectionLost Text | -- | -- Attempt to parse a statement execution result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError ByteString TypeRep + -- + -- The first parameter is maybe a pair of an original statement + -- and a target type rep. + -- The second parameter is maybe a text message. + ResultParsingError (Maybe (ByteString, TypeRep)) (Maybe Text) deriving (Show, Typeable) instance Exception Error @@ -130,12 +140,6 @@ instance Exception Error -- * Transactions ------------------------- -type Backend = - Backend.Backend - -type RowParser = - RowParser.RowParser - -- | -- Execute a modification statement producing no result. modify :: @@ -152,12 +156,18 @@ modifyAndGenerate :: modifyAndGenerate s = select s >>= ListT.head +-- | +-- Execute a statement and count the amount of affected rows. +-- Useful for resolving how many rows were updated or deleted. modifyAndCount :: Backend b => Backend.Mapping b Integer => ModificationPrivilege l => Backend.Statement b -> Transaction b l s Integer modifyAndCount s = Transaction $ ReaderT $ Backend.executeAndCountEffects s +-- | +-- Execute a \"select\" statement, +-- and produce a results stream. select :: forall b l s r. Backend b => RowParser b r => Typeable r => @@ -170,8 +180,13 @@ select s = maybe (lift $ throwIO parsingError) return $ RowParser.parse row where parsingError = - ResultParsingError (fst s) (typeOf (undefined :: r)) + ResultParsingError (Just ((fst s), (typeOf (undefined :: r)))) Nothing +-- | +-- Execute a \"select\" statement, +-- and produce a results stream, +-- which utilizes a database cursor. +-- This function allows you to fetch virtually limitless results in a constant memory. selectWithCursor :: forall b l s r. Backend b => RowParser b r => Typeable r => CursorsPrivilege l => @@ -184,4 +199,4 @@ selectWithCursor s = maybe (lift $ throwIO parsingError) return $ RowParser.parse row where parsingError = - ResultParsingError (fst s) (typeOf (undefined :: r)) + ResultParsingError (Just ((fst s), (typeOf (undefined :: r)))) Nothing From 034368cfc9f4d37802529d5b50661941082f89e9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 Oct 2014 02:51:30 +0400 Subject: [PATCH 0038/1204] Update errors model --- library/HighSQL/Backend.hs | 14 +++++------- library/HighSQL/Prelude.hs | 2 +- library/HighSQL/RowParser.hs | 16 +++++++++----- library/HighSQL/Transaction.hs | 40 ++++++++++++++++------------------ 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/library/HighSQL/Backend.hs b/library/HighSQL/Backend.hs index d79ffd69c4..b60f8b90a1 100644 --- a/library/HighSQL/Backend.hs +++ b/library/HighSQL/Backend.hs @@ -13,14 +13,10 @@ data Error = -- | -- The connection got interrupted. ConnectionLost Text | - -- | - -- Attempt to parse a statement execution result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - -- - -- The first parameter is maybe a pair of an original statement - -- and a target type rep. - -- The second parameter is maybe a text message. - ResultParsingError (Maybe (ByteString, TypeRep)) (Maybe Text) + UnexpectedResultStructure Text | + -- | + -- Type, input and parser error. + UnparsableResult TypeRep ByteString Text deriving (Show, Typeable) instance Exception Error @@ -93,7 +89,7 @@ class Backend b where class Backend b => Mapping b v where renderValue :: v -> StatementArgument b - parseResult :: Result b -> Maybe v + parseResult :: Result b -> Either Text v diff --git a/library/HighSQL/Prelude.hs b/library/HighSQL/Prelude.hs index bd13ca4e24..72d4ab37bd 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/HighSQL/Prelude.hs @@ -9,7 +9,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (left, right, tryJust, bool, isRight, isLeft) +import BasePrelude as Exports -- mtl-prelude ------------------------- diff --git a/library/HighSQL/RowParser.hs b/library/HighSQL/RowParser.hs index bc1e5785bb..e9b8dea0bb 100644 --- a/library/HighSQL/RowParser.hs +++ b/library/HighSQL/RowParser.hs @@ -8,19 +8,21 @@ import qualified HighSQL.Backend as Backend class RowParser b r where - parse :: [Backend.Result b] -> Maybe r + parse :: [Backend.Result b] -> Either Text r instance RowParser b () where - parse = \case [] -> Just (); _ -> Nothing + parse = \case [] -> Right (); _ -> Left $ "Row is not empty" instance Backend.Mapping b v => RowParser b v where - parse = join . fmap (Backend.parseResult :: Backend.Result b -> Maybe v) . headMay + parse l = do + h <- maybe (Left $ "Empty row") Right $ headMay l + Backend.parseResult h -- Generate tuple instaces using Template Haskell: let inst :: Int -> Dec inst arity = - InstanceD constraints head [fromRowDec] + InstanceD constraints head [parseDec] where varNames = [1 .. arity] >>= \i -> return (mkName ('_' : show i)) @@ -32,7 +34,7 @@ let map (\t -> ClassP ''Backend.Mapping [backendType, t]) varTypes head = AppT (AppT (ConT ''RowParser) backendType) (foldl AppT (TupleT arity) varTypes) - fromRowDec = + parseDec = FunD 'parse [c1, c2] where c1 = @@ -53,6 +55,8 @@ let e : [] -> e _ -> $bug "Unexpected queue size" c2 = - Clause [WildP] (NormalB (ConE 'Nothing)) [] + Clause [WildP] (NormalB (AppE (ConE 'Left) (LitE (StringL m)))) [] + where + m = "Not enough items in the row" in mapM (return . inst) [2 .. 24] diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs index a55347cfbd..03db029cca 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/HighSQL/Transaction.hs @@ -39,7 +39,7 @@ backendHandler = \case Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.ResultParsingError a b -> throwIO $ ResultParsingError a b + Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t -- * Locking Levels @@ -125,13 +125,13 @@ data Error = -- The connection got interrupted. ConnectionLost Text | -- | + -- Unexpected result structure. + -- Indicates usage of inappropriate statement executor. + UnexpectedResultStructure Text | + -- | -- Attempt to parse a statement execution result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - -- - -- The first parameter is maybe a pair of an original statement - -- and a target type rep. - -- The second parameter is maybe a text message. - ResultParsingError (Maybe (ByteString, TypeRep)) (Maybe Text) + ResultParsingError TypeRep Text deriving (Show, Typeable) instance Exception Error @@ -169,18 +169,11 @@ modifyAndCount s = -- Execute a \"select\" statement, -- and produce a results stream. select :: - forall b l s r. Backend b => RowParser b r => Typeable r => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) select s = Transaction $ ReaderT $ \c -> do - (w, s) <- Backend.executeAndStream s c - return $ TransactionListT $ hoist (Transaction . lift) $ do - row <- replicateM w s - maybe (lift $ throwIO parsingError) return $ RowParser.parse row - where - parsingError = - ResultParsingError (Just ((fst s), (typeOf (undefined :: r)))) Nothing + fmap hoistBackendStream $ Backend.executeAndStream s c -- | -- Execute a \"select\" statement, @@ -188,15 +181,20 @@ select s = -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. selectWithCursor :: - forall b l s r. Backend b => RowParser b r => Typeable r => CursorsPrivilege l => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) selectWithCursor s = Transaction $ ReaderT $ \c -> do - (w, s) <- Backend.executeAndStreamWithCursor s c - return $ TransactionListT $ hoist (Transaction . lift) $ do - row <- replicateM w s - maybe (lift $ throwIO parsingError) return $ RowParser.parse row + fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c + +hoistBackendStream :: + forall b l s r. + RowParser b r => Typeable r => + Backend.ResultsStream b -> ResultsStream b l s r +hoistBackendStream (w, s) = + TransactionListT $ hoist (Transaction . lift) $ do + row <- replicateM w s + either (lift . throwIO . parsingError) return $ RowParser.parse row where - parsingError = - ResultParsingError (Just ((fst s), (typeOf (undefined :: r)))) Nothing + parsingError t = + ResultParsingError (typeOf (undefined :: r)) t From 979e406f58ffcf1e623087b4773f7e899661dfd3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 Oct 2014 08:21:12 +0400 Subject: [PATCH 0039/1204] Identity and drop type rep --- library/HighSQL/RowParser.hs | 5 ++--- library/HighSQL/Transaction.hs | 12 ++++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/library/HighSQL/RowParser.hs b/library/HighSQL/RowParser.hs index e9b8dea0bb..0de93b16c4 100644 --- a/library/HighSQL/RowParser.hs +++ b/library/HighSQL/RowParser.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE UndecidableInstances #-} module HighSQL.RowParser where import HighSQL.Prelude @@ -13,10 +12,10 @@ class RowParser b r where instance RowParser b () where parse = \case [] -> Right (); _ -> Left $ "Row is not empty" -instance Backend.Mapping b v => RowParser b v where +instance Backend.Mapping b v => RowParser b (Identity v) where parse l = do h <- maybe (Left $ "Empty row") Right $ headMay l - Backend.parseResult h + Identity <$> Backend.parseResult h -- Generate tuple instaces using Template Haskell: let diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs index 03db029cca..7911561676 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/HighSQL/Transaction.hs @@ -131,7 +131,7 @@ data Error = -- | -- Attempt to parse a statement execution result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError TypeRep Text + ResultParsingError Text deriving (Show, Typeable) instance Exception Error @@ -154,7 +154,7 @@ modifyAndGenerate :: Backend b => Backend.Mapping b Integer => ModificationPrivilege l => Backend.Statement b -> Transaction b l s (Maybe Integer) modifyAndGenerate s = - select s >>= ListT.head + select s >>= ListT.head >>= return . fmap runIdentity -- | -- Execute a statement and count the amount of affected rows. @@ -169,7 +169,7 @@ modifyAndCount s = -- Execute a \"select\" statement, -- and produce a results stream. select :: - Backend b => RowParser b r => Typeable r => + Backend b => RowParser b r => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) select s = Transaction $ ReaderT $ \c -> do @@ -181,7 +181,7 @@ select s = -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. selectWithCursor :: - Backend b => RowParser b r => Typeable r => CursorsPrivilege l => + Backend b => RowParser b r => CursorsPrivilege l => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) selectWithCursor s = Transaction $ ReaderT $ \c -> do @@ -189,7 +189,7 @@ selectWithCursor s = hoistBackendStream :: forall b l s r. - RowParser b r => Typeable r => + RowParser b r => Backend.ResultsStream b -> ResultsStream b l s r hoistBackendStream (w, s) = TransactionListT $ hoist (Transaction . lift) $ do @@ -197,4 +197,4 @@ hoistBackendStream (w, s) = either (lift . throwIO . parsingError) return $ RowParser.parse row where parsingError t = - ResultParsingError (typeOf (undefined :: r)) t + ResultParsingError t From 6a47cacbdfec1a1d380525b941f45084e12bc4b2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 Oct 2014 21:24:33 +0400 Subject: [PATCH 0040/1204] Fix stream hoisting --- high-sql.cabal | 2 +- library/HighSQL/Transaction.hs | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/high-sql.cabal b/high-sql.cabal index 32443e8a38..8c27b3ad66 100644 --- a/high-sql.cabal +++ b/high-sql.cabal @@ -60,7 +60,7 @@ library text >= 1.1 && < 1.3, hashable == 1.2.*, -- control: - list-t >= 0.2.1 && < 0.3, + list-t >= 0.2.4 && < 0.3, monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: diff --git a/library/HighSQL/Transaction.hs b/library/HighSQL/Transaction.hs index 7911561676..bfa49b4097 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/HighSQL/Transaction.hs @@ -193,8 +193,6 @@ hoistBackendStream :: Backend.ResultsStream b -> ResultsStream b l s r hoistBackendStream (w, s) = TransactionListT $ hoist (Transaction . lift) $ do - row <- replicateM w s - either (lift . throwIO . parsingError) return $ RowParser.parse row - where - parsingError t = - ResultParsingError t + row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w + either (lift . throwIO . ResultParsingError) return $ RowParser.parse row + From d16efd98963f3fa856030efcaca31697f77bf3cc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 18 Oct 2014 00:03:02 +0400 Subject: [PATCH 0041/1204] Rename to "hasql" --- high-sql.cabal => hasql.cabal | 24 +++++++++++------------ library/{HighSQL.hs => Hasql.hs} | 14 ++++++------- library/{HighSQL => Hasql}/Backend.hs | 4 ++-- library/{HighSQL => Hasql}/Pool.hs | 8 ++++---- library/{HighSQL => Hasql}/Prelude.hs | 4 ++-- library/{HighSQL => Hasql}/QQ.hs | 8 ++++---- library/{HighSQL => Hasql}/QQ/Parser.hs | 4 ++-- library/{HighSQL => Hasql}/RowParser.hs | 6 +++--- library/{HighSQL => Hasql}/Transaction.hs | 12 ++++++------ 9 files changed, 42 insertions(+), 42 deletions(-) rename high-sql.cabal => hasql.cabal (85%) rename library/{HighSQL.hs => Hasql.hs} (86%) rename library/{HighSQL => Hasql}/Backend.hs (97%) rename library/{HighSQL => Hasql}/Pool.hs (88%) rename library/{HighSQL => Hasql}/Prelude.hs (92%) rename library/{HighSQL => Hasql}/QQ.hs (88%) rename library/{HighSQL => Hasql}/QQ/Parser.hs (94%) rename library/{HighSQL => Hasql}/RowParser.hs (94%) rename library/{HighSQL => Hasql}/Transaction.hs (95%) diff --git a/high-sql.cabal b/hasql.cabal similarity index 85% rename from high-sql.cabal rename to hasql.cabal index 8c27b3ad66..fe899e6fd0 100644 --- a/high-sql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: - high-sql + hasql version: 0.1.0 synopsis: @@ -8,9 +8,9 @@ description: category: Database homepage: - https://github.com/nikita-volkov/high-sql + https://github.com/nikita-volkov/hasql bug-reports: - https://github.com/nikita-volkov/high-sql/issues + https://github.com/nikita-volkov/hasql/issues author: Nikita Volkov maintainer: @@ -31,22 +31,22 @@ source-repository head type: git location: - git://github.com/nikita-volkov/high-sql.git + git://github.com/nikita-volkov/hasql.git library hs-source-dirs: library other-modules: - HighSQL.Prelude - HighSQL.QQ.Parser - HighSQL.QQ - HighSQL.RowParser - HighSQL.Transaction - HighSQL.Pool + Hasql.Prelude + Hasql.QQ.Parser + Hasql.QQ + Hasql.RowParser + Hasql.Transaction + Hasql.Pool exposed-modules: - HighSQL.Backend - HighSQL + Hasql.Backend + Hasql build-depends: -- template-haskell: template-haskell >= 2.8 && < 2.10, diff --git a/library/HighSQL.hs b/library/Hasql.hs similarity index 86% rename from library/HighSQL.hs rename to library/Hasql.hs index 68f6727e5c..a38d8d845f 100644 --- a/library/HighSQL.hs +++ b/library/Hasql.hs @@ -1,4 +1,4 @@ -module HighSQL +module Hasql ( -- * Pool Pool.Pool, @@ -43,12 +43,12 @@ module HighSQL ) where -import HighSQL.Prelude -import qualified HighSQL.Backend as Backend -import qualified HighSQL.Transaction as Transaction -import qualified HighSQL.Pool as Pool -import qualified HighSQL.RowParser as RowParser -import qualified HighSQL.QQ as QQ +import Hasql.Prelude +import qualified Hasql.Backend as Backend +import qualified Hasql.Transaction as Transaction +import qualified Hasql.Pool as Pool +import qualified Hasql.RowParser as RowParser +import qualified Hasql.QQ as QQ runWithoutLocking :: diff --git a/library/HighSQL/Backend.hs b/library/Hasql/Backend.hs similarity index 97% rename from library/HighSQL/Backend.hs rename to library/Hasql/Backend.hs index b60f8b90a1..b02cb47540 100644 --- a/library/HighSQL/Backend.hs +++ b/library/Hasql/Backend.hs @@ -1,8 +1,8 @@ -- | -- An open API for implementation of specific backend drivers. -module HighSQL.Backend where +module Hasql.Backend where -import HighSQL.Prelude hiding (Error) +import Hasql.Prelude hiding (Error) import qualified Language.Haskell.TH as TH diff --git a/library/HighSQL/Pool.hs b/library/Hasql/Pool.hs similarity index 88% rename from library/HighSQL/Pool.hs rename to library/Hasql/Pool.hs index b32c2eb562..d1929f211d 100644 --- a/library/HighSQL/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,9 +1,9 @@ -module HighSQL.Pool where +module Hasql.Pool where -import HighSQL.Prelude hiding (read, Read, write, Write, Error) +import Hasql.Prelude hiding (read, Read, write, Write, Error) import qualified Data.Pool as Pool -import qualified HighSQL.Backend as Backend -import qualified HighSQL.RowParser as RowParser +import qualified Hasql.Backend as Backend +import qualified Hasql.RowParser as RowParser import qualified ListT diff --git a/library/HighSQL/Prelude.hs b/library/Hasql/Prelude.hs similarity index 92% rename from library/HighSQL/Prelude.hs rename to library/Hasql/Prelude.hs index 72d4ab37bd..a1a9990897 100644 --- a/library/HighSQL/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -1,4 +1,4 @@ -module HighSQL.Prelude +module Hasql.Prelude ( module Exports, bug, @@ -54,6 +54,6 @@ import qualified Debug.Trace.LocationTH bug = [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] where - msg = "A \"high-sql\" package bug: " :: String + msg = "A \"hasql\" package bug: " :: String bottom = [e| $bug "Bottom evaluated" |] diff --git a/library/HighSQL/QQ.hs b/library/Hasql/QQ.hs similarity index 88% rename from library/HighSQL/QQ.hs rename to library/Hasql/QQ.hs index 5e2125924a..cccee1e019 100644 --- a/library/HighSQL/QQ.hs +++ b/library/Hasql/QQ.hs @@ -1,10 +1,10 @@ -module HighSQL.QQ where +module Hasql.QQ where -import HighSQL.Prelude +import Hasql.Prelude import Language.Haskell.TH import Language.Haskell.TH.Quote -import qualified HighSQL.QQ.Parser as Parser -import qualified HighSQL.Backend as Backend +import qualified Hasql.QQ.Parser as Parser +import qualified Hasql.Backend as Backend -- | diff --git a/library/HighSQL/QQ/Parser.hs b/library/Hasql/QQ/Parser.hs similarity index 94% rename from library/HighSQL/QQ/Parser.hs rename to library/Hasql/QQ/Parser.hs index fda3f59c3e..b3d209caa9 100644 --- a/library/HighSQL/QQ/Parser.hs +++ b/library/Hasql/QQ/Parser.hs @@ -1,6 +1,6 @@ -module HighSQL.QQ.Parser where +module Hasql.QQ.Parser where -import HighSQL.Prelude hiding (takeWhile) +import Hasql.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) import qualified Data.Text as Text diff --git a/library/HighSQL/RowParser.hs b/library/Hasql/RowParser.hs similarity index 94% rename from library/HighSQL/RowParser.hs rename to library/Hasql/RowParser.hs index 0de93b16c4..65c4b34dc0 100644 --- a/library/HighSQL/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -1,9 +1,9 @@ -module HighSQL.RowParser where +module Hasql.RowParser where -import HighSQL.Prelude +import Hasql.Prelude import Language.Haskell.TH import qualified Data.Text as Text -import qualified HighSQL.Backend as Backend +import qualified Hasql.Backend as Backend class RowParser b r where diff --git a/library/HighSQL/Transaction.hs b/library/Hasql/Transaction.hs similarity index 95% rename from library/HighSQL/Transaction.hs rename to library/Hasql/Transaction.hs index bfa49b4097..7b560f884b 100644 --- a/library/HighSQL/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -1,10 +1,10 @@ -module HighSQL.Transaction where +module Hasql.Transaction where -import HighSQL.Prelude hiding (Read, Write, Error) -import HighSQL.Backend (Backend) -import HighSQL.RowParser (RowParser) -import qualified HighSQL.Backend as Backend -import qualified HighSQL.RowParser as RowParser +import Hasql.Prelude hiding (Read, Write, Error) +import Hasql.Backend (Backend) +import Hasql.RowParser (RowParser) +import qualified Hasql.Backend as Backend +import qualified Hasql.RowParser as RowParser import qualified ListT From 06e59731958f0a3078d430813d259064458f5726 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 Oct 2014 07:58:19 +0400 Subject: [PATCH 0042/1204] Update transaction conflicts handling --- library/Hasql/Backend.hs | 18 ++++++++++++++---- library/Hasql/Transaction.hs | 20 ++++++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Backend.hs b/library/Hasql/Backend.hs index b02cb47540..91ec1acfaf 100644 --- a/library/Hasql/Backend.hs +++ b/library/Hasql/Backend.hs @@ -16,7 +16,11 @@ data Error = UnexpectedResultStructure Text | -- | -- Type, input and parser error. - UnparsableResult TypeRep ByteString Text + UnparsableResult TypeRep ByteString Text | + -- | + -- A transaction concurrency conflict, + -- whic indicates that it should be retried. + TransactionConflict deriving (Show, Typeable) instance Exception Error @@ -82,9 +86,15 @@ class Backend b where -- returning the amount of affected rows. executeAndCountEffects :: Statement b -> Connection b -> IO Integer -- | - -- Execute an IO action in a transaction context. - -- The action will be automatically retried in case of transaction conflicts. - inTransaction :: TransactionMode -> IO r -> Connection b -> IO r + -- Start a transaction in the specified mode. + beginTransaction :: TransactionMode -> Connection b -> IO () + -- | + -- Finish the transaction, + -- while releasing all the resources acquired with 'executeAndStreamWithCursor'. + -- + -- The boolean defines whether to commit the updates, + -- otherwise it rolls back. + finishTransaction :: Bool -> Connection b -> IO () class Backend b => Mapping b v where diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 7b560f884b..410c4c309a 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -26,13 +26,28 @@ runRead :: Backend b => Backend.IsolationLevel -> (forall s. Transaction b Read s r) -> Backend.Connection b -> IO r runRead isolation (Transaction r) c = - handle backendHandler $ Backend.inTransaction (isolation, False) (runReaderT r c) c + handle backendHandler $ inTransaction (isolation, False) (runReaderT r c) c runWrite :: Backend b => Backend.IsolationLevel -> (forall s. Transaction b Write s r) -> Backend.Connection b -> IO r runWrite isolation (Transaction r) c = - handle backendHandler $ Backend.inTransaction (isolation, True) (runReaderT r c) c + handle backendHandler $ inTransaction (isolation, True) (runReaderT r c) c + +inTransaction :: + Backend b => + Backend.TransactionMode -> IO r -> Backend.Connection b -> IO r +inTransaction mode io c = + do + Backend.beginTransaction mode c + try io >>= \case + Left Backend.TransactionConflict -> do + Backend.finishTransaction False c + inTransaction mode io c + Left e -> throwIO e + Right r -> do + Backend.finishTransaction True c + return r backendHandler :: Backend.Error -> IO a backendHandler = @@ -40,6 +55,7 @@ backendHandler = Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t + Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" -- * Locking Levels From ba9bbe3b8903b30b3f407d48c1343ec3bee8a756 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Oct 2014 02:53:33 +0400 Subject: [PATCH 0043/1204] Update API --- library/Hasql.hs | 29 ++++++++++++++--------------- library/Hasql/Transaction.hs | 34 ++++++++++++++-------------------- 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index a38d8d845f..3d404c24df 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -10,15 +10,14 @@ module Hasql -- | -- Functions for execution of transactions. -- They determine the transactional locking strategy of the database. - runWithoutLocking, - runRead, - runWrite, + withoutLocking, + read, + write, -- ** Transactions - Transaction.modify, - Transaction.modifyAndGenerate, - Transaction.modifyAndCount, - Transaction.select, - Transaction.selectWithCursor, + Transaction.execute, + Transaction.executeAndCount, + Transaction.executeAndFetch, + Transaction.executeAndFetchWithCursor, -- ** Statement Quasi-Quoter QQ.q, -- ** Error @@ -43,7 +42,7 @@ module Hasql ) where -import Hasql.Prelude +import Hasql.Prelude hiding (read) import qualified Hasql.Backend as Backend import qualified Hasql.Transaction as Transaction import qualified Hasql.Pool as Pool @@ -51,20 +50,20 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ -runWithoutLocking :: +withoutLocking :: Backend.Backend b => (forall s. Transaction.Transaction b Transaction.WithoutLocking s r) -> Pool.Pool b -> IO r -runWithoutLocking t = +withoutLocking t = Pool.withConnection (Transaction.runWithoutLocking t) -runRead :: +read :: Backend.Backend b => Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Read s r) -> Pool.Pool b -> IO r -runRead i t = +read i t = Pool.withConnection (Transaction.runRead i t) -runWrite :: +write :: Backend.Backend b => Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Write s r) -> Pool.Pool b -> IO r -runWrite i t = +write i t = Pool.withConnection (Transaction.runWrite i t) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 410c4c309a..5da7eba60a 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -157,49 +157,43 @@ instance Exception Error ------------------------- -- | --- Execute a modification statement producing no result. -modify :: +-- Execute a statement, which produces no result. +execute :: Backend b => ModificationPrivilege l => Backend.Statement b -> Transaction b l s () -modify s = +execute s = Transaction $ ReaderT $ Backend.execute s --- | --- Execute a statement, which generates an auto-increment value. -modifyAndGenerate :: - Backend b => Backend.Mapping b Integer => ModificationPrivilege l => - Backend.Statement b -> Transaction b l s (Maybe Integer) -modifyAndGenerate s = - select s >>= ListT.head >>= return . fmap runIdentity - -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -modifyAndCount :: +executeAndCount :: Backend b => Backend.Mapping b Integer => ModificationPrivilege l => Backend.Statement b -> Transaction b l s Integer -modifyAndCount s = +executeAndCount s = Transaction $ ReaderT $ Backend.executeAndCountEffects s -- | --- Execute a \"select\" statement, --- and produce a results stream. -select :: +-- Execute a statement, +-- which produces a results stream: +-- a @SELECT@ or an @INSERT@, +-- which produces a generated value (e.g., an auto-incremented id). +executeAndFetch :: Backend b => RowParser b r => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) -select s = +executeAndFetch s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c -- | --- Execute a \"select\" statement, +-- Execute a @SELECT@ statement -- and produce a results stream, -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. -selectWithCursor :: +executeAndFetchWithCursor :: Backend b => RowParser b r => CursorsPrivilege l => Backend.Statement b -> Transaction b l s (ResultsStream b l s r) -selectWithCursor s = +executeAndFetchWithCursor s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c From 8722e0ea313d3b960e883507627a907e55968851 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 Oct 2014 01:58:12 +0400 Subject: [PATCH 0044/1204] Function aliases --- library/Hasql.hs | 24 ++++++++++++++---------- library/Hasql/Transaction.hs | 28 +++++++++++++++------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 3d404c24df..12b92d2adf 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -10,10 +10,12 @@ module Hasql -- | -- Functions for execution of transactions. -- They determine the transactional locking strategy of the database. + TransactionRunner, withoutLocking, read, write, -- ** Transactions + Transaction.StatementRunner, Transaction.execute, Transaction.executeAndCount, Transaction.executeAndFetch, @@ -30,7 +32,7 @@ module Hasql Transaction.Write, -- ** Privileges Transaction.CursorsPrivilege, - Transaction.ModificationPrivilege, + Transaction.WritingPrivilege, -- ** Results Stream Transaction.ResultsStream, Transaction.TransactionListT, @@ -50,20 +52,22 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ -withoutLocking :: - Backend.Backend b => - (forall s. Transaction.Transaction b Transaction.WithoutLocking s r) -> Pool.Pool b -> IO r +type TransactionRunner l = + forall b r. Backend.Backend b => + (forall s. Transaction.Transaction b l s r) -> Pool.Pool b -> IO r + +withoutLocking :: TransactionRunner Transaction.WithoutLocking withoutLocking t = Pool.withConnection (Transaction.runWithoutLocking t) -read :: - Backend.Backend b => - Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Read s r) -> Pool.Pool b -> IO r +read :: Backend.IsolationLevel -> TransactionRunner Transaction.Read read i t = Pool.withConnection (Transaction.runRead i t) -write :: - Backend.Backend b => - Backend.IsolationLevel -> (forall s. Transaction.Transaction b Transaction.Write s r) -> Pool.Pool b -> IO r +write :: Backend.IsolationLevel -> TransactionRunner Transaction.Write write i t = Pool.withConnection (Transaction.runWrite i t) + + + + diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 5da7eba60a..711aac8b41 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -92,10 +92,10 @@ class CursorsPrivilege l instance CursorsPrivilege Read instance CursorsPrivilege Write -class ModificationPrivilege l +class WritingPrivilege l -instance ModificationPrivilege Write -instance ModificationPrivilege WithoutLocking +instance WritingPrivilege Write +instance WritingPrivilege WithoutLocking -- * Results Stream @@ -156,20 +156,22 @@ instance Exception Error -- * Transactions ------------------------- +type StatementRunner b l s r = + Backend b => + Backend.Statement b -> Transaction b l s r + -- | -- Execute a statement, which produces no result. -execute :: - Backend b => ModificationPrivilege l => - Backend.Statement b -> Transaction b l s () +execute :: WritingPrivilege l => StatementRunner b l s () execute s = Transaction $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -executeAndCount :: - Backend b => Backend.Mapping b Integer => ModificationPrivilege l => - Backend.Statement b -> Transaction b l s Integer +executeAndCount :: + (Backend.Mapping b Integer, WritingPrivilege l) => + StatementRunner b l s Integer executeAndCount s = Transaction $ ReaderT $ Backend.executeAndCountEffects s @@ -179,8 +181,8 @@ executeAndCount s = -- a @SELECT@ or an @INSERT@, -- which produces a generated value (e.g., an auto-incremented id). executeAndFetch :: - Backend b => RowParser b r => - Backend.Statement b -> Transaction b l s (ResultsStream b l s r) + RowParser b r => + StatementRunner b l s (ResultsStream b l s r) executeAndFetch s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c @@ -191,8 +193,8 @@ executeAndFetch s = -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. executeAndFetchWithCursor :: - Backend b => RowParser b r => CursorsPrivilege l => - Backend.Statement b -> Transaction b l s (ResultsStream b l s r) + (RowParser b r, CursorsPrivilege l) => + StatementRunner b l s (ResultsStream b l s r) executeAndFetchWithCursor s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c From 2668da3559eb5f8ec98bd75f9d1f20f6f71d26de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 18:21:51 +0400 Subject: [PATCH 0045/1204] Clean up --- library/Hasql/Transaction.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 711aac8b41..9496b5b62e 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -200,7 +200,6 @@ executeAndFetchWithCursor s = fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c hoistBackendStream :: - forall b l s r. RowParser b r => Backend.ResultsStream b -> ResultsStream b l s r hoistBackendStream (w, s) = From 59c4ec134d177393d1b1274c5cea6babccf0a3e5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 18:22:02 +0400 Subject: [PATCH 0046/1204] Rename stuff a bit --- library/Hasql.hs | 8 ++++---- library/Hasql/Transaction.hs | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 12b92d2adf..2c96b72fbf 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -16,10 +16,10 @@ module Hasql write, -- ** Transactions Transaction.StatementRunner, - Transaction.execute, - Transaction.executeAndCount, - Transaction.executeAndFetch, - Transaction.executeAndFetchWithCursor, + Transaction.unitTx, + Transaction.countTx, + Transaction.streamTx, + Transaction.cursorStreamTx, -- ** Statement Quasi-Quoter QQ.q, -- ** Error diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 9496b5b62e..dafb36acc6 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -162,17 +162,17 @@ type StatementRunner b l s r = -- | -- Execute a statement, which produces no result. -execute :: WritingPrivilege l => StatementRunner b l s () -execute s = +unitTx :: WritingPrivilege l => StatementRunner b l s () +unitTx s = Transaction $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -executeAndCount :: +countTx :: (Backend.Mapping b Integer, WritingPrivilege l) => StatementRunner b l s Integer -executeAndCount s = +countTx s = Transaction $ ReaderT $ Backend.executeAndCountEffects s -- | @@ -180,10 +180,10 @@ executeAndCount s = -- which produces a results stream: -- a @SELECT@ or an @INSERT@, -- which produces a generated value (e.g., an auto-incremented id). -executeAndFetch :: +streamTx :: RowParser b r => StatementRunner b l s (ResultsStream b l s r) -executeAndFetch s = +streamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c @@ -192,10 +192,10 @@ executeAndFetch s = -- and produce a results stream, -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. -executeAndFetchWithCursor :: +cursorStreamTx :: (RowParser b r, CursorsPrivilege l) => StatementRunner b l s (ResultsStream b l s r) -executeAndFetchWithCursor s = +cursorStreamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c From d69d8289f79ec08447fa2676f42c2ffc71187c60 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 18:45:36 +0400 Subject: [PATCH 0047/1204] Update mtl-prelude --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index fe899e6fd0..d51a252fee 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -69,7 +69,7 @@ library -- general: safe >= 0.3.8 && < 0.4, mmorph == 1.0.*, - mtl-prelude == 0.1.*, + mtl-prelude == 2.*, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 ghc-options: From 3a3faef1f97ca36ed80d720f6c2224d2f0a01db9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 19:05:34 +0400 Subject: [PATCH 0048/1204] Comments --- library/Hasql/Transaction.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index dafb36acc6..aac3b7b93a 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -199,6 +199,10 @@ cursorStreamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c + +-- * Helpers +------------------------- + hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b l s r From 2c6dfcbe5ceadbadcb409234ab941552e14eacef Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 19:06:38 +0400 Subject: [PATCH 0049/1204] Rename alias --- library/Hasql/Transaction.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index aac3b7b93a..ee8f39c3af 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -156,13 +156,13 @@ instance Exception Error -- * Transactions ------------------------- -type StatementRunner b l s r = +type StatementTx b l s r = Backend b => Backend.Statement b -> Transaction b l s r -- | -- Execute a statement, which produces no result. -unitTx :: WritingPrivilege l => StatementRunner b l s () +unitTx :: WritingPrivilege l => StatementTx b l s () unitTx s = Transaction $ ReaderT $ Backend.execute s @@ -171,7 +171,7 @@ unitTx s = -- Useful for resolving how many rows were updated or deleted. countTx :: (Backend.Mapping b Integer, WritingPrivilege l) => - StatementRunner b l s Integer + StatementTx b l s Integer countTx s = Transaction $ ReaderT $ Backend.executeAndCountEffects s @@ -182,7 +182,7 @@ countTx s = -- which produces a generated value (e.g., an auto-incremented id). streamTx :: RowParser b r => - StatementRunner b l s (ResultsStream b l s r) + StatementTx b l s (ResultsStream b l s r) streamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c @@ -194,7 +194,7 @@ streamTx s = -- This function allows you to fetch virtually limitless results in a constant memory. cursorStreamTx :: (RowParser b r, CursorsPrivilege l) => - StatementRunner b l s (ResultsStream b l s r) + StatementTx b l s (ResultsStream b l s r) cursorStreamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c From 3bc23838477401169a3de3ada3115304947ae279 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Oct 2014 23:58:54 +0400 Subject: [PATCH 0050/1204] Simplify as hell --- library/Hasql.hs | 44 ++++----------- library/Hasql/Transaction.hs | 100 ++++++++--------------------------- 2 files changed, 32 insertions(+), 112 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 2c96b72fbf..2e6472b0b4 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -7,15 +7,10 @@ module Hasql -- * Transaction Transaction.Transaction, -- ** Execution - -- | - -- Functions for execution of transactions. - -- They determine the transactional locking strategy of the database. - TransactionRunner, - withoutLocking, - read, - write, + Transaction.Mode, + txIO, -- ** Transactions - Transaction.StatementRunner, + Transaction.StatementTx, Transaction.unitTx, Transaction.countTx, Transaction.streamTx, @@ -24,23 +19,11 @@ module Hasql QQ.q, -- ** Error Transaction.Error(..), - -- ** Isolation - Backend.IsolationLevel(..), - -- ** Locking Levels - Transaction.WithoutLocking, - Transaction.Read, - Transaction.Write, - -- ** Privileges - Transaction.CursorsPrivilege, - Transaction.WritingPrivilege, -- ** Results Stream Transaction.ResultsStream, Transaction.TransactionListT, - -- ** Backend - Backend.Backend, - Backend.Mapping, -- ** Row parser - RowParser.RowParser, + RowParser.RowParser(..), ) where @@ -52,21 +35,12 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ -type TransactionRunner l = - forall b r. Backend.Backend b => - (forall s. Transaction.Transaction b l s r) -> Pool.Pool b -> IO r +txIO :: + Backend.Backend b => + Transaction.Mode -> Pool.Pool b -> (forall s. Transaction.Transaction b s r) -> IO r +txIO m p t = + Pool.withConnection (\c -> Transaction.txIO m c t) p -withoutLocking :: TransactionRunner Transaction.WithoutLocking -withoutLocking t = - Pool.withConnection (Transaction.runWithoutLocking t) - -read :: Backend.IsolationLevel -> TransactionRunner Transaction.Read -read i t = - Pool.withConnection (Transaction.runRead i t) - -write :: Backend.IsolationLevel -> TransactionRunner Transaction.Write -write i t = - Pool.withConnection (Transaction.runWrite i t) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index ee8f39c3af..e4e42a4e20 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -9,41 +9,35 @@ import qualified ListT -- | --- A transaction specialized for backend @b@, with a level @l@, +-- A transaction specialized for backend @b@, -- running on an anonymous state-thread @s@ -- and producing a result @r@. -newtype Transaction b l s r = +newtype Transaction b s r = Transaction (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) -runWithoutLocking :: - Backend b => - (forall s. Transaction b WithoutLocking s r) -> Backend.Connection b -> IO r -runWithoutLocking (Transaction r) c = - handle backendHandler $ runReaderT r c - -runRead :: - Backend b => - Backend.IsolationLevel -> (forall s. Transaction b Read s r) -> Backend.Connection b -> IO r -runRead isolation (Transaction r) c = - handle backendHandler $ inTransaction (isolation, False) (runReaderT r c) c +type Mode = + Maybe (Backend.IsolationLevel, Bool) -runWrite :: +txIO :: Backend b => - Backend.IsolationLevel -> (forall s. Transaction b Write s r) -> Backend.Connection b -> IO r -runWrite isolation (Transaction r) c = - handle backendHandler $ inTransaction (isolation, True) (runReaderT r c) c + Mode -> Backend.Connection b -> (forall s. Transaction b s r) -> IO r +txIO mode connection (Transaction reader) = + handle backendHandler $ + maybe (const id) (inTransaction) mode + connection + (runReaderT reader connection) inTransaction :: Backend b => - Backend.TransactionMode -> IO r -> Backend.Connection b -> IO r -inTransaction mode io c = + Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r +inTransaction mode c io = do Backend.beginTransaction mode c try io >>= \case Left Backend.TransactionConflict -> do Backend.finishTransaction False c - inTransaction mode io c + inTransaction mode c io Left e -> throwIO e Right r -> do Backend.finishTransaction True c @@ -58,46 +52,6 @@ backendHandler = Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" --- * Locking Levels -------------------------- - --- | --- A level requiring no locking by the transaction --- and hence providing no ACID guarantees. --- Essentially this means that there will be no --- traditional transaction established on the backend. -data WithoutLocking - --- | --- A level requiring minimal locking from the database, --- however it only allows to execute the \"SELECT\" statements. -data Read - --- | --- A level, which allows to perform any kind of statements, --- including \"SELECT\", \"UPDATE\", \"INSERT\", \"DELETE\", --- \"CREATE\", \"DROP\" and \"ALTER\". --- --- However, compared to 'Read', --- it requires the database to choose --- a more resource-demanding locking strategy. -data Write - - --- * Privileges -------------------------- - -class CursorsPrivilege l - -instance CursorsPrivilege Read -instance CursorsPrivilege Write - -class WritingPrivilege l - -instance WritingPrivilege Write -instance WritingPrivilege WithoutLocking - - -- * Results Stream ------------------------- @@ -114,8 +68,8 @@ instance WritingPrivilege WithoutLocking -- Therefore you can only access it while remaining in a transaction, -- and, when the transaction finishes, -- all the acquired resources get automatically released. -type ResultsStream b l s r = - TransactionListT s (Transaction b l s) r +type ResultsStream b s r = + TransactionListT s (Transaction b s) r newtype TransactionListT s m r = TransactionListT (ListT.ListT m r) @@ -156,22 +110,20 @@ instance Exception Error -- * Transactions ------------------------- -type StatementTx b l s r = +type StatementTx b s r = Backend b => - Backend.Statement b -> Transaction b l s r + Backend.Statement b -> Transaction b s r -- | -- Execute a statement, which produces no result. -unitTx :: WritingPrivilege l => StatementTx b l s () +unitTx :: StatementTx b s () unitTx s = Transaction $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countTx :: - (Backend.Mapping b Integer, WritingPrivilege l) => - StatementTx b l s Integer +countTx :: (Backend.Mapping b Integer) => StatementTx b s Integer countTx s = Transaction $ ReaderT $ Backend.executeAndCountEffects s @@ -180,9 +132,7 @@ countTx s = -- which produces a results stream: -- a @SELECT@ or an @INSERT@, -- which produces a generated value (e.g., an auto-incremented id). -streamTx :: - RowParser b r => - StatementTx b l s (ResultsStream b l s r) +streamTx :: RowParser b r => StatementTx b s (ResultsStream b s r) streamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c @@ -192,9 +142,7 @@ streamTx s = -- and produce a results stream, -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. -cursorStreamTx :: - (RowParser b r, CursorsPrivilege l) => - StatementTx b l s (ResultsStream b l s r) +cursorStreamTx :: (RowParser b r) => StatementTx b s (ResultsStream b s r) cursorStreamTx s = Transaction $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c @@ -203,9 +151,7 @@ cursorStreamTx s = -- * Helpers ------------------------- -hoistBackendStream :: - RowParser b r => - Backend.ResultsStream b -> ResultsStream b l s r +hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b s r hoistBackendStream (w, s) = TransactionListT $ hoist (Transaction . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w From 5969dc43768b45e1a0d30cbe8215258057ad2df9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 00:07:40 +0400 Subject: [PATCH 0051/1204] Extract backend to external library --- hasql.cabal | 2 +- library/Hasql/Backend.hs | 105 --------------------------------------- 2 files changed, 1 insertion(+), 106 deletions(-) delete mode 100644 library/Hasql/Backend.hs diff --git a/hasql.cabal b/hasql.cabal index d51a252fee..e9254939c3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -45,9 +45,9 @@ library Hasql.Transaction Hasql.Pool exposed-modules: - Hasql.Backend Hasql build-depends: + hasql-backend == 0.1.*, -- template-haskell: template-haskell >= 2.8 && < 2.10, -- parsing: diff --git a/library/Hasql/Backend.hs b/library/Hasql/Backend.hs deleted file mode 100644 index 91ec1acfaf..0000000000 --- a/library/Hasql/Backend.hs +++ /dev/null @@ -1,105 +0,0 @@ --- | --- An open API for implementation of specific backend drivers. -module Hasql.Backend where - -import Hasql.Prelude hiding (Error) -import qualified Language.Haskell.TH as TH - - -data Error = - -- | - -- Cannot connect to a server. - CantConnect Text | - -- | - -- The connection got interrupted. - ConnectionLost Text | - UnexpectedResultStructure Text | - -- | - -- Type, input and parser error. - UnparsableResult TypeRep ByteString Text | - -- | - -- A transaction concurrency conflict, - -- whic indicates that it should be retried. - TransactionConflict - deriving (Show, Typeable) - -instance Exception Error - - --- | --- For reference see --- . -data IsolationLevel = - Serializable | - RepeatableReads | - ReadCommitted | - ReadUncommitted - - --- | --- An isolation level and a boolean, --- defining, whether the transaction will perform the "write" operations. -type TransactionMode = - (IsolationLevel, Bool) - - --- | --- A width of a row and a stream of serialized values. -type ResultsStream b = - (Int, ListT IO (Result b)) - - --- | --- A template statement with values for placeholders. -type Statement b = - (ByteString, [StatementArgument b]) - - -class Backend b where - -- | - -- An argument prepared for a statement. - data StatementArgument b - -- | - -- A raw value returned from the database. - data Result b - data Connection b - -- | - -- Open a connection using the backend's settings. - connect :: b -> IO (Connection b) - -- | - -- Close the connection. - disconnect :: Connection b -> IO () - -- | - -- Execute a statement. - execute :: Statement b -> Connection b -> IO () - -- | - -- Execute a statement - -- and stream the results. - executeAndStream :: Statement b -> Connection b -> IO (ResultsStream b) - -- | - -- Execute a statement - -- and stream the results using a cursor. - -- This function will only be used from inside of transactions. - executeAndStreamWithCursor :: Statement b -> Connection b -> IO (ResultsStream b) - -- | - -- Execute a statement, - -- returning the amount of affected rows. - executeAndCountEffects :: Statement b -> Connection b -> IO Integer - -- | - -- Start a transaction in the specified mode. - beginTransaction :: TransactionMode -> Connection b -> IO () - -- | - -- Finish the transaction, - -- while releasing all the resources acquired with 'executeAndStreamWithCursor'. - -- - -- The boolean defines whether to commit the updates, - -- otherwise it rolls back. - finishTransaction :: Bool -> Connection b -> IO () - - -class Backend b => Mapping b v where - renderValue :: v -> StatementArgument b - parseResult :: Result b -> Either Text v - - - From 829caa6c5068185e3bd6b1f64f4f2447f3678a4f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 15:23:15 +0400 Subject: [PATCH 0052/1204] Get rid of the Integer mapping dependency --- library/Hasql/Transaction.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index e4e42a4e20..cc2ea267ae 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -123,7 +123,7 @@ unitTx s = -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countTx :: (Backend.Mapping b Integer) => StatementTx b s Integer +countTx :: (Backend.Mapping b Word64) => StatementTx b s Word64 countTx s = Transaction $ ReaderT $ Backend.executeAndCountEffects s From 499b0bba604bde6443a0e2d5cf35dddc7bf765d8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 15:31:22 +0400 Subject: [PATCH 0053/1204] Docs --- library/Hasql.hs | 21 +++++++++++++-------- library/Hasql/QQ.hs | 8 +++++++- library/Hasql/Transaction.hs | 12 ++++++++++++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 2e6472b0b4..feb99c0618 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,27 +1,34 @@ module Hasql ( - -- * Pool + -- * Connections Pool Pool.Pool, Pool.Settings(..), Pool.withPool, + -- * Transaction Transaction.Transaction, - -- ** Execution Transaction.Mode, + + -- ** Execution txIO, + -- ** Transactions Transaction.StatementTx, Transaction.unitTx, Transaction.countTx, Transaction.streamTx, Transaction.cursorStreamTx, + -- ** Statement Quasi-Quoter QQ.q, + -- ** Error Transaction.Error(..), + -- ** Results Stream Transaction.ResultsStream, Transaction.TransactionListT, + -- ** Row parser RowParser.RowParser(..), ) @@ -35,13 +42,11 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ +-- | +-- Execute a transaction on a pool of connections. txIO :: Backend.Backend b => - Transaction.Mode -> Pool.Pool b -> (forall s. Transaction.Transaction b s r) -> IO r -txIO m p t = + Pool.Pool b -> Transaction.Mode -> (forall s. Transaction.Transaction b s r) -> IO r +txIO p m t = Pool.withConnection (\c -> Transaction.txIO m c t) p - - - - diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs index cccee1e019..50359b2691 100644 --- a/library/Hasql/QQ.hs +++ b/library/Hasql/QQ.hs @@ -10,7 +10,13 @@ import qualified Hasql.Backend as Backend -- | -- Produces a lambda-expression, -- which takes as many parameters as there are placeholders in the quoted text --- and results in an expression of type 'Backend.Statement'. +-- and results in an expression of type 'Backend.Statement'. +-- +-- E.g.: +-- +-- >selectFive :: Statement +-- >selectFive = [|SELECT (? + ?)|] 2 3 +-- q :: QuasiQuoter q = QuasiQuoter diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index cc2ea267ae..8398f802b3 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -16,6 +16,16 @@ newtype Transaction b s r = Transaction (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) +-- | +-- A transaction mode defining how a transaction should be executed. +-- +-- * @Just (isolationLevel, write)@ indicates that a database transaction +-- should be established with a specified isolation level and a boolean, +-- defining, whether it would perform any modification operations. +-- +-- * @Nothing@ indicates that there should be no database transaction established on +-- the backend and therefore it should be executed with no ACID guarantees, +-- but also without any induced overhead. type Mode = Maybe (Backend.IsolationLevel, Bool) @@ -110,6 +120,8 @@ instance Exception Error -- * Transactions ------------------------- +-- | +-- A function executing a statement in a transaction. type StatementTx b s r = Backend b => Backend.Statement b -> Transaction b s r From 25cea66d34ad1cb8058d9227cf8017e39e91636e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 16:17:47 +0400 Subject: [PATCH 0054/1204] A dual execution model --- library/Hasql.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/library/Hasql.hs b/library/Hasql.hs index feb99c0618..26bd25209c 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -10,8 +10,21 @@ module Hasql Transaction.Mode, -- ** Execution + -- | For your convenience there are two models of execution: + -- + -- * A simple function on IO. + -- + -- * A session monad transformer, + -- which is an adaptation of the 'ReaderT' API over the connections pool. + + -- *** Simple IO txIO, + -- *** Session + Session, + sessionInner, + txSession, + -- ** Transactions Transaction.StatementTx, Transaction.unitTx, @@ -50,3 +63,28 @@ txIO :: txIO p m t = Pool.withConnection (\c -> Transaction.txIO m c t) p + +-- * Session +------------------------- + +-- | +-- A convenience monad transformer, +-- which is just a simple wrapper around a 'ReaderT'. +type Session b = + ReaderT (Pool.Pool b) + +-- | +-- Run the session monad transformer in the inner monad. +sessionInner :: Pool.Pool b -> Session b m r -> m r +sessionInner pool reader = + runReaderT reader pool + +-- | +-- Execute a transaction in a session. +txSession :: + Backend.Backend b => MonadIO m => + Transaction.Mode -> (forall s. Transaction.Transaction b s r) -> Session b m r +txSession m t = + ReaderT $ \p -> liftIO $ txIO p m t + + From e7871816183ac7ee857134970afe55600d7f0f45 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 16:32:31 +0400 Subject: [PATCH 0055/1204] Unify the API in a single file --- hasql.cabal | 4 +- library/Hasql.hs | 248 ++++++++++++++++++++++++++++++++--- library/Hasql/Pool.hs | 53 -------- library/Hasql/Transaction.hs | 171 ------------------------ 4 files changed, 228 insertions(+), 248 deletions(-) delete mode 100644 library/Hasql/Pool.hs delete mode 100644 library/Hasql/Transaction.hs diff --git a/hasql.cabal b/hasql.cabal index e9254939c3..0f9dcc3a85 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -39,11 +39,9 @@ library library other-modules: Hasql.Prelude - Hasql.QQ.Parser Hasql.QQ + Hasql.QQ.Parser Hasql.RowParser - Hasql.Transaction - Hasql.Pool exposed-modules: Hasql build-depends: diff --git a/library/Hasql.hs b/library/Hasql.hs index 26bd25209c..83c6934a20 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,13 +1,13 @@ module Hasql ( -- * Connections Pool - Pool.Pool, - Pool.Settings(..), - Pool.withPool, + Pool, + Settings(..), + withPool, -- * Transaction - Transaction.Transaction, - Transaction.Mode, + Transaction, + Mode, -- ** Execution -- | For your convenience there are two models of execution: @@ -26,42 +26,142 @@ module Hasql txSession, -- ** Transactions - Transaction.StatementTx, - Transaction.unitTx, - Transaction.countTx, - Transaction.streamTx, - Transaction.cursorStreamTx, + StatementTx, + unitTx, + countTx, + streamTx, + cursorStreamTx, -- ** Statement Quasi-Quoter QQ.q, -- ** Error - Transaction.Error(..), + Error(..), -- ** Results Stream - Transaction.ResultsStream, - Transaction.TransactionListT, + ResultsStream, + TransactionListT, -- ** Row parser RowParser.RowParser(..), ) where -import Hasql.Prelude hiding (read) +import Hasql.Prelude hiding (Error) +import Hasql.Backend (Backend) +import Hasql.RowParser (RowParser) import qualified Hasql.Backend as Backend -import qualified Hasql.Transaction as Transaction -import qualified Hasql.Pool as Pool import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ +import qualified ListT +import qualified Data.Pool as Pool +-- * Connections Pool +------------------------- + +-- | +-- A pool of connections to the database. +type Pool b = + Pool.Pool (Backend.Connection b) + +-- | +-- Pool initization settings. +data Settings = + Settings { + -- | + -- The number of stripes (distinct sub-pools) to maintain. + -- The smallest acceptable value is 1. + striping1 :: Word32, + -- | + -- The maximum number of connections to keep open per a pool stripe. + -- The smallest acceptable value is 1. + -- Requests for connections will block if this limit is reached + -- on a single stripe, + -- even if other stripes have idle connections available. + striping2 :: Word32, + -- | + -- The amount of time for which an unused connection is kept open. + -- The smallest acceptable value is 0.5 seconds. + connectionTimeout :: NominalDiffTime + } + +-- | +-- Initialize a pool given a backend and settings +-- and run an IO computation with it, +-- while automating the resource management. +withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a +withPool b s = + bracket acquire Pool.purgePool + where + acquire = + do + pool <- + Pool.createPool + (Backend.connect b) (Backend.disconnect) + (striping1 s) (connectionTimeout s) (striping2 s) + return pool + + +-- * Transaction +------------------------- + +-- | +-- A transaction specialized for backend @b@, +-- running on an anonymous state-thread @s@ +-- and producing a result @r@. +newtype Transaction b s r = + Transaction (ReaderT (Backend.Connection b) IO r) + deriving (Functor, Applicative, Monad) + +-- | +-- A transaction mode defining how a transaction should be executed. +-- +-- * @Just (isolationLevel, write)@ indicates that a database transaction +-- should be established with a specified isolation level and a boolean, +-- defining, whether it would perform any modification operations. +-- +-- * @Nothing@ indicates that there should be no database transaction established on +-- the backend and therefore it should be executed with no ACID guarantees, +-- but also without any induced overhead. +type Mode = + Maybe (Backend.IsolationLevel, Bool) + -- | -- Execute a transaction on a pool of connections. txIO :: Backend.Backend b => - Pool.Pool b -> Transaction.Mode -> (forall s. Transaction.Transaction b s r) -> IO r + Pool b -> Mode -> (forall s. Transaction b s r) -> IO r txIO p m t = - Pool.withConnection (\c -> Transaction.txIO m c t) p + Pool.withResource p (\c -> txIO m c t) + where + txIO :: + Backend b => + Mode -> Backend.Connection b -> (forall s. Transaction b s r) -> IO r + txIO mode connection (Transaction reader) = + handle backendHandler $ + maybe (const id) inTransaction mode connection (runReaderT reader connection) + inTransaction :: + Backend b => + Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r + inTransaction mode c io = + do + Backend.beginTransaction mode c + try io >>= \case + Left Backend.TransactionConflict -> do + Backend.finishTransaction False c + inTransaction mode c io + Left e -> throwIO e + Right r -> do + Backend.finishTransaction True c + return r + backendHandler :: Backend.Error -> IO a + backendHandler = + \case + Backend.CantConnect t -> throwIO $ CantConnect t + Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t + Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" -- * Session @@ -71,11 +171,11 @@ txIO p m t = -- A convenience monad transformer, -- which is just a simple wrapper around a 'ReaderT'. type Session b = - ReaderT (Pool.Pool b) + ReaderT (Pool b) -- | -- Run the session monad transformer in the inner monad. -sessionInner :: Pool.Pool b -> Session b m r -> m r +sessionInner :: Pool b -> Session b m r -> m r sessionInner pool reader = runReaderT reader pool @@ -83,8 +183,114 @@ sessionInner pool reader = -- Execute a transaction in a session. txSession :: Backend.Backend b => MonadIO m => - Transaction.Mode -> (forall s. Transaction.Transaction b s r) -> Session b m r + Mode -> (forall s. Transaction b s r) -> Session b m r txSession m t = ReaderT $ \p -> liftIO $ txIO p m t +-- * Results Stream +------------------------- + +-- | +-- A stream of results, +-- which fetches only those that you reach. +-- +-- It is implemented as a wrapper around 'ListT.ListT', +-- hence all the utility functions of the list transformer API +-- are applicable to this type. +-- +-- It uses the same trick as 'ST' to become impossible to be +-- executed outside of its transaction. +-- Therefore you can only access it while remaining in a transaction, +-- and, when the transaction finishes, +-- all the acquired resources get automatically released. +type ResultsStream b s r = + TransactionListT s (Transaction b s) r + +newtype TransactionListT s m r = + TransactionListT (ListT.ListT m r) + deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, + Monoid, ListT.ListMonad) + +instance ListT.ListTrans (TransactionListT s) where + uncons = + unsafeCoerce + (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) + + +-- * Error +------------------------- + +-- | +-- The only exception type that this API can raise. +data Error = + -- | + -- Cannot connect to a server. + CantConnect Text | + -- | + -- The connection got interrupted. + ConnectionLost Text | + -- | + -- Unexpected result structure. + -- Indicates usage of inappropriate statement executor. + UnexpectedResultStructure Text | + -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + ResultParsingError Text + deriving (Show, Typeable) + +instance Exception Error + + +-- * Transactions +------------------------- + +-- | +-- A function executing a statement in a transaction. +type StatementTx b s r = + Backend b => + Backend.Statement b -> Transaction b s r + +-- | +-- Execute a statement, which produces no result. +unitTx :: StatementTx b s () +unitTx s = + Transaction $ ReaderT $ Backend.execute s + +-- | +-- Execute a statement and count the amount of affected rows. +-- Useful for resolving how many rows were updated or deleted. +countTx :: (Backend.Mapping b Word64) => StatementTx b s Word64 +countTx s = + Transaction $ ReaderT $ Backend.executeAndCountEffects s + +-- | +-- Execute a statement, +-- which produces a results stream: +-- a @SELECT@ or an @INSERT@, +-- which produces a generated value (e.g., an auto-incremented id). +streamTx :: RowParser b r => StatementTx b s (ResultsStream b s r) +streamTx s = + Transaction $ ReaderT $ \c -> do + fmap hoistBackendStream $ Backend.executeAndStream s c + +-- | +-- Execute a @SELECT@ statement +-- and produce a results stream, +-- which utilizes a database cursor. +-- This function allows you to fetch virtually limitless results in a constant memory. +cursorStreamTx :: (RowParser b r) => StatementTx b s (ResultsStream b s r) +cursorStreamTx s = + Transaction $ ReaderT $ \c -> do + fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c + + +-- * Helpers +------------------------- + +hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b s r +hoistBackendStream (w, s) = + TransactionListT $ hoist (Transaction . lift) $ do + row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w + either (lift . throwIO . ResultParsingError) return $ RowParser.parse row diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs deleted file mode 100644 index d1929f211d..0000000000 --- a/library/Hasql/Pool.hs +++ /dev/null @@ -1,53 +0,0 @@ -module Hasql.Pool where - -import Hasql.Prelude hiding (read, Read, write, Write, Error) -import qualified Data.Pool as Pool -import qualified Hasql.Backend as Backend -import qualified Hasql.RowParser as RowParser -import qualified ListT - - --- | --- A pool of connections to the database. -type Pool b = - Pool.Pool (Backend.Connection b) - --- | --- Pool initization settings. -data Settings = - Settings { - -- | - -- The number of stripes (distinct sub-pools) to maintain. - -- The smallest acceptable value is 1. - striping1 :: Word32, - -- | - -- The maximum number of connections to keep open per a pool stripe. - -- The smallest acceptable value is 1. - -- Requests for connections will block if this limit is reached - -- on a single stripe, - -- even if other stripes have idle connections available. - striping2 :: Word32, - -- | - -- The amount of time for which an unused connection is kept open. - -- The smallest acceptable value is 0.5 seconds. - connectionTimeout :: NominalDiffTime - } - --- | --- Initialize a pool given a backend and settings --- and run an IO computation with it, --- while automating the resource management. -withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a -withPool b s = - bracket acquire Pool.purgePool - where - acquire = - do - pool <- - Pool.createPool - (Backend.connect b) (Backend.disconnect) - (striping1 s) (connectionTimeout s) (striping2 s) - return pool - -withConnection :: (Backend.Connection b -> IO r) -> Pool b -> IO r -withConnection = flip Pool.withResource diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs deleted file mode 100644 index 8398f802b3..0000000000 --- a/library/Hasql/Transaction.hs +++ /dev/null @@ -1,171 +0,0 @@ -module Hasql.Transaction where - -import Hasql.Prelude hiding (Read, Write, Error) -import Hasql.Backend (Backend) -import Hasql.RowParser (RowParser) -import qualified Hasql.Backend as Backend -import qualified Hasql.RowParser as RowParser -import qualified ListT - - --- | --- A transaction specialized for backend @b@, --- running on an anonymous state-thread @s@ --- and producing a result @r@. -newtype Transaction b s r = - Transaction (ReaderT (Backend.Connection b) IO r) - deriving (Functor, Applicative, Monad) - --- | --- A transaction mode defining how a transaction should be executed. --- --- * @Just (isolationLevel, write)@ indicates that a database transaction --- should be established with a specified isolation level and a boolean, --- defining, whether it would perform any modification operations. --- --- * @Nothing@ indicates that there should be no database transaction established on --- the backend and therefore it should be executed with no ACID guarantees, --- but also without any induced overhead. -type Mode = - Maybe (Backend.IsolationLevel, Bool) - -txIO :: - Backend b => - Mode -> Backend.Connection b -> (forall s. Transaction b s r) -> IO r -txIO mode connection (Transaction reader) = - handle backendHandler $ - maybe (const id) (inTransaction) mode - connection - (runReaderT reader connection) - -inTransaction :: - Backend b => - Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r -inTransaction mode c io = - do - Backend.beginTransaction mode c - try io >>= \case - Left Backend.TransactionConflict -> do - Backend.finishTransaction False c - inTransaction mode c io - Left e -> throwIO e - Right r -> do - Backend.finishTransaction True c - return r - -backendHandler :: Backend.Error -> IO a -backendHandler = - \case - Backend.CantConnect t -> throwIO $ CantConnect t - Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t - Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" - - --- * Results Stream -------------------------- - --- | --- A stream of results, --- which fetches only those that you reach. --- --- It is implemented as a wrapper around 'ListT.ListT', --- hence all the utility functions of the list transformer API --- are applicable to this type. --- --- It uses the same trick as 'ST' to become impossible to be --- executed outside of its transaction. --- Therefore you can only access it while remaining in a transaction, --- and, when the transaction finishes, --- all the acquired resources get automatically released. -type ResultsStream b s r = - TransactionListT s (Transaction b s) r - -newtype TransactionListT s m r = - TransactionListT (ListT.ListT m r) - deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.ListMonad) - -instance ListT.ListTrans (TransactionListT s) where - uncons = - unsafeCoerce - (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) - - --- * Error -------------------------- - --- | --- The only exception type that this API can raise. -data Error = - -- | - -- Cannot connect to a server. - CantConnect Text | - -- | - -- The connection got interrupted. - ConnectionLost Text | - -- | - -- Unexpected result structure. - -- Indicates usage of inappropriate statement executor. - UnexpectedResultStructure Text | - -- | - -- Attempt to parse a statement execution result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError Text - deriving (Show, Typeable) - -instance Exception Error - - --- * Transactions -------------------------- - --- | --- A function executing a statement in a transaction. -type StatementTx b s r = - Backend b => - Backend.Statement b -> Transaction b s r - --- | --- Execute a statement, which produces no result. -unitTx :: StatementTx b s () -unitTx s = - Transaction $ ReaderT $ Backend.execute s - --- | --- Execute a statement and count the amount of affected rows. --- Useful for resolving how many rows were updated or deleted. -countTx :: (Backend.Mapping b Word64) => StatementTx b s Word64 -countTx s = - Transaction $ ReaderT $ Backend.executeAndCountEffects s - --- | --- Execute a statement, --- which produces a results stream: --- a @SELECT@ or an @INSERT@, --- which produces a generated value (e.g., an auto-incremented id). -streamTx :: RowParser b r => StatementTx b s (ResultsStream b s r) -streamTx s = - Transaction $ ReaderT $ \c -> do - fmap hoistBackendStream $ Backend.executeAndStream s c - --- | --- Execute a @SELECT@ statement --- and produce a results stream, --- which utilizes a database cursor. --- This function allows you to fetch virtually limitless results in a constant memory. -cursorStreamTx :: (RowParser b r) => StatementTx b s (ResultsStream b s r) -cursorStreamTx s = - Transaction $ ReaderT $ \c -> do - fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c - - --- * Helpers -------------------------- - -hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b s r -hoistBackendStream (w, s) = - TransactionListT $ hoist (Transaction . lift) $ do - row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w - either (lift . throwIO . ResultParsingError) return $ RowParser.parse row - From d47e98e9a3f0c4aa21ad3ad9b0e32c30ccacdf08 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 16:33:33 +0400 Subject: [PATCH 0056/1204] parse -> parseRow --- library/Hasql.hs | 2 +- library/Hasql/RowParser.hs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 83c6934a20..693ea32b6f 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -293,4 +293,4 @@ hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream hoistBackendStream (w, s) = TransactionListT $ hoist (Transaction . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w - either (lift . throwIO . ResultParsingError) return $ RowParser.parse row + either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index 65c4b34dc0..a36fb8547a 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -7,13 +7,13 @@ import qualified Hasql.Backend as Backend class RowParser b r where - parse :: [Backend.Result b] -> Either Text r + parseRow :: [Backend.Result b] -> Either Text r instance RowParser b () where - parse = \case [] -> Right (); _ -> Left $ "Row is not empty" + parseRow = \case [] -> Right (); _ -> Left $ "Row is not empty" instance Backend.Mapping b v => RowParser b (Identity v) where - parse l = do + parseRow l = do h <- maybe (Left $ "Empty row") Right $ headMay l Identity <$> Backend.parseResult h @@ -21,7 +21,7 @@ instance Backend.Mapping b v => RowParser b (Identity v) where let inst :: Int -> Dec inst arity = - InstanceD constraints head [parseDec] + InstanceD constraints head [parseRowDec] where varNames = [1 .. arity] >>= \i -> return (mkName ('_' : show i)) @@ -33,8 +33,8 @@ let map (\t -> ClassP ''Backend.Mapping [backendType, t]) varTypes head = AppT (AppT (ConT ''RowParser) backendType) (foldl AppT (TupleT arity) varTypes) - parseDec = - FunD 'parse [c1, c2] + parseRowDec = + FunD 'parseRow [c1, c2] where c1 = Clause [ListP (map VarP varNames)] (NormalB e) [] From f43aaffee92a73b8d3afbf6b07c4936ee10e730d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 16:34:04 +0400 Subject: [PATCH 0057/1204] Cleanup --- library/Hasql/RowParser.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index a36fb8547a..8574db84cb 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -2,7 +2,6 @@ module Hasql.RowParser where import Hasql.Prelude import Language.Haskell.TH -import qualified Data.Text as Text import qualified Hasql.Backend as Backend From 589fa7a8b5a8bd1134e24b81fa5bb97ff4893b83 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 16:34:59 +0400 Subject: [PATCH 0058/1204] Cleanup --- library/Hasql.hs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 693ea32b6f..1ec2d90240 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -95,12 +95,9 @@ withPool b s = bracket acquire Pool.purgePool where acquire = - do - pool <- - Pool.createPool - (Backend.connect b) (Backend.disconnect) - (striping1 s) (connectionTimeout s) (striping2 s) - return pool + Pool.createPool + (Backend.connect b) (Backend.disconnect) + (striping1 s) (connectionTimeout s) (striping2 s) -- * Transaction From 136237f72577864cd70d2c9abed14d27081aabd0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 17:56:16 +0400 Subject: [PATCH 0059/1204] Reimplement Pool --- library/Hasql.hs | 84 +++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 1ec2d90240..a789522e1f 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -2,8 +2,10 @@ module Hasql ( -- * Connections Pool Pool, - Settings(..), - withPool, + PoolSettings, + poolSettings, + acquirePool, + releasePool, -- * Transaction Transaction, @@ -61,43 +63,53 @@ import qualified Data.Pool as Pool ------------------------- -- | --- A pool of connections to the database. -type Pool b = - Pool.Pool (Backend.Connection b) +-- A connections pool. +newtype Pool b = + Pool (Pool.Pool (Backend.Connection b)) -- | --- Pool initization settings. -data Settings = - Settings { - -- | - -- The number of stripes (distinct sub-pools) to maintain. - -- The smallest acceptable value is 1. - striping1 :: Word32, - -- | - -- The maximum number of connections to keep open per a pool stripe. - -- The smallest acceptable value is 1. - -- Requests for connections will block if this limit is reached - -- on a single stripe, - -- even if other stripes have idle connections available. - striping2 :: Word32, - -- | - -- The amount of time for which an unused connection is kept open. - -- The smallest acceptable value is 0.5 seconds. - connectionTimeout :: NominalDiffTime - } +-- Settings of a connections pool. +data PoolSettings = + PoolSettings !Word32 !NominalDiffTime + +-- | +-- A smart constructor for pool settings. +poolSettings :: + Word32 + -- ^ + -- The maximum number of connections to keep open. + -- The smallest acceptable value is 1. + -- Requests for connections will block if this limit is reached. + -> + NominalDiffTime + -- ^ + -- The amount of time for which an unused connection is kept open. + -- The smallest acceptable value is 0.5 seconds. + -> + Maybe PoolSettings + -- ^ + -- Maybe pool settings, if they are correct. +poolSettings size timeout = + if size > 0 && timeout >= 0.5 + then Just $ PoolSettings size timeout + else Nothing -- | --- Initialize a pool given a backend and settings --- and run an IO computation with it, --- while automating the resource management. -withPool :: Backend.Backend b => b -> Settings -> (Pool b -> IO a) -> IO a -withPool b s = - bracket acquire Pool.purgePool - where - acquire = - Pool.createPool - (Backend.connect b) (Backend.disconnect) - (striping1 s) (connectionTimeout s) (striping2 s) +-- Initialize a pool given a backend and settings. +acquirePool :: Backend.Backend b => b -> PoolSettings -> IO (Pool b) +acquirePool b (PoolSettings size timeout) = + fmap Pool $ + Pool.createPool (Backend.connect b) (Backend.disconnect) 1 timeout size + +-- | +-- Release all resources of the pool. +releasePool :: Pool b -> IO () +releasePool (Pool p) = + Pool.purgePool p + +usePool :: (Backend.Connection b -> IO a) -> Pool b -> IO a +usePool f (Pool p) = + Pool.withResource p f -- * Transaction @@ -130,7 +142,7 @@ txIO :: Backend.Backend b => Pool b -> Mode -> (forall s. Transaction b s r) -> IO r txIO p m t = - Pool.withResource p (\c -> txIO m c t) + usePool (\c -> txIO m c t) p where txIO :: Backend b => From 98def4b8e4a573e7a83bd527adbdec92ac8075ec Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 17:58:25 +0400 Subject: [PATCH 0060/1204] Transaction -> Tx --- library/Hasql.hs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index a789522e1f..c664080bf6 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -8,7 +8,7 @@ module Hasql releasePool, -- * Transaction - Transaction, + Tx, Mode, -- ** Execution @@ -42,7 +42,7 @@ module Hasql -- ** Results Stream ResultsStream, - TransactionListT, + TxListT, -- ** Row parser RowParser.RowParser(..), @@ -119,8 +119,8 @@ usePool f (Pool p) = -- A transaction specialized for backend @b@, -- running on an anonymous state-thread @s@ -- and producing a result @r@. -newtype Transaction b s r = - Transaction (ReaderT (Backend.Connection b) IO r) +newtype Tx b s r = + Tx (ReaderT (Backend.Connection b) IO r) deriving (Functor, Applicative, Monad) -- | @@ -140,14 +140,14 @@ type Mode = -- Execute a transaction on a pool of connections. txIO :: Backend.Backend b => - Pool b -> Mode -> (forall s. Transaction b s r) -> IO r + Pool b -> Mode -> (forall s. Tx b s r) -> IO r txIO p m t = usePool (\c -> txIO m c t) p where txIO :: Backend b => - Mode -> Backend.Connection b -> (forall s. Transaction b s r) -> IO r - txIO mode connection (Transaction reader) = + Mode -> Backend.Connection b -> (forall s. Tx b s r) -> IO r + txIO mode connection (Tx reader) = handle backendHandler $ maybe (const id) inTransaction mode connection (runReaderT reader connection) inTransaction :: @@ -192,7 +192,7 @@ sessionInner pool reader = -- Execute a transaction in a session. txSession :: Backend.Backend b => MonadIO m => - Mode -> (forall s. Transaction b s r) -> Session b m r + Mode -> (forall s. Tx b s r) -> Session b m r txSession m t = ReaderT $ \p -> liftIO $ txIO p m t @@ -214,14 +214,14 @@ txSession m t = -- and, when the transaction finishes, -- all the acquired resources get automatically released. type ResultsStream b s r = - TransactionListT s (Transaction b s) r + TxListT s (Tx b s) r -newtype TransactionListT s m r = - TransactionListT (ListT.ListT m r) +newtype TxListT s m r = + TxListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.ListMonad) -instance ListT.ListTrans (TransactionListT s) where +instance ListT.ListTrans (TxListT s) where uncons = unsafeCoerce (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) @@ -259,20 +259,20 @@ instance Exception Error -- A function executing a statement in a transaction. type StatementTx b s r = Backend b => - Backend.Statement b -> Transaction b s r + Backend.Statement b -> Tx b s r -- | -- Execute a statement, which produces no result. unitTx :: StatementTx b s () unitTx s = - Transaction $ ReaderT $ Backend.execute s + Tx $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. countTx :: (Backend.Mapping b Word64) => StatementTx b s Word64 countTx s = - Transaction $ ReaderT $ Backend.executeAndCountEffects s + Tx $ ReaderT $ Backend.executeAndCountEffects s -- | -- Execute a statement, @@ -281,7 +281,7 @@ countTx s = -- which produces a generated value (e.g., an auto-incremented id). streamTx :: RowParser b r => StatementTx b s (ResultsStream b s r) streamTx s = - Transaction $ ReaderT $ \c -> do + Tx $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c -- | @@ -291,7 +291,7 @@ streamTx s = -- This function allows you to fetch virtually limitless results in a constant memory. cursorStreamTx :: (RowParser b r) => StatementTx b s (ResultsStream b s r) cursorStreamTx s = - Transaction $ ReaderT $ \c -> do + Tx $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c @@ -300,6 +300,6 @@ cursorStreamTx s = hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b s r hoistBackendStream (w, s) = - TransactionListT $ hoist (Transaction . lift) $ do + TxListT $ hoist (Tx . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row From eabf0be1d93b86a4103d83afb3625e28b855ba90 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 17:59:01 +0400 Subject: [PATCH 0061/1204] Docs --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index c664080bf6..1e45435990 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -27,7 +27,7 @@ module Hasql sessionInner, txSession, - -- ** Transactions + -- ** Statements execution StatementTx, unitTx, countTx, From 8f5a8e3e603e2db78d0e053728eb4cf57ea134cd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 18:40:31 +0400 Subject: [PATCH 0062/1204] Export IsolationLevel --- library/Hasql.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 1e45435990..07770fb5fc 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -10,7 +10,8 @@ module Hasql -- * Transaction Tx, Mode, - + Backend.IsolationLevel(..), + -- ** Execution -- | For your convenience there are two models of execution: -- From b07d0c588a09391bea00a1088103dc1423e9e510 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 18:44:50 +0400 Subject: [PATCH 0063/1204] Remove duality from execution model --- library/Hasql.hs | 77 ++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 07770fb5fc..b094110241 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -7,28 +7,20 @@ module Hasql acquirePool, releasePool, + -- * Session + Session, + sessionInner, + -- * Transaction Tx, Mode, Backend.IsolationLevel(..), - - -- ** Execution - -- | For your convenience there are two models of execution: - -- - -- * A simple function on IO. - -- - -- * A session monad transformer, - -- which is an adaptation of the 'ReaderT' API over the connections pool. - - -- *** Simple IO - txIO, - - -- *** Session - Session, - sessionInner, txSession, - -- ** Statements execution + -- * Statement + Backend.Statement, + + -- ** Statement Execution StatementTx, unitTx, countTx, @@ -113,6 +105,22 @@ usePool f (Pool p) = Pool.withResource p f +-- * Session +------------------------- + +-- | +-- A session monad transformer, +-- which is an adaptation of the 'ReaderT' API over the connections pool. +type Session b = + ReaderT (Pool b) + +-- | +-- Run the session monad transformer in the inner monad. +sessionInner :: Pool b -> Session b m r -> m r +sessionInner pool reader = + runReaderT reader pool + + -- * Transaction ------------------------- @@ -138,19 +146,14 @@ type Mode = Maybe (Backend.IsolationLevel, Bool) -- | --- Execute a transaction on a pool of connections. -txIO :: - Backend.Backend b => - Pool b -> Mode -> (forall s. Tx b s r) -> IO r -txIO p m t = - usePool (\c -> txIO m c t) p +-- Execute a transaction on a connection. +txIO :: + Backend b => + Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r +txIO connection mode (Tx reader) = + handle backendHandler $ + maybe (const id) inTransaction mode connection (runReaderT reader connection) where - txIO :: - Backend b => - Mode -> Backend.Connection b -> (forall s. Tx b s r) -> IO r - txIO mode connection (Tx reader) = - handle backendHandler $ - maybe (const id) inTransaction mode connection (runReaderT reader connection) inTransaction :: Backend b => Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r @@ -173,29 +176,13 @@ txIO p m t = Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" - --- * Session -------------------------- - --- | --- A convenience monad transformer, --- which is just a simple wrapper around a 'ReaderT'. -type Session b = - ReaderT (Pool b) - --- | --- Run the session monad transformer in the inner monad. -sessionInner :: Pool b -> Session b m r -> m r -sessionInner pool reader = - runReaderT reader pool - -- | -- Execute a transaction in a session. txSession :: Backend.Backend b => MonadIO m => Mode -> (forall s. Tx b s r) -> Session b m r txSession m t = - ReaderT $ \p -> liftIO $ txIO p m t + ReaderT $ \p -> liftIO $ usePool (\c -> txIO c m t) p -- * Results Stream From b1d2aa8d4358da3f5466b495aa66915c02645c05 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 19:54:40 +0400 Subject: [PATCH 0064/1204] Docs on TxListT --- library/Hasql.hs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index b094110241..6730da4164 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -191,19 +191,18 @@ txSession m t = -- | -- A stream of results, -- which fetches only those that you reach. --- --- It is implemented as a wrapper around 'ListT.ListT', --- hence all the utility functions of the list transformer API --- are applicable to this type. --- --- It uses the same trick as 'ST' to become impossible to be --- executed outside of its transaction. --- Therefore you can only access it while remaining in a transaction, --- and, when the transaction finishes, --- all the acquired resources get automatically released. type ResultsStream b s r = TxListT s (Tx b s) r +-- | +-- A wrapper around 'ListT.ListT', +-- which uses the same trick as the 'ST' monad to associate with the +-- context transaction and become impossible to be used outside of it. +-- This lets the library ensure that it is safe to automatically +-- release all the resources associated with this stream. +-- +-- All the functions of the \"list-t\" library are applicable to this type, +-- amongst which are 'ListT.fold', 'ListT.traverse_', 'ListT.toList'. newtype TxListT s m r = TxListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, From 1a83e916fed8cec60bd4fa4f96160dc4ec2924a9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 19:58:05 +0400 Subject: [PATCH 0065/1204] Remove Statement from exports --- library/Hasql.hs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 6730da4164..e9a01f2baa 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -17,17 +17,14 @@ module Hasql Backend.IsolationLevel(..), txSession, - -- * Statement - Backend.Statement, - - -- ** Statement Execution + -- * Statement Execution StatementTx, unitTx, countTx, streamTx, cursorStreamTx, - -- ** Statement Quasi-Quoter + -- * Statement Quasi-Quoter QQ.q, -- ** Error From a47ac65a122b3806c4c9189b2f7018a465c6be6a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:05:43 +0400 Subject: [PATCH 0066/1204] Correct the docs on "q" --- library/Hasql/QQ.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs index 50359b2691..5c90b65d6e 100644 --- a/library/Hasql/QQ.hs +++ b/library/Hasql/QQ.hs @@ -14,8 +14,8 @@ import qualified Hasql.Backend as Backend -- -- E.g.: -- --- >selectFive :: Statement --- >selectFive = [|SELECT (? + ?)|] 2 3 +-- >selectFive :: Statement b +-- >selectFive = [q|SELECT (? + ?)|] 2 3 -- q :: QuasiQuoter q = From 5379bf6feab8f544af020a31ca1f88445bef1b39 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:13:34 +0400 Subject: [PATCH 0067/1204] Rename ResultsStream --- library/Hasql.hs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index e9a01f2baa..7f7148b210 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -31,8 +31,8 @@ module Hasql Error(..), -- ** Results Stream - ResultsStream, - TxListT, + TxStream, + TxStreamT, -- ** Row parser RowParser.RowParser(..), @@ -188,8 +188,8 @@ txSession m t = -- | -- A stream of results, -- which fetches only those that you reach. -type ResultsStream b s r = - TxListT s (Tx b s) r +type TxStream b s r = + TxStreamT s (Tx b s) r -- | -- A wrapper around 'ListT.ListT', @@ -200,12 +200,12 @@ type ResultsStream b s r = -- -- All the functions of the \"list-t\" library are applicable to this type, -- amongst which are 'ListT.fold', 'ListT.traverse_', 'ListT.toList'. -newtype TxListT s m r = - TxListT (ListT.ListT m r) +newtype TxStreamT s m r = + TxStreamT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.ListMonad) -instance ListT.ListTrans (TxListT s) where +instance ListT.ListTrans (TxStreamT s) where uncons = unsafeCoerce (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) @@ -263,7 +263,7 @@ countTx s = -- which produces a results stream: -- a @SELECT@ or an @INSERT@, -- which produces a generated value (e.g., an auto-incremented id). -streamTx :: RowParser b r => StatementTx b s (ResultsStream b s r) +streamTx :: RowParser b r => StatementTx b s (TxStream b s r) streamTx s = Tx $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStream s c @@ -273,7 +273,7 @@ streamTx s = -- and produce a results stream, -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. -cursorStreamTx :: (RowParser b r) => StatementTx b s (ResultsStream b s r) +cursorStreamTx :: (RowParser b r) => StatementTx b s (TxStream b s r) cursorStreamTx s = Tx $ ReaderT $ \c -> do fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c @@ -282,8 +282,8 @@ cursorStreamTx s = -- * Helpers ------------------------- -hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> ResultsStream b s r +hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> TxStream b s r hoistBackendStream (w, s) = - TxListT $ hoist (Tx . lift) $ do + TxStreamT $ hoist (Tx . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row From 81c9d9996cac9fcccec59fb85441688bb46735aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:04:11 +0400 Subject: [PATCH 0068/1204] Make the API Session-centric --- hasql.cabal | 2 + library/Hasql.hs | 89 ++++++++++++++++++++-------------------- library/Hasql/Prelude.hs | 8 ++++ 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 0f9dcc3a85..9c480641ce 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -65,6 +65,8 @@ library loch-th == 0.2.*, placeholders == 0.1.*, -- general: + monad-control == 0.3.*, + transformers-base == 0.4.*, safe >= 0.3.8 && < 0.4, mmorph == 1.0.*, mtl-prelude == 2.*, diff --git a/library/Hasql.hs b/library/Hasql.hs index 7f7148b210..f561c5eebd 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,22 +1,21 @@ module Hasql ( - -- * Connections Pool - Pool, - PoolSettings, - poolSettings, - acquirePool, - releasePool, - -- * Session Session, sessionInner, - + + -- * Error + Error(..), + -- * Transaction Tx, Mode, Backend.IsolationLevel(..), txSession, + -- * Statement Quasi-Quoter + QQ.q, + -- * Statement Execution StatementTx, unitTx, @@ -24,17 +23,11 @@ module Hasql streamTx, cursorStreamTx, - -- * Statement Quasi-Quoter - QQ.q, - - -- ** Error - Error(..), - - -- ** Results Stream + -- * Results Stream TxStream, TxStreamT, - -- ** Row parser + -- * Row parser RowParser.RowParser(..), ) where @@ -49,6 +42,38 @@ import qualified ListT import qualified Data.Pool as Pool +-- * Session +------------------------- + +-- | +-- A monad transformer, +-- which executes transactions. +type Session b = + ReaderT (Pool b) + +-- | +-- Given backend settings, pool settings, and a session monad transformer +-- execute it in the inner monad. +sessionInner :: + Backend.Backend b => MonadBaseControl IO m => + b -> PoolSettings -> Session b m r -> m r +sessionInner backend settings reader = + join $ liftM restoreM $ liftBaseWith $ \runInIO -> + mask $ \unmask -> do + p <- acquirePool backend settings + r <- ($ releasePool p) $ onException $ unmask $ runInIO $ runReaderT reader p + releasePool p + return r + +-- | +-- Execute a transaction in a session. +txSession :: + Backend.Backend b => MonadBase IO m => + Mode -> (forall s. Tx b s r) -> Session b m r +txSession m t = + ReaderT $ \p -> liftBase $ usePool (\c -> runTx c m t) p + + -- * Connections Pool ------------------------- @@ -102,22 +127,6 @@ usePool f (Pool p) = Pool.withResource p f --- * Session -------------------------- - --- | --- A session monad transformer, --- which is an adaptation of the 'ReaderT' API over the connections pool. -type Session b = - ReaderT (Pool b) - --- | --- Run the session monad transformer in the inner monad. -sessionInner :: Pool b -> Session b m r -> m r -sessionInner pool reader = - runReaderT reader pool - - -- * Transaction ------------------------- @@ -142,12 +151,10 @@ newtype Tx b s r = type Mode = Maybe (Backend.IsolationLevel, Bool) --- | --- Execute a transaction on a connection. -txIO :: +runTx :: Backend b => Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r -txIO connection mode (Tx reader) = +runTx connection mode (Tx reader) = handle backendHandler $ maybe (const id) inTransaction mode connection (runReaderT reader connection) where @@ -173,14 +180,6 @@ txIO connection mode (Tx reader) = Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" --- | --- Execute a transaction in a session. -txSession :: - Backend.Backend b => MonadIO m => - Mode -> (forall s. Tx b s r) -> Session b m r -txSession m t = - ReaderT $ \p -> liftIO $ usePool (\c -> txIO c m t) p - -- * Results Stream ------------------------- @@ -236,7 +235,7 @@ data Error = instance Exception Error --- * Transactions +-- * Statements execution ------------------------- -- | diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index a1a9990897..2b36edddec 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -19,6 +19,14 @@ import MTLPrelude as Exports hiding (shift) ------------------------- import Control.Monad.Morph as Exports +-- monad-control +------------------------- +import Control.Monad.Trans.Control as Exports + +-- transformers-base +------------------------- +import Control.Monad.Base as Exports + -- safe ------------------------- import Safe as Exports From d946f442d9b79fd8ee565af0a4f7d630dc2dfab9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:33:31 +0400 Subject: [PATCH 0069/1204] Move the streaming functions out of the base monad --- library/Hasql.hs | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index f561c5eebd..da82f149e1 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -17,15 +17,13 @@ module Hasql QQ.q, -- * Statement Execution - StatementTx, unitTx, countTx, streamTx, cursorStreamTx, -- * Results Stream - TxStream, - TxStreamT, + TxListT, -- * Row parser RowParser.RowParser(..), @@ -187,24 +185,21 @@ runTx connection mode (Tx reader) = -- | -- A stream of results, -- which fetches only those that you reach. -type TxStream b s r = - TxStreamT s (Tx b s) r - --- | --- A wrapper around 'ListT.ListT', +-- +-- It's a wrapper around 'ListT.ListT', -- which uses the same trick as the 'ST' monad to associate with the -- context transaction and become impossible to be used outside of it. -- This lets the library ensure that it is safe to automatically -- release all the resources associated with this stream. -- -- All the functions of the \"list-t\" library are applicable to this type, --- amongst which are 'ListT.fold', 'ListT.traverse_', 'ListT.toList'. -newtype TxStreamT s m r = - TxStreamT (ListT.ListT m r) +-- amongst which are 'ListT.head', 'ListT.toList', 'ListT.fold', 'ListT.traverse_'. +newtype TxListT s m r = + TxListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.ListMonad) -instance ListT.ListTrans (TxStreamT s) where +instance ListT.ListTrans (TxListT s) where uncons = unsafeCoerce (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) @@ -238,22 +233,16 @@ instance Exception Error -- * Statements execution ------------------------- --- | --- A function executing a statement in a transaction. -type StatementTx b s r = - Backend b => - Backend.Statement b -> Tx b s r - -- | -- Execute a statement, which produces no result. -unitTx :: StatementTx b s () +unitTx :: Backend b => Backend.Statement b -> Tx b s () unitTx s = Tx $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countTx :: (Backend.Mapping b Word64) => StatementTx b s Word64 +countTx :: Backend b => Backend.Mapping b Word64 => Backend.Statement b -> Tx b s Word64 countTx s = Tx $ ReaderT $ Backend.executeAndCountEffects s @@ -262,27 +251,29 @@ countTx s = -- which produces a results stream: -- a @SELECT@ or an @INSERT@, -- which produces a generated value (e.g., an auto-incremented id). -streamTx :: RowParser b r => StatementTx b s (TxStream b s r) +streamTx :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r streamTx s = - Tx $ ReaderT $ \c -> do - fmap hoistBackendStream $ Backend.executeAndStream s c + do + r <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c + hoistBackendStream r -- | -- Execute a @SELECT@ statement -- and produce a results stream, -- which utilizes a database cursor. -- This function allows you to fetch virtually limitless results in a constant memory. -cursorStreamTx :: (RowParser b r) => StatementTx b s (TxStream b s r) +cursorStreamTx :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r cursorStreamTx s = - Tx $ ReaderT $ \c -> do - fmap hoistBackendStream $ Backend.executeAndStreamWithCursor s c + do + r <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStreamWithCursor s c + hoistBackendStream r -- * Helpers ------------------------- -hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> TxStream b s r +hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> TxListT s (Tx b s) r hoistBackendStream (w, s) = - TxStreamT $ hoist (Tx . lift) $ do + TxListT $ hoist (Tx . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row From 9baf77d9c0e07d2b12f042efd2e52ae4b2ded32b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:46:54 +0400 Subject: [PATCH 0070/1204] Unite the streaming executors and introduce a single --- library/Hasql.hs | 51 ++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index da82f149e1..978eda667e 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -19,8 +19,8 @@ module Hasql -- * Statement Execution unitTx, countTx, + singleTx, streamTx, - cursorStreamTx, -- * Results Stream TxListT, @@ -248,32 +248,31 @@ countTx s = -- | -- Execute a statement, --- which produces a results stream: --- a @SELECT@ or an @INSERT@, --- which produces a generated value (e.g., an auto-incremented id). -streamTx :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r -streamTx s = - do - r <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c - hoistBackendStream r +-- which produces a single result row: +-- a @SELECT@ +-- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). +singleTx :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) +singleTx s = + ListT.head $ streamTx False s -- | --- Execute a @SELECT@ statement --- and produce a results stream, --- which utilizes a database cursor. --- This function allows you to fetch virtually limitless results in a constant memory. -cursorStreamTx :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r -cursorStreamTx s = +-- Execute a @SELECT@ statement, +-- and produce a results stream. +-- The boolean parameter specifies, +-- whether to utilize a cursor. +-- +-- Cursor allows you to fetch virtually limitless results in a constant memory +-- at a cost of a small overhead. +-- Note that in most databases cursors require establishing a database transaction. +streamTx :: Backend b => RowParser b r => Bool -> Backend.Statement b -> TxListT s (Tx b s) r +streamTx cursor s = do - r <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStreamWithCursor s c + r <- lift $ Tx $ ReaderT $ \c -> executor s c hoistBackendStream r - - --- * Helpers -------------------------- - -hoistBackendStream :: RowParser b r => Backend.ResultsStream b -> TxListT s (Tx b s) r -hoistBackendStream (w, s) = - TxListT $ hoist (Tx . lift) $ do - row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w - either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row + where + executor = + if cursor then Backend.executeAndStreamWithCursor else Backend.executeAndStream + hoistBackendStream (w, s) = + TxListT $ hoist (Tx . lift) $ do + row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w + either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row From d1f1a93aa1af8812e03a708a4bea6d68cf9ff201 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 20:52:49 +0400 Subject: [PATCH 0071/1204] Session settings --- library/Hasql.hs | 114 +++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 978eda667e..a59b158961 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -4,6 +4,10 @@ module Hasql Session, sessionInner, + -- ** Session Settings + SessionSettings, + sessionSettings, + -- * Error Error(..), @@ -50,11 +54,11 @@ type Session b = ReaderT (Pool b) -- | --- Given backend settings, pool settings, and a session monad transformer +-- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. sessionInner :: Backend.Backend b => MonadBaseControl IO m => - b -> PoolSettings -> Session b m r -> m r + b -> SessionSettings -> Session b m r -> m r sessionInner backend settings reader = join $ liftM restoreM $ liftBaseWith $ \runInIO -> mask $ \unmask -> do @@ -63,31 +67,18 @@ sessionInner backend settings reader = releasePool p return r --- | --- Execute a transaction in a session. -txSession :: - Backend.Backend b => MonadBase IO m => - Mode -> (forall s. Tx b s r) -> Session b m r -txSession m t = - ReaderT $ \p -> liftBase $ usePool (\c -> runTx c m t) p - --- * Connections Pool +-- ** Session Settings ------------------------- -- | --- A connections pool. -newtype Pool b = - Pool (Pool.Pool (Backend.Connection b)) - --- | --- Settings of a connections pool. -data PoolSettings = - PoolSettings !Word32 !NominalDiffTime +-- Settings of a session. +data SessionSettings = + SessionSettings !Word32 !NominalDiffTime -- | --- A smart constructor for pool settings. -poolSettings :: +-- A smart constructor for session settings. +sessionSettings :: Word32 -- ^ -- The maximum number of connections to keep open. @@ -99,18 +90,27 @@ poolSettings :: -- The amount of time for which an unused connection is kept open. -- The smallest acceptable value is 0.5 seconds. -> - Maybe PoolSettings + Maybe SessionSettings -- ^ - -- Maybe pool settings, if they are correct. -poolSettings size timeout = + -- Maybe session settings, if they are correct. +sessionSettings size timeout = if size > 0 && timeout >= 0.5 - then Just $ PoolSettings size timeout + then Just $ SessionSettings size timeout else Nothing + +-- * Connections Pool +------------------------- + +-- | +-- A connections pool. +newtype Pool b = + Pool (Pool.Pool (Backend.Connection b)) + -- | -- Initialize a pool given a backend and settings. -acquirePool :: Backend.Backend b => b -> PoolSettings -> IO (Pool b) -acquirePool b (PoolSettings size timeout) = +acquirePool :: Backend.Backend b => b -> SessionSettings -> IO (Pool b) +acquirePool b (SessionSettings size timeout) = fmap Pool $ Pool.createPool (Backend.connect b) (Backend.disconnect) 1 timeout size @@ -149,34 +149,42 @@ newtype Tx b s r = type Mode = Maybe (Backend.IsolationLevel, Bool) -runTx :: - Backend b => - Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r -runTx connection mode (Tx reader) = - handle backendHandler $ - maybe (const id) inTransaction mode connection (runReaderT reader connection) +-- | +-- Execute a transaction in a session. +txSession :: + Backend.Backend b => MonadBase IO m => + Mode -> (forall s. Tx b s r) -> Session b m r +txSession m t = + ReaderT $ \p -> liftBase $ usePool (\c -> runTx c m t) p where - inTransaction :: + runTx :: Backend b => - Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r - inTransaction mode c io = - do - Backend.beginTransaction mode c - try io >>= \case - Left Backend.TransactionConflict -> do - Backend.finishTransaction False c - inTransaction mode c io - Left e -> throwIO e - Right r -> do - Backend.finishTransaction True c - return r - backendHandler :: Backend.Error -> IO a - backendHandler = - \case - Backend.CantConnect t -> throwIO $ CantConnect t - Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t - Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" + Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r + runTx connection mode (Tx reader) = + handle backendHandler $ + maybe (const id) inTransaction mode connection (runReaderT reader connection) + where + inTransaction :: + Backend b => + Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r + inTransaction mode c io = + do + Backend.beginTransaction mode c + try io >>= \case + Left Backend.TransactionConflict -> do + Backend.finishTransaction False c + inTransaction mode c io + Left e -> throwIO e + Right r -> do + Backend.finishTransaction True c + return r + backendHandler :: Backend.Error -> IO a + backendHandler = + \case + Backend.CantConnect t -> throwIO $ CantConnect t + Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t + Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" -- * Results Stream From 6ab4148f35a60784fc87a08041279ed6950db40e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 21:03:05 +0400 Subject: [PATCH 0072/1204] Simplify function names --- library/Hasql.hs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index a59b158961..b1831caa4f 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -2,7 +2,7 @@ module Hasql ( -- * Session Session, - sessionInner, + session, -- ** Session Settings SessionSettings, @@ -15,16 +15,16 @@ module Hasql Tx, Mode, Backend.IsolationLevel(..), - txSession, + tx, -- * Statement Quasi-Quoter QQ.q, -- * Statement Execution - unitTx, - countTx, - singleTx, - streamTx, + unit, + count, + single, + stream, -- * Results Stream TxListT, @@ -56,10 +56,10 @@ type Session b = -- | -- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. -sessionInner :: +session :: Backend.Backend b => MonadBaseControl IO m => b -> SessionSettings -> Session b m r -> m r -sessionInner backend settings reader = +session backend settings reader = join $ liftM restoreM $ liftBaseWith $ \runInIO -> mask $ \unmask -> do p <- acquirePool backend settings @@ -151,10 +151,10 @@ type Mode = -- | -- Execute a transaction in a session. -txSession :: +tx :: Backend.Backend b => MonadBase IO m => Mode -> (forall s. Tx b s r) -> Session b m r -txSession m t = +tx m t = ReaderT $ \p -> liftBase $ usePool (\c -> runTx c m t) p where runTx :: @@ -243,15 +243,15 @@ instance Exception Error -- | -- Execute a statement, which produces no result. -unitTx :: Backend b => Backend.Statement b -> Tx b s () -unitTx s = +unit :: Backend b => Backend.Statement b -> Tx b s () +unit s = Tx $ ReaderT $ Backend.execute s -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countTx :: Backend b => Backend.Mapping b Word64 => Backend.Statement b -> Tx b s Word64 -countTx s = +count :: Backend b => Backend.Mapping b Word64 => Backend.Statement b -> Tx b s Word64 +count s = Tx $ ReaderT $ Backend.executeAndCountEffects s -- | @@ -259,9 +259,9 @@ countTx s = -- which produces a single result row: -- a @SELECT@ -- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). -singleTx :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) -singleTx s = - ListT.head $ streamTx False s +single :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) +single s = + ListT.head $ stream False s -- | -- Execute a @SELECT@ statement, @@ -272,8 +272,8 @@ singleTx s = -- Cursor allows you to fetch virtually limitless results in a constant memory -- at a cost of a small overhead. -- Note that in most databases cursors require establishing a database transaction. -streamTx :: Backend b => RowParser b r => Bool -> Backend.Statement b -> TxListT s (Tx b s) r -streamTx cursor s = +stream :: Backend b => RowParser b r => Bool -> Backend.Statement b -> TxListT s (Tx b s) r +stream cursor s = do r <- lift $ Tx $ ReaderT $ \c -> executor s c hoistBackendStream r From c98d630816dd2e2e6a43285d309250575722ba84 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 22:19:40 +0400 Subject: [PATCH 0073/1204] Cleanup --- library/Hasql.hs | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index b1831caa4f..7a1f627658 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -8,7 +8,7 @@ module Hasql SessionSettings, sessionSettings, - -- * Error + -- ** Error Error(..), -- * Transaction @@ -99,6 +99,31 @@ sessionSettings size timeout = else Nothing +-- ** Error +------------------------- + +-- | +-- The only exception type that this API can raise. +data Error = + -- | + -- Cannot connect to a server. + CantConnect Text | + -- | + -- The connection got interrupted. + ConnectionLost Text | + -- | + -- Unexpected result structure. + -- Indicates usage of inappropriate statement executor. + UnexpectedResultStructure Text | + -- | + -- Attempt to parse a statement execution result into an incompatible type. + -- Indicates either a mismatching schema or an incorrect query. + ResultParsingError Text + deriving (Show, Typeable) + +instance Exception Error + + -- * Connections Pool ------------------------- @@ -213,31 +238,6 @@ instance ListT.ListTrans (TxListT s) where (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) --- * Error -------------------------- - --- | --- The only exception type that this API can raise. -data Error = - -- | - -- Cannot connect to a server. - CantConnect Text | - -- | - -- The connection got interrupted. - ConnectionLost Text | - -- | - -- Unexpected result structure. - -- Indicates usage of inappropriate statement executor. - UnexpectedResultStructure Text | - -- | - -- Attempt to parse a statement execution result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError Text - deriving (Show, Typeable) - -instance Exception Error - - -- * Statements execution ------------------------- From ad3ed505d4959cbb39770f9636076350a94dcefe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 22:21:15 +0400 Subject: [PATCH 0074/1204] Get rid of the pool --- library/Hasql.hs | 38 ++++++-------------------------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 7a1f627658..3d94b788e4 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -51,7 +51,7 @@ import qualified Data.Pool as Pool -- A monad transformer, -- which executes transactions. type Session b = - ReaderT (Pool b) + ReaderT (Pool.Pool (Backend.Connection b)) -- | -- Given backend settings, session settings, and a session monad transformer, @@ -59,12 +59,12 @@ type Session b = session :: Backend.Backend b => MonadBaseControl IO m => b -> SessionSettings -> Session b m r -> m r -session backend settings reader = +session backend (SessionSettings size timeout) reader = join $ liftM restoreM $ liftBaseWith $ \runInIO -> mask $ \unmask -> do - p <- acquirePool backend settings - r <- ($ releasePool p) $ onException $ unmask $ runInIO $ runReaderT reader p - releasePool p + p <- Pool.createPool (Backend.connect backend) Backend.disconnect 1 timeout size + r <- ($ Pool.purgePool p) $ onException $ unmask $ runInIO $ runReaderT reader p + Pool.purgePool p return r @@ -124,32 +124,6 @@ data Error = instance Exception Error --- * Connections Pool -------------------------- - --- | --- A connections pool. -newtype Pool b = - Pool (Pool.Pool (Backend.Connection b)) - --- | --- Initialize a pool given a backend and settings. -acquirePool :: Backend.Backend b => b -> SessionSettings -> IO (Pool b) -acquirePool b (SessionSettings size timeout) = - fmap Pool $ - Pool.createPool (Backend.connect b) (Backend.disconnect) 1 timeout size - --- | --- Release all resources of the pool. -releasePool :: Pool b -> IO () -releasePool (Pool p) = - Pool.purgePool p - -usePool :: (Backend.Connection b -> IO a) -> Pool b -> IO a -usePool f (Pool p) = - Pool.withResource p f - - -- * Transaction ------------------------- @@ -180,7 +154,7 @@ tx :: Backend.Backend b => MonadBase IO m => Mode -> (forall s. Tx b s r) -> Session b m r tx m t = - ReaderT $ \p -> liftBase $ usePool (\c -> runTx c m t) p + ReaderT $ \p -> liftBase $ Pool.withResource p $ \c -> runTx c m t where runTx :: Backend b => From ccf74316d01b239212275ec396c9539f5b9d3454 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 22:28:56 +0400 Subject: [PATCH 0075/1204] Centralize exception handling --- library/Hasql.hs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 3d94b788e4..bcd2358503 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -63,9 +63,16 @@ session backend (SessionSettings size timeout) reader = join $ liftM restoreM $ liftBaseWith $ \runInIO -> mask $ \unmask -> do p <- Pool.createPool (Backend.connect backend) Backend.disconnect 1 timeout size - r <- ($ Pool.purgePool p) $ onException $ unmask $ runInIO $ runReaderT reader p + r <- try $ unmask $ runInIO $ runReaderT reader p Pool.purgePool p - return r + either onException return r + where + onException = + \case + Backend.CantConnect t -> throwIO $ CantConnect t + Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t + Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" -- ** Session Settings @@ -160,8 +167,7 @@ tx m t = Backend b => Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r runTx connection mode (Tx reader) = - handle backendHandler $ - maybe (const id) inTransaction mode connection (runReaderT reader connection) + maybe (const id) inTransaction mode connection (runReaderT reader connection) where inTransaction :: Backend b => @@ -177,13 +183,6 @@ tx m t = Right r -> do Backend.finishTransaction True c return r - backendHandler :: Backend.Error -> IO a - backendHandler = - \case - Backend.CantConnect t -> throwIO $ CantConnect t - Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t - Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" -- * Results Stream From dab653047bea7591d51cc4fcdc311c8e2d2325fb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 Oct 2014 22:50:53 +0400 Subject: [PATCH 0076/1204] Update errors --- library/Hasql.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index bcd2358503..fc22830212 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -71,7 +71,7 @@ session backend (SessionSettings size timeout) reader = \case Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.UnexpectedResultStructure t -> throwIO $ UnexpectedResultStructure t + Backend.UnparsableResult t -> throwIO $ UnexpectedResultStructure t Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" @@ -123,9 +123,9 @@ data Error = -- Indicates usage of inappropriate statement executor. UnexpectedResultStructure Text | -- | - -- Attempt to parse a statement execution result into an incompatible type. + -- Attempt to parse a row into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - ResultParsingError Text + UnparsableRow Text deriving (Show, Typeable) instance Exception Error @@ -256,4 +256,4 @@ stream cursor s = hoistBackendStream (w, s) = TxListT $ hoist (Tx . lift) $ do row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w - either (lift . throwIO . ResultParsingError) return $ RowParser.parseRow row + either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row From 3c1657d921657e17d653b7a17294bba9fde35380 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 Oct 2014 00:02:01 +0400 Subject: [PATCH 0077/1204] Accomodate to updates in "hasql-backend" --- library/Hasql.hs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index fc22830212..8aec4279f7 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -71,8 +71,9 @@ session backend (SessionSettings size timeout) reader = \case Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.UnparsableResult t -> throwIO $ UnexpectedResultStructure t + Backend.UnexpectedResult t -> throwIO $ UnexpectedResult t Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" + Backend.NotInTransaction -> throwIO $ NotInTransaction -- ** Session Settings @@ -121,7 +122,11 @@ data Error = -- | -- Unexpected result structure. -- Indicates usage of inappropriate statement executor. - UnexpectedResultStructure Text | + UnexpectedResult Text | + -- | + -- An operation, + -- which requires a database transaction was executed without one. + NotInTransaction | -- | -- Attempt to parse a row into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. @@ -244,7 +249,8 @@ single s = -- -- Cursor allows you to fetch virtually limitless results in a constant memory -- at a cost of a small overhead. --- Note that in most databases cursors require establishing a database transaction. +-- Note that in most databases cursors require establishing a database transaction, +-- so a 'NotInTransaction' error will be raised if you run it improperly. stream :: Backend b => RowParser b r => Bool -> Backend.Statement b -> TxListT s (Tx b s) r stream cursor s = do From 67f5138770ba6059bd54da39d0cb8518a87184ac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 Oct 2014 00:06:40 +0400 Subject: [PATCH 0078/1204] Cleanup --- Example.hs | 55 ------------------------------------------------------ 1 file changed, 55 deletions(-) delete mode 100644 Example.hs diff --git a/Example.hs b/Example.hs deleted file mode 100644 index 9c8aeff170..0000000000 --- a/Example.hs +++ /dev/null @@ -1,55 +0,0 @@ - - - -main = - do - H.withPool $ \pool -> do - artistID <- - join $ fmap ListT.head $ H.runExecutor pool $ H.selectExecutor $ - [H.q| SELECT id FROM artists WHERE name = ? |] - "Metallica" - userID <- - join $ fmap ListT.head $ H.runExecutor pool $ H.selectExecutor $ - [H.q| SELECT id FROM users WHERE name = ? |] - "Nikita Volkov" - - undefined - - - -main = - do - H.withPool $ \pool -> do - H.runExecutor pool $ do - H.writeTransactionExecutor H.Serialized $ do - artistIDMaybe <- - H.selectTransaction $ - [H.q| SELECT id FROM artists WHERE name = ? |] - "Metallica" - userIDMaybe <- - H.selectTransaction $ - [H.q| SELECT id FROM users WHERE name = ? |] - "Nikita Volkov" - forM_ ((,) <$> artistIDMaybe <*> userIDMaybe) $ \(artistID, userID) -> do - H.insertTransaction $ - [H.q| INSERT INTO artists_fans (artist_id, user_id) VALUES (?, ?) |] - artistID - userID - -main = - do - H.withPool $ \pool -> do - H.txIO pool (H.NoACID) $ do - H.noResultTx $ - [H.q| INSERT INTO users (name, birth_date, gender) VALUES (?, ?, ?) |] - "Nikita Volkov" - "1358-10-12" - (H.Enum Male) - - H.txIO pool (H.Write H.Serialized) $ do - artistID <- - H.streamWithCursorTx $ - [H.q| SELECT id FROM artists WHERE name = ? |] - ("Metallica") - - From 4bcf7d4c5cc2d003c0e1a13a4ab58e5fdd833735 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 Oct 2014 00:07:02 +0400 Subject: [PATCH 0079/1204] Simplify the QQ parser --- library/Hasql/QQ.hs | 6 ++---- library/Hasql/QQ/Parser.hs | 21 +++------------------ 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs index 5c90b65d6e..5533cc87b3 100644 --- a/library/Hasql/QQ.hs +++ b/library/Hasql/QQ.hs @@ -29,15 +29,13 @@ q = parseExp :: String -> Q Exp parseExp s = do - (k, n) <- - either (fail . (showString "Parsing failure: ")) return (Parser.parse (fromString s)) + n <- either (fail . showString "Parsing failure: ") return (Parser.parse (fromString s)) return $ statementF s n - where -- | -- An expression of a function with an arbitrary arity, -- which produces a "Backend.Statement". -statementF :: String -> Int -> Exp +statementF :: String -> Word -> Exp statementF s n = LamE pats exp where diff --git a/library/Hasql/QQ/Parser.hs b/library/Hasql/QQ/Parser.hs index b3d209caa9..ab0cbdc346 100644 --- a/library/Hasql/QQ/Parser.hs +++ b/library/Hasql/QQ/Parser.hs @@ -6,29 +6,14 @@ import qualified Data.Text as Text -- | --- The kind of a statement and the amount of placeholders. +-- The amount of placeholders. type Result = - (Statement, Int) - -data Statement = - Select | Update | Insert | Delete | Create | Alter | Drop | Truncate - deriving (Show, Read, Eq, Ord, Enum) + (Word) parse :: Text -> Either String Result parse = - parseOnly statement + parseOnly countPlaceholders where - statement = - (,) <$> (skipSpace *> kind) <*> countPlaceholders - kind = - asum (map assocToParser assocs) - where - assocToParser (word, kind) = - asciiCI word *> pure kind - assocs = - [("select", Select), ("update", Update), ("insert", Insert), - ("delete", Delete), ("create", Create), ("alter", Alter), - ("drop", Drop), ("truncate", Truncate)] countPlaceholders = count <|> pure 0 where From f72d626e6f6abc85a05e1b4439f3b7cd72cd4f50 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 Oct 2014 00:36:30 +0400 Subject: [PATCH 0080/1204] Remove the dependency on "hashable" --- hasql.cabal | 1 - library/Hasql/Prelude.hs | 4 ---- 2 files changed, 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 9c480641ce..fd15b65735 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -56,7 +56,6 @@ library time >= 1.4 && < 1.6, bytestring == 0.10.*, text >= 1.1 && < 1.3, - hashable == 1.2.*, -- control: list-t >= 0.2.4 && < 0.3, monad-control == 0.3.*, diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 2b36edddec..3403711248 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -35,10 +35,6 @@ import Safe as Exports ------------------------- import ListT as Exports (ListT) --- hashable -------------------------- -import Data.Hashable as Exports (Hashable) - -- text ------------------------- import Data.Text as Exports (Text) From 688bad4abe00fe07434f894255f065af824716a7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 Oct 2014 01:21:44 +0400 Subject: [PATCH 0081/1204] Description --- hasql.cabal | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/hasql.cabal b/hasql.cabal index fd15b65735..b63781e769 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -5,6 +5,29 @@ version: synopsis: A minimalistic general high level API for relational databases description: + A robust and concise yet powerful API for communication with arbitrary + relational databases. Features: + . + * Concise and crisp API. Just a few functions and two monads doing all the + boilerplate job for you. + . + * Automated management of resources related to connections, transactions and + cursors. + . + * Streaming processing of results. This means that only the results you + actually use get parsed and mapped, and only as soon as you reach them. No + resources get waisted on redundant traversals or parsing. + . + * Employment of prepared statements. Every statement you emit gets prepared + and cached. This raises the performance of the backend. + . + * Support for cursors. Allows to fetch virtually limitless result sets in a + constant memory using streaming. + . + * Type-level generation of templates. You just can't write a statement with an + incorrect number of placeholders. + . + * Mapping to any types actually supported by the backend. category: Database homepage: From 2013640f14d734a90515901b08b5db9f3f1d7f2f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 10:40:13 +0400 Subject: [PATCH 0082/1204] Accomodate to the backend API RC3 --- library/Hasql.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 8aec4279f7..6e45bd29bd 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -71,7 +71,9 @@ session backend (SessionSettings size timeout) reader = \case Backend.CantConnect t -> throwIO $ CantConnect t Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.ErroneousResult t -> throwIO $ ErroneousResult t Backend.UnexpectedResult t -> throwIO $ UnexpectedResult t + Backend.UnparsableTemplate t -> throwIO $ UnparsableTemplate t Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" Backend.NotInTransaction -> throwIO $ NotInTransaction @@ -120,10 +122,16 @@ data Error = -- The connection got interrupted. ConnectionLost Text | -- | + -- An error returned from the database. + ErroneousResult Text | + -- | -- Unexpected result structure. -- Indicates usage of inappropriate statement executor. UnexpectedResult Text | -- | + -- Incorrect statement template. + UnparsableTemplate Text | + -- | -- An operation, -- which requires a database transaction was executed without one. NotInTransaction | @@ -259,7 +267,7 @@ stream cursor s = where executor = if cursor then Backend.executeAndStreamWithCursor else Backend.executeAndStream - hoistBackendStream (w, s) = + hoistBackendStream s = TxListT $ hoist (Tx . lift) $ do - row <- ($ s) $ ListT.slice $ fromMaybe ($bug "Invalid row width") $ ListT.positive w + row <- s either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row From aed09f367d7b5ac00773b515e22eed1330cc2fc2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 16:32:12 +0400 Subject: [PATCH 0083/1204] Accomodate the backend API RC4 --- hasql.cabal | 1 + library/Hasql/RowParser.hs | 56 +++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index b63781e769..a1e643ac6c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -76,6 +76,7 @@ library -- database: ex-pool == 0.2.*, -- data: + vector < 0.11, time >= 1.4 && < 1.6, bytestring == 0.10.*, text >= 1.1 && < 1.3, diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index 8574db84cb..ae3dc20187 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -3,17 +3,21 @@ module Hasql.RowParser where import Hasql.Prelude import Language.Haskell.TH import qualified Hasql.Backend as Backend +import qualified Data.Vector as Vector class RowParser b r where - parseRow :: [Backend.Result b] -> Either Text r + parseRow :: Vector.Vector (Backend.Result b) -> Either Text r instance RowParser b () where - parseRow = \case [] -> Right (); _ -> Left $ "Row is not empty" + parseRow row = + if Vector.null row + then Right () + else Left $ "Row is not empty" instance Backend.Mapping b v => RowParser b (Identity v) where - parseRow l = do - h <- maybe (Left $ "Empty row") Right $ headMay l + parseRow row = do + h <- maybe (Left $ "Empty row") Right $ Vector.headM row Identity <$> Backend.parseResult h -- Generate tuple instaces using Template Haskell: @@ -33,28 +37,30 @@ let head = AppT (AppT (ConT ''RowParser) backendType) (foldl AppT (TupleT arity) varTypes) parseRowDec = - FunD 'parseRow [c1, c2] + FunD 'parseRow [Clause [VarP n] (NormalB e) []] where - c1 = - Clause [ListP (map VarP varNames)] (NormalB e) [] + n = mkName "row" + e = + foldQueue queue where - e = - foldQueue queue - where - con = ConE (tupleDataName arity) - queue = - (con :) $ - (VarE '(<$>) :) $ - intersperse (VarE '(<*>)) $ - map (AppE (VarE 'Backend.parseResult) . VarE) varNames - foldQueue = - \case - e : o : t -> UInfixE e o (foldQueue t) - e : [] -> e - _ -> $bug "Unexpected queue size" - c2 = - Clause [WildP] (NormalB (AppE (ConE 'Left) (LitE (StringL m)))) [] - where - m = "Not enough items in the row" + lookups = do + i <- [0 .. pred arity] + return $ purify $ + [| + fromMaybe (Left "Invalid row length") $ + fmap Backend.parseResult $ + (Vector.!?) $(varE n) $(litE (IntegerL $ fromIntegral i)) + |] + queue = + (ConE (tupleDataName arity) :) $ + (VarE '(<$>) :) $ + intersperse (VarE '(<*>)) $ + lookups + foldQueue = + \case + e : o : t -> UInfixE e o (foldQueue t) + e : [] -> e + _ -> $bug "Unexpected queue size" + purify = unsafePerformIO . runQ in mapM (return . inst) [2 .. 24] From 47d86b91f2ca433a03b62738a102560825df3439 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 19:39:23 +0400 Subject: [PATCH 0084/1204] Optimize the row parser a bit --- library/Hasql/RowParser.hs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index ae3dc20187..d2e7b05917 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -13,12 +13,11 @@ instance RowParser b () where parseRow row = if Vector.null row then Right () - else Left $ "Row is not empty" + else $bug "Not an empty row" instance Backend.Mapping b v => RowParser b (Identity v) where parseRow row = do - h <- maybe (Left $ "Empty row") Right $ Vector.headM row - Identity <$> Backend.parseResult h + Identity <$> Backend.parseResult (Vector.unsafeHead row) -- Generate tuple instaces using Template Haskell: let @@ -47,9 +46,8 @@ let i <- [0 .. pred arity] return $ purify $ [| - fromMaybe (Left "Invalid row length") $ - fmap Backend.parseResult $ - (Vector.!?) $(varE n) $(litE (IntegerL $ fromIntegral i)) + Backend.parseResult $ + (Vector.unsafeIndex) $(varE n) $(litE (IntegerL $ fromIntegral i)) |] queue = (ConE (tupleDataName arity) :) $ From 45becba2256a93819f4556714ee05c1f0fcc4a65 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 21:23:53 +0400 Subject: [PATCH 0085/1204] Accomodate to the RC5 backend API --- library/Hasql.hs | 36 ++++++++++++++++++++++-------------- library/Hasql/Prelude.hs | 4 ++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 6e45bd29bd..458e5ec365 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -24,6 +24,7 @@ module Hasql unit, count, single, + vector, stream, -- * Results Stream @@ -42,6 +43,7 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QQ as QQ import qualified ListT import qualified Data.Pool as Pool +import qualified Data.Vector as Vector -- * Session @@ -247,27 +249,33 @@ count s = -- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). single :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) single s = - ListT.head $ stream False s + do + v <- vector s + return $ (Vector.!?) v 0 -- | -- Execute a @SELECT@ statement, +-- and produce a vector of results. +vector :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Vector r) +vector s = + {-# SCC "vector" #-} + Tx $ ReaderT $ \c -> do + m <- Backend.executeAndGetMatrix s c + traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) m + +-- | +-- Execute a @SELECT@ statement with a cursor, -- and produce a results stream. --- The boolean parameter specifies, --- whether to utilize a cursor. -- -- Cursor allows you to fetch virtually limitless results in a constant memory -- at a cost of a small overhead. -- Note that in most databases cursors require establishing a database transaction, -- so a 'NotInTransaction' error will be raised if you run it improperly. -stream :: Backend b => RowParser b r => Bool -> Backend.Statement b -> TxListT s (Tx b s) r -stream cursor s = +stream :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r +stream s = + {-# SCC "stream" #-} do - r <- lift $ Tx $ ReaderT $ \c -> executor s c - hoistBackendStream r - where - executor = - if cursor then Backend.executeAndStreamWithCursor else Backend.executeAndStream - hoistBackendStream s = - TxListT $ hoist (Tx . lift) $ do - row <- s - either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row + s <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c + TxListT $ hoist (Tx . lift) $ do + row <- s + either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 3403711248..9e5832e93d 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -35,6 +35,10 @@ import Safe as Exports ------------------------- import ListT as Exports (ListT) +-- vector +------------------------- +import Data.Vector as Exports (Vector) + -- text ------------------------- import Data.Text as Exports (Text) From 89b92bdfa0bcbe6d0169dd3f5d89b5be99996331 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 22:25:58 +0400 Subject: [PATCH 0086/1204] Accomodate to the RC6 backend API --- library/Hasql.hs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 458e5ec365..6b8e157e21 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -24,7 +24,7 @@ module Hasql unit, count, single, - vector, + list, stream, -- * Results Stream @@ -249,16 +249,14 @@ count s = -- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). single :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) single s = - do - v <- vector s - return $ (Vector.!?) v 0 + headMay <$> list s -- | -- Execute a @SELECT@ statement, -- and produce a vector of results. -vector :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Vector r) -vector s = - {-# SCC "vector" #-} +list :: Backend b => RowParser b r => Backend.Statement b -> Tx b s [r] +list s = + {-# SCC "list" #-} Tx $ ReaderT $ \c -> do m <- Backend.executeAndGetMatrix s c traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) m From dc21a81d36aaf379c6066ec951e67da2f8324bd4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 25 Oct 2014 23:46:39 +0400 Subject: [PATCH 0087/1204] Accomodate the RC7 API of the backend --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 6b8e157e21..72ed148bd8 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -259,7 +259,7 @@ list s = {-# SCC "list" #-} Tx $ ReaderT $ \c -> do m <- Backend.executeAndGetMatrix s c - traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) m + traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) $ Vector.toList m -- | -- Execute a @SELECT@ statement with a cursor, From d4a6c0aebdfa754e793963ec91651a4f1576928c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 Oct 2014 15:19:57 +0400 Subject: [PATCH 0088/1204] Remove SCCs --- library/Hasql.hs | 2 -- 1 file changed, 2 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 72ed148bd8..1c5d01c413 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -256,7 +256,6 @@ single s = -- and produce a vector of results. list :: Backend b => RowParser b r => Backend.Statement b -> Tx b s [r] list s = - {-# SCC "list" #-} Tx $ ReaderT $ \c -> do m <- Backend.executeAndGetMatrix s c traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) $ Vector.toList m @@ -271,7 +270,6 @@ list s = -- so a 'NotInTransaction' error will be raised if you run it improperly. stream :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r stream s = - {-# SCC "stream" #-} do s <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c TxListT $ hoist (Tx . lift) $ do From 4e1c057b766a77035812ff23ce93f6b014a01e8b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 Oct 2014 17:06:57 +0400 Subject: [PATCH 0089/1204] Update the description --- hasql.cabal | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index a1e643ac6c..4346c8ac93 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -14,9 +14,7 @@ description: * Automated management of resources related to connections, transactions and cursors. . - * Streaming processing of results. This means that only the results you - actually use get parsed and mapped, and only as soon as you reach them. No - resources get waisted on redundant traversals or parsing. + * A built-in connections pool. . * Employment of prepared statements. Every statement you emit gets prepared and cached. This raises the performance of the backend. From 5633a877db80918921eefc0c7f362754e335fdaa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:00:42 +0400 Subject: [PATCH 0090/1204] Add a demo --- demo/Main.hs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ hasql.cabal | 26 ++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 demo/Main.hs diff --git a/demo/Main.hs b/demo/Main.hs new file mode 100644 index 0000000000..257c20a67e --- /dev/null +++ b/demo/Main.hs @@ -0,0 +1,67 @@ +-- You can execute this file with 'cabal bench demo'. +{-# LANGUAGE QuasiQuotes, ScopedTypeVariables, OverloadedStrings #-} + +import Control.Monad +import Control.Monad.IO.Class +import Control.Monad.Trans.Class +import Control.Monad.Trans.Maybe +import Data.Functor.Identity + +-- Import the API from the "hasql" library +import qualified Hasql as H + +-- Import the backend settings from the "hasql-postgres" library +import qualified Hasql.Postgres as H + + +main = do + + let postgresSettings = H.Postgres "localhost" 5432 "postgres" "" "postgres" + + -- Prepare session settings with a smart constructor, + -- which checks the inputted values on correctness. + -- Set the connections pool size to 6 and the timeout to 30. + sessionSettings <- maybe (fail "Improper session settings") return $ + H.sessionSettings 6 30 + + -- Run a database session, + -- while automatically managing the resources and exceptions. + H.session postgresSettings sessionSettings $ do + + -- Execute a group of statements without any locking and ACID guarantees: + H.tx Nothing $ do + H.unit [H.q|DROP TABLE IF EXISTS a|] + H.unit [H.q|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] + -- Insert three rows: + replicateM_ 3 $ do + H.unit [H.q|INSERT INTO a (balance) VALUES (0)|] + + -- Declare a list of transfer settings, which we'll later use. + -- The tuple structure is: + -- @(withdrawalAccountID, arrivalAccountID, amount)@ + let transfers :: [(Int, Int, Int)] = + [(1, 2, 20), (2, 1, 30), (2, 3, 100)] + + forM_ transfers $ \(id1, id2, amount) -> do + -- Run a transaction with ACID guarantees. + -- Hasql will automatically roll it back and retry it in case of conflicts. + H.tx (Just (H.Serializable, True)) $ do + -- Use MaybeT to handle empty results: + runMaybeT $ do + do + Identity balance1 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + + -- Output all the updated rows: + do + -- Unfortunately in this case there's no way to infer the type of the results, + -- so we need to specify it explicitly: + rows :: [(Int, Int)] <- H.tx Nothing $ H.list $ [H.q|SELECT * FROM a|] + forM_ rows $ \(id, amount) -> do + liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount + + + + diff --git a/hasql.cabal b/hasql.cabal index 4346c8ac93..a9dd51edda 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -99,3 +99,29 @@ library Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 + + +-- Well, it's not a benchmark actually, +-- but there's no better way to specify an executable, +-- which is not intended for distribution, in Cabal. +benchmark demo + type: + exitcode-stdio-1.0 + hs-source-dirs: + demo + main-is: + Main.hs + ghc-options: + -O2 + -threaded + "-with-rtsopts=-N" + -funbox-strict-fields + default-language: + Haskell2010 + build-depends: + hasql-postgres == 0.1.*, + hasql == 0.1.*, + transformers, + base >= 4.5 && < 4.8 + + From d1e9235b0318395485343141a4d1154fbfbedcf2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:02:44 +0400 Subject: [PATCH 0091/1204] Update the docs and the Cabal file --- hasql.cabal | 46 ++++++++++++++++++++++++++++++++-------------- library/Hasql.hs | 11 ++++++++--- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index a9dd51edda..58590593c0 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,31 +1,49 @@ name: hasql version: - 0.1.0 + 0.1.1 synopsis: A minimalistic general high level API for relational databases description: A robust and concise yet powerful API for communication with arbitrary - relational databases. Features: + relational databases. + . + __Features__: . * Concise and crisp API. Just a few functions and two monads doing all the boilerplate job for you. . + * A powerful transaction abstraction, which provides + an automated resolution of conflicts. + The API ensures that you're only able to perform a specific + set of actions in the transaction context, + which allows Hasql to safely resolve conflicting transactions + by automatically retrying them. + This is much inspired by STM and ST. + . + * Support for cursors. Allows to fetch virtually limitless result sets in a + constant memory using streaming. + . + * Employment of prepared statements. + Every statement you emit gets prepared and cached. + This raises the performance of the backend. + . * Automated management of resources related to connections, transactions and cursors. . * A built-in connections pool. . - * Employment of prepared statements. Every statement you emit gets prepared - and cached. This raises the performance of the backend. - . - * Support for cursors. Allows to fetch virtually limitless result sets in a - constant memory using streaming. - . * Type-level generation of templates. You just can't write a statement with an incorrect number of placeholders. . * Mapping to any types actually supported by the backend. + . + __Links__: + . + * <../src/demo/Main.hs A basic tutorial-demo> + . + * + . category: Database homepage: @@ -58,6 +76,12 @@ source-repository head library hs-source-dirs: library + ghc-options: + -funbox-strict-fields + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 other-modules: Hasql.Prelude Hasql.QQ @@ -93,12 +117,6 @@ library mtl-prelude == 2.*, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 - ghc-options: - -funbox-strict-fields - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 -- Well, it's not a benchmark actually, diff --git a/library/Hasql.hs b/library/Hasql.hs index 1c5d01c413..d15ef8a1c9 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,3 +1,8 @@ +-- | +-- This is the API of the \"hasql\" library. +-- For an introduction to the package +-- and links to more documentation please refer to +-- . module Hasql ( -- * Session @@ -8,9 +13,6 @@ module Hasql SessionSettings, sessionSettings, - -- ** Error - Error(..), - -- * Transaction Tx, Mode, @@ -32,6 +34,9 @@ module Hasql -- * Row parser RowParser.RowParser(..), + + -- * Error + Error(..), ) where From 66a950f8da9ac06c2081e423e0e554a1c4abc84f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:36:54 +0400 Subject: [PATCH 0092/1204] Adapt to the older Haddock version, which Hackage is running --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 58590593c0..19e0c61c86 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -8,7 +8,7 @@ description: A robust and concise yet powerful API for communication with arbitrary relational databases. . - __Features__: + Features: . * Concise and crisp API. Just a few functions and two monads doing all the boilerplate job for you. @@ -38,7 +38,7 @@ description: . * Mapping to any types actually supported by the backend. . - __Links__: + Links: . * <../src/demo/Main.hs A basic tutorial-demo> . From ed41a3a8961aff1bf49a339b669e68a5c724eade Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:41:44 +0400 Subject: [PATCH 0093/1204] Fix the demo link --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 19e0c61c86..a078f91d2c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.1 + 0.1.2 synopsis: A minimalistic general high level API for relational databases description: @@ -40,7 +40,7 @@ description: . Links: . - * <../src/demo/Main.hs A basic tutorial-demo> + * . * . From 5ef00743b33c4aaa87dde829fff6968fb1725bcc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:53:04 +0400 Subject: [PATCH 0094/1204] =?UTF-8?q?Fix=20the=20link=20to=20the=20demo=20?= =?UTF-8?q?again=20=E2=80=A6.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index a078f91d2c..6bc726cf6e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.2 + 0.1.3 synopsis: A minimalistic general high level API for relational databases description: @@ -40,7 +40,7 @@ description: . Links: . - * + * . * . From 32a0d38b0ff723cf421c2c677291b53b3d3abc8e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 16:59:14 +0400 Subject: [PATCH 0095/1204] Docs --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 6bc726cf6e..bee8069a91 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -40,9 +40,9 @@ description: . Links: . - * + * . . - * + * . . category: Database From 37672d0f43a456db89f5a14e5a56321104ea1db8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 18:07:34 +0400 Subject: [PATCH 0096/1204] Update demo --- demo/Main.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/demo/Main.hs b/demo/Main.hs index 257c20a67e..73528eec16 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -49,6 +49,8 @@ main = do -- Use MaybeT to handle empty results: runMaybeT $ do do + -- To distinguish results rows containing just one column, + -- we use 'Identity' as a sort of a single element tuple. Identity balance1 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id1 Identity balance2 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id2 lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 From 5e22ec65e5220e09bf0bf4ffca41e957b5c02ae7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 18:46:12 +0400 Subject: [PATCH 0097/1204] Update docs --- library/Hasql.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index d15ef8a1c9..3900ba31ca 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -15,9 +15,11 @@ module Hasql -- * Transaction Tx, + tx, + + -- ** Transaction Settings Mode, Backend.IsolationLevel(..), - tx, -- * Statement Quasi-Quoter QQ.q, From 5da25e2887f1a5250cc0e63bbecc341ac4542de5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Oct 2014 20:22:05 +0400 Subject: [PATCH 0098/1204] Polishing --- library/Hasql/RowParser.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index d2e7b05917..70f6e0683f 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -26,7 +26,7 @@ let InstanceD constraints head [parseRowDec] where varNames = - [1 .. arity] >>= \i -> return (mkName ('_' : show i)) + [1 .. arity] >>= \i -> return (mkName ('v' : show i)) varTypes = map VarT varNames backendType = From 5fb7f48f120ac68c66ae4ab5b8b37f171cbb3d06 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 29 Oct 2014 00:49:36 +0400 Subject: [PATCH 0099/1204] Update demo --- demo/Main.hs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index 73528eec16..649b217e71 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -48,13 +48,12 @@ main = do H.tx (Just (H.Serializable, True)) $ do -- Use MaybeT to handle empty results: runMaybeT $ do - do - -- To distinguish results rows containing just one column, - -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + -- To distinguish results rows containing just one column, + -- we use 'Identity' as a sort of a single element tuple. + Identity balance1 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 -- Output all the updated rows: do From ec667045bde322dc78a12fe586934bd9cd117a90 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 29 Oct 2014 14:24:57 +0400 Subject: [PATCH 0100/1204] Typo --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 3900ba31ca..6fad7b8ee1 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -260,7 +260,7 @@ single s = -- | -- Execute a @SELECT@ statement, --- and produce a vector of results. +-- and produce a list of results. list :: Backend b => RowParser b r => Backend.Statement b -> Tx b s [r] list s = Tx $ ReaderT $ \c -> do From caa84166bd1c88c975eb05df659d1cf23e292bdb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 29 Oct 2014 14:46:36 +0400 Subject: [PATCH 0101/1204] Typo --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 6fad7b8ee1..07a483085a 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -2,7 +2,7 @@ -- This is the API of the \"hasql\" library. -- For an introduction to the package -- and links to more documentation please refer to --- . +-- <../ the package's index page>. module Hasql ( -- * Session From 1332b3e315ca4659129da726c7ce49a58812a3de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Nov 2014 13:48:17 +0300 Subject: [PATCH 0102/1204] Show and Eq for Error --- hasql.cabal | 2 +- library/Hasql.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index bee8069a91..8f6eab73b3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.3 + 0.1.4 synopsis: A minimalistic general high level API for relational databases description: diff --git a/library/Hasql.hs b/library/Hasql.hs index 07a483085a..c13baa8a90 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -148,7 +148,7 @@ data Error = -- Attempt to parse a row into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. UnparsableRow Text - deriving (Show, Typeable) + deriving (Show, Typeable, Eq, Ord) instance Exception Error From 7f62fccedb21b948fa9882215cd967be3dcee600 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Nov 2014 13:49:38 +0300 Subject: [PATCH 0103/1204] Refer to benchmarks --- hasql.cabal | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hasql.cabal b/hasql.cabal index 8f6eab73b3..19af090533 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -40,6 +40,8 @@ description: . Links: . + * . + . * . . * . From b8f750ddac49d84cc69957a42a71b453378aab11 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Nov 2014 13:52:05 +0300 Subject: [PATCH 0104/1204] Clean up description --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 19af090533..b73adc4564 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -42,9 +42,9 @@ description: . * . . - * . + * . . - * . + * . . category: Database From f065f70240c4bac79e1230675174dcc2b710b563 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Nov 2014 19:37:46 +0300 Subject: [PATCH 0105/1204] Update Travis --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index e5c0294dc2..25a873622a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,3 +8,7 @@ install: - cabal install happy # a "haskell-src-exts" implicit dependency workaround - cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls +script: + - cabal configure --enable-tests --enable-benchmarks + - cabal build + - cabal test --show-details=always From 8409c3ae7559d741b89b4d128c756032b6be19d6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 11 Nov 2014 00:06:36 +0300 Subject: [PATCH 0106/1204] Refactoring --- hasql.cabal | 10 +-- library/Hasql.hs | 52 +++++++++++++++- library/Hasql/{QQ/Parser.hs => QParser.hs} | 2 +- library/Hasql/QQ.hs | 47 -------------- library/Hasql/RowParser.hs | 71 +++++++++------------- library/Hasql/TH.hs | 24 ++++++++ 6 files changed, 109 insertions(+), 97 deletions(-) rename library/Hasql/{QQ/Parser.hs => QParser.hs} (96%) delete mode 100644 library/Hasql/QQ.hs create mode 100644 library/Hasql/TH.hs diff --git a/hasql.cabal b/hasql.cabal index b73adc4564..87fc14bb7e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.4 + 0.1.5 synopsis: A minimalistic general high level API for relational databases description: @@ -86,9 +86,9 @@ library Haskell2010 other-modules: Hasql.Prelude - Hasql.QQ - Hasql.QQ.Parser + Hasql.QParser Hasql.RowParser + Hasql.TH exposed-modules: Hasql build-depends: @@ -122,8 +122,8 @@ library -- Well, it's not a benchmark actually, --- but there's no better way to specify an executable, --- which is not intended for distribution, in Cabal. +-- but in Cabal there's no better way to specify an executable, +-- which is not intended for distribution. benchmark demo type: exitcode-stdio-1.0 diff --git a/library/Hasql.hs b/library/Hasql.hs index c13baa8a90..cb521cd6d4 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -22,7 +22,7 @@ module Hasql Backend.IsolationLevel(..), -- * Statement Quasi-Quoter - QQ.q, + q, -- * Statement Execution unit, @@ -47,10 +47,13 @@ import Hasql.Backend (Backend) import Hasql.RowParser (RowParser) import qualified Hasql.Backend as Backend import qualified Hasql.RowParser as RowParser -import qualified Hasql.QQ as QQ +import qualified Hasql.QParser as QParser import qualified ListT import qualified Data.Pool as Pool import qualified Data.Vector as Vector +import qualified Language.Haskell.TH as TH +import qualified Language.Haskell.TH.Quote as TH +import qualified Hasql.TH as THUtil -- * Session @@ -282,3 +285,48 @@ stream s = TxListT $ hoist (Tx . lift) $ do row <- s either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row + + +-- * Statements quasi-quotation +------------------------- + +-- | +-- Produces a lambda-expression, +-- which takes as many parameters as there are placeholders in the quoted text +-- and results in a 'Backend.Statement'. +-- +-- E.g.: +-- +-- >selectFive :: 'Backend.Statement' c +-- >selectFive = [q|SELECT (? + ?)|] 2 3 +-- +q :: TH.QuasiQuoter +q = + TH.QuasiQuoter + (parseExp) + (const $ fail "Pattern context is not supported") + (const $ fail "Type context is not supported") + (const $ fail "Declaration context is not supported") + where + parseExp s = + do + n <- either (fail . showString "Parsing failure: ") return (QParser.parse (fromString s)) + return $ statementF s n + statementF s n = + TH.LamE + (map TH.VarP argNames) + (TH.AppE + (TH.AppE + (TH.ConE '(,)) + (statementE)) + (argsE)) + where + argNames = + map (TH.mkName . ('_' :) . show) [1 .. n] + statementE = + TH.LitE (TH.StringL s) + argsE = + TH.ListE $ flip map argNames $ \x -> + THUtil.purify + [| Backend.renderValue $(TH.varE x) |] + diff --git a/library/Hasql/QQ/Parser.hs b/library/Hasql/QParser.hs similarity index 96% rename from library/Hasql/QQ/Parser.hs rename to library/Hasql/QParser.hs index ab0cbdc346..10e862c4f8 100644 --- a/library/Hasql/QQ/Parser.hs +++ b/library/Hasql/QParser.hs @@ -1,4 +1,4 @@ -module Hasql.QQ.Parser where +module Hasql.QParser where import Hasql.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs deleted file mode 100644 index 5533cc87b3..0000000000 --- a/library/Hasql/QQ.hs +++ /dev/null @@ -1,47 +0,0 @@ -module Hasql.QQ where - -import Hasql.Prelude -import Language.Haskell.TH -import Language.Haskell.TH.Quote -import qualified Hasql.QQ.Parser as Parser -import qualified Hasql.Backend as Backend - - --- | --- Produces a lambda-expression, --- which takes as many parameters as there are placeholders in the quoted text --- and results in an expression of type 'Backend.Statement'. --- --- E.g.: --- --- >selectFive :: Statement b --- >selectFive = [q|SELECT (? + ?)|] 2 3 --- -q :: QuasiQuoter -q = - QuasiQuoter - parseExp - (const $ fail "Pattern context is not supported") - (const $ fail "Type context is not supported") - (const $ fail "Declaration context is not supported") - - -parseExp :: String -> Q Exp -parseExp s = - do - n <- either (fail . showString "Parsing failure: ") return (Parser.parse (fromString s)) - return $ statementF s n - --- | --- An expression of a function with an arbitrary arity, --- which produces a "Backend.Statement". -statementF :: String -> Word -> Exp -statementF s n = - LamE pats exp - where - vars = map (mkName . ('_' :) . show) [1 .. n] - pats = map VarP vars - exp = AppE (AppE (ConE '(,)) (LitE (StringL s))) (ListE exps) - where - exps = map (AppE (VarE 'Backend.renderValue) . VarE) vars - diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index 70f6e0683f..6130028e4f 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -4,6 +4,7 @@ import Hasql.Prelude import Language.Haskell.TH import qualified Hasql.Backend as Backend import qualified Data.Vector as Vector +import qualified Hasql.TH as THUtil class RowParser b r where @@ -20,45 +21,31 @@ instance Backend.Mapping b v => RowParser b (Identity v) where Identity <$> Backend.parseResult (Vector.unsafeHead row) -- Generate tuple instaces using Template Haskell: -let - inst :: Int -> Dec - inst arity = - InstanceD constraints head [parseRowDec] - where - varNames = - [1 .. arity] >>= \i -> return (mkName ('v' : show i)) - varTypes = - map VarT varNames - backendType = - VarT (mkName "b") - constraints = - map (\t -> ClassP ''Backend.Mapping [backendType, t]) varTypes - head = - AppT (AppT (ConT ''RowParser) backendType) (foldl AppT (TupleT arity) varTypes) - parseRowDec = - FunD 'parseRow [Clause [VarP n] (NormalB e) []] - where - n = mkName "row" - e = - foldQueue queue - where - lookups = do - i <- [0 .. pred arity] - return $ purify $ - [| - Backend.parseResult $ - (Vector.unsafeIndex) $(varE n) $(litE (IntegerL $ fromIntegral i)) - |] - queue = - (ConE (tupleDataName arity) :) $ - (VarE '(<$>) :) $ - intersperse (VarE '(<*>)) $ - lookups - foldQueue = - \case - e : o : t -> UInfixE e o (foldQueue t) - e : [] -> e - _ -> $bug "Unexpected queue size" - purify = unsafePerformIO . runQ - in - mapM (return . inst) [2 .. 24] +return $ flip map [2 .. 24] $ \arity -> + let + varNames = + [1 .. arity] >>= \i -> return (mkName ('v' : show i)) + varTypes = + map VarT varNames + connectionType = + VarT (mkName "b") + constraints = + map (\t -> ClassP ''Backend.Mapping [connectionType, t]) varTypes + head = + AppT (AppT (ConT ''RowParser) connectionType) (foldl AppT (TupleT arity) varTypes) + parseRowDec = + FunD 'parseRow [Clause [VarP rowVarName] (NormalB e) []] + where + rowVarName = mkName "row" + e = + THUtil.applicativeE (ConE (tupleDataName arity)) lookups + where + lookups = do + i <- [0 .. pred arity] + return $ THUtil.purify $ + [| + Backend.parseResult + (Vector.unsafeIndex $(varE rowVarName) $(litE (IntegerL $ fromIntegral i)) ) + |] + in InstanceD constraints head [parseRowDec] + diff --git a/library/Hasql/TH.hs b/library/Hasql/TH.hs new file mode 100644 index 0000000000..0993994470 --- /dev/null +++ b/library/Hasql/TH.hs @@ -0,0 +1,24 @@ +-- | +-- TH utils. +module Hasql.TH where + +import Hasql.Prelude +import Language.Haskell.TH + + +applicativeE :: Exp -> [Exp] -> Exp +applicativeE head = + \case + [] -> error "Empty expressions list" + exps -> + reduce $ + head : VarE '(<$>) : intersperse (VarE '(<*>)) exps + where + reduce = + \case + e : o : t -> UInfixE e o (reduce t) + e : [] -> e + _ -> $bug $ "Unexpected queue size. Exps: " <> show exps + +purify :: Q a -> a +purify = unsafePerformIO . runQ From 46eced38658ce006f52ec5304e6e7e2f08c26217 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 11 Nov 2014 15:18:07 +0300 Subject: [PATCH 0107/1204] Mention SQL in description --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 87fc14bb7e..e1d5806b85 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -6,7 +6,7 @@ synopsis: A minimalistic general high level API for relational databases description: A robust and concise yet powerful API for communication with arbitrary - relational databases. + relational databases using SQL. . Features: . From 109c14ee8080fffacc5b180c44540972903c3d76 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 00:43:39 +0300 Subject: [PATCH 0108/1204] Standardize constraints --- library/Hasql.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index cb521cd6d4..5e8ee509e0 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -69,7 +69,7 @@ type Session b = -- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. session :: - Backend.Backend b => MonadBaseControl IO m => + (Backend.Backend b, MonadBaseControl IO m) => b -> SessionSettings -> Session b m r -> m r session backend (SessionSettings size timeout) reader = join $ liftM restoreM $ liftBaseWith $ \runInIO -> @@ -183,7 +183,7 @@ type Mode = -- | -- Execute a transaction in a session. tx :: - Backend.Backend b => MonadBase IO m => + (Backend.Backend b, MonadBase IO m) => Mode -> (forall s. Tx b s r) -> Session b m r tx m t = ReaderT $ \p -> liftBase $ Pool.withResource p $ \c -> runTx c m t @@ -248,7 +248,7 @@ unit s = -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -count :: Backend b => Backend.Mapping b Word64 => Backend.Statement b -> Tx b s Word64 +count :: (Backend b, Backend.Mapping b Word64) => Backend.Statement b -> Tx b s Word64 count s = Tx $ ReaderT $ Backend.executeAndCountEffects s @@ -257,14 +257,14 @@ count s = -- which produces a single result row: -- a @SELECT@ -- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). -single :: Backend b => RowParser b r => Backend.Statement b -> Tx b s (Maybe r) +single :: (Backend b, RowParser b r) => Backend.Statement b -> Tx b s (Maybe r) single s = headMay <$> list s -- | -- Execute a @SELECT@ statement, -- and produce a list of results. -list :: Backend b => RowParser b r => Backend.Statement b -> Tx b s [r] +list :: (Backend b, RowParser b r) => Backend.Statement b -> Tx b s [r] list s = Tx $ ReaderT $ \c -> do m <- Backend.executeAndGetMatrix s c @@ -278,7 +278,7 @@ list s = -- at a cost of a small overhead. -- Note that in most databases cursors require establishing a database transaction, -- so a 'NotInTransaction' error will be raised if you run it improperly. -stream :: Backend b => RowParser b r => Backend.Statement b -> TxListT s (Tx b s) r +stream :: (Backend b, RowParser b r) => Backend.Statement b -> TxListT s (Tx b s) r stream s = do s <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c From 9dc128997ea92185f3b95757d48ff6b39768e491 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 01:13:30 +0300 Subject: [PATCH 0109/1204] Update demo to a newer postgres backend --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index e1d5806b85..e2df671b5d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -139,7 +139,7 @@ benchmark demo default-language: Haskell2010 build-depends: - hasql-postgres == 0.1.*, + hasql-postgres == 0.3.*, hasql == 0.1.*, transformers, base >= 4.5 && < 4.8 From 8f2497021374443887b903217cf70f8d6793d8cf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 15:50:36 +0300 Subject: [PATCH 0110/1204] Relax dependencies --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index e2df671b5d..7a39b497ae 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -114,9 +114,9 @@ library -- general: monad-control == 0.3.*, transformers-base == 0.4.*, - safe >= 0.3.8 && < 0.4, + safe == 0.3.*, mmorph == 1.0.*, - mtl-prelude == 2.*, + mtl-prelude < 3, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 From 38be1c08b274eb3bc1e8a9b4aa8e760aa7c35370 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 17:08:32 +0300 Subject: [PATCH 0111/1204] Update description --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7a39b497ae..bbd2b9a488 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -33,10 +33,10 @@ description: . * A built-in connections pool. . - * Type-level generation of templates. You just can't write a statement with an + * Compile-time generation of templates. You just can't write a statement with an incorrect number of placeholders. . - * Mapping to any types actually supported by the backend. + * Ability to map to any types actually supported by the backend. . Links: . From 81063626c5dd8d2c03d9ced83e309de5f46b4199 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 17:09:40 +0300 Subject: [PATCH 0112/1204] Increment version --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index bbd2b9a488..fc6ab11fc5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.5 + 0.1.6 synopsis: A minimalistic general high level API for relational databases description: @@ -42,7 +42,7 @@ description: . * . . - * . + * . . * . . From e07ac5b621c5545fb2cf29f3231e4addc1cc75ee Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Nov 2014 19:41:42 +0300 Subject: [PATCH 0113/1204] Docs correction --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 5e8ee509e0..168c68b6fa 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -297,7 +297,7 @@ stream s = -- -- E.g.: -- --- >selectFive :: 'Backend.Statement' c +-- >selectFive :: Statement b -- >selectFive = [q|SELECT (? + ?)|] 2 3 -- q :: TH.QuasiQuoter From a36a64826f1e9468d5771a4caead1ee4b65e4676 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 14 Nov 2014 00:52:41 +0300 Subject: [PATCH 0114/1204] Update Travis to test older transformers --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 25a873622a..057e00f705 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,12 @@ ghc: - 7.6 - 7.8 +env: + - transformers=0.2.* + - transformers=0.4.* + install: + - cabal install "transformers == $transformers" - cabal install happy # a "haskell-src-exts" implicit dependency workaround - cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls From dd7d0373847973fd14d3efd61282771bfe352419 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 16 Nov 2014 14:07:51 +0300 Subject: [PATCH 0115/1204] Update Travis and dependencies --- .travis.yml | 15 ++++++++++++--- hasql.cabal | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 057e00f705..6707e57b84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,20 @@ ghc: - 7.8 env: - - transformers=0.2.* - - transformers=0.4.* + - lower_bound_dependencies=1 + - install: - - cabal install "transformers == $transformers" + # Set up the Shell to treat the semicolon as && + - set -o pipefail && set -e + # Install the lower bound dependencies + - if [ $lower_bound_dependencies -eq 1 ]; + then + cabal install "transformers == 0.2.*"; + cabal install "text == 1.0.*"; + cabal install "attoparsec == 0.10.*"; + cabal install "time == 1.4.*"; + fi; - cabal install happy # a "haskell-src-exts" implicit dependency workaround - cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls diff --git a/hasql.cabal b/hasql.cabal index fc6ab11fc5..8a4cb537c4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -96,14 +96,14 @@ library -- template-haskell: template-haskell >= 2.8 && < 2.10, -- parsing: - attoparsec == 0.12.*, + attoparsec >= 0.10 && < 0.13, -- database: ex-pool == 0.2.*, -- data: vector < 0.11, time >= 1.4 && < 1.6, bytestring == 0.10.*, - text >= 1.1 && < 1.3, + text >= 1.0 && < 1.3, -- control: list-t >= 0.2.4 && < 0.3, monad-control == 0.3.*, @@ -141,7 +141,7 @@ benchmark demo build-depends: hasql-postgres == 0.3.*, hasql == 0.1.*, - transformers, + transformers >= 0.2 && < 0.5, base >= 4.5 && < 4.8 From 9fadea7e12142adc118f735e75329d044a561a92 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 11:38:35 +0300 Subject: [PATCH 0116/1204] Update Travis --- .travis.yml | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6707e57b84..00467ed1bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,20 @@ -language: haskell - -ghc: - - 7.6 - - 7.8 - env: - - lower_bound_dependencies=1 - - + - lower_bound_dependencies=1 + ghc=7.6.1 + - lower_bound_dependencies=1 + ghc=7.8.1 + - ghc=7.6.1 + - ghc=7.8.1 install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e + # Install GHC and Cabal + - travis_retry sudo add-apt-repository -y ppa:hvr/ghc + - travis_retry sudo apt-get update + - travis_retry sudo apt-get install cabal-install-1.18 ghc-$ghc + - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/1.18/bin:$PATH + - cabal update # Install the lower bound dependencies - if [ $lower_bound_dependencies -eq 1 ]; then @@ -19,10 +23,18 @@ install: cabal install "attoparsec == 0.10.*"; cabal install "time == 1.4.*"; fi; - - cabal install happy # a "haskell-src-exts" implicit dependency workaround - - cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls - -script: + # Work around the "haskell-src-exts" implicit dependency: + - cabal install happy + # Switch to the distro: + - export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; + - cabal install --only-dependencies --enable-tests --enable-benchmarks - cabal configure --enable-tests --enable-benchmarks - cabal build + + +script: - cabal test --show-details=always From 727151bc45db75088543c3ca2ba7c6f0669b84c8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 11:39:28 +0300 Subject: [PATCH 0117/1204] Use a newer "hasql-postgres" in the demo --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8a4cb537c4..8c38428612 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -139,7 +139,7 @@ benchmark demo default-language: Haskell2010 build-depends: - hasql-postgres == 0.3.*, + hasql-postgres == 0.6.*, hasql == 0.1.*, transformers >= 0.2 && < 0.5, base >= 4.5 && < 4.8 From b8a52e75e5afc99a0784df15231d3cfe24d9c992 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 11:40:21 +0300 Subject: [PATCH 0118/1204] Relax the bounds on "hasql-backend" --- .travis.yml | 1 + hasql.cabal | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 00467ed1bb..23c142645c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ install: cabal install "text == 1.0.*"; cabal install "attoparsec == 0.10.*"; cabal install "time == 1.4.*"; + cabal install "hasql-backend == 0.1.*"; fi; # Work around the "haskell-src-exts" implicit dependency: - cabal install happy diff --git a/hasql.cabal b/hasql.cabal index 8c38428612..565a00d438 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.6 + 0.1.7 synopsis: A minimalistic general high level API for relational databases description: @@ -92,7 +92,7 @@ library exposed-modules: Hasql build-depends: - hasql-backend == 0.1.*, + hasql-backend >= 0.1 && < 0.3, -- template-haskell: template-haskell >= 2.8 && < 2.10, -- parsing: From 378b8fc6df62ce54d274001e92a5c8808df119d3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 12:00:01 +0300 Subject: [PATCH 0119/1204] Update the link to the demo --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 565a00d438..a1e3d6781f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -42,7 +42,7 @@ description: . * . . - * . + * . . * . . From 93f0ffedd8e7e0afef1c68fc2ccc24241e2844cd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 12:19:27 +0300 Subject: [PATCH 0120/1204] Fix the quasi-quoter --- hasql.cabal | 31 +++++++++++++++++++++++++++---- library/Hasql.hs | 6 +----- tests/Main.hs | 22 ++++++++++++++++++++++ 3 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 tests/Main.hs diff --git a/hasql.cabal b/hasql.cabal index a1e3d6781f..c9bf07a374 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.1.7 + 0.2.0 synopsis: A minimalistic general high level API for relational databases description: @@ -92,7 +92,7 @@ library exposed-modules: Hasql build-depends: - hasql-backend >= 0.1 && < 0.3, + hasql-backend == 0.2.*, -- template-haskell: template-haskell >= 2.8 && < 2.10, -- parsing: @@ -121,6 +121,29 @@ library base >= 4.5 && < 4.8 +test-suite tests + type: + exitcode-stdio-1.0 + hs-source-dirs: + tests + main-is: + Main.hs + ghc-options: + -threaded + "-with-rtsopts=-N" + -funbox-strict-fields + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + HTF == 0.12.*, + hasql == 0.2.*, + hasql-backend == 0.2.*, + base-prelude == 0.1.*, + base >= 4.5 && < 4.8 + + -- Well, it's not a benchmark actually, -- but in Cabal there's no better way to specify an executable, -- which is not intended for distribution. @@ -139,8 +162,8 @@ benchmark demo default-language: Haskell2010 build-depends: - hasql-postgres == 0.6.*, - hasql == 0.1.*, + hasql-postgres == 0.7.*, + hasql == 0.2.*, transformers >= 0.2 && < 0.5, base >= 4.5 && < 4.8 diff --git a/library/Hasql.hs b/library/Hasql.hs index 168c68b6fa..25afadadd0 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -315,11 +315,7 @@ q = statementF s n = TH.LamE (map TH.VarP argNames) - (TH.AppE - (TH.AppE - (TH.ConE '(,)) - (statementE)) - (argsE)) + (THUtil.purify [|(,,) $(pure statementE) $(pure argsE) True|]) where argNames = map (TH.mkName . ('_' :) . show) [1 .. n] diff --git a/tests/Main.hs b/tests/Main.hs new file mode 100644 index 0000000000..c65d27a946 --- /dev/null +++ b/tests/Main.hs @@ -0,0 +1,22 @@ +{-# OPTIONS_GHC -F -pgmF htfpp #-} +import BasePrelude +import Test.Framework +import qualified Hasql as H +import qualified Hasql.Backend as HB + +main = + htfMain $ htf_thisModulesTests + +data X +instance HB.Backend X where + data StatementArgument X = + StatementArgument String + deriving (Eq, Show) +instance HB.Mapping X Char where + renderValue = StatementArgument . show + + +test_quasiQuoterGeneratesAProperStatement = + assertEqual + (" SELECT ? ", [HB.renderValue 'a'], True) + ([H.q| SELECT ? |] 'a' :: HB.Statement X) From 22682739c953707c82b3894dcf1a495082236a5e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Nov 2014 14:00:22 +0300 Subject: [PATCH 0121/1204] Fix Travis --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 23c142645c..00467ed1bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,6 @@ install: cabal install "text == 1.0.*"; cabal install "attoparsec == 0.10.*"; cabal install "time == 1.4.*"; - cabal install "hasql-backend == 0.1.*"; fi; # Work around the "haskell-src-exts" implicit dependency: - cabal install happy From 0492ab8546726ec1d90527d79b3efa0b9644c3f8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 23 Nov 2014 14:46:13 +0300 Subject: [PATCH 0122/1204] Implement "sessionUnlifter" (Fixes the issue #11) --- library/Hasql.hs | 56 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 25afadadd0..684ff22ba4 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -8,6 +8,7 @@ module Hasql -- * Session Session, session, + sessionUnlifter, -- ** Session Settings SessionSettings, @@ -62,32 +63,49 @@ import qualified Hasql.TH as THUtil -- | -- A monad transformer, -- which executes transactions. -type Session b = - ReaderT (Pool.Pool (Backend.Connection b)) +newtype Session b s m r = + Session (ReaderT (Pool.Pool (Backend.Connection b)) m r) + deriving (Functor, Applicative, Monad, MonadTrans) -- | -- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. +-- +-- It uses the same trick as the 'ST' monad with the @s@ type argument +-- to prohibit the use of the result of +-- 'sessionUnlifter' outside of its creator session. session :: (Backend.Backend b, MonadBaseControl IO m) => - b -> SessionSettings -> Session b m r -> m r -session backend (SessionSettings size timeout) reader = - join $ liftM restoreM $ liftBaseWith $ \runInIO -> + b -> SessionSettings -> (forall s. Session b s m r) -> m r +session backend (SessionSettings size timeout) s = + control $ \runInIO -> mask $ \unmask -> do p <- Pool.createPool (Backend.connect backend) Backend.disconnect 1 timeout size - r <- try $ unmask $ runInIO $ runReaderT reader p + r <- try $ unmask $ runInIO $ runSession p s Pool.purgePool p - either onException return r - where - onException = - \case - Backend.CantConnect t -> throwIO $ CantConnect t - Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.ErroneousResult t -> throwIO $ ErroneousResult t - Backend.UnexpectedResult t -> throwIO $ UnexpectedResult t - Backend.UnparsableTemplate t -> throwIO $ UnparsableTemplate t - Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" - Backend.NotInTransaction -> throwIO $ NotInTransaction + either (throwIO :: SomeException -> IO r) return r + +-- | +-- Get a session unlifting function, +-- which allows to execute a session in the inner monad +-- using the resources of a session this function is called in. +-- +-- @sessionUnlifter >>= \unlift -> lift (unlift session) ≡ session@ +sessionUnlifter :: (MonadBaseControl IO m) => Session b s m (Session b s m r -> m r) +sessionUnlifter = + Session $ ReaderT $ return . runSession + +runSession :: (MonadBaseControl IO m) => Pool.Pool (Backend.Connection b) -> Session b s m r -> m r +runSession e (Session r) = + control $ \runInIO -> + catch (runInIO (runReaderT r e)) $ \case + Backend.CantConnect t -> throwIO $ CantConnect t + Backend.ConnectionLost t -> throwIO $ ConnectionLost t + Backend.ErroneousResult t -> throwIO $ ErroneousResult t + Backend.UnexpectedResult t -> throwIO $ UnexpectedResult t + Backend.UnparsableTemplate t -> throwIO $ UnparsableTemplate t + Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" + Backend.NotInTransaction -> throwIO $ NotInTransaction -- ** Session Settings @@ -184,9 +202,9 @@ type Mode = -- Execute a transaction in a session. tx :: (Backend.Backend b, MonadBase IO m) => - Mode -> (forall s. Tx b s r) -> Session b m r + Mode -> (forall s. Tx b s r) -> Session b s m r tx m t = - ReaderT $ \p -> liftBase $ Pool.withResource p $ \c -> runTx c m t + Session $ ReaderT $ \p -> liftBase $ Pool.withResource p $ \c -> runTx c m t where runTx :: Backend b => From 0c03eb32bc7e383c162f11346e5f8280f641cfca Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 23 Nov 2014 15:14:15 +0300 Subject: [PATCH 0123/1204] Instances for "Session" --- library/Hasql.hs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 684ff22ba4..c24a7a27c1 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -65,7 +65,23 @@ import qualified Hasql.TH as THUtil -- which executes transactions. newtype Session b s m r = Session (ReaderT (Pool.Pool (Backend.Connection b)) m r) - deriving (Functor, Applicative, Monad, MonadTrans) + deriving (Functor, Applicative, Monad, MonadTrans, MonadIO) + +instance MonadTransControl (Session b s) where + newtype StT (Session b s) a = SessionStT a + liftWith onRunner = + Session $ ReaderT $ \e -> onRunner $ \(Session (ReaderT f)) -> liftM SessionStT $ f e + restoreT = + Session . ReaderT . const . liftM (\(SessionStT a) -> a) + +instance (MonadBase IO m) => MonadBase IO (Session b s m) where + liftBase = Session . liftBase + +instance (MonadBaseControl IO m) => MonadBaseControl IO (Session b s m) where + newtype StM (Session b s m) a = SessionStM (ComposeSt (Session b s) m a) + liftBaseWith = defaultLiftBaseWith SessionStM + restoreM = defaultRestoreM $ \(SessionStM x) -> x + -- | -- Given backend settings, session settings, and a session monad transformer, From a76c6ec1e158c165a15cede50eab59018de04c38 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 23 Nov 2014 17:08:05 +0300 Subject: [PATCH 0124/1204] Docs --- library/Hasql.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index c24a7a27c1..7b1100f5d9 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -63,6 +63,11 @@ import qualified Hasql.TH as THUtil -- | -- A monad transformer, -- which executes transactions. +-- +-- @b@ is a backend, +-- @s@ is an anonymous state-thread (same as in 'ST'), +-- @m@ is an inner (transformed) monad, +-- @r@ is a result. newtype Session b s m r = Session (ReaderT (Pool.Pool (Backend.Connection b)) m r) deriving (Functor, Applicative, Monad, MonadTrans, MonadIO) @@ -87,7 +92,7 @@ instance (MonadBaseControl IO m) => MonadBaseControl IO (Session b s m) where -- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. -- --- It uses the same trick as the 'ST' monad with the @s@ type argument +-- It uses the same trick as the 'ST' monad with the anonymous @s@ type argument -- to prohibit the use of the result of -- 'sessionUnlifter' outside of its creator session. session :: From 68b25b5ed1d2c8bc01461d028f717d7ed0f4e747 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 23 Nov 2014 19:54:11 +0300 Subject: [PATCH 0125/1204] Fix issue #10 --- hasql.cabal | 26 ++++++++++++++++++++++++++ library/Hasql/RowParser.hs | 12 +++++++++++- postgres-tests/Main.hs | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 postgres-tests/Main.hs diff --git a/hasql.cabal b/hasql.cabal index c9bf07a374..0d5848a1a0 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -144,6 +144,32 @@ test-suite tests base >= 4.5 && < 4.8 +test-suite postgres-tests + type: + exitcode-stdio-1.0 + hs-source-dirs: + postgres-tests + main-is: + Main.hs + ghc-options: + -threaded + "-with-rtsopts=-N" + -funbox-strict-fields + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + HTF == 0.12.*, + hasql-postgres == 0.7.*, + hasql == 0.2.*, + scientific == 0.3.*, + transformers >= 0.2 && < 0.5, + mtl-prelude < 3, + base-prelude == 0.1.*, + base >= 4.5 && < 4.8 + + -- Well, it's not a benchmark actually, -- but in Cabal there's no better way to specify an executable, -- which is not intended for distribution. diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index 6130028e4f..1eef50881f 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -38,7 +38,17 @@ return $ flip map [2 .. 24] $ \arity -> where rowVarName = mkName "row" e = - THUtil.applicativeE (ConE (tupleDataName arity)) lookups + THUtil.purify $ + [| + let actualLength = Vector.length $(varE rowVarName) + expectedLength = $(litE (IntegerL $ fromIntegral arity)) + in if actualLength == expectedLength + then $(pure $ THUtil.applicativeE (ConE (tupleDataName arity)) lookups) + else Left $ fromString $ ($ "") $ + showString "Inappropriate row length: " . shows actualLength . + showString ", expecting: " . shows expectedLength . + showString " instead" + |] where lookups = do i <- [0 .. pred arity] diff --git a/postgres-tests/Main.hs b/postgres-tests/Main.hs new file mode 100644 index 0000000000..466b84a6c0 --- /dev/null +++ b/postgres-tests/Main.hs @@ -0,0 +1,34 @@ +{-# OPTIONS_GHC -F -pgmF htfpp #-} +import BasePrelude +import MTLPrelude +import Test.Framework +import qualified Hasql as H +import qualified Hasql.Postgres as HP + + +main = + htfMain $ htf_thisModulesTests + +test_wrongRowParserArity = + flip assertThrowsIO (\case H.UnparsableRow _ -> True; _ -> False) $ + session $ do + H.tx Nothing $ do + H.unit [H.q|DROP TABLE IF EXISTS data|] + H.unit [H.q|CREATE TABLE data ( + field1 DECIMAL NOT NULL, + field2 BIGINT NOT NULL, + PRIMARY KEY (field1) + )|] + H.unit [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] + mrow :: Maybe (Double, Int64, String) <- + H.tx Nothing $ + H.single $ [H.q|SELECT * FROM data|] + return () + + +session :: H.Session HP.Postgres IO r -> IO r +session = + H.session backendSettings poolSettings + where + backendSettings = HP.Postgres "localhost" 5432 "postgres" "" "postgres" + poolSettings = fromJust $ H.sessionSettings 6 30 From e4e6a512596752d884c158ab09c6da71f153c346 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 23 Nov 2014 20:01:57 +0300 Subject: [PATCH 0126/1204] Increment the minor version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 0d5848a1a0..d6586ea121 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.2.0 + 0.2.1 synopsis: A minimalistic general high level API for relational databases description: From cc02d231e21828c111a78fa32d8ae2f739567943 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Nov 2014 15:16:57 +0300 Subject: [PATCH 0127/1204] Increment the major version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index d6586ea121..50487aacf2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.2.1 + 0.3.0 synopsis: A minimalistic general high level API for relational databases description: From 03373ff8f5c8d6ae0a01cb6ccba8ee3bcf7b4363 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Nov 2014 15:49:25 +0300 Subject: [PATCH 0128/1204] Docs --- library/Hasql.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 7b1100f5d9..98bbe217b3 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -109,9 +109,11 @@ session backend (SessionSettings size timeout) s = -- | -- Get a session unlifting function, -- which allows to execute a session in the inner monad --- using the resources of a session this function is called in. +-- using the resources of the current session. -- --- @sessionUnlifter >>= \unlift -> lift (unlift session) ≡ session@ +-- Using this function you can interleave 'Session' with other monad transformers. +-- +-- > (sessionUnlifter >>= \unlift -> lift (unlift session)) ≡ session sessionUnlifter :: (MonadBaseControl IO m) => Session b s m (Session b s m r -> m r) sessionUnlifter = Session $ ReaderT $ return . runSession From efc213ca7188850a7bf59b2bfdfc37dcef845fa0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 14:48:14 +0300 Subject: [PATCH 0129/1204] Remove bounds from Hasql deps --- hasql.cabal | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 50487aacf2..966565727f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -137,10 +137,10 @@ test-suite tests default-language: Haskell2010 build-depends: - HTF == 0.12.*, - hasql == 0.2.*, + hasql, hasql-backend == 0.2.*, base-prelude == 0.1.*, + HTF == 0.12.*, base >= 4.5 && < 4.8 @@ -160,13 +160,13 @@ test-suite postgres-tests default-language: Haskell2010 build-depends: - HTF == 0.12.*, + hasql, hasql-postgres == 0.7.*, - hasql == 0.2.*, scientific == 0.3.*, transformers >= 0.2 && < 0.5, mtl-prelude < 3, base-prelude == 0.1.*, + HTF == 0.12.*, base >= 4.5 && < 4.8 @@ -188,8 +188,8 @@ benchmark demo default-language: Haskell2010 build-depends: + hasql, hasql-postgres == 0.7.*, - hasql == 0.2.*, transformers >= 0.2 && < 0.5, base >= 4.5 && < 4.8 From 8c40ec158ea166fa9f3ac6d4a010b3000d934aa9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 14:48:20 +0300 Subject: [PATCH 0130/1204] Docs --- library/Hasql.hs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 98bbe217b3..448db27fe2 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -64,10 +64,14 @@ import qualified Hasql.TH as THUtil -- A monad transformer, -- which executes transactions. -- --- @b@ is a backend, --- @s@ is an anonymous state-thread (same as in 'ST'), --- @m@ is an inner (transformed) monad, --- @r@ is a result. +-- * @b@ is a backend. +-- +-- * @s@ is an anonymous variable, +-- used to associate 'sessionUnlifter' with a specific session. +-- +-- * @m@ is an inner (transformed) monad. +-- +-- * @r@ is a result. newtype Session b s m r = Session (ReaderT (Pool.Pool (Backend.Connection b)) m r) deriving (Functor, Applicative, Monad, MonadTrans, MonadIO) @@ -92,7 +96,7 @@ instance (MonadBaseControl IO m) => MonadBaseControl IO (Session b s m) where -- Given backend settings, session settings, and a session monad transformer, -- execute it in the inner monad. -- --- It uses the same trick as the 'ST' monad with the anonymous @s@ type argument +-- It uses the same trick as 'ST' with the anonymous @s@ type argument -- to prohibit the use of the result of -- 'sessionUnlifter' outside of its creator session. session :: @@ -111,9 +115,12 @@ session backend (SessionSettings size timeout) s = -- which allows to execute a session in the inner monad -- using the resources of the current session. -- --- Using this function you can interleave 'Session' with other monad transformers. +-- Using this function in combination with 'lift' +-- you can interleave 'Session' with other monad transformers. -- --- > (sessionUnlifter >>= \unlift -> lift (unlift session)) ≡ session +-- This function has the following property: +-- +-- > (sessionUnlifter >>= \unlift -> lift (unlift m)) ≡ m sessionUnlifter :: (MonadBaseControl IO m) => Session b s m (Session b s m r -> m r) sessionUnlifter = Session $ ReaderT $ return . runSession @@ -201,8 +208,8 @@ instance Exception Error ------------------------- -- | --- A transaction specialized for backend @b@, --- running on an anonymous state-thread @s@ +-- A transaction specialized for a backend @b@, +-- associated with its intermediate results using an anonymous type-argument @s@ (same as in 'ST') -- and producing a result @r@. newtype Tx b s r = Tx (ReaderT (Backend.Connection b) IO r) @@ -223,6 +230,9 @@ type Mode = -- | -- Execute a transaction in a session. +-- +-- This function ensures on the type level, +-- that it's impossible to return @'TxListT' s m r@ from it. tx :: (Backend.Backend b, MonadBase IO m) => Mode -> (forall s. Tx b s r) -> Session b s m r From 73a5d38f017ff6a905b1bbc1c9b7298d35459134 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 20:18:38 +0300 Subject: [PATCH 0131/1204] Update the "list-t" bounds --- .travis.yml | 1 + hasql.cabal | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 00467ed1bb..7875302788 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ install: cabal install "text == 1.0.*"; cabal install "attoparsec == 0.10.*"; cabal install "time == 1.4.*"; + cabal install "list-t == 0.2.*"; fi; # Work around the "haskell-src-exts" implicit dependency: - cabal install happy diff --git a/hasql.cabal b/hasql.cabal index d6586ea121..5f8e462792 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -105,7 +105,7 @@ library bytestring == 0.10.*, text >= 1.0 && < 1.3, -- control: - list-t >= 0.2.4 && < 0.3, + list-t >= 0.2.4 && < 0.4, monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: From f3c907382a9dd0456e6795d956957cb413a85201 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 20:22:17 +0300 Subject: [PATCH 0132/1204] Remove Bug from the Unit instance of RowParser --- library/Hasql/RowParser.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index 1eef50881f..f5478e0570 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -14,7 +14,7 @@ instance RowParser b () where parseRow row = if Vector.null row then Right () - else $bug "Not an empty row" + else Left "Not an empty row" instance Backend.Mapping b v => RowParser b (Identity v) where parseRow row = do From 746b934bbeb8c3836b45d8bf3b80119e78d14f2c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 22:23:29 +0300 Subject: [PATCH 0133/1204] Fix the "list-t" dep --- hasql.cabal | 4 ++-- library/Hasql.hs | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7f8d8515e0..6093ed0e92 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.3.0 + 0.4.0 synopsis: A minimalistic general high level API for relational databases description: @@ -105,7 +105,7 @@ library bytestring == 0.10.*, text >= 1.0 && < 1.3, -- control: - list-t >= 0.2.4 && < 0.4, + list-t >= 0.3 && < 0.4, monad-control == 0.3.*, transformers-base == 0.4.*, -- errors: diff --git a/library/Hasql.hs b/library/Hasql.hs index 448db27fe2..e98f936da4 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -279,12 +279,13 @@ tx m t = newtype TxListT s m r = TxListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.ListMonad) + Monoid, ListT.MonadCons) -instance ListT.ListTrans (TxListT s) where +instance ListT.MonadTransUncons (TxListT s) where uncons = - unsafeCoerce - (ListT.uncons :: ListT.ListT m r -> m (Maybe (r, ListT.ListT m r))) + (liftM . fmap . fmap) (unsafeCoerce :: ListT.ListT m r -> TxListT s m r) . + ListT.uncons . + (unsafeCoerce :: TxListT s m r -> ListT.ListT m r) -- * Statements execution From 6ce1f5ddb028db9a9002ed9973c4801837d770f5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 29 Nov 2014 22:28:25 +0300 Subject: [PATCH 0134/1204] Update Travis --- .travis.yml | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7875302788..298d0b272f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,13 +10,23 @@ install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e # Install GHC and Cabal - - travis_retry sudo add-apt-repository -y ppa:hvr/ghc - - travis_retry sudo apt-get update - - travis_retry sudo apt-get install cabal-install-1.18 ghc-$ghc - - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/1.18/bin:$PATH + - + travis_retry sudo add-apt-repository -y ppa:hvr/ghc; + travis_retry sudo apt-get update; + travis_retry sudo apt-get install cabal-install-1.18 ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/1.18/bin:$PATH; + # Update the Cabal database - cabal update + # Switch to the distro: + - + export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; # Install the lower bound dependencies - - if [ $lower_bound_dependencies -eq 1 ]; + - + if [ $lower_bound_dependencies -eq 1 ]; then cabal install "transformers == 0.2.*"; cabal install "text == 1.0.*"; @@ -24,18 +34,12 @@ install: cabal install "time == 1.4.*"; cabal install "list-t == 0.2.*"; fi; - # Work around the "haskell-src-exts" implicit dependency: + # Install the "haskell-src-exts" implicit dependency - cabal install happy - # Switch to the distro: - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - - cabal install --only-dependencies --enable-tests --enable-benchmarks - - cabal configure --enable-tests --enable-benchmarks - - cabal build - + # Install the remaining dependencies + - cabal install --only-dependencies --enable-tests --enable-benchmarks --avoid-reinstalls + # Configure and build + - cabal configure --enable-tests --enable-benchmarks && cabal build script: - cabal test --show-details=always From e13d21aa38e1b2a579fb98b4381f1bfaf4f97ab3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 30 Nov 2014 00:15:34 +0300 Subject: [PATCH 0135/1204] Detect the semicolons with the quasi-quoter --- library/Hasql/QParser.hs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/library/Hasql/QParser.hs b/library/Hasql/QParser.hs index 10e862c4f8..a0cd3e4825 100644 --- a/library/Hasql/QParser.hs +++ b/library/Hasql/QParser.hs @@ -12,16 +12,16 @@ type Result = parse :: Text -> Either String Result parse = - parseOnly countPlaceholders + parseOnly $ flip execStateT 0 $ + statement *> + (lift endOfInput <|> + (void (lift (char ';')) <* fail "A semicolon detected. Only single statements are allowed")) where - countPlaceholders = - count <|> pure 0 - where - count = - do - many $ void stringLit <|> void (notChar '?') - char '?' - fmap succ countPlaceholders + statement = + skipMany1 $ + void (lift stringLit) <|> + void (lift (char '?') <* modify succ) <|> + void (lift (notChar ';')) stringLit :: Parser Text stringLit = From 60f8dcd5fd3852b3132e6952d604a6dcbfbeb81e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 30 Nov 2014 02:33:02 +0300 Subject: [PATCH 0136/1204] Remove duplicate deps --- hasql.cabal | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 6093ed0e92..b08ed11b91 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -104,17 +104,14 @@ library time >= 1.4 && < 1.6, bytestring == 0.10.*, text >= 1.0 && < 1.3, - -- control: - list-t >= 0.3 && < 0.4, - monad-control == 0.3.*, - transformers-base == 0.4.*, -- errors: loch-th == 0.2.*, placeholders == 0.1.*, -- general: + safe == 0.3.*, + list-t >= 0.3 && < 0.4, monad-control == 0.3.*, transformers-base == 0.4.*, - safe == 0.3.*, mmorph == 1.0.*, mtl-prelude < 3, base-prelude >= 0.1.3 && < 0.2, From c4f064ddb086a868b6262fa1a7c73cc13a0c9da3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 30 Nov 2014 02:39:32 +0300 Subject: [PATCH 0137/1204] Avoid "mtl-prelude" and update the "transformers" bounds --- .travis.yml | 2 +- hasql.cabal | 8 ++++---- library/Hasql/Prelude.hs | 8 ++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 298d0b272f..86ca21205a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,7 @@ install: - if [ $lower_bound_dependencies -eq 1 ]; then - cabal install "transformers == 0.2.*"; + cabal install "transformers == 0.3.*"; cabal install "text == 1.0.*"; cabal install "attoparsec == 0.10.*"; cabal install "time == 1.4.*"; diff --git a/hasql.cabal b/hasql.cabal index b08ed11b91..aa99c40d7f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -110,10 +110,10 @@ library -- general: safe == 0.3.*, list-t >= 0.3 && < 0.4, + mmorph == 1.0.*, monad-control == 0.3.*, transformers-base == 0.4.*, - mmorph == 1.0.*, - mtl-prelude < 3, + transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 @@ -160,7 +160,7 @@ test-suite postgres-tests hasql, hasql-postgres == 0.7.*, scientific == 0.3.*, - transformers >= 0.2 && < 0.5, + transformers >= 0.3 && < 0.5, mtl-prelude < 3, base-prelude == 0.1.*, HTF == 0.12.*, @@ -187,7 +187,7 @@ benchmark demo build-depends: hasql, hasql-postgres == 0.7.*, - transformers >= 0.2 && < 0.5, + transformers >= 0.3 && < 0.5, base >= 4.5 && < 4.8 diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 9e5832e93d..cd4c514ebe 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -11,9 +11,13 @@ where ------------------------- import BasePrelude as Exports --- mtl-prelude +-- transformers ------------------------- -import MTLPrelude as Exports hiding (shift) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.Class as Exports +import Control.Monad.IO.Class as Exports +import Data.Functor.Identity as Exports -- mmorph ------------------------- From 7248e755b9dc671bf4066ec0dd590e73ca2c6e20 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 30 Nov 2014 02:48:32 +0300 Subject: [PATCH 0138/1204] Drop redundant dependencies --- hasql.cabal | 2 -- 1 file changed, 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index aa99c40d7f..6fd2804a46 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -159,8 +159,6 @@ test-suite postgres-tests build-depends: hasql, hasql-postgres == 0.7.*, - scientific == 0.3.*, - transformers >= 0.3 && < 0.5, mtl-prelude < 3, base-prelude == 0.1.*, HTF == 0.12.*, From 23bae317a6abdbc50586cebbf3676c4ac8be9c3b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 15 Dec 2014 13:06:11 +0300 Subject: [PATCH 0139/1204] Update Travis --- .travis.yml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 86ca21205a..1c347f1a66 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,17 +28,22 @@ install: - if [ $lower_bound_dependencies -eq 1 ]; then - cabal install "transformers == 0.3.*"; - cabal install "text == 1.0.*"; - cabal install "attoparsec == 0.10.*"; - cabal install "time == 1.4.*"; - cabal install "list-t == 0.2.*"; + constraint_options=( + "--constraint=transformers==0.3.*" + "--constraint=text==1.0.*" + "--constraint=attoparsec==0.10.*" + "--constraint=time==1.4.*" + ); fi; # Install the "haskell-src-exts" implicit dependency - - cabal install happy + - cabal install -j ${constraint_options[@]} happy + # Install the library dependencies + - cabal install -j ${constraint_options[@]} --only-dependencies + # Build the library + - cabal build # Install the remaining dependencies - - cabal install --only-dependencies --enable-tests --enable-benchmarks --avoid-reinstalls - # Configure and build + - cabal install -j --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls + # Configure and build the remaining stuff - cabal configure --enable-tests --enable-benchmarks && cabal build script: From caaa53569de6a3cb6cef5d299ecfc807a4f6ee5b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 15 Dec 2014 13:24:15 +0300 Subject: [PATCH 0140/1204] Update the deps on "list-t" and "monad-control" --- hasql.cabal | 4 ++-- library/Hasql.hs | 13 +++++++------ library/Hasql/Prelude.hs | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 6fd2804a46..651f2aa1f4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -109,9 +109,9 @@ library placeholders == 0.1.*, -- general: safe == 0.3.*, - list-t >= 0.3 && < 0.4, + list-t >= 0.4 && < 0.5, mmorph == 1.0.*, - monad-control == 0.3.*, + monad-control == 1.0.*, transformers-base == 0.4.*, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, diff --git a/library/Hasql.hs b/library/Hasql.hs index e98f936da4..31d9d6a163 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE UndecidableInstances #-} -- | -- This is the API of the \"hasql\" library. -- For an introduction to the package @@ -77,19 +78,19 @@ newtype Session b s m r = deriving (Functor, Applicative, Monad, MonadTrans, MonadIO) instance MonadTransControl (Session b s) where - newtype StT (Session b s) a = SessionStT a + type StT (Session b s) a = a liftWith onRunner = - Session $ ReaderT $ \e -> onRunner $ \(Session (ReaderT f)) -> liftM SessionStT $ f e + Session $ ReaderT $ \e -> onRunner $ \(Session (ReaderT f)) -> f e restoreT = - Session . ReaderT . const . liftM (\(SessionStT a) -> a) + Session . ReaderT . const instance (MonadBase IO m) => MonadBase IO (Session b s m) where liftBase = Session . liftBase instance (MonadBaseControl IO m) => MonadBaseControl IO (Session b s m) where - newtype StM (Session b s m) a = SessionStM (ComposeSt (Session b s) m a) - liftBaseWith = defaultLiftBaseWith SessionStM - restoreM = defaultRestoreM $ \(SessionStM x) -> x + type StM (Session b s m) a = ComposeSt (Session b s) m a + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM -- | diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index cd4c514ebe..0a5b3f4320 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -25,7 +25,7 @@ import Control.Monad.Morph as Exports -- monad-control ------------------------- -import Control.Monad.Trans.Control as Exports +import Control.Monad.Trans.Control as Exports hiding (embed, embed_) -- transformers-base ------------------------- From 08ff84427601e60c642bb808815b7c5f7db9b48c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 00:05:48 +0300 Subject: [PATCH 0141/1204] Update Demo --- demo/Main.hs | 4 ++-- hasql.cabal | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index 649b217e71..a162223a13 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -11,12 +11,12 @@ import Data.Functor.Identity import qualified Hasql as H -- Import the backend settings from the "hasql-postgres" library -import qualified Hasql.Postgres as H +import qualified Hasql.Postgres as HP main = do - let postgresSettings = H.Postgres "localhost" 5432 "postgres" "" "postgres" + let postgresSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" -- Prepare session settings with a smart constructor, -- which checks the inputted values on correctness. diff --git a/hasql.cabal b/hasql.cabal index 6fd2804a46..b1d226bc3a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -184,7 +184,7 @@ benchmark demo Haskell2010 build-depends: hasql, - hasql-postgres == 0.7.*, + hasql-postgres == 0.8.*, transformers >= 0.3 && < 0.5, base >= 4.5 && < 4.8 From 499d162cf9b132cde0f96e13b2d10abdf9a60930 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 00:33:18 +0300 Subject: [PATCH 0142/1204] Begin a changes log (#18) --- CHANGELOG.md | 0 hasql.cabal | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/hasql.cabal b/hasql.cabal index b1d226bc3a..0e60a0ab16 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -66,6 +66,8 @@ build-type: Simple cabal-version: >=1.10 +extra-source-files: + CHANGELOG.md source-repository head From 82e6d56eed4f7dbb7aacd3f96f9d7128021b896b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 00:50:13 +0300 Subject: [PATCH 0143/1204] Switch to the "hspec" testing framework --- hasql.cabal | 35 +++++++++++++++++++++-------------- hspec-postgres/Main.hs | 35 +++++++++++++++++++++++++++++++++++ {tests => hspec}/Main.hs | 16 ++++++++-------- postgres-tests/Main.hs | 34 ---------------------------------- 4 files changed, 64 insertions(+), 56 deletions(-) create mode 100644 hspec-postgres/Main.hs rename {tests => hspec}/Main.hs (54%) delete mode 100644 postgres-tests/Main.hs diff --git a/hasql.cabal b/hasql.cabal index 0e60a0ab16..d19af5e72f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -120,11 +120,11 @@ library base >= 4.5 && < 4.8 -test-suite tests +test-suite hspec type: exitcode-stdio-1.0 hs-source-dirs: - tests + hspec main-is: Main.hs ghc-options: @@ -136,19 +136,23 @@ test-suite tests default-language: Haskell2010 build-depends: + -- hasql, hasql-backend == 0.2.*, - base-prelude == 0.1.*, - HTF == 0.12.*, - base >= 4.5 && < 4.8 + -- + hspec == 2.1.*, + -- + mtl-prelude < 3, + base-prelude, + base -test-suite postgres-tests - type: +test-suite hspec-postgres + type: exitcode-stdio-1.0 - hs-source-dirs: - postgres-tests - main-is: + hs-source-dirs: + hspec-postgres + main-is: Main.hs ghc-options: -threaded @@ -159,12 +163,15 @@ test-suite postgres-tests default-language: Haskell2010 build-depends: + -- hasql, - hasql-postgres == 0.7.*, + hasql-postgres == 0.8.*, + -- + hspec == 2.1.*, + -- mtl-prelude < 3, - base-prelude == 0.1.*, - HTF == 0.12.*, - base >= 4.5 && < 4.8 + base-prelude, + base -- Well, it's not a benchmark actually, diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs new file mode 100644 index 0000000000..2d3005d254 --- /dev/null +++ b/hspec-postgres/Main.hs @@ -0,0 +1,35 @@ +import BasePrelude +import MTLPrelude +import Test.Hspec +import qualified Hasql as H +import qualified Hasql.Postgres as HP + + +main = + hspec $ do + + context "RowParser" $ do + + it "should fail on incorrect arity" $ do + flip shouldThrow (\case H.UnparsableRow _ -> True; _ -> False) $ + session $ do + H.tx Nothing $ do + H.unit [H.q|DROP TABLE IF EXISTS data|] + H.unit [H.q|CREATE TABLE data ( + field1 DECIMAL NOT NULL, + field2 BIGINT NOT NULL, + PRIMARY KEY (field1) + )|] + H.unit [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] + mrow :: Maybe (Double, Int64, String) <- + H.tx Nothing $ + H.single $ [H.q|SELECT * FROM data|] + return () + + +session :: (forall s. H.Session HP.Postgres s IO r) -> IO r +session = + H.session backendSettings poolSettings + where + backendSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" + poolSettings = fromJust $ H.sessionSettings 6 30 diff --git a/tests/Main.hs b/hspec/Main.hs similarity index 54% rename from tests/Main.hs rename to hspec/Main.hs index c65d27a946..ee22ff13a3 100644 --- a/tests/Main.hs +++ b/hspec/Main.hs @@ -1,11 +1,8 @@ -{-# OPTIONS_GHC -F -pgmF htfpp #-} import BasePrelude -import Test.Framework +import Test.Hspec import qualified Hasql as H import qualified Hasql.Backend as HB -main = - htfMain $ htf_thisModulesTests data X instance HB.Backend X where @@ -16,7 +13,10 @@ instance HB.Mapping X Char where renderValue = StatementArgument . show -test_quasiQuoterGeneratesAProperStatement = - assertEqual - (" SELECT ? ", [HB.renderValue 'a'], True) - ([H.q| SELECT ? |] 'a' :: HB.Statement X) +main = + hspec $ do + context "Quasi quoter" $ do + it "generates a proper statement" $ do + (flip shouldBe) + (" SELECT ? ", [HB.renderValue 'a'], True) + ([H.q| SELECT ? |] 'a' :: HB.Statement X) diff --git a/postgres-tests/Main.hs b/postgres-tests/Main.hs deleted file mode 100644 index d9a8869166..0000000000 --- a/postgres-tests/Main.hs +++ /dev/null @@ -1,34 +0,0 @@ -{-# OPTIONS_GHC -F -pgmF htfpp #-} -import BasePrelude -import MTLPrelude -import Test.Framework -import qualified Hasql as H -import qualified Hasql.Postgres as HP - - -main = - htfMain $ htf_thisModulesTests - -test_wrongRowParserArity = - flip assertThrowsIO (\case H.UnparsableRow _ -> True; _ -> False) $ - session $ do - H.tx Nothing $ do - H.unit [H.q|DROP TABLE IF EXISTS data|] - H.unit [H.q|CREATE TABLE data ( - field1 DECIMAL NOT NULL, - field2 BIGINT NOT NULL, - PRIMARY KEY (field1) - )|] - H.unit [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] - mrow :: Maybe (Double, Int64, String) <- - H.tx Nothing $ - H.single $ [H.q|SELECT * FROM data|] - return () - - -session :: (forall s. H.Session HP.Postgres s IO r) -> IO r -session = - H.session backendSettings poolSettings - where - backendSettings = HP.Postgres "localhost" 5432 "postgres" "" "postgres" - poolSettings = fromJust $ H.sessionSettings 6 30 From f2853be6399ec16d08c3a5625a53043605e7dacf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 01:24:12 +0300 Subject: [PATCH 0144/1204] Reproduce the bug in a test --- hasql.cabal | 4 +++ hspec-postgres/Main.hs | 69 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/hasql.cabal b/hasql.cabal index d19af5e72f..c1ff54016f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -167,8 +167,12 @@ test-suite hspec-postgres hasql, hasql-postgres == 0.8.*, -- + slave-thread == 0.1.*, + -- hspec == 2.1.*, -- + text, + -- mtl-prelude < 3, base-prelude, base diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 2d3005d254..8a72c6ad67 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -1,13 +1,70 @@ import BasePrelude import MTLPrelude import Test.Hspec +import Data.Text (Text) import qualified Hasql as H import qualified Hasql.Postgres as HP +import qualified SlaveThread main = hspec $ do + context "Bug" $ do + + context "Unhandled transaction conflict" $ do + + it "should not be" $ do + session $ H.tx Nothing $ do + H.unit [H.q|DROP TABLE IF EXISTS artist|] + H.unit [H.q|DROP TABLE IF EXISTS artist_union|] + H.unit $ + [H.q| + CREATE TABLE "artist_union" ( + "id" BIGSERIAL, + PRIMARY KEY ("id") + ) + |] + H.unit $ + [H.q| + CREATE TABLE "artist" ( + "id" BIGSERIAL, + "artist_union_id" INT8 NOT NULL, + "names" TEXT[] NOT NULL, + PRIMARY KEY ("id"), + FOREIGN KEY ("artist_union_id") REFERENCES "artist_union" ("id") ON DELETE CASCADE + ) + |] + (signal, block) <- newBatchGate 6 + let + insertArtistUnion :: H.Tx HP.Postgres s Int64 + insertArtistUnion = + fmap (runIdentity . fromJust) $ H.single $ + [H.q| + INSERT INTO artist_union DEFAULT VALUES RETURNING id + |] + insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 + insertArtist unionID artistNames = + fmap (runIdentity . fromJust) $ H.single $ + [H.q| + INSERT INTO artist + (artist_union_id, + names) + VALUES (?, ?) + RETURNING id + |] + unionID + artistNames + process = + SlaveThread.fork $ do + session $ replicateM_ 100 $ do + H.tx (Just (H.Serializable, True)) $ do + unionID <- insertArtistUnion + insertArtist unionID ["a", "b", "c"] + signal + replicateM_ 6 process + block + context "RowParser" $ do it "should fail on incorrect arity" $ do @@ -27,9 +84,21 @@ main = return () +-- * Helpers +------------------------- + session :: (forall s. H.Session HP.Postgres s IO r) -> IO r session = H.session backendSettings poolSettings where backendSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" poolSettings = fromJust $ H.sessionSettings 6 30 + +newBatchGate :: Int -> IO (IO (), IO ()) +newBatchGate amount = + do + counter <- atomically $ newTVar amount + return $ + let signal = atomically $ readTVar counter >>= writeTVar counter . pred + block = atomically $ readTVar counter >>= \x -> when (x > 0) retry + in (signal, block) From eb0163c6d84861b4d403b94959bc371aafe7ba7b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 02:18:07 +0300 Subject: [PATCH 0145/1204] Fix the bug --- library/Hasql.hs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index e98f936da4..f7271a8d3a 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -249,16 +249,16 @@ tx m t = Backend b => Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r inTransaction mode c io = - do - Backend.beginTransaction mode c - try io >>= \case - Left Backend.TransactionConflict -> do - Backend.finishTransaction False c - inTransaction mode c io - Left e -> throwIO e - Right r -> do - Backend.finishTransaction True c - return r + let + io' = + Backend.beginTransaction mode c *> io <* Backend.finishTransaction True c + in + try io' >>= \case + Left Backend.TransactionConflict -> do + Backend.finishTransaction False c + inTransaction mode c io + Left e -> throwIO e + Right r -> return r -- * Results Stream From d1628fb60d8f92cdd3484fb11eeb5121807e3a20 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Dec 2014 02:19:22 +0300 Subject: [PATCH 0146/1204] Release --- CHANGELOG.md | 2 ++ hasql.cabal | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e69de29bb2..46dfe48552 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -0,0 +1,2 @@ +# 0.4.1 +* Fix the transaction conflicts bug diff --git a/hasql.cabal b/hasql.cabal index c1ff54016f..35973b03c6 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.4.0 + 0.4.1 synopsis: A minimalistic general high level API for relational databases description: From 78b1cf982904ac58781b877c7241548672687997 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Dec 2014 19:10:19 +0300 Subject: [PATCH 0147/1204] Update the "hasql-postgres" deps --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 49d44cb121..238aa60ffe 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -165,7 +165,7 @@ test-suite hspec-postgres build-depends: -- hasql, - hasql-postgres == 0.8.*, + hasql-postgres == 0.9.*, -- slave-thread == 0.1.*, -- @@ -197,7 +197,7 @@ benchmark demo Haskell2010 build-depends: hasql, - hasql-postgres == 0.8.*, + hasql-postgres == 0.9.*, transformers >= 0.3 && < 0.5, base >= 4.5 && < 4.8 From 1dfed9be7620281b00fe733a9d7fc84dc4d56f38 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Dec 2014 19:54:56 +0300 Subject: [PATCH 0148/1204] Release --- CHANGELOG.md | 3 +++ hasql.cabal | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46dfe48552..6d76bf30eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,5 @@ +# 0.5.0 +* Update the "list-t" and "monad-control" deps + # 0.4.1 * Fix the transaction conflicts bug diff --git a/hasql.cabal b/hasql.cabal index 238aa60ffe..59fa6bb6ee 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.4.1 + 0.5.0 synopsis: A minimalistic general high level API for relational databases description: From 39970138fa99d661aa9aa07e00940c3297f1579a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 03:29:36 +0300 Subject: [PATCH 0149/1204] A complete overhaul --- CHANGELOG.md | 12 ++ hasql.cabal | 42 ++-- hspec-postgres/Main.hs | 65 ++++-- hspec/Main.hs | 20 +- library/Hasql.hs | 427 +++++++++++++++---------------------- library/Hasql/Prelude.hs | 44 +--- library/Hasql/RowParser.hs | 21 +- library/Hasql/TH.hs | 47 +++- 8 files changed, 326 insertions(+), 352 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d76bf30eb..6448ac84c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# 0.6.0 - Major API overhaul +* Removed the `Session` monad, opening a direct access to the connection pool, thus providing for a simpler compatibility with other libraries. +* The connection timeout is now set using `Int` for simplicity. +* There are no exceptions any more. All the error-reporting is typed and done explicitly, using `Either`. +* The error types are now mostly backend-specific. +* The transaction mode is now extended to support uncommitable transactions with the `TxWriteMode` type. +* `Tx` now has a `MonadError` instance, which allows to handle errors while remaining in the transaction. +* All `Tx` functions now have a "Tx" suffix. +* There is no more `list` transaction. Instead there is `vectorTx`. +* The `Statement` type is renamed to `Stmt` and is now exported from the main API. +* `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. + # 0.5.0 * Update the "list-t" and "monad-control" deps diff --git a/hasql.cabal b/hasql.cabal index 59fa6bb6ee..b142aedc9f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.5.0 + 0.6.0 synopsis: A minimalistic general high level API for relational databases description: @@ -10,7 +10,7 @@ description: . Features: . - * Concise and crisp API. Just a few functions and two monads doing all the + * Concise and crisp API. Just a few functions and one monad doing all the boilerplate job for you. . * A powerful transaction abstraction, which provides @@ -31,7 +31,7 @@ description: * Automated management of resources related to connections, transactions and cursors. . - * A built-in connections pool. + * A built-in connection pool. . * Compile-time generation of templates. You just can't write a statement with an incorrect number of placeholders. @@ -94,27 +94,21 @@ library exposed-modules: Hasql build-depends: - hasql-backend == 0.2.*, - -- template-haskell: + -- + resource-pool == 0.2.*, + hasql-backend == 0.3.*, + -- template-haskell >= 2.8 && < 2.10, - -- parsing: + -- attoparsec >= 0.10 && < 0.13, - -- database: - ex-pool == 0.2.*, - -- data: + -- vector < 0.11, - time >= 1.4 && < 1.6, - bytestring == 0.10.*, text >= 1.0 && < 1.3, - -- errors: - loch-th == 0.2.*, - placeholders == 0.1.*, - -- general: - safe == 0.3.*, - list-t >= 0.4 && < 0.5, + -- + either >= 4.3 && < 4.4, + list-t >= 0.3.1 && < 0.5, mmorph == 1.0.*, - monad-control == 1.0.*, - transformers-base == 0.4.*, + mtl >= 2.1 && < 2.3, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 @@ -138,10 +132,12 @@ test-suite hspec build-depends: -- hasql, - hasql-backend == 0.2.*, + hasql-backend, -- hspec == 2.1.*, -- + vector, + -- mtl-prelude < 3, base-prelude, base @@ -165,7 +161,7 @@ test-suite hspec-postgres build-depends: -- hasql, - hasql-postgres == 0.9.*, + hasql-postgres == 0.10.*, -- slave-thread == 0.1.*, -- @@ -173,6 +169,8 @@ test-suite hspec-postgres -- text, -- + monad-control, + either, mtl-prelude < 3, base-prelude, base @@ -197,7 +195,7 @@ benchmark demo Haskell2010 build-depends: hasql, - hasql-postgres == 0.9.*, + hasql-postgres == 0.10.*, transformers >= 0.3 && < 0.5, base >= 4.5 && < 4.8 diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 8a72c6ad67..4404c6c572 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -1,5 +1,7 @@ import BasePrelude import MTLPrelude +import Control.Monad.Trans.Either +import Control.Monad.Trans.Control import Test.Hspec import Data.Text (Text) import qualified Hasql as H @@ -15,17 +17,17 @@ main = context "Unhandled transaction conflict" $ do it "should not be" $ do - session $ H.tx Nothing $ do - H.unit [H.q|DROP TABLE IF EXISTS artist|] - H.unit [H.q|DROP TABLE IF EXISTS artist_union|] - H.unit $ + session $ tx Nothing $ do + H.unitTx [H.q|DROP TABLE IF EXISTS artist|] + H.unitTx [H.q|DROP TABLE IF EXISTS artist_union|] + H.unitTx $ [H.q| CREATE TABLE "artist_union" ( "id" BIGSERIAL, PRIMARY KEY ("id") ) |] - H.unit $ + H.unitTx $ [H.q| CREATE TABLE "artist" ( "id" BIGSERIAL, @@ -39,13 +41,13 @@ main = let insertArtistUnion :: H.Tx HP.Postgres s Int64 insertArtistUnion = - fmap (runIdentity . fromJust) $ H.single $ + fmap (runIdentity . fromJust) $ H.maybeTx $ [H.q| INSERT INTO artist_union DEFAULT VALUES RETURNING id |] insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 insertArtist unionID artistNames = - fmap (runIdentity . fromJust) $ H.single $ + fmap (runIdentity . fromJust) $ H.maybeTx $ [H.q| INSERT INTO artist (artist_union_id, @@ -58,7 +60,7 @@ main = process = SlaveThread.fork $ do session $ replicateM_ 100 $ do - H.tx (Just (H.Serializable, True)) $ do + tx (Just (H.Serializable, Just True)) $ do unionID <- insertArtistUnion insertArtist unionID ["a", "b", "c"] signal @@ -68,32 +70,25 @@ main = context "RowParser" $ do it "should fail on incorrect arity" $ do - flip shouldThrow (\case H.UnparsableRow _ -> True; _ -> False) $ + flip shouldSatisfy (\case Left (H.UnparsableResult _) -> True; _ -> False) =<< do session $ do - H.tx Nothing $ do - H.unit [H.q|DROP TABLE IF EXISTS data|] - H.unit [H.q|CREATE TABLE data ( + tx Nothing $ do + H.unitTx [H.q|DROP TABLE IF EXISTS data|] + H.unitTx [H.q|CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )|] - H.unit [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] + H.unitTx [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- - H.tx Nothing $ - H.single $ [H.q|SELECT * FROM data|] + tx Nothing $ + H.maybeTx $ [H.q|SELECT * FROM data|] return () -- * Helpers ------------------------- -session :: (forall s. H.Session HP.Postgres s IO r) -> IO r -session = - H.session backendSettings poolSettings - where - backendSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" - poolSettings = fromJust $ H.sessionSettings 6 30 - newBatchGate :: Int -> IO (IO (), IO ()) newBatchGate amount = do @@ -102,3 +97,29 @@ newBatchGate amount = let signal = atomically $ readTVar counter >>= writeTVar counter . pred block = atomically $ readTVar counter >>= \x -> when (x > 0) retry in (signal, block) + + +-- * Hasql utils +------------------------- + +newtype HSession m r = + HSession (ReaderT (H.Pool HP.Postgres) (EitherT (H.TxError HP.Postgres) m) r) + deriving (Functor, Applicative, Monad, MonadIO) + +instance MonadTrans HSession where + lift = HSession . lift . lift + +tx :: MonadIO m => H.TxMode -> (forall s. H.Tx HP.Postgres s a) -> HSession m a +tx mode m = + HSession $ ReaderT $ \p -> EitherT $ liftIO $ H.tx p mode m + +session :: MonadBaseControl IO m => HSession m r -> m (Either (H.TxError HP.Postgres) r) +session (HSession m) = + control $ \unlift -> do + p <- H.acquirePool backendSettings poolSettings + r <- unlift $ runEitherT $ runReaderT m p + H.releasePool p + return r + where + backendSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" + poolSettings = fromJust $ H.poolSettings 6 30 diff --git a/hspec/Main.hs b/hspec/Main.hs index ee22ff13a3..f8b5a30a27 100644 --- a/hspec/Main.hs +++ b/hspec/Main.hs @@ -2,21 +2,25 @@ import BasePrelude import Test.Hspec import qualified Hasql as H import qualified Hasql.Backend as HB +import qualified Data.Vector as V data X -instance HB.Backend X where - data StatementArgument X = - StatementArgument String - deriving (Eq, Show) -instance HB.Mapping X Char where - renderValue = StatementArgument . show +data instance HB.StmtParam X = + StmtParam String + deriving (Eq, Show) + +deriving instance Show (HB.Stmt X) +deriving instance Eq (HB.Stmt X) + +instance HB.CxValue X Char where + encodeValue = StmtParam . show main = hspec $ do context "Quasi quoter" $ do it "generates a proper statement" $ do (flip shouldBe) - (" SELECT ? ", [HB.renderValue 'a'], True) - ([H.q| SELECT ? |] 'a' :: HB.Statement X) + (HB.Stmt " SELECT (? + ?) " (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) + ([H.q| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) diff --git a/library/Hasql.hs b/library/Hasql.hs index d448dd182c..3b6b9f251e 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -4,265 +4,236 @@ -- For an introduction to the package -- and links to more documentation please refer to -- <../ the package's index page>. +-- +-- This API is completely disinfected from exceptions. +-- All error-reporting is explicit and +-- is presented using the 'Either' type. module Hasql ( - -- * Session - Session, - session, - sessionUnlifter, + -- * Pool + Pool, + acquirePool, + releasePool, + + -- ** Pool Settings + PoolSettings, + poolSettings, - -- ** Session Settings - SessionSettings, - sessionSettings, + -- * Statement + Bknd.Stmt, + q, + + -- ** Statement Execution + unitTx, + countTx, + maybeTx, + vectorTx, + streamTx, -- * Transaction Tx, tx, -- ** Transaction Settings - Mode, - Backend.IsolationLevel(..), - - -- * Statement Quasi-Quoter - q, + Bknd.TxMode(..), + Bknd.TxIsolationLevel(..), + Bknd.TxWriteMode(..), - -- * Statement Execution - unit, - count, - single, - list, - stream, + -- ** Transaction Error + TxError(..), - -- * Results Stream + -- ** Result Stream TxListT, - -- * Row parser - RowParser.RowParser(..), - - -- * Error - Error(..), + -- * Row Parser + RowParser.RowParser, ) where -import Hasql.Prelude hiding (Error) -import Hasql.Backend (Backend) -import Hasql.RowParser (RowParser) -import qualified Hasql.Backend as Backend +import Hasql.Prelude +import qualified Hasql.Backend as Bknd import qualified Hasql.RowParser as RowParser import qualified Hasql.QParser as QParser import qualified ListT import qualified Data.Pool as Pool import qualified Data.Vector as Vector +import qualified Data.Vector.Mutable as MVector import qualified Language.Haskell.TH as TH import qualified Language.Haskell.TH.Quote as TH import qualified Hasql.TH as THUtil --- * Session +-- * Resources ------------------------- -- | --- A monad transformer, --- which executes transactions. --- --- * @b@ is a backend. --- --- * @s@ is an anonymous variable, --- used to associate 'sessionUnlifter' with a specific session. --- --- * @m@ is an inner (transformed) monad. --- --- * @r@ is a result. -newtype Session b s m r = - Session (ReaderT (Pool.Pool (Backend.Connection b)) m r) - deriving (Functor, Applicative, Monad, MonadTrans, MonadIO) - -instance MonadTransControl (Session b s) where - type StT (Session b s) a = a - liftWith onRunner = - Session $ ReaderT $ \e -> onRunner $ \(Session (ReaderT f)) -> f e - restoreT = - Session . ReaderT . const - -instance (MonadBase IO m) => MonadBase IO (Session b s m) where - liftBase = Session . liftBase - -instance (MonadBaseControl IO m) => MonadBaseControl IO (Session b s m) where - type StM (Session b s m) a = ComposeSt (Session b s) m a - liftBaseWith = defaultLiftBaseWith - restoreM = defaultRestoreM - +-- A connection pool. +newtype Pool c = + Pool (Pool.Pool (Either (Bknd.CxError c) c)) -- | --- Given backend settings, session settings, and a session monad transformer, --- execute it in the inner monad. --- --- It uses the same trick as 'ST' with the anonymous @s@ type argument --- to prohibit the use of the result of --- 'sessionUnlifter' outside of its creator session. -session :: - (Backend.Backend b, MonadBaseControl IO m) => - b -> SessionSettings -> (forall s. Session b s m r) -> m r -session backend (SessionSettings size timeout) s = - control $ \runInIO -> - mask $ \unmask -> do - p <- Pool.createPool (Backend.connect backend) Backend.disconnect 1 timeout size - r <- try $ unmask $ runInIO $ runSession p s - Pool.purgePool p - either (throwIO :: SomeException -> IO r) return r +-- Given backend-specific connection settings and pool settings, +-- acquire a backend connection pool, +-- which can then be used to work with the DB. +acquirePool :: Bknd.Cx c => Bknd.CxSettings c -> PoolSettings -> IO (Pool c) +acquirePool cxSettings (PoolSettings size timeout) = + fmap Pool $ + Pool.createPool (Bknd.acquireCx cxSettings) + (either (const $ return ()) Bknd.releaseCx) + (1) + (fromIntegral timeout) + (size) -- | --- Get a session unlifting function, --- which allows to execute a session in the inner monad --- using the resources of the current session. --- --- Using this function in combination with 'lift' --- you can interleave 'Session' with other monad transformers. --- --- This function has the following property: --- --- > (sessionUnlifter >>= \unlift -> lift (unlift m)) ≡ m -sessionUnlifter :: (MonadBaseControl IO m) => Session b s m (Session b s m r -> m r) -sessionUnlifter = - Session $ ReaderT $ return . runSession - -runSession :: (MonadBaseControl IO m) => Pool.Pool (Backend.Connection b) -> Session b s m r -> m r -runSession e (Session r) = - control $ \runInIO -> - catch (runInIO (runReaderT r e)) $ \case - Backend.CantConnect t -> throwIO $ CantConnect t - Backend.ConnectionLost t -> throwIO $ ConnectionLost t - Backend.ErroneousResult t -> throwIO $ ErroneousResult t - Backend.UnexpectedResult t -> throwIO $ UnexpectedResult t - Backend.UnparsableTemplate t -> throwIO $ UnparsableTemplate t - Backend.TransactionConflict -> $bug "Unexpected TransactionConflict exception" - Backend.NotInTransaction -> throwIO $ NotInTransaction - - --- ** Session Settings +-- Release all connections acquired by the pool. +releasePool :: Pool c -> IO () +releasePool (Pool p) = + Pool.destroyAllResources p + + +-- ** Pool Settings ------------------------- -- | --- Settings of a session. -data SessionSettings = - SessionSettings !Word32 !NominalDiffTime +-- Settings of a pool. +data PoolSettings = + PoolSettings !Int !Int -- | --- A smart constructor for session settings. -sessionSettings :: - Word32 +-- A smart constructor for pool settings. +poolSettings :: + Int -- ^ -- The maximum number of connections to keep open. -- The smallest acceptable value is 1. -- Requests for connections will block if this limit is reached. -> - NominalDiffTime + Int -- ^ - -- The amount of time for which an unused connection is kept open. - -- The smallest acceptable value is 0.5 seconds. + -- The amount of seconds for which an unused connection is kept open. + -- The smallest acceptable value is 1. -> - Maybe SessionSettings + Maybe PoolSettings -- ^ - -- Maybe session settings, if they are correct. -sessionSettings size timeout = - if size > 0 && timeout >= 0.5 - then Just $ SessionSettings size timeout + -- Maybe pool settings, if they are correct. +poolSettings size timeout = + if size > 0 && timeout >= 1 + then Just $ PoolSettings size timeout else Nothing --- ** Error +-- * Transaction ------------------------- -- | --- The only exception type that this API can raise. -data Error = - -- | - -- Cannot connect to a server. - CantConnect Text | - -- | - -- The connection got interrupted. - ConnectionLost Text | - -- | - -- An error returned from the database. - ErroneousResult Text | - -- | - -- Unexpected result structure. - -- Indicates usage of inappropriate statement executor. - UnexpectedResult Text | +-- A transaction specialized for a backend connection @c@, +-- associated with its intermediate results using an anonymous type-argument @s@ (same trick as in 'ST') +-- and producing a result @r@. +-- +-- Running `IO` in `Tx` is prohibited. +-- The motivation is identical to `STM`: +-- the `Tx` block may get executed multiple times if any transaction conflicts arise. +-- This will result in your effectful `IO` code being executed +-- an unpredictable amount of times as well, +-- which, chances are, is not what you want. +newtype Tx c s r = + Tx (EitherT (TxError c) (Bknd.Tx c) r) + deriving (Functor, Applicative, Monad, MonadError (TxError c)) + +data TxError c = -- | - -- Incorrect statement template. - UnparsableTemplate Text | + -- A backend-specific connection acquisition error. + -- E.g., a failure to establish a connection. + BackendCxError (Bknd.CxError c) | -- | - -- An operation, - -- which requires a database transaction was executed without one. - NotInTransaction | + -- A backend-specific transaction error. + -- It should cover all possible failures related to an established connection, + -- including the loss of connection, query errors and database failures. + BackendTxError (Bknd.TxError c) | -- | - -- Attempt to parse a row into an incompatible type. + -- Attempt to parse a result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - UnparsableRow Text - deriving (Show, Typeable, Eq, Ord) + UnparsableResult Text -instance Exception Error +deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (TxError c) +deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (TxError c) + +-- | +-- Execute a transaction on a connection pool. +-- +-- This function ensures on the type level, +-- that it's impossible to return @'TxListT' s m r@ from it. +tx :: Bknd.CxTx c => Pool c -> Bknd.TxMode -> (forall s. Tx c s r) -> IO (Either (TxError c) r) +tx (Pool pool) mode (Tx m) = + Pool.withResource pool $ \e -> + runEitherT $ do + c <- hoistEither $ mapLeft BackendCxError e + let + attempt = + do + r <- EitherT $ fmap (either (Left . BackendTxError) Right) $ + Bknd.runTx c mode $ runEitherT m + maybe attempt hoistEither r + in attempt --- * Transaction +-- * Statements execution ------------------------- -- | --- A transaction specialized for a backend @b@, --- associated with its intermediate results using an anonymous type-argument @s@ (same as in 'ST') --- and producing a result @r@. -newtype Tx b s r = - Tx (ReaderT (Backend.Connection b) IO r) - deriving (Functor, Applicative, Monad) +-- Execute a statement without processing the result. +unitTx :: Bknd.Stmt c -> Tx c s () +unitTx = + Tx . lift . Bknd.unitTx -- | --- A transaction mode defining how a transaction should be executed. --- --- * @Just (isolationLevel, write)@ indicates that a database transaction --- should be established with a specified isolation level and a boolean, --- defining, whether it would perform any modification operations. --- --- * @Nothing@ indicates that there should be no database transaction established on --- the backend and therefore it should be executed with no ACID guarantees, --- but also without any induced overhead. -type Mode = - Maybe (Backend.IsolationLevel, Bool) +-- Execute a statement and count the amount of affected rows. +-- Useful for resolving how many rows were updated or deleted. +countTx :: Bknd.CxValue c Word64 => Bknd.Stmt c -> Tx c s Word64 +countTx = + Tx . lift . Bknd.countTx -- | --- Execute a transaction in a session. +-- Execute a statement, +-- which produces a single result row. +-- E.g., +-- a @SELECT@ +-- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id), +-- or an @UPDATE@ or @DELETE@, counting the affected rows. +maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) +maybeTx s = + Tx $ do + r <- lift $ Bknd.maybeTx s + EitherT $ return $ traverse ((mapLeft UnparsableResult) . RowParser.parseRow) $ r + +-- | +-- Execute a @SELECT@ statement, +-- and produce a vector of results. +vectorTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Vector r) +vectorTx s = + Tx $ do + r <- lift $ Bknd.vectorTx s + EitherT $ return $ traverse ((mapLeft UnparsableResult) . RowParser.parseRow) $ r + +-- | +-- Execute a @SELECT@ statement with a cursor, +-- and produce a result stream. -- --- This function ensures on the type level, --- that it's impossible to return @'TxListT' s m r@ from it. -tx :: - (Backend.Backend b, MonadBase IO m) => - Mode -> (forall s. Tx b s r) -> Session b s m r -tx m t = - Session $ ReaderT $ \p -> liftBase $ Pool.withResource p $ \c -> runTx c m t - where - runTx :: - Backend b => - Backend.Connection b -> Mode -> (forall s. Tx b s r) -> IO r - runTx connection mode (Tx reader) = - maybe (const id) inTransaction mode connection (runReaderT reader connection) - where - inTransaction :: - Backend b => - Backend.TransactionMode -> Backend.Connection b -> IO r -> IO r - inTransaction mode c io = - let - io' = - Backend.beginTransaction mode c *> io <* Backend.finishTransaction True c - in - try io' >>= \case - Left Backend.TransactionConflict -> do - Backend.finishTransaction False c - inTransaction mode c io - Left e -> throwIO e - Right r -> return r - - --- * Results Stream +-- Cursor allows you to fetch virtually limitless results in a constant memory +-- at a cost of a small overhead. +-- Note that in most databases cursors require establishing a database transaction, +-- so depending on a backend the transaction may result in an error, +-- if you run it improperly. +streamTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) +streamTx s = + Tx $ do + r <- lift $ Bknd.streamTx s + return $ TxListT $ do + row <- hoist (Tx . lift) r + lift $ Tx $ EitherT $ return $ mapLeft UnparsableResult $ RowParser.parseRow $ row + + +-- * Result Stream ------------------------- -- | @@ -273,7 +244,7 @@ tx m t = -- which uses the same trick as the 'ST' monad to associate with the -- context transaction and become impossible to be used outside of it. -- This lets the library ensure that it is safe to automatically --- release all the resources associated with this stream. +-- release all the connections associated with this stream. -- -- All the functions of the \"list-t\" library are applicable to this type, -- amongst which are 'ListT.head', 'ListT.toList', 'ListT.fold', 'ListT.traverse_'. @@ -289,69 +260,18 @@ instance ListT.MonadTransUncons (TxListT s) where (unsafeCoerce :: TxListT s m r -> ListT.ListT m r) --- * Statements execution -------------------------- - --- | --- Execute a statement, which produces no result. -unit :: Backend b => Backend.Statement b -> Tx b s () -unit s = - Tx $ ReaderT $ Backend.execute s - --- | --- Execute a statement and count the amount of affected rows. --- Useful for resolving how many rows were updated or deleted. -count :: (Backend b, Backend.Mapping b Word64) => Backend.Statement b -> Tx b s Word64 -count s = - Tx $ ReaderT $ Backend.executeAndCountEffects s - --- | --- Execute a statement, --- which produces a single result row: --- a @SELECT@ --- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). -single :: (Backend b, RowParser b r) => Backend.Statement b -> Tx b s (Maybe r) -single s = - headMay <$> list s - --- | --- Execute a @SELECT@ statement, --- and produce a list of results. -list :: (Backend b, RowParser b r) => Backend.Statement b -> Tx b s [r] -list s = - Tx $ ReaderT $ \c -> do - m <- Backend.executeAndGetMatrix s c - traverse (either (throwIO . UnparsableRow) return . RowParser.parseRow) $ Vector.toList m - --- | --- Execute a @SELECT@ statement with a cursor, --- and produce a results stream. --- --- Cursor allows you to fetch virtually limitless results in a constant memory --- at a cost of a small overhead. --- Note that in most databases cursors require establishing a database transaction, --- so a 'NotInTransaction' error will be raised if you run it improperly. -stream :: (Backend b, RowParser b r) => Backend.Statement b -> TxListT s (Tx b s) r -stream s = - do - s <- lift $ Tx $ ReaderT $ \c -> Backend.executeAndStream s c - TxListT $ hoist (Tx . lift) $ do - row <- s - either (lift . throwIO . UnparsableRow) return $ RowParser.parseRow row - - -- * Statements quasi-quotation ------------------------- -- | -- Produces a lambda-expression, -- which takes as many parameters as there are placeholders in the quoted text --- and results in a 'Backend.Statement'. +-- and results in a 'Bknd.Stmt'. -- -- E.g.: -- --- >selectFive :: Statement b --- >selectFive = [q|SELECT (? + ?)|] 2 3 +-- >selectSum :: Int -> Int -> Stmt c +-- >selectSum = [q|SELECT (? + ?)|] -- q :: TH.QuasiQuoter q = @@ -364,18 +284,17 @@ q = parseExp s = do n <- either (fail . showString "Parsing failure: ") return (QParser.parse (fromString s)) - return $ statementF s n + return $ statementF s (fromIntegral n) statementF s n = TH.LamE (map TH.VarP argNames) - (THUtil.purify [|(,,) $(pure statementE) $(pure argsE) True|]) + (THUtil.purify [|Bknd.Stmt $(pure statementE) $(pure argsE) True|]) where argNames = map (TH.mkName . ('_' :) . show) [1 .. n] statementE = TH.LitE (TH.StringL s) - argsE = - TH.ListE $ flip map argNames $ \x -> - THUtil.purify - [| Backend.renderValue $(TH.varE x) |] - + argsE = + THUtil.vectorE $ + map (\x -> THUtil.purify [| Bknd.encodeValue $(TH.varE x) |]) $ + argNames diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 0a5b3f4320..f9c8d2d9f6 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -1,15 +1,13 @@ module Hasql.Prelude ( module Exports, - bug, - bottom, ) where -- base-prelude ------------------------- -import BasePrelude as Exports +import BasePrelude as Exports hiding (left, right, isLeft, isRight) -- transformers ------------------------- @@ -19,21 +17,18 @@ import Control.Monad.Trans.Class as Exports import Control.Monad.IO.Class as Exports import Data.Functor.Identity as Exports --- mmorph +-- mtl ------------------------- -import Control.Monad.Morph as Exports +import Control.Monad.Error.Class as Exports --- monad-control -------------------------- -import Control.Monad.Trans.Control as Exports hiding (embed, embed_) - --- transformers-base +-- mmorph ------------------------- -import Control.Monad.Base as Exports +import Control.Monad.Morph as Exports --- safe +-- either ------------------------- -import Safe as Exports +import Control.Monad.Trans.Either as Exports +import Data.Either.Combinators as Exports -- list-t ------------------------- @@ -46,26 +41,3 @@ import Data.Vector as Exports (Vector) -- text ------------------------- import Data.Text as Exports (Text) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) - --- time -------------------------- -import Data.Time as Exports - --- placeholders -------------------------- -import Development.Placeholders as Exports - --- custom -------------------------- -import qualified Debug.Trace.LocationTH - - -bug = [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] - where - msg = "A \"hasql\" package bug: " :: String - -bottom = [e| $bug "Bottom evaluated" |] diff --git a/library/Hasql/RowParser.hs b/library/Hasql/RowParser.hs index f5478e0570..ffa251ac1a 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/RowParser.hs @@ -2,23 +2,26 @@ module Hasql.RowParser where import Hasql.Prelude import Language.Haskell.TH -import qualified Hasql.Backend as Backend +import qualified Hasql.Backend as Bknd import qualified Data.Vector as Vector import qualified Hasql.TH as THUtil -class RowParser b r where - parseRow :: Vector.Vector (Backend.Result b) -> Either Text r +-- | +-- This class is only intended to be used with the supplied instances, +-- which should be enough to cover all use cases. +class RowParser c r where + parseRow :: Bknd.ResultRow c -> Either Text r -instance RowParser b () where +instance RowParser c () where parseRow row = if Vector.null row then Right () else Left "Not an empty row" -instance Backend.Mapping b v => RowParser b (Identity v) where +instance Bknd.CxValue c v => RowParser c (Identity v) where parseRow row = do - Identity <$> Backend.parseResult (Vector.unsafeHead row) + Identity <$> Bknd.decodeValue (Vector.unsafeHead row) -- Generate tuple instaces using Template Haskell: return $ flip map [2 .. 24] $ \arity -> @@ -28,9 +31,9 @@ return $ flip map [2 .. 24] $ \arity -> varTypes = map VarT varNames connectionType = - VarT (mkName "b") + VarT (mkName "c") constraints = - map (\t -> ClassP ''Backend.Mapping [connectionType, t]) varTypes + map (\t -> ClassP ''Bknd.CxValue [connectionType, t]) varTypes head = AppT (AppT (ConT ''RowParser) connectionType) (foldl AppT (TupleT arity) varTypes) parseRowDec = @@ -54,7 +57,7 @@ return $ flip map [2 .. 24] $ \arity -> i <- [0 .. pred arity] return $ THUtil.purify $ [| - Backend.parseResult + Bknd.decodeValue (Vector.unsafeIndex $(varE rowVarName) $(litE (IntegerL $ fromIntegral i)) ) |] in InstanceD constraints head [parseRowDec] diff --git a/library/Hasql/TH.hs b/library/Hasql/TH.hs index 0993994470..f2d7c83657 100644 --- a/library/Hasql/TH.hs +++ b/library/Hasql/TH.hs @@ -4,6 +4,8 @@ module Hasql.TH where import Hasql.Prelude import Language.Haskell.TH +import qualified Data.Vector as Vector +import qualified Data.Vector.Mutable as MVector applicativeE :: Exp -> [Exp] -> Exp @@ -18,7 +20,50 @@ applicativeE head = \case e : o : t -> UInfixE e o (reduce t) e : [] -> e - _ -> $bug $ "Unexpected queue size. Exps: " <> show exps + _ -> error $ "Unexpected queue size. Exps: " <> show exps purify :: Q a -> a purify = unsafePerformIO . runQ + +-- | +-- Produce a lambda expression of a given arity, +-- which efficiently constructs a vector of a size equal to the arity. +vectorLamE :: Int -> Exp +vectorLamE arity = + LamE (map VarP argNames) body + where + argNames = + map (mkName . ('_' :) . show) [1 .. arity] + body = + vectorE $ map VarE argNames + +vectorE :: [Exp] -> Exp +vectorE cellExps = + AppE (VarE 'runST) $ DoE $ + pure vectorDeclarationStmt <> cellAssignmentStmts <> pure freezingStmt + where + vectorVarName = + mkName "v" + vectorDeclarationStmt = + (BindS + (VarP vectorVarName) + (AppE + (VarE 'MVector.unsafeNew) + (LitE (IntegerL (fromIntegral (length cellExps)))))) + cellAssignmentStmts = + map (NoBindS . uncurry cellAssignmentExp) $ zip [0..] cellExps + where + cellAssignmentExp index exp = + (AppE + (AppE + (AppE + (VarE 'MVector.unsafeWrite) + (VarE vectorVarName)) + (LitE (IntegerL (fromIntegral index)))) + (exp)) + freezingStmt = + (NoBindS + (AppE + (VarE 'Vector.unsafeFreeze) + (VarE vectorVarName))) + From aabe5507abd28ad9714d93ae951789b2692e06ac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 04:45:08 +0300 Subject: [PATCH 0150/1204] Reintroduce Session and fix Demo --- CHANGELOG.md | 10 +++++---- demo/Main.hs | 47 ++++++++++++++++++++++++---------------- hasql.cabal | 2 ++ hspec-postgres/Main.hs | 26 ++++++++-------------- library/Hasql.hs | 46 ++++++++++++++++++++++++++++++++++----- library/Hasql/Prelude.hs | 8 +++++++ 6 files changed, 93 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6448ac84c6..9f5dbdfebd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,16 @@ # 0.6.0 - Major API overhaul -* Removed the `Session` monad, opening a direct access to the connection pool, thus providing for a simpler compatibility with other libraries. +* The connection pool acquisition is now explicit and is no longer handled by the `Session` monad. This should provide for a simpler integration with other libraries. +* The `Session` monad is now merely a convenience thing for providing a context to multiple transactions. One can run it as many times as he wants - it won't reestablish any resources any more. * The connection timeout is now set using `Int` for simplicity. * There are no exceptions any more. All the error-reporting is typed and done explicitly, using `Either`. * The error types are now mostly backend-specific. -* The transaction mode is now extended to support uncommitable transactions with the `TxWriteMode` type. +* The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. * `Tx` now has a `MonadError` instance, which allows to handle errors while remaining in the transaction. -* All `Tx` functions now have a "Tx" suffix. -* There is no more `list` transaction. Instead there is `vectorTx`. +* All `Tx` functions are now appended with a "Tx" suffix. +* There is no `list` transaction any more. Instead there is `vectorTx`. * The `Statement` type is renamed to `Stmt` and is now exported from the main API. * `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. +* Statement templates now support UTF-8. # 0.5.0 * Update the "list-t" and "monad-control" deps diff --git a/demo/Main.hs b/demo/Main.hs index a162223a13..e88f79eb81 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -1,16 +1,17 @@ -- You can execute this file with 'cabal bench demo'. {-# LANGUAGE QuasiQuotes, ScopedTypeVariables, OverloadedStrings #-} -import Control.Monad +import Control.Monad hiding (forM_, mapM_, forM, mapM) import Control.Monad.IO.Class import Control.Monad.Trans.Class import Control.Monad.Trans.Maybe import Data.Functor.Identity +import Data.Foldable -- Import the API from the "hasql" library import qualified Hasql as H --- Import the backend settings from the "hasql-postgres" library +-- Import the backend API from the "hasql-postgres" library import qualified Hasql.Postgres as HP @@ -18,23 +19,28 @@ main = do let postgresSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" - -- Prepare session settings with a smart constructor, + -- Prepare the pool settings with a smart constructor, -- which checks the inputted values on correctness. - -- Set the connections pool size to 6 and the timeout to 30. - sessionSettings <- maybe (fail "Improper session settings") return $ - H.sessionSettings 6 30 + -- Set the connection pool size to 6 and the timeout to 30 seconds. + poolSettings <- maybe (fail "Improper session settings") return $ + H.poolSettings 6 30 - -- Run a database session, - -- while automatically managing the resources and exceptions. - H.session postgresSettings sessionSettings $ do + -- Acquire the database connections pool. + -- Gotta help the compiler with the type signature of the pool a bit. + pool :: H.Pool HP.Postgres + <- H.acquirePool postgresSettings poolSettings + + -- Provide a context for execution of transactions. + -- 'Session' is merely a convenience wrapper around 'ReaderT'. + H.session pool $ do -- Execute a group of statements without any locking and ACID guarantees: H.tx Nothing $ do - H.unit [H.q|DROP TABLE IF EXISTS a|] - H.unit [H.q|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] + H.unitTx [H.q|DROP TABLE IF EXISTS a|] + H.unitTx [H.q|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] -- Insert three rows: replicateM_ 3 $ do - H.unit [H.q|INSERT INTO a (balance) VALUES (0)|] + H.unitTx [H.q|INSERT INTO a (balance) VALUES (0)|] -- Declare a list of transfer settings, which we'll later use. -- The tuple structure is: @@ -45,24 +51,27 @@ main = do forM_ transfers $ \(id1, id2, amount) -> do -- Run a transaction with ACID guarantees. -- Hasql will automatically roll it back and retry it in case of conflicts. - H.tx (Just (H.Serializable, True)) $ do + H.tx (Just (H.Serializable, (Just True))) $ do -- Use MaybeT to handle empty results: runMaybeT $ do -- To distinguish results rows containing just one column, -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.single $ [H.q|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unit $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + Identity balance1 <- MaybeT $ H.maybeTx $ [H.q|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.maybeTx $ [H.q|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unitTx $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unitTx $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 -- Output all the updated rows: do -- Unfortunately in this case there's no way to infer the type of the results, -- so we need to specify it explicitly: - rows :: [(Int, Int)] <- H.tx Nothing $ H.list $ [H.q|SELECT * FROM a|] - forM_ rows $ \(id, amount) -> do + rows <- H.tx Nothing $ H.vectorTx $ [H.q|SELECT * FROM a|] + forM_ rows $ \(id :: Int, amount :: Int) -> do liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount + -- Release all previously acquired resources. Just for fun. + H.releasePool pool + diff --git a/hasql.cabal b/hasql.cabal index b142aedc9f..579c10f298 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -109,6 +109,8 @@ library list-t >= 0.3.1 && < 0.5, mmorph == 1.0.*, mtl >= 2.1 && < 2.3, + monad-control >= 0.3 && < 1.1, + transformers-base == 0.4.*, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, base >= 4.5 && < 4.8 diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 4404c6c572..255888c3e6 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -17,7 +17,7 @@ main = context "Unhandled transaction conflict" $ do it "should not be" $ do - session $ tx Nothing $ do + session $ H.tx Nothing $ do H.unitTx [H.q|DROP TABLE IF EXISTS artist|] H.unitTx [H.q|DROP TABLE IF EXISTS artist_union|] H.unitTx $ @@ -60,7 +60,7 @@ main = process = SlaveThread.fork $ do session $ replicateM_ 100 $ do - tx (Just (H.Serializable, Just True)) $ do + H.tx (Just (H.Serializable, Just True)) $ do unionID <- insertArtistUnion insertArtist unionID ["a", "b", "c"] signal @@ -72,7 +72,7 @@ main = it "should fail on incorrect arity" $ do flip shouldSatisfy (\case Left (H.UnparsableResult _) -> True; _ -> False) =<< do session $ do - tx Nothing $ do + H.tx Nothing $ do H.unitTx [H.q|DROP TABLE IF EXISTS data|] H.unitTx [H.q|CREATE TABLE data ( field1 DECIMAL NOT NULL, @@ -81,7 +81,7 @@ main = )|] H.unitTx [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- - tx Nothing $ + H.tx Nothing $ H.maybeTx $ [H.q|SELECT * FROM data|] return () @@ -102,22 +102,14 @@ newBatchGate amount = -- * Hasql utils ------------------------- -newtype HSession m r = - HSession (ReaderT (H.Pool HP.Postgres) (EitherT (H.TxError HP.Postgres) m) r) - deriving (Functor, Applicative, Monad, MonadIO) +type Session m = + H.Session HP.Postgres m -instance MonadTrans HSession where - lift = HSession . lift . lift - -tx :: MonadIO m => H.TxMode -> (forall s. H.Tx HP.Postgres s a) -> HSession m a -tx mode m = - HSession $ ReaderT $ \p -> EitherT $ liftIO $ H.tx p mode m - -session :: MonadBaseControl IO m => HSession m r -> m (Either (H.TxError HP.Postgres) r) -session (HSession m) = +session :: MonadBaseControl IO m => Session m r -> m (Either (H.TxError HP.Postgres) r) +session m = control $ \unlift -> do p <- H.acquirePool backendSettings poolSettings - r <- unlift $ runEitherT $ runReaderT m p + r <- unlift $ H.session p m H.releasePool p return r where diff --git a/library/Hasql.hs b/library/Hasql.hs index 3b6b9f251e..2e1e7c8546 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -19,6 +19,10 @@ module Hasql PoolSettings, poolSettings, + -- * Session + Session, + session, + -- * Statement Bknd.Stmt, q, @@ -75,6 +79,16 @@ newtype Pool c = -- Given backend-specific connection settings and pool settings, -- acquire a backend connection pool, -- which can then be used to work with the DB. +-- +-- When combining Hasql with other libraries, +-- which throw exceptions it makes sence to utilize +-- @Control.Exception.'bracket'@ +-- like this: +-- +-- >bracket (acquirePool bkndStngs poolStngs) (releasePool) $ \pool -> do +-- > session pool $ do +-- > ... +-- > ... any other IO code acquirePool :: Bknd.Cx c => Bknd.CxSettings c -> PoolSettings -> IO (Pool c) acquirePool cxSettings (PoolSettings size timeout) = fmap Pool $ @@ -122,6 +136,26 @@ poolSettings size timeout = else Nothing +-- * Session +------------------------- + +-- | +-- A convenience wrapper around 'ReaderT', +-- which provides a shared context for execution of transactions. +type Session c m = + ReaderT (Pool c) (EitherT (TxError c) m) + +-- | +-- Execute a session using an established connection pool. +-- +-- This is merely a wrapper around 'runReaderT', +-- so you can run it around every transaction, +-- if you want. +session :: Pool c -> Session c m a -> m (Either (TxError c) a) +session pool m = + runEitherT $ flip runReaderT pool $ m + + -- * Transaction ------------------------- @@ -159,19 +193,19 @@ deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (TxErro deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (TxError c) -- | --- Execute a transaction on a connection pool. +-- Execute a transaction in a session. -- -- This function ensures on the type level, -- that it's impossible to return @'TxListT' s m r@ from it. -tx :: Bknd.CxTx c => Pool c -> Bknd.TxMode -> (forall s. Tx c s r) -> IO (Either (TxError c) r) -tx (Pool pool) mode (Tx m) = - Pool.withResource pool $ \e -> - runEitherT $ do +tx :: (Bknd.CxTx c, MonadBaseControl IO m) => Bknd.TxMode -> (forall s. Tx c s r) -> Session c m r +tx mode (Tx m) = + ReaderT $ \(Pool pool) -> + Pool.withResource pool $ \e -> do c <- hoistEither $ mapLeft BackendCxError e let attempt = do - r <- EitherT $ fmap (either (Left . BackendTxError) Right) $ + r <- EitherT $ liftBase $ fmap (either (Left . BackendTxError) Right) $ Bknd.runTx c mode $ runEitherT m maybe attempt hoistEither r in attempt diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index f9c8d2d9f6..7d20eb7bf6 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -17,6 +17,14 @@ import Control.Monad.Trans.Class as Exports import Control.Monad.IO.Class as Exports import Data.Functor.Identity as Exports +-- transformers-base +------------------------- +import Control.Monad.Base as Exports + +-- monad-control +------------------------- +import Control.Monad.Trans.Control as Exports hiding (embed, embed_) + -- mtl ------------------------- import Control.Monad.Error.Class as Exports From e8089b699179bd5492d0f591e0e372ac0518b926 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 05:32:33 +0300 Subject: [PATCH 0151/1204] Rename "q" to more meaningful "stmt" --- CHANGELOG.md | 1 + demo/Main.hs | 16 ++++++++-------- hspec-postgres/Main.hs | 20 ++++++++++---------- hspec/Main.hs | 2 +- library/Hasql.hs | 8 ++++---- 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f5dbdfebd..8dcd643373 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. * `Tx` now has a `MonadError` instance, which allows to handle errors while remaining in the transaction. * All `Tx` functions are now appended with a "Tx" suffix. +* `q` statement quasi-quoter is now renamed to more meaningful `stmt`. * There is no `list` transaction any more. Instead there is `vectorTx`. * The `Statement` type is renamed to `Stmt` and is now exported from the main API. * `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. diff --git a/demo/Main.hs b/demo/Main.hs index e88f79eb81..632d0ae840 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -36,11 +36,11 @@ main = do -- Execute a group of statements without any locking and ACID guarantees: H.tx Nothing $ do - H.unitTx [H.q|DROP TABLE IF EXISTS a|] - H.unitTx [H.q|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] + H.unitTx [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] -- Insert three rows: replicateM_ 3 $ do - H.unitTx [H.q|INSERT INTO a (balance) VALUES (0)|] + H.unitTx [H.stmt|INSERT INTO a (balance) VALUES (0)|] -- Declare a list of transfer settings, which we'll later use. -- The tuple structure is: @@ -56,16 +56,16 @@ main = do runMaybeT $ do -- To distinguish results rows containing just one column, -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.maybeTx $ [H.q|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.maybeTx $ [H.q|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unitTx $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unitTx $ [H.q|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + Identity balance1 <- MaybeT $ H.maybeTx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.maybeTx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unitTx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unitTx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 -- Output all the updated rows: do -- Unfortunately in this case there's no way to infer the type of the results, -- so we need to specify it explicitly: - rows <- H.tx Nothing $ H.vectorTx $ [H.q|SELECT * FROM a|] + rows <- H.tx Nothing $ H.vectorTx $ [H.stmt|SELECT * FROM a|] forM_ rows $ \(id :: Int, amount :: Int) -> do liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 255888c3e6..09058b28bf 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -18,17 +18,17 @@ main = it "should not be" $ do session $ H.tx Nothing $ do - H.unitTx [H.q|DROP TABLE IF EXISTS artist|] - H.unitTx [H.q|DROP TABLE IF EXISTS artist_union|] + H.unitTx [H.stmt|DROP TABLE IF EXISTS artist|] + H.unitTx [H.stmt|DROP TABLE IF EXISTS artist_union|] H.unitTx $ - [H.q| + [H.stmt| CREATE TABLE "artist_union" ( "id" BIGSERIAL, PRIMARY KEY ("id") ) |] H.unitTx $ - [H.q| + [H.stmt| CREATE TABLE "artist" ( "id" BIGSERIAL, "artist_union_id" INT8 NOT NULL, @@ -42,13 +42,13 @@ main = insertArtistUnion :: H.Tx HP.Postgres s Int64 insertArtistUnion = fmap (runIdentity . fromJust) $ H.maybeTx $ - [H.q| + [H.stmt| INSERT INTO artist_union DEFAULT VALUES RETURNING id |] insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 insertArtist unionID artistNames = fmap (runIdentity . fromJust) $ H.maybeTx $ - [H.q| + [H.stmt| INSERT INTO artist (artist_union_id, names) @@ -73,16 +73,16 @@ main = flip shouldSatisfy (\case Left (H.UnparsableResult _) -> True; _ -> False) =<< do session $ do H.tx Nothing $ do - H.unitTx [H.q|DROP TABLE IF EXISTS data|] - H.unitTx [H.q|CREATE TABLE data ( + H.unitTx [H.stmt|DROP TABLE IF EXISTS data|] + H.unitTx [H.stmt|CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )|] - H.unitTx [H.q|INSERT INTO data (field1, field2) VALUES (0, 0)|] + H.unitTx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- H.tx Nothing $ - H.maybeTx $ [H.q|SELECT * FROM data|] + H.maybeTx $ [H.stmt|SELECT * FROM data|] return () diff --git a/hspec/Main.hs b/hspec/Main.hs index f8b5a30a27..64fefc212d 100644 --- a/hspec/Main.hs +++ b/hspec/Main.hs @@ -23,4 +23,4 @@ main = it "generates a proper statement" $ do (flip shouldBe) (HB.Stmt " SELECT (? + ?) " (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) - ([H.q| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) + ([H.stmt| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) diff --git a/library/Hasql.hs b/library/Hasql.hs index 2e1e7c8546..489df2d641 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -25,7 +25,7 @@ module Hasql -- * Statement Bknd.Stmt, - q, + stmt, -- ** Statement Execution unitTx, @@ -305,10 +305,10 @@ instance ListT.MonadTransUncons (TxListT s) where -- E.g.: -- -- >selectSum :: Int -> Int -> Stmt c --- >selectSum = [q|SELECT (? + ?)|] +-- >selectSum = [stmt|SELECT (? + ?)|] -- -q :: TH.QuasiQuoter -q = +stmt :: TH.QuasiQuoter +stmt = TH.QuasiQuoter (parseExp) (const $ fail "Pattern context is not supported") From 95c6996599d4d5aeb2d0f5f7c7b190102b586087 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 06:17:24 +0300 Subject: [PATCH 0152/1204] Make Session a newtype --- hasql.cabal | 2 +- library/Hasql.hs | 30 +++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 579c10f298..3767412f52 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -109,7 +109,7 @@ library list-t >= 0.3.1 && < 0.5, mmorph == 1.0.*, mtl >= 2.1 && < 2.3, - monad-control >= 0.3 && < 1.1, + monad-control == 1.0.*, transformers-base == 0.4.*, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, diff --git a/library/Hasql.hs b/library/Hasql.hs index 489df2d641..386c9c0084 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -141,9 +141,29 @@ poolSettings size timeout = -- | -- A convenience wrapper around 'ReaderT', --- which provides a shared context for execution of transactions. -type Session c m = - ReaderT (Pool c) (EitherT (TxError c) m) +-- which provides a shared context for execution and error-handling of transactions. +newtype Session c m r = + Session (ReaderT (Pool c) (EitherT (TxError c) m) r) + deriving (Functor, Applicative, Monad, MonadIO, MonadError (TxError c)) + +instance MonadTrans (Session c) where + lift = Session . lift . lift + +instance MonadTransControl (Session c) where + type StT (Session c) a = Either (TxError c) a + liftWith onUnlift = + Session $ ReaderT $ \e -> + lift $ onUnlift $ \(Session m) -> + runEitherT $ flip runReaderT e $ m + restoreT = + Session . ReaderT . const . EitherT + +deriving instance MonadBase IO m => MonadBase IO (Session c m) + +instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where + type StM (Session c m) a = ComposeSt (Session c) m a + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM -- | -- Execute a session using an established connection pool. @@ -153,7 +173,7 @@ type Session c m = -- if you want. session :: Pool c -> Session c m a -> m (Either (TxError c) a) session pool m = - runEitherT $ flip runReaderT pool $ m + runEitherT $ flip runReaderT pool $ case m of Session m -> m -- * Transaction @@ -199,7 +219,7 @@ deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (TxError c) -- that it's impossible to return @'TxListT' s m r@ from it. tx :: (Bknd.CxTx c, MonadBaseControl IO m) => Bknd.TxMode -> (forall s. Tx c s r) -> Session c m r tx mode (Tx m) = - ReaderT $ \(Pool pool) -> + Session $ ReaderT $ \(Pool pool) -> Pool.withResource pool $ \e -> do c <- hoistEither $ mapLeft BackendCxError e let From 784c8ee7e131e3fc181d51a386054773b28414da Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 06:30:38 +0300 Subject: [PATCH 0153/1204] Test UTF-8 templates --- hspec-postgres/Main.hs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 09058b28bf..b10371ce71 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -12,6 +12,12 @@ import qualified SlaveThread main = hspec $ do + context "UTF-8 templates" $ do + + it "encode properly" $ do + flip shouldBe (Right (Just (Identity ("Ёжик" :: Text)))) =<< do + session $ H.tx Nothing $ H.maybeTx $ [H.stmt| SELECT 'Ёжик' |] + context "Bug" $ do context "Unhandled transaction conflict" $ do From ab44c1bb200f1f6387384d11c3692903d791cef5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 06:33:40 +0300 Subject: [PATCH 0154/1204] A shortcut for empty vectors generation --- library/Hasql/TH.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/library/Hasql/TH.hs b/library/Hasql/TH.hs index f2d7c83657..765572f5f3 100644 --- a/library/Hasql/TH.hs +++ b/library/Hasql/TH.hs @@ -39,8 +39,12 @@ vectorLamE arity = vectorE :: [Exp] -> Exp vectorE cellExps = - AppE (VarE 'runST) $ DoE $ - pure vectorDeclarationStmt <> cellAssignmentStmts <> pure freezingStmt + if null cellExps + then + VarE 'Vector.empty + else + AppE (VarE 'runST) $ DoE $ + pure vectorDeclarationStmt <> cellAssignmentStmts <> pure freezingStmt where vectorVarName = mkName "v" From 89875c763a96aeca186accc10ebdb8e9fd7cec72 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 07:04:51 +0300 Subject: [PATCH 0155/1204] Clean up --- hspec-postgres/Main.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index b10371ce71..58ac1e8e15 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -81,10 +81,10 @@ main = H.tx Nothing $ do H.unitTx [H.stmt|DROP TABLE IF EXISTS data|] H.unitTx [H.stmt|CREATE TABLE data ( - field1 DECIMAL NOT NULL, - field2 BIGINT NOT NULL, - PRIMARY KEY (field1) - )|] + field1 DECIMAL NOT NULL, + field2 BIGINT NOT NULL, + PRIMARY KEY (field1) + )|] H.unitTx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- H.tx Nothing $ From 9572af05ad3342596a715919b757e96a4d435674 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 07:18:04 +0300 Subject: [PATCH 0156/1204] Clean up whitespace during the quasi-quote parsing --- hspec/Main.hs | 20 +++++++++++++- library/Hasql.hs | 5 ++-- library/Hasql/QParser.hs | 56 ++++++++++++++++++++++++---------------- 3 files changed, 56 insertions(+), 25 deletions(-) diff --git a/hspec/Main.hs b/hspec/Main.hs index 64fefc212d..c6cb7f38bc 100644 --- a/hspec/Main.hs +++ b/hspec/Main.hs @@ -22,5 +22,23 @@ main = context "Quasi quoter" $ do it "generates a proper statement" $ do (flip shouldBe) - (HB.Stmt " SELECT (? + ?) " (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) + (HB.Stmt "SELECT (? + ?)" (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) ([H.stmt| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) + it "does not drop quotes" $ do + let + HB.Stmt t _ _ = + [H.stmt| SELECT "a", 'b' |] + (flip shouldBe) + "SELECT \"a\", 'b'" + t + it "cleans whitespace" $ do + let + HB.Stmt t _ _ = + [H.stmt| CREATE TABLE data ( + field1 DECIMAL NOT NULL, + field2 BIGINT NOT NULL, + PRIMARY KEY (field1) + ) |] + (flip shouldBe) + "CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )" + t diff --git a/library/Hasql.hs b/library/Hasql.hs index 386c9c0084..8e8459681c 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -60,6 +60,7 @@ import qualified Hasql.RowParser as RowParser import qualified Hasql.QParser as QParser import qualified ListT import qualified Data.Pool as Pool +import qualified Data.Text as Text import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MVector import qualified Language.Haskell.TH as TH @@ -337,8 +338,8 @@ stmt = where parseExp s = do - n <- either (fail . showString "Parsing failure: ") return (QParser.parse (fromString s)) - return $ statementF s (fromIntegral n) + (t, n) <- either (fail . showString "Parsing failure: ") return (QParser.parse (fromString s)) + return $ statementF (Text.unpack t) (fromIntegral n) statementF s n = TH.LamE (map TH.VarP argNames) diff --git a/library/Hasql/QParser.hs b/library/Hasql/QParser.hs index a0cd3e4825..3dd3fc80a8 100644 --- a/library/Hasql/QParser.hs +++ b/library/Hasql/QParser.hs @@ -2,37 +2,49 @@ module Hasql.QParser where import Hasql.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) -import qualified Data.Text as Text +import qualified Data.Text as T +import qualified Data.Text.Lazy as TL +import qualified Data.Text.Lazy.Builder as TLB -- | --- The amount of placeholders. -type Result = - (Word) - -parse :: Text -> Either String Result +-- Produces a whitespace-cleaned text and a count of placeholders in it. +parse :: Text -> Either String (Text, Int) parse = - parseOnly $ flip execStateT 0 $ - statement *> - (lift endOfInput <|> - (void (lift (char ';')) <* fail "A semicolon detected. Only single statements are allowed")) - where - statement = - skipMany1 $ - void (lift stringLit) <|> - void (lift (char '?') <* modify succ) <|> - void (lift (notChar ';')) + parseOnly $ singleTemplate + +singleTemplate :: Parser (Text, Int) +singleTemplate = + template <* + ((endOfInput) <|> + (() <$ skipSpace <* char ';' <* fail "A semicolon detected. Only single statements are allowed")) + +template :: Parser (Text, Int) +template = + flip runStateT 0 $ do + lift $ skipSpace + fmap (TL.toStrict . TLB.toLazyText . mconcat) $ + many $ + (mempty <$ lift trailingWhitespace) <|> + (TLB.singleton ' ' <$ lift (takeWhile1 isSpace)) <|> + (TLB.fromText <$> lift stringLit) <|> + (TLB.singleton <$> lift (char '?') <* modify succ) <|> + (TLB.singleton <$> lift (notChar ';')) + +trailingWhitespace :: Parser () +trailingWhitespace = + () <$ takeWhile1 isSpace <* endOfInput stringLit :: Parser Text stringLit = do quote <- char '"' <|> char '\'' - text <- + content <- fmap mconcat $ many $ - string "\\\\" <|> - string (fromString ['\\', quote]) <|> - (Text.singleton <$> notChar quote) + TLB.fromText <$> string "\\\\" <|> + TLB.fromText <$> string (fromString ['\\', quote]) <|> + TLB.singleton <$> notChar quote char quote - return text - + return $ TL.toStrict . TLB.toLazyText $ + TLB.singleton quote <> content <> TLB.singleton quote From 2fda4e788a9068cebd2ee72f44577cc7c71d5fef Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 20:34:57 +0300 Subject: [PATCH 0157/1204] Tx tests --- hspec-postgres/Main.hs | 69 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 58ac1e8e15..1d03b5fae0 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -12,6 +12,75 @@ import qualified SlaveThread main = hspec $ do + context "Tx" $ do + + it "commits after a handled failure" $ do + flip shouldBe (Right (Just (Identity (234 :: Int)))) =<< do + session $ do + H.tx Nothing $ do + H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.tx (Just (H.Serializable, Just True)) $ do + flip catchError (const $ return ()) $ + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] + H.tx Nothing $ do + H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] + + it "catches a failure in the end of the transaction" $ do + flip shouldBe (Right (Just (Identity (234 :: Int)))) =<< do + session $ do + H.tx Nothing $ do + H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.tx (Just (H.Serializable, Just True)) $ do + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] + flip catchError (const $ return ()) $ + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.tx Nothing $ do + H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] + + it "does not commit after an unhandled failure" $ do + flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do + session $ do + H.tx Nothing $ do + H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + flip catchError (const $ return ()) $ + H.tx (Just (H.Serializable, Just True)) $ do + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] + H.tx Nothing $ do + H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] + + it "does not commit before an unhandled failure" $ do + flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do + session $ do + H.tx Nothing $ do + H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + flip catchError (const $ return ()) $ + H.tx (Just (H.Serializable, Just True)) $ do + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.tx Nothing $ do + H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] + + it "does not commit if in uncommitting mode" $ do + flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do + session $ do + H.tx Nothing $ do + H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.tx (Just (H.Serializable, Just False)) $ do + H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.tx Nothing $ do + H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 2|] + context "UTF-8 templates" $ do it "encode properly" $ do From c02ba95858c8e8323c1328f2e232d81e0387378e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 20:38:23 +0300 Subject: [PATCH 0158/1204] Export MaybeT in Prelude --- library/Hasql/Prelude.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 7d20eb7bf6..4c77490e1a 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -11,8 +11,9 @@ import BasePrelude as Exports hiding (left, right, isLeft, isRight) -- transformers ------------------------- -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Control.Monad.Trans.Maybe as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Control.Monad.Trans.Class as Exports import Control.Monad.IO.Class as Exports import Data.Functor.Identity as Exports From 073acd578d4aec0418a6eb65c2bc884e92e08b3e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Dec 2014 20:38:41 +0300 Subject: [PATCH 0159/1204] Explicit instance of MonadError for Tx --- library/Hasql.hs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 8e8459681c..ae1f2304b7 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -192,8 +192,32 @@ session pool m = -- an unpredictable amount of times as well, -- which, chances are, is not what you want. newtype Tx c s r = - Tx (EitherT (TxError c) (Bknd.Tx c) r) - deriving (Functor, Applicative, Monad, MonadError (TxError c)) + Tx { unwrapTx :: EitherT (TxError c) (Bknd.Tx c) r } + deriving (Functor, Applicative, Monad) + +instance MonadError (TxError c) (Tx c s) where + throwError = + \case + BackendTxError e -> + Tx $ lift $ throwError e + e -> + Tx $ throwError e + catchError m h = + Tx $ + let + m1 = + let + m2 = + runEitherT $ unwrapTx $ m + h2 = + return . Left . BackendTxError + in + EitherT $ catchError m2 h2 + h1 = + unwrapTx . h + in + catchError m1 h1 + data TxError c = -- | From ab2d2df238efed962e5aa3262ce8c67a34d1593e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 00:54:29 +0300 Subject: [PATCH 0160/1204] Session MFunctor instance --- library/Hasql.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library/Hasql.hs b/library/Hasql.hs index ae1f2304b7..700195bdfe 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -166,6 +166,11 @@ instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where liftBaseWith = defaultLiftBaseWith restoreM = defaultRestoreM +instance MFunctor (Session c) where + hoist f (Session m) = + Session $ ReaderT $ \e -> + EitherT $ f $ runEitherT $ flip runReaderT e $ m + -- | -- Execute a session using an established connection pool. -- From ed11b5e48d9869ec0d2d658650354ca5a4e32719 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 01:32:26 +0300 Subject: [PATCH 0161/1204] Cancel the MonadError instance for Tx, since as it turns out, Postgres won't support it --- CHANGELOG.md | 1 - hspec-postgres/Main.hs | 56 ------------------------------------------ library/Hasql.hs | 23 ----------------- 3 files changed, 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dcd643373..1e05aedece 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,6 @@ * There are no exceptions any more. All the error-reporting is typed and done explicitly, using `Either`. * The error types are now mostly backend-specific. * The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. -* `Tx` now has a `MonadError` instance, which allows to handle errors while remaining in the transaction. * All `Tx` functions are now appended with a "Tx" suffix. * `q` statement quasi-quoter is now renamed to more meaningful `stmt`. * There is no `list` transaction any more. Instead there is `vectorTx`. diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 1d03b5fae0..33aa5598fc 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -14,62 +14,6 @@ main = context "Tx" $ do - it "commits after a handled failure" $ do - flip shouldBe (Right (Just (Identity (234 :: Int)))) =<< do - session $ do - H.tx Nothing $ do - H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.tx (Just (H.Serializable, Just True)) $ do - flip catchError (const $ return ()) $ - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] - H.tx Nothing $ do - H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] - - it "catches a failure in the end of the transaction" $ do - flip shouldBe (Right (Just (Identity (234 :: Int)))) =<< do - session $ do - H.tx Nothing $ do - H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.tx (Just (H.Serializable, Just True)) $ do - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] - flip catchError (const $ return ()) $ - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.tx Nothing $ do - H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] - - it "does not commit after an unhandled failure" $ do - flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do - session $ do - H.tx Nothing $ do - H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - flip catchError (const $ return ()) $ - H.tx (Just (H.Serializable, Just True)) $ do - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] - H.tx Nothing $ do - H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] - - it "does not commit before an unhandled failure" $ do - flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do - session $ do - H.tx Nothing $ do - H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - flip catchError (const $ return ()) $ - H.tx (Just (H.Serializable, Just True)) $ do - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (234)|] - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.tx Nothing $ do - H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 234|] - it "does not commit if in uncommitting mode" $ do flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do session $ do diff --git a/library/Hasql.hs b/library/Hasql.hs index 700195bdfe..05665ce48f 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -200,29 +200,6 @@ newtype Tx c s r = Tx { unwrapTx :: EitherT (TxError c) (Bknd.Tx c) r } deriving (Functor, Applicative, Monad) -instance MonadError (TxError c) (Tx c s) where - throwError = - \case - BackendTxError e -> - Tx $ lift $ throwError e - e -> - Tx $ throwError e - catchError m h = - Tx $ - let - m1 = - let - m2 = - runEitherT $ unwrapTx $ m - h2 = - return . Left . BackendTxError - in - EitherT $ catchError m2 h2 - h1 = - unwrapTx . h - in - catchError m1 h1 - data TxError c = -- | From 84d11c560613ae8167938a62114fd074f7f47b40 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 02:31:23 +0300 Subject: [PATCH 0162/1204] TxError -> SessionError --- hspec-postgres/Main.hs | 2 +- library/Hasql.hs | 30 +++++++++++++++--------------- library/Hasql/Prelude.hs | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 33aa5598fc..03e62e7c14 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -124,7 +124,7 @@ newBatchGate amount = type Session m = H.Session HP.Postgres m -session :: MonadBaseControl IO m => Session m r -> m (Either (H.TxError HP.Postgres) r) +session :: MonadBaseControl IO m => Session m r -> m (Either (H.SessionError HP.Postgres) r) session m = control $ \unlift -> do p <- H.acquirePool backendSettings poolSettings diff --git a/library/Hasql.hs b/library/Hasql.hs index 05665ce48f..40d7842d10 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -23,6 +23,9 @@ module Hasql Session, session, + -- ** Session Error + SessionError(..), + -- * Statement Bknd.Stmt, stmt, @@ -43,9 +46,6 @@ module Hasql Bknd.TxIsolationLevel(..), Bknd.TxWriteMode(..), - -- ** Transaction Error - TxError(..), - -- ** Result Stream TxListT, @@ -144,14 +144,14 @@ poolSettings size timeout = -- A convenience wrapper around 'ReaderT', -- which provides a shared context for execution and error-handling of transactions. newtype Session c m r = - Session (ReaderT (Pool c) (EitherT (TxError c) m) r) - deriving (Functor, Applicative, Monad, MonadIO, MonadError (TxError c)) + Session (ReaderT (Pool c) (EitherT (SessionError c) m) r) + deriving (Functor, Applicative, Monad, MonadIO, MonadError (SessionError c)) instance MonadTrans (Session c) where lift = Session . lift . lift instance MonadTransControl (Session c) where - type StT (Session c) a = Either (TxError c) a + type StT (Session c) a = Either (SessionError c) a liftWith onUnlift = Session $ ReaderT $ \e -> lift $ onUnlift $ \(Session m) -> @@ -177,7 +177,7 @@ instance MFunctor (Session c) where -- This is merely a wrapper around 'runReaderT', -- so you can run it around every transaction, -- if you want. -session :: Pool c -> Session c m a -> m (Either (TxError c) a) +session :: Pool c -> Session c m a -> m (Either (SessionError c) a) session pool m = runEitherT $ flip runReaderT pool $ case m of Session m -> m @@ -197,27 +197,27 @@ session pool m = -- an unpredictable amount of times as well, -- which, chances are, is not what you want. newtype Tx c s r = - Tx { unwrapTx :: EitherT (TxError c) (Bknd.Tx c) r } + Tx { unwrapTx :: EitherT (SessionError c) (Bknd.Tx c) r } deriving (Functor, Applicative, Monad) -data TxError c = +data SessionError c = -- | -- A backend-specific connection acquisition error. -- E.g., a failure to establish a connection. - BackendCxError (Bknd.CxError c) | + CxError (Bknd.CxError c) | -- | -- A backend-specific transaction error. -- It should cover all possible failures related to an established connection, -- including the loss of connection, query errors and database failures. - BackendTxError (Bknd.TxError c) | + TxError (Bknd.TxError c) | -- | -- Attempt to parse a result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. UnparsableResult Text -deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (TxError c) -deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (TxError c) +deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (SessionError c) +deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (SessionError c) -- | -- Execute a transaction in a session. @@ -228,11 +228,11 @@ tx :: (Bknd.CxTx c, MonadBaseControl IO m) => Bknd.TxMode -> (forall s. Tx c s r tx mode (Tx m) = Session $ ReaderT $ \(Pool pool) -> Pool.withResource pool $ \e -> do - c <- hoistEither $ mapLeft BackendCxError e + c <- hoistEither $ mapLeft CxError e let attempt = do - r <- EitherT $ liftBase $ fmap (either (Left . BackendTxError) Right) $ + r <- EitherT $ liftBase $ fmap (either (Left . TxError) Right) $ Bknd.runTx c mode $ runEitherT m maybe attempt hoistEither r in attempt diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 4c77490e1a..d46a698fdf 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -28,7 +28,7 @@ import Control.Monad.Trans.Control as Exports hiding (embed, embed_) -- mtl ------------------------- -import Control.Monad.Error.Class as Exports +import Control.Monad.Error.Class as Exports hiding (Error) -- mmorph ------------------------- From 8d688d82e27179a3bbdcfdcc199394335bacc795 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 03:38:35 +0300 Subject: [PATCH 0163/1204] Docs correction --- library/Hasql.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 40d7842d10..93b7b1f4a2 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -259,8 +259,7 @@ countTx = -- which produces a single result row. -- E.g., -- a @SELECT@ --- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id), --- or an @UPDATE@ or @DELETE@, counting the affected rows. +-- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) maybeTx s = Tx $ do From 40326f33e0ae8aa8934e59aa93285862488995e3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 03:44:53 +0300 Subject: [PATCH 0164/1204] Reimplement "maybeTx" in terms of "vectorTx" --- library/Hasql.hs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 93b7b1f4a2..f9f48842ba 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -261,10 +261,8 @@ countTx = -- a @SELECT@ -- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) -maybeTx s = - Tx $ do - r <- lift $ Bknd.maybeTx s - EitherT $ return $ traverse ((mapLeft UnparsableResult) . RowParser.parseRow) $ r +maybeTx = + fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorTx -- | -- Execute a @SELECT@ statement, From 0015dd55019bd2902a12eb09ec47db3e6cf05389 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 03:45:08 +0300 Subject: [PATCH 0165/1204] Implement "listTx" --- CHANGELOG.md | 1 - library/Hasql.hs | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e05aedece..ccc5ffccb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,6 @@ * The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. * All `Tx` functions are now appended with a "Tx" suffix. * `q` statement quasi-quoter is now renamed to more meaningful `stmt`. -* There is no `list` transaction any more. Instead there is `vectorTx`. * The `Statement` type is renamed to `Stmt` and is now exported from the main API. * `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. * Statement templates now support UTF-8. diff --git a/library/Hasql.hs b/library/Hasql.hs index f9f48842ba..e4e1b28a57 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -34,6 +34,7 @@ module Hasql unitTx, countTx, maybeTx, + listTx, vectorTx, streamTx, @@ -264,6 +265,13 @@ maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) maybeTx = fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorTx +-- | +-- Execute a @SELECT@ statement, +-- and produce a list of results. +listTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s [r] +listTx = + fmap toList . vectorTx + -- | -- Execute a @SELECT@ statement, -- and produce a vector of results. From 14c8601fabdce6771c4d87ea811f7b25236a0e1b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 04:03:17 +0300 Subject: [PATCH 0166/1204] Add 'singleTx', update docs, rename UnparsableResult to ResultError --- CHANGELOG.md | 1 + hspec-postgres/Main.hs | 2 +- library/Hasql.hs | 32 +++++++++++++++++++++++--------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccc5ffccb1..30161e8437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * The error types are now mostly backend-specific. * The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. * All `Tx` functions are now appended with a "Tx" suffix. +* Added `vectorTx` and `maybeTx` and updated the semantics of `singleTx`. * `q` statement quasi-quoter is now renamed to more meaningful `stmt`. * The `Statement` type is renamed to `Stmt` and is now exported from the main API. * `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 03e62e7c14..c172e4e645 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -89,7 +89,7 @@ main = context "RowParser" $ do it "should fail on incorrect arity" $ do - flip shouldSatisfy (\case Left (H.UnparsableResult _) -> True; _ -> False) =<< do + flip shouldSatisfy (\case Left (H.ResultError _) -> True; _ -> False) =<< do session $ do H.tx Nothing $ do H.unitTx [H.stmt|DROP TABLE IF EXISTS data|] diff --git a/library/Hasql.hs b/library/Hasql.hs index e4e1b28a57..fc3d2536a1 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -33,6 +33,7 @@ module Hasql -- ** Statement Execution unitTx, countTx, + singleTx, maybeTx, listTx, vectorTx, @@ -215,7 +216,7 @@ data SessionError c = -- | -- Attempt to parse a result into an incompatible type. -- Indicates either a mismatching schema or an incorrect query. - UnparsableResult Text + ResultError Text deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (SessionError c) deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (SessionError c) @@ -257,29 +258,42 @@ countTx = -- | -- Execute a statement, --- which produces a single result row. --- E.g., --- a @SELECT@ --- or an @INSERT@, which produces a generated value (e.g., an auto-incremented id). +-- which produces exactly one result row. +-- E.g., @INSERT@, which returns an autoincremented identifier, +-- or @SELECT COUNT@, or @SELECT EXISTS@. +-- +-- Please note that using this executor for selecting rows is conceptually wrong, +-- since in that case the results are always optional. +-- Use 'maybeTx', 'listTx' or 'vectorTx' instead. +-- +-- If the result is empty this executor will raise 'ResultError'. +singleTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s r +singleTx = + join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleTx'") return) . + maybeTx + +-- | +-- Execute a statement, +-- which optionally produces a single result row. maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) maybeTx = fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorTx -- | --- Execute a @SELECT@ statement, +-- Execute a statement, -- and produce a list of results. listTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s [r] listTx = fmap toList . vectorTx -- | --- Execute a @SELECT@ statement, +-- Execute a statement, -- and produce a vector of results. vectorTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Vector r) vectorTx s = Tx $ do r <- lift $ Bknd.vectorTx s - EitherT $ return $ traverse ((mapLeft UnparsableResult) . RowParser.parseRow) $ r + EitherT $ return $ traverse ((mapLeft ResultError) . RowParser.parseRow) $ r -- | -- Execute a @SELECT@ statement with a cursor, @@ -296,7 +310,7 @@ streamTx s = r <- lift $ Bknd.streamTx s return $ TxListT $ do row <- hoist (Tx . lift) r - lift $ Tx $ EitherT $ return $ mapLeft UnparsableResult $ RowParser.parseRow $ row + lift $ Tx $ EitherT $ return $ mapLeft ResultError $ RowParser.parseRow $ row -- * Result Stream From f3af81010f4fe348da4cb4c23c1a6c44a7910a47 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Dec 2014 04:27:17 +0300 Subject: [PATCH 0167/1204] Description correction --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 3767412f52..f249c7914a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -10,7 +10,7 @@ description: . Features: . - * Concise and crisp API. Just a few functions and one monad doing all the + * Concise and crisp API. Just a few functions and two monads doing all the boilerplate job for you. . * A powerful transaction abstraction, which provides From 260425abedae5de573261544d9f63383d003df80 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 11:54:31 +0300 Subject: [PATCH 0168/1204] Instances for PoolSettings --- library/Hasql.hs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/library/Hasql.hs b/library/Hasql.hs index fc3d2536a1..67b5f43d9d 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -67,6 +67,7 @@ import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MVector import qualified Language.Haskell.TH as TH import qualified Language.Haskell.TH.Quote as TH +import qualified Language.Haskell.TH.Syntax as TH import qualified Hasql.TH as THUtil @@ -115,6 +116,12 @@ releasePool (Pool p) = -- Settings of a pool. data PoolSettings = PoolSettings !Int !Int + deriving (Show) + +instance TH.Lift PoolSettings where + lift (PoolSettings a b) = + [|PoolSettings a b|] + -- | -- A smart constructor for pool settings. From 284b5b74e0f72f2976bfa81327ccc6767cde8540 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 11:27:42 +0300 Subject: [PATCH 0169/1204] RowParser -> CxRow --- hasql.cabal | 2 +- hspec-postgres/Main.hs | 2 +- library/Hasql.hs | 18 +++++++++--------- library/Hasql/{RowParser.hs => CxRow.hs} | 10 +++++----- 4 files changed, 16 insertions(+), 16 deletions(-) rename library/Hasql/{RowParser.hs => CxRow.hs} (89%) diff --git a/hasql.cabal b/hasql.cabal index f249c7914a..4e5fc18859 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -89,7 +89,7 @@ library other-modules: Hasql.Prelude Hasql.QParser - Hasql.RowParser + Hasql.CxRow Hasql.TH exposed-modules: Hasql diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index c172e4e645..75d862f3ee 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -86,7 +86,7 @@ main = replicateM_ 6 process block - context "RowParser" $ do + context "CxRow" $ do it "should fail on incorrect arity" $ do flip shouldSatisfy (\case Left (H.ResultError _) -> True; _ -> False) =<< do diff --git a/library/Hasql.hs b/library/Hasql.hs index 67b5f43d9d..e87a8215a6 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -52,13 +52,13 @@ module Hasql TxListT, -- * Row Parser - RowParser.RowParser, + CxRow.CxRow, ) where import Hasql.Prelude import qualified Hasql.Backend as Bknd -import qualified Hasql.RowParser as RowParser +import qualified Hasql.CxRow as CxRow import qualified Hasql.QParser as QParser import qualified ListT import qualified Data.Pool as Pool @@ -274,7 +274,7 @@ countTx = -- Use 'maybeTx', 'listTx' or 'vectorTx' instead. -- -- If the result is empty this executor will raise 'ResultError'. -singleTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s r +singleTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s r singleTx = join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleTx'") return) . maybeTx @@ -282,25 +282,25 @@ singleTx = -- | -- Execute a statement, -- which optionally produces a single result row. -maybeTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Maybe r) +maybeTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (Maybe r) maybeTx = fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorTx -- | -- Execute a statement, -- and produce a list of results. -listTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s [r] +listTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s [r] listTx = fmap toList . vectorTx -- | -- Execute a statement, -- and produce a vector of results. -vectorTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (Vector r) +vectorTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (Vector r) vectorTx s = Tx $ do r <- lift $ Bknd.vectorTx s - EitherT $ return $ traverse ((mapLeft ResultError) . RowParser.parseRow) $ r + EitherT $ return $ traverse ((mapLeft ResultError) . CxRow.parseRow) $ r -- | -- Execute a @SELECT@ statement with a cursor, @@ -311,13 +311,13 @@ vectorTx s = -- Note that in most databases cursors require establishing a database transaction, -- so depending on a backend the transaction may result in an error, -- if you run it improperly. -streamTx :: RowParser.RowParser c r => Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) +streamTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) streamTx s = Tx $ do r <- lift $ Bknd.streamTx s return $ TxListT $ do row <- hoist (Tx . lift) r - lift $ Tx $ EitherT $ return $ mapLeft ResultError $ RowParser.parseRow $ row + lift $ Tx $ EitherT $ return $ mapLeft ResultError $ CxRow.parseRow $ row -- * Result Stream diff --git a/library/Hasql/RowParser.hs b/library/Hasql/CxRow.hs similarity index 89% rename from library/Hasql/RowParser.hs rename to library/Hasql/CxRow.hs index ffa251ac1a..1eba58e73b 100644 --- a/library/Hasql/RowParser.hs +++ b/library/Hasql/CxRow.hs @@ -1,4 +1,4 @@ -module Hasql.RowParser where +module Hasql.CxRow where import Hasql.Prelude import Language.Haskell.TH @@ -10,16 +10,16 @@ import qualified Hasql.TH as THUtil -- | -- This class is only intended to be used with the supplied instances, -- which should be enough to cover all use cases. -class RowParser c r where +class CxRow c r where parseRow :: Bknd.ResultRow c -> Either Text r -instance RowParser c () where +instance CxRow c () where parseRow row = if Vector.null row then Right () else Left "Not an empty row" -instance Bknd.CxValue c v => RowParser c (Identity v) where +instance Bknd.CxValue c v => CxRow c (Identity v) where parseRow row = do Identity <$> Bknd.decodeValue (Vector.unsafeHead row) @@ -35,7 +35,7 @@ return $ flip map [2 .. 24] $ \arity -> constraints = map (\t -> ClassP ''Bknd.CxValue [connectionType, t]) varTypes head = - AppT (AppT (ConT ''RowParser) connectionType) (foldl AppT (TupleT arity) varTypes) + AppT (AppT (ConT ''CxRow) connectionType) (foldl AppT (TupleT arity) varTypes) parseRowDec = FunD 'parseRow [Clause [VarP rowVarName] (NormalB e) []] where From f449ddc67a7ce918959df54510010a5469c2fc82 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 11:55:31 +0300 Subject: [PATCH 0170/1204] Accommodate to the new backend API --- hasql.cabal | 2 +- library/Hasql.hs | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 4e5fc18859..306f687de7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -96,7 +96,7 @@ library build-depends: -- resource-pool == 0.2.*, - hasql-backend == 0.3.*, + hasql-backend == 0.4.*, -- template-haskell >= 2.8 && < 2.10, -- diff --git a/library/Hasql.hs b/library/Hasql.hs index e87a8215a6..99b787a385 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -303,18 +303,23 @@ vectorTx s = EitherT $ return $ traverse ((mapLeft ResultError) . CxRow.parseRow) $ r -- | --- Execute a @SELECT@ statement with a cursor, +-- Given a batch size, execute a statement with a cursor, -- and produce a result stream. -- --- Cursor allows you to fetch virtually limitless results in a constant memory +-- The cursor allows you to fetch virtually limitless results in a constant memory -- at a cost of a small overhead. +-- +-- The batch size parameter controls how many rows will be fetched +-- during every roundtrip to the database. +-- A minimum value of 256 seems to be sane. +-- -- Note that in most databases cursors require establishing a database transaction, -- so depending on a backend the transaction may result in an error, -- if you run it improperly. -streamTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) -streamTx s = +streamTx :: CxRow.CxRow c r => Int -> Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) +streamTx n s = Tx $ do - r <- lift $ Bknd.streamTx s + r <- lift $ Bknd.streamTx n s return $ TxListT $ do row <- hoist (Tx . lift) r lift $ Tx $ EitherT $ return $ mapLeft ResultError $ CxRow.parseRow $ row From 9607cf86379f814b998c87e02ec10024d1c31542 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 11:21:16 +0300 Subject: [PATCH 0171/1204] Statement executor --- demo/Main.hs | 16 +++++------ hspec-postgres/Main.hs | 30 ++++++++++---------- library/Hasql.hs | 62 ++++++++++++++++++++++++------------------ 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index 632d0ae840..6ce7f4059e 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -36,11 +36,11 @@ main = do -- Execute a group of statements without any locking and ACID guarantees: H.tx Nothing $ do - H.unitTx [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] + H.unitSEx [H.stmt|DROP TABLE IF EXISTS a|] + H.unitSEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] -- Insert three rows: replicateM_ 3 $ do - H.unitTx [H.stmt|INSERT INTO a (balance) VALUES (0)|] + H.unitSEx [H.stmt|INSERT INTO a (balance) VALUES (0)|] -- Declare a list of transfer settings, which we'll later use. -- The tuple structure is: @@ -56,16 +56,16 @@ main = do runMaybeT $ do -- To distinguish results rows containing just one column, -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.maybeTx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.maybeTx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unitTx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unitTx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + Identity balance1 <- MaybeT $ H.maybeSEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.maybeSEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unitSEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unitSEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 -- Output all the updated rows: do -- Unfortunately in this case there's no way to infer the type of the results, -- so we need to specify it explicitly: - rows <- H.tx Nothing $ H.vectorTx $ [H.stmt|SELECT * FROM a|] + rows <- H.tx Nothing $ H.vectorSEx $ [H.stmt|SELECT * FROM a|] forM_ rows $ \(id :: Int, amount :: Int) -> do liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 75d862f3ee..caf4e25688 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -18,18 +18,18 @@ main = flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do session $ do H.tx Nothing $ do - H.unitTx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitTx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitSEx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitSEx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] H.tx (Just (H.Serializable, Just False)) $ do - H.unitTx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.unitSEx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] H.tx Nothing $ do - H.maybeTx $ [H.stmt|SELECT x FROM a WHERE x = 2|] + H.maybeSEx $ [H.stmt|SELECT x FROM a WHERE x = 2|] context "UTF-8 templates" $ do it "encode properly" $ do flip shouldBe (Right (Just (Identity ("Ёжик" :: Text)))) =<< do - session $ H.tx Nothing $ H.maybeTx $ [H.stmt| SELECT 'Ёжик' |] + session $ H.tx Nothing $ H.maybeSEx $ [H.stmt| SELECT 'Ёжик' |] context "Bug" $ do @@ -37,16 +37,16 @@ main = it "should not be" $ do session $ H.tx Nothing $ do - H.unitTx [H.stmt|DROP TABLE IF EXISTS artist|] - H.unitTx [H.stmt|DROP TABLE IF EXISTS artist_union|] - H.unitTx $ + H.unitSEx [H.stmt|DROP TABLE IF EXISTS artist|] + H.unitSEx [H.stmt|DROP TABLE IF EXISTS artist_union|] + H.unitSEx $ [H.stmt| CREATE TABLE "artist_union" ( "id" BIGSERIAL, PRIMARY KEY ("id") ) |] - H.unitTx $ + H.unitSEx $ [H.stmt| CREATE TABLE "artist" ( "id" BIGSERIAL, @@ -60,13 +60,13 @@ main = let insertArtistUnion :: H.Tx HP.Postgres s Int64 insertArtistUnion = - fmap (runIdentity . fromJust) $ H.maybeTx $ + fmap (runIdentity . fromJust) $ H.maybeSEx $ [H.stmt| INSERT INTO artist_union DEFAULT VALUES RETURNING id |] insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 insertArtist unionID artistNames = - fmap (runIdentity . fromJust) $ H.maybeTx $ + fmap (runIdentity . fromJust) $ H.maybeSEx $ [H.stmt| INSERT INTO artist (artist_union_id, @@ -92,16 +92,16 @@ main = flip shouldSatisfy (\case Left (H.ResultError _) -> True; _ -> False) =<< do session $ do H.tx Nothing $ do - H.unitTx [H.stmt|DROP TABLE IF EXISTS data|] - H.unitTx [H.stmt|CREATE TABLE data ( + H.unitSEx [H.stmt|DROP TABLE IF EXISTS data|] + H.unitSEx [H.stmt|CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )|] - H.unitTx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] + H.unitSEx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- H.tx Nothing $ - H.maybeTx $ [H.stmt|SELECT * FROM data|] + H.maybeSEx $ [H.stmt|SELECT * FROM data|] return () diff --git a/library/Hasql.hs b/library/Hasql.hs index 99b787a385..cbf9981961 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -30,14 +30,15 @@ module Hasql Bknd.Stmt, stmt, - -- ** Statement Execution - unitTx, - countTx, - singleTx, - maybeTx, - listTx, - vectorTx, - streamTx, + -- * Statement Execution + SEx, + unitSEx, + countSEx, + singleSEx, + maybeSEx, + listSEx, + vectorSEx, + streamSEx, -- * Transaction Tx, @@ -250,17 +251,24 @@ tx mode (Tx m) = -- * Statements execution ------------------------- +-- | +-- Statement executor. +-- +-- Just an alias to a function, which executes a statement in 'Tx'. +type SEx c s r = + Bknd.Stmt c -> Tx c s r + -- | -- Execute a statement without processing the result. -unitTx :: Bknd.Stmt c -> Tx c s () -unitTx = +unitSEx :: SEx c s () +unitSEx = Tx . lift . Bknd.unitTx -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countTx :: Bknd.CxValue c Word64 => Bknd.Stmt c -> Tx c s Word64 -countTx = +countSEx :: Bknd.CxValue c Word64 => SEx c s Word64 +countSEx = Tx . lift . Bknd.countTx -- | @@ -271,33 +279,33 @@ countTx = -- -- Please note that using this executor for selecting rows is conceptually wrong, -- since in that case the results are always optional. --- Use 'maybeTx', 'listTx' or 'vectorTx' instead. +-- Use 'maybeSEx', 'listSEx' or 'vectorSEx' instead. -- -- If the result is empty this executor will raise 'ResultError'. -singleTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s r -singleTx = - join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleTx'") return) . - maybeTx +singleSEx :: CxRow.CxRow c r => SEx c s r +singleSEx = + join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleSEx'") return) . + maybeSEx -- | -- Execute a statement, -- which optionally produces a single result row. -maybeTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (Maybe r) -maybeTx = - fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorTx +maybeSEx :: CxRow.CxRow c r => SEx c s (Maybe r) +maybeSEx = + fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorSEx -- | -- Execute a statement, -- and produce a list of results. -listTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s [r] -listTx = - fmap toList . vectorTx +listSEx :: CxRow.CxRow c r => SEx c s [r] +listSEx = + fmap toList . vectorSEx -- | -- Execute a statement, -- and produce a vector of results. -vectorTx :: CxRow.CxRow c r => Bknd.Stmt c -> Tx c s (Vector r) -vectorTx s = +vectorSEx :: CxRow.CxRow c r => SEx c s (Vector r) +vectorSEx s = Tx $ do r <- lift $ Bknd.vectorTx s EitherT $ return $ traverse ((mapLeft ResultError) . CxRow.parseRow) $ r @@ -316,8 +324,8 @@ vectorTx s = -- Note that in most databases cursors require establishing a database transaction, -- so depending on a backend the transaction may result in an error, -- if you run it improperly. -streamTx :: CxRow.CxRow c r => Int -> Bknd.Stmt c -> Tx c s (TxListT s (Tx c s) r) -streamTx n s = +streamSEx :: CxRow.CxRow c r => Int -> SEx c s (TxListT s (Tx c s) r) +streamSEx n s = Tx $ do r <- lift $ Bknd.streamTx n s return $ TxListT $ do From 23cf4b94201336ed1fee64f5d3156b0007932d85 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 12:02:38 +0300 Subject: [PATCH 0172/1204] Rename "SEx" to "Ex", since we're not teenagers here --- demo/Main.hs | 16 ++++++------ hspec-postgres/Main.hs | 30 +++++++++++----------- library/Hasql.hs | 56 +++++++++++++++++++++--------------------- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index 6ce7f4059e..1ba5660bcc 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -36,11 +36,11 @@ main = do -- Execute a group of statements without any locking and ACID guarantees: H.tx Nothing $ do - H.unitSEx [H.stmt|DROP TABLE IF EXISTS a|] - H.unitSEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] + H.unitEx [H.stmt|DROP TABLE IF EXISTS a|] + H.unitEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] -- Insert three rows: replicateM_ 3 $ do - H.unitSEx [H.stmt|INSERT INTO a (balance) VALUES (0)|] + H.unitEx [H.stmt|INSERT INTO a (balance) VALUES (0)|] -- Declare a list of transfer settings, which we'll later use. -- The tuple structure is: @@ -56,16 +56,16 @@ main = do runMaybeT $ do -- To distinguish results rows containing just one column, -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.maybeSEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.maybeSEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unitSEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unitSEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 + Identity balance1 <- MaybeT $ H.maybeEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 + Identity balance2 <- MaybeT $ H.maybeEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 + lift $ H.unitEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 + lift $ H.unitEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 -- Output all the updated rows: do -- Unfortunately in this case there's no way to infer the type of the results, -- so we need to specify it explicitly: - rows <- H.tx Nothing $ H.vectorSEx $ [H.stmt|SELECT * FROM a|] + rows <- H.tx Nothing $ H.vectorEx $ [H.stmt|SELECT * FROM a|] forM_ rows $ \(id :: Int, amount :: Int) -> do liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index caf4e25688..7f569e95c1 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -18,18 +18,18 @@ main = flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do session $ do H.tx Nothing $ do - H.unitSEx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitSEx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] + H.unitEx $ [H.stmt|DROP TABLE IF EXISTS a|] + H.unitEx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] H.tx (Just (H.Serializable, Just False)) $ do - H.unitSEx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] + H.unitEx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] H.tx Nothing $ do - H.maybeSEx $ [H.stmt|SELECT x FROM a WHERE x = 2|] + H.maybeEx $ [H.stmt|SELECT x FROM a WHERE x = 2|] context "UTF-8 templates" $ do it "encode properly" $ do flip shouldBe (Right (Just (Identity ("Ёжик" :: Text)))) =<< do - session $ H.tx Nothing $ H.maybeSEx $ [H.stmt| SELECT 'Ёжик' |] + session $ H.tx Nothing $ H.maybeEx $ [H.stmt| SELECT 'Ёжик' |] context "Bug" $ do @@ -37,16 +37,16 @@ main = it "should not be" $ do session $ H.tx Nothing $ do - H.unitSEx [H.stmt|DROP TABLE IF EXISTS artist|] - H.unitSEx [H.stmt|DROP TABLE IF EXISTS artist_union|] - H.unitSEx $ + H.unitEx [H.stmt|DROP TABLE IF EXISTS artist|] + H.unitEx [H.stmt|DROP TABLE IF EXISTS artist_union|] + H.unitEx $ [H.stmt| CREATE TABLE "artist_union" ( "id" BIGSERIAL, PRIMARY KEY ("id") ) |] - H.unitSEx $ + H.unitEx $ [H.stmt| CREATE TABLE "artist" ( "id" BIGSERIAL, @@ -60,13 +60,13 @@ main = let insertArtistUnion :: H.Tx HP.Postgres s Int64 insertArtistUnion = - fmap (runIdentity . fromJust) $ H.maybeSEx $ + fmap (runIdentity . fromJust) $ H.maybeEx $ [H.stmt| INSERT INTO artist_union DEFAULT VALUES RETURNING id |] insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 insertArtist unionID artistNames = - fmap (runIdentity . fromJust) $ H.maybeSEx $ + fmap (runIdentity . fromJust) $ H.maybeEx $ [H.stmt| INSERT INTO artist (artist_union_id, @@ -92,16 +92,16 @@ main = flip shouldSatisfy (\case Left (H.ResultError _) -> True; _ -> False) =<< do session $ do H.tx Nothing $ do - H.unitSEx [H.stmt|DROP TABLE IF EXISTS data|] - H.unitSEx [H.stmt|CREATE TABLE data ( + H.unitEx [H.stmt|DROP TABLE IF EXISTS data|] + H.unitEx [H.stmt|CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )|] - H.unitSEx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] + H.unitEx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] mrow :: Maybe (Double, Int64, String) <- H.tx Nothing $ - H.maybeSEx $ [H.stmt|SELECT * FROM data|] + H.maybeEx $ [H.stmt|SELECT * FROM data|] return () diff --git a/library/Hasql.hs b/library/Hasql.hs index cbf9981961..2402745ade 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -31,14 +31,14 @@ module Hasql stmt, -- * Statement Execution - SEx, - unitSEx, - countSEx, - singleSEx, - maybeSEx, - listSEx, - vectorSEx, - streamSEx, + Ex, + unitEx, + countEx, + singleEx, + maybeEx, + listEx, + vectorEx, + streamEx, -- * Transaction Tx, @@ -255,20 +255,20 @@ tx mode (Tx m) = -- Statement executor. -- -- Just an alias to a function, which executes a statement in 'Tx'. -type SEx c s r = +type Ex c s r = Bknd.Stmt c -> Tx c s r -- | -- Execute a statement without processing the result. -unitSEx :: SEx c s () -unitSEx = +unitEx :: Ex c s () +unitEx = Tx . lift . Bknd.unitTx -- | -- Execute a statement and count the amount of affected rows. -- Useful for resolving how many rows were updated or deleted. -countSEx :: Bknd.CxValue c Word64 => SEx c s Word64 -countSEx = +countEx :: Bknd.CxValue c Word64 => Ex c s Word64 +countEx = Tx . lift . Bknd.countTx -- | @@ -279,33 +279,33 @@ countSEx = -- -- Please note that using this executor for selecting rows is conceptually wrong, -- since in that case the results are always optional. --- Use 'maybeSEx', 'listSEx' or 'vectorSEx' instead. +-- Use 'maybeEx', 'listEx' or 'vectorEx' instead. -- -- If the result is empty this executor will raise 'ResultError'. -singleSEx :: CxRow.CxRow c r => SEx c s r -singleSEx = - join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleSEx'") return) . - maybeSEx +singleEx :: CxRow.CxRow c r => Ex c s r +singleEx = + join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleEx'") return) . + maybeEx -- | -- Execute a statement, -- which optionally produces a single result row. -maybeSEx :: CxRow.CxRow c r => SEx c s (Maybe r) -maybeSEx = - fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorSEx +maybeEx :: CxRow.CxRow c r => Ex c s (Maybe r) +maybeEx = + fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorEx -- | -- Execute a statement, -- and produce a list of results. -listSEx :: CxRow.CxRow c r => SEx c s [r] -listSEx = - fmap toList . vectorSEx +listEx :: CxRow.CxRow c r => Ex c s [r] +listEx = + fmap toList . vectorEx -- | -- Execute a statement, -- and produce a vector of results. -vectorSEx :: CxRow.CxRow c r => SEx c s (Vector r) -vectorSEx s = +vectorEx :: CxRow.CxRow c r => Ex c s (Vector r) +vectorEx s = Tx $ do r <- lift $ Bknd.vectorTx s EitherT $ return $ traverse ((mapLeft ResultError) . CxRow.parseRow) $ r @@ -324,8 +324,8 @@ vectorSEx s = -- Note that in most databases cursors require establishing a database transaction, -- so depending on a backend the transaction may result in an error, -- if you run it improperly. -streamSEx :: CxRow.CxRow c r => Int -> SEx c s (TxListT s (Tx c s) r) -streamSEx n s = +streamEx :: CxRow.CxRow c r => Int -> Ex c s (TxListT s (Tx c s) r) +streamEx n s = Tx $ do r <- lift $ Bknd.streamTx n s return $ TxListT $ do From 8336379a9155813046baed631ec294adc9633a2d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 12:21:01 +0300 Subject: [PATCH 0173/1204] The TxStream type alias --- library/Hasql.hs | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 2402745ade..ffa27d76ef 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -50,7 +50,8 @@ module Hasql Bknd.TxWriteMode(..), -- ** Result Stream - TxListT, + TxStream, + TxStreamListT, -- * Row Parser CxRow.CxRow, @@ -233,7 +234,7 @@ deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (SessionError -- Execute a transaction in a session. -- -- This function ensures on the type level, --- that it's impossible to return @'TxListT' s m r@ from it. +-- that it's impossible to return @'TxStreamListT' s m r@ from it. tx :: (Bknd.CxTx c, MonadBaseControl IO m) => Bknd.TxMode -> (forall s. Tx c s r) -> Session c m r tx mode (Tx m) = Session $ ReaderT $ \(Pool pool) -> @@ -324,11 +325,11 @@ vectorEx s = -- Note that in most databases cursors require establishing a database transaction, -- so depending on a backend the transaction may result in an error, -- if you run it improperly. -streamEx :: CxRow.CxRow c r => Int -> Ex c s (TxListT s (Tx c s) r) +streamEx :: CxRow.CxRow c r => Int -> Ex c s (TxStream c s r) streamEx n s = Tx $ do r <- lift $ Bknd.streamTx n s - return $ TxListT $ do + return $ TxStreamListT $ do row <- hoist (Tx . lift) r lift $ Tx $ EitherT $ return $ mapLeft ResultError $ CxRow.parseRow $ row @@ -338,26 +339,30 @@ streamEx n s = -- | -- A stream of results, --- which fetches only those that you reach. --- --- It's a wrapper around 'ListT.ListT', +-- which fetches approximately only those that you reach. +type TxStream c s = + TxStreamListT s (Tx c s) + +-- | +-- A wrapper around 'ListT.ListT', -- which uses the same trick as the 'ST' monad to associate with the --- context transaction and become impossible to be used outside of it. +-- context monad and become impossible to be returned from it, +-- using the anonymous type parameter @s@. -- This lets the library ensure that it is safe to automatically -- release all the connections associated with this stream. -- -- All the functions of the \"list-t\" library are applicable to this type, -- amongst which are 'ListT.head', 'ListT.toList', 'ListT.fold', 'ListT.traverse_'. -newtype TxListT s m r = - TxListT (ListT.ListT m r) +newtype TxStreamListT s m r = + TxStreamListT (ListT.ListT m r) deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, Monoid, ListT.MonadCons) -instance ListT.MonadTransUncons (TxListT s) where +instance ListT.MonadTransUncons (TxStreamListT s) where uncons = - (liftM . fmap . fmap) (unsafeCoerce :: ListT.ListT m r -> TxListT s m r) . + (liftM . fmap . fmap) (unsafeCoerce :: ListT.ListT m r -> TxStreamListT s m r) . ListT.uncons . - (unsafeCoerce :: TxListT s m r -> ListT.ListT m r) + (unsafeCoerce :: TxStreamListT s m r -> ListT.ListT m r) -- * Statements quasi-quotation From 6c2f78a12210b21ada8a5b0c329cd04a026a728d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 12:39:34 +0300 Subject: [PATCH 0174/1204] Release --- CHANGELOG.md | 5 +++++ hasql.cabal | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30161e8437..751613e847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 0.7.0 - Refinements and minor updates +* Streaming now is parameterized by the size of a chunk +* Introduced a new type `Ex` +* Changed the suffix of statement execution functions to `Ex` + # 0.6.0 - Major API overhaul * The connection pool acquisition is now explicit and is no longer handled by the `Session` monad. This should provide for a simpler integration with other libraries. * The `Session` monad is now merely a convenience thing for providing a context to multiple transactions. One can run it as many times as he wants - it won't reestablish any resources any more. diff --git a/hasql.cabal b/hasql.cabal index 306f687de7..4708835c3d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.6.0 + 0.7.0 synopsis: A minimalistic general high level API for relational databases description: From 3f996b8b0a57ffbd150fe12bc58504114c166b11 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Dec 2014 15:42:53 +0300 Subject: [PATCH 0175/1204] Relax the dependency on "monad-control" --- .travis.yml | 1 + CHANGELOG.md | 3 +++ hasql.cabal | 4 ++-- library/Hasql.hs | 39 ++++++++++++++++++++++++++++++++------- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1c347f1a66..eedf27a0ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ install: then constraint_options=( "--constraint=transformers==0.3.*" + "--constraint=monad-control==0.3.*" "--constraint=text==1.0.*" "--constraint=attoparsec==0.10.*" "--constraint=time==1.4.*" diff --git a/CHANGELOG.md b/CHANGELOG.md index 751613e847..1643fb4c9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.7.1 +* Relaxed the dependency on "monad-control" + # 0.7.0 - Refinements and minor updates * Streaming now is parameterized by the size of a chunk * Introduced a new type `Ex` diff --git a/hasql.cabal b/hasql.cabal index 4708835c3d..aeac6d0cbb 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.0 + 0.7.1 synopsis: A minimalistic general high level API for relational databases description: @@ -109,7 +109,7 @@ library list-t >= 0.3.1 && < 0.5, mmorph == 1.0.*, mtl >= 2.1 && < 2.3, - monad-control == 1.0.*, + monad-control >= 0.3 && < 1.1, transformers-base == 0.4.*, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, diff --git a/library/Hasql.hs b/library/Hasql.hs index ffa27d76ef..8ca08e4f4a 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UndecidableInstances, CPP #-} -- | -- This is the API of the \"hasql\" library. -- For an introduction to the package @@ -161,6 +161,16 @@ newtype Session c m r = instance MonadTrans (Session c) where lift = Session . lift . lift +deriving instance MonadBase IO m => MonadBase IO (Session c m) + +instance MFunctor (Session c) where + hoist f (Session m) = + Session $ ReaderT $ \e -> + EitherT $ f $ runEitherT $ flip runReaderT e $ m + + +#if MIN_VERSION_monad_control(1,0,0) + instance MonadTransControl (Session c) where type StT (Session c) a = Either (SessionError c) a liftWith onUnlift = @@ -170,17 +180,32 @@ instance MonadTransControl (Session c) where restoreT = Session . ReaderT . const . EitherT -deriving instance MonadBase IO m => MonadBase IO (Session c m) - instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where type StM (Session c m) a = ComposeSt (Session c) m a liftBaseWith = defaultLiftBaseWith restoreM = defaultRestoreM -instance MFunctor (Session c) where - hoist f (Session m) = - Session $ ReaderT $ \e -> - EitherT $ f $ runEitherT $ flip runReaderT e $ m +#else + +instance MonadTransControl (Session c) where + newtype StT (Session c) a = + SessionStT (Either (SessionError c) a) + liftWith onUnlift = + Session $ ReaderT $ \e -> + lift $ onUnlift $ \(Session m) -> + liftM SessionStT $ runEitherT $ flip runReaderT e $ m + restoreT = + Session . ReaderT . const . EitherT . liftM (\(SessionStT a) -> a) + +instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where + newtype StM (Session c m) a = + SessionStM (ComposeSt (Session c) m a) + liftBaseWith = + defaultLiftBaseWith SessionStM + restoreM = + defaultRestoreM $ \(SessionStM a) -> a + +#endif -- | -- Execute a session using an established connection pool. From ae151ac862098d1eaa3a5be9f066dafed9a2b5f7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Jan 2015 02:48:37 +0300 Subject: [PATCH 0176/1204] Multivalue clauses test --- hspec-postgres/Main.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs index 7f569e95c1..d643a06921 100644 --- a/hspec-postgres/Main.hs +++ b/hspec-postgres/Main.hs @@ -12,6 +12,19 @@ import qualified SlaveThread main = hspec $ do + context "Multivalue clauses" $ do + -- See http://www.postgresql.org/docs/current/interactive/functions-comparisons.html + + it "contains" $ do + flip shouldBe (Right True) =<< do + session $ + fmap runIdentity $ H.tx Nothing $ H.singleEx $ [H.stmt|SELECT 2 = ANY (?)|] [1,2,3 :: Int] + + it "contains not" $ do + flip shouldBe (Right False) =<< do + session $ + fmap runIdentity $ H.tx Nothing $ H.singleEx $ [H.stmt|SELECT 2 != ALL (?)|] [1,2,3 :: Int] + context "Tx" $ do it "does not commit if in uncommitting mode" $ do From 52cd7db40d2d7c12063e2eb90de90a67cc2e07fa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 12 Jan 2015 04:52:10 +0300 Subject: [PATCH 0177/1204] Support for free variables by the quasi-quoter --- hasql.cabal | 5 +- hspec/Main.hs | 9 +++- library/Hasql.hs | 47 +---------------- library/Hasql/Prelude.hs | 1 + library/Hasql/QQ.hs | 61 ++++++++++++++++++++++ library/Hasql/{QParser.hs => QQ/Parser.hs} | 39 +++++++++----- 6 files changed, 102 insertions(+), 60 deletions(-) create mode 100644 library/Hasql/QQ.hs rename library/Hasql/{QParser.hs => QQ/Parser.hs} (55%) diff --git a/hasql.cabal b/hasql.cabal index aeac6d0cbb..48954a00a8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.1 + 0.7.2 synopsis: A minimalistic general high level API for relational databases description: @@ -88,9 +88,10 @@ library Haskell2010 other-modules: Hasql.Prelude - Hasql.QParser + Hasql.QQ.Parser Hasql.CxRow Hasql.TH + Hasql.QQ exposed-modules: Hasql build-depends: diff --git a/hspec/Main.hs b/hspec/Main.hs index c6cb7f38bc..e80f3afeb0 100644 --- a/hspec/Main.hs +++ b/hspec/Main.hs @@ -20,7 +20,14 @@ instance HB.CxValue X Char where main = hspec $ do context "Quasi quoter" $ do - it "generates a proper statement" $ do + it "supports free variables" $ do + let a = 'a' + b = 'b' + in + (flip shouldBe) + (HB.Stmt "SELECT (? + ?)" (V.fromList [HB.encodeValue a, HB.encodeValue b]) True) + ([H.stmt| SELECT ($a + $b) |] :: HB.Stmt X) + it "supports ordered placeholders" $ do (flip shouldBe) (HB.Stmt "SELECT (? + ?)" (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) ([H.stmt| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) diff --git a/library/Hasql.hs b/library/Hasql.hs index 8ca08e4f4a..3eeac825dc 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -28,7 +28,7 @@ module Hasql -- * Statement Bknd.Stmt, - stmt, + QQ.stmt, -- * Statement Execution Ex, @@ -61,16 +61,12 @@ where import Hasql.Prelude import qualified Hasql.Backend as Bknd import qualified Hasql.CxRow as CxRow -import qualified Hasql.QParser as QParser +import qualified Hasql.QQ as QQ import qualified ListT import qualified Data.Pool as Pool -import qualified Data.Text as Text import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MVector -import qualified Language.Haskell.TH as TH -import qualified Language.Haskell.TH.Quote as TH import qualified Language.Haskell.TH.Syntax as TH -import qualified Hasql.TH as THUtil -- * Resources @@ -389,42 +385,3 @@ instance ListT.MonadTransUncons (TxStreamListT s) where ListT.uncons . (unsafeCoerce :: TxStreamListT s m r -> ListT.ListT m r) - --- * Statements quasi-quotation -------------------------- - --- | --- Produces a lambda-expression, --- which takes as many parameters as there are placeholders in the quoted text --- and results in a 'Bknd.Stmt'. --- --- E.g.: --- --- >selectSum :: Int -> Int -> Stmt c --- >selectSum = [stmt|SELECT (? + ?)|] --- -stmt :: TH.QuasiQuoter -stmt = - TH.QuasiQuoter - (parseExp) - (const $ fail "Pattern context is not supported") - (const $ fail "Type context is not supported") - (const $ fail "Declaration context is not supported") - where - parseExp s = - do - (t, n) <- either (fail . showString "Parsing failure: ") return (QParser.parse (fromString s)) - return $ statementF (Text.unpack t) (fromIntegral n) - statementF s n = - TH.LamE - (map TH.VarP argNames) - (THUtil.purify [|Bknd.Stmt $(pure statementE) $(pure argsE) True|]) - where - argNames = - map (TH.mkName . ('_' :) . show) [1 .. n] - statementE = - TH.LitE (TH.StringL s) - argsE = - THUtil.vectorE $ - map (\x -> THUtil.purify [| Bknd.encodeValue $(TH.varE x) |]) $ - argNames diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index d46a698fdf..1d74ac9b28 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -13,6 +13,7 @@ import BasePrelude as Exports hiding (left, right, isLeft, isRight) ------------------------- import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Control.Monad.Trans.Writer as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Control.Monad.Trans.Maybe as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Control.Monad.Trans.Class as Exports import Control.Monad.IO.Class as Exports diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs new file mode 100644 index 0000000000..7ec9a9c9d2 --- /dev/null +++ b/library/Hasql/QQ.hs @@ -0,0 +1,61 @@ +module Hasql.QQ where + +import Hasql.Prelude +import Hasql.TH +import Language.Haskell.TH +import Language.Haskell.TH.Quote +import Language.Haskell.TH.Syntax +import qualified Data.Text as Text +import qualified Hasql.QQ.Parser as Parser +import qualified Hasql.Backend as Bknd + + +-- | +-- Produces a lambda-expression, +-- which takes as many parameters as there are placeholders in the quoted text +-- and results in a 'Bknd.Stmt'. +-- +-- E.g.: +-- +-- >selectSum :: Int -> Int -> Stmt c +-- >selectSum = [stmt|SELECT (? + ?)|] +-- +-- It also allows to directly refer to free variables like so: +-- +-- >selectSum :: Int -> Int -> Stmt c +-- >selectSum a b = [stmt|SELECT ($a + $b)|] +stmt :: QuasiQuoter +stmt = + QuasiQuoter + (parseExp) + (const $ fail "Pattern context is not supported") + (const $ fail "Type context is not supported") + (const $ fail "Declaration context is not supported") + where + parseExp = + fmap (uncurry statementF) . + either (fail . showString "Parsing failure: ") return . + Parser.parse . + fromString + statementF t params = + LamE + (map VarP argNames) + (purify [|Bknd.Stmt $(pure statementE) $(pure argsE) True|]) + where + (varNames, argNames) = + (\(a, b) -> (reverse a, reverse b)) $ + flip execState ([], []) $ forM_ params $ \case + Parser.ParamName n -> + modify $ \(a, b) -> (mkName (Text.unpack n) : a, b) + Parser.OrderedPlaceholder -> + modify $ \(a, b) -> + let n = mkName $ '_' : show (length b + 1) + in (n : a, n : b) + Parser.IndexedPlaceholder i -> + fail "Indexed placeholders are not supported" + statementE = + LitE (StringL (Text.unpack t)) + argsE = + vectorE $ + map (\x -> purify [| Bknd.encodeValue $(varE x) |]) $ + varNames diff --git a/library/Hasql/QParser.hs b/library/Hasql/QQ/Parser.hs similarity index 55% rename from library/Hasql/QParser.hs rename to library/Hasql/QQ/Parser.hs index 3dd3fc80a8..12e8f038d3 100644 --- a/library/Hasql/QParser.hs +++ b/library/Hasql/QQ/Parser.hs @@ -1,4 +1,4 @@ -module Hasql.QParser where +module Hasql.QQ.Parser where import Hasql.Prelude hiding (takeWhile) import Data.Attoparsec.Text hiding (Result) @@ -7,34 +7,38 @@ import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Builder as TLB +type Result = + (Text, [Param]) + +data Param = + ParamName Text | + OrderedPlaceholder | + IndexedPlaceholder Int + -- | -- Produces a whitespace-cleaned text and a count of placeholders in it. -parse :: Text -> Either String (Text, Int) +parse :: Text -> Either String (Text, [Param]) parse = parseOnly $ singleTemplate -singleTemplate :: Parser (Text, Int) +singleTemplate :: Parser (Text, [Param]) singleTemplate = template <* ((endOfInput) <|> - (() <$ skipSpace <* char ';' <* fail "A semicolon detected. Only single statements are allowed")) + (() <$ skipSpace <* char ';' <* fail "A semicolon detected, but only single statements are allowed")) -template :: Parser (Text, Int) +template :: Parser (Text, [Param]) template = - flip runStateT 0 $ do + runWriterT $ do lift $ skipSpace fmap (TL.toStrict . TLB.toLazyText . mconcat) $ many $ - (mempty <$ lift trailingWhitespace) <|> + (mempty <$ lift (takeWhile1 isSpace <* endOfInput)) <|> (TLB.singleton ' ' <$ lift (takeWhile1 isSpace)) <|> (TLB.fromText <$> lift stringLit) <|> - (TLB.singleton <$> lift (char '?') <* modify succ) <|> + (TLB.singleton '?' <$ (lift param >>= tell . pure)) <|> (TLB.singleton <$> lift (notChar ';')) -trailingWhitespace :: Parser () -trailingWhitespace = - () <$ takeWhile1 isSpace <* endOfInput - stringLit :: Parser Text stringLit = do @@ -48,3 +52,14 @@ stringLit = char quote return $ TL.toStrict . TLB.toLazyText $ TLB.singleton quote <> content <> TLB.singleton quote + +param :: Parser Param +param = + (char '$' *> ((ParamName <$> paramName) <|> (IndexedPlaceholder <$> decimal))) <|> + (OrderedPlaceholder <$ char '?') + +paramName :: Parser Text +paramName = + T.cons <$> satisfy isLower <*> takeWhile (\c -> isAlphaNum c || elem c extraChars) + where + extraChars = "_'" :: [Char] From b478390c0008b347432a52f2579e8bbe587112f2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 12 Jan 2015 05:11:10 +0300 Subject: [PATCH 0178/1204] Update the changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1643fb4c9b..2861f55043 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.7.2 +* Implement support for free variables by the quasi-quoter + # 0.7.1 * Relaxed the dependency on "monad-control" From 7482cf2c5521f1b6f80bb99f8e7364f51b3dde5c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 30 Mar 2015 08:06:08 +0300 Subject: [PATCH 0179/1204] GHC 7.10 support --- .travis.yml | 43 ++++++++++++++++++++++++++---------------- CHANGELOG.md | 3 +++ hasql.cabal | 14 ++++++-------- library/Hasql/CxRow.hs | 2 +- library/Hasql/TH.hs | 7 +++++++ 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/.travis.yml b/.travis.yml index eedf27a0ea..b63713fb55 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,22 @@ env: - - lower_bound_dependencies=1 - ghc=7.6.1 - - lower_bound_dependencies=1 - ghc=7.8.1 - - ghc=7.6.1 - - ghc=7.8.1 + - ghc=7.6.1 cabal=1.18 benchmarks=1 tests=1 lower_bound_dependencies=1 + - ghc=7.6.1 cabal=1.18 benchmarks=1 tests=1 + - ghc=7.8.1 cabal=1.18 benchmarks=1 tests=1 + - ghc=7.10.1 cabal=1.22 + - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 + install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e # Install GHC and Cabal - - + - + ghc=${ghc=7.10.1}; + cabal=${cabal=1.22}; travis_retry sudo add-apt-repository -y ppa:hvr/ghc; travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-1.18 ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/1.18/bin:$PATH; + travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; # Update the Cabal database - cabal update # Switch to the distro: @@ -26,7 +28,7 @@ install: cd $pkg_name; # Install the lower bound dependencies - - if [ $lower_bound_dependencies -eq 1 ]; + if [ "$lower_bound_dependencies" = "1" ]; then constraint_options=( "--constraint=transformers==0.3.*" @@ -37,15 +39,24 @@ install: ); fi; # Install the "haskell-src-exts" implicit dependency - - cabal install -j ${constraint_options[@]} happy + - cabal install happy --reorder-goals --force-reinstalls ${constraint_options[@]} # Install the library dependencies - - cabal install -j ${constraint_options[@]} --only-dependencies + - cabal install --only-dependencies --reorder-goals --force-reinstalls + ${constraint_options[@]} + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") # Build the library - cabal build - # Install the remaining dependencies - - cabal install -j --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls # Configure and build the remaining stuff - - cabal configure --enable-tests --enable-benchmarks && cabal build + - cabal configure + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + -f doctest + - cabal build script: - - cabal test --show-details=always + - | + if [ "$tests" = "1" ]; + then + cabal test --show-details=always; + fi; diff --git a/CHANGELOG.md b/CHANGELOG.md index 2861f55043..5c22df42ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.7.3 +* GHC 7.10 support + # 0.7.2 * Implement support for free variables by the quasi-quoter diff --git a/hasql.cabal b/hasql.cabal index 48954a00a8..5749fe41d3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.2 + 0.7.3 synopsis: A minimalistic general high level API for relational databases description: @@ -99,7 +99,7 @@ library resource-pool == 0.2.*, hasql-backend == 0.4.*, -- - template-haskell >= 2.8 && < 2.10, + template-haskell >= 2.8 && < 2.11, -- attoparsec >= 0.10 && < 0.13, -- @@ -114,7 +114,7 @@ library transformers-base == 0.4.*, transformers >= 0.3 && < 0.5, base-prelude >= 0.1.3 && < 0.2, - base >= 4.5 && < 4.8 + base >= 4.6 && < 4.9 test-suite hspec @@ -142,8 +142,7 @@ test-suite hspec vector, -- mtl-prelude < 3, - base-prelude, - base + base-prelude test-suite hspec-postgres @@ -175,8 +174,7 @@ test-suite hspec-postgres monad-control, either, mtl-prelude < 3, - base-prelude, - base + base-prelude -- Well, it's not a benchmark actually, @@ -200,6 +198,6 @@ benchmark demo hasql, hasql-postgres == 0.10.*, transformers >= 0.3 && < 0.5, - base >= 4.5 && < 4.8 + base diff --git a/library/Hasql/CxRow.hs b/library/Hasql/CxRow.hs index 1eba58e73b..d2b070e64c 100644 --- a/library/Hasql/CxRow.hs +++ b/library/Hasql/CxRow.hs @@ -33,7 +33,7 @@ return $ flip map [2 .. 24] $ \arity -> connectionType = VarT (mkName "c") constraints = - map (\t -> ClassP ''Bknd.CxValue [connectionType, t]) varTypes + map (\t -> THUtil.classP ''Bknd.CxValue [connectionType, t]) varTypes head = AppT (AppT (ConT ''CxRow) connectionType) (foldl AppT (TupleT arity) varTypes) parseRowDec = diff --git a/library/Hasql/TH.hs b/library/Hasql/TH.hs index 765572f5f3..d9a6b614aa 100644 --- a/library/Hasql/TH.hs +++ b/library/Hasql/TH.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} -- | -- TH utils. module Hasql.TH where @@ -71,3 +72,9 @@ vectorE cellExps = (VarE 'Vector.unsafeFreeze) (VarE vectorVarName))) +classP :: Name -> [Type] -> Pred +#if MIN_VERSION_template_haskell(2,10,0) +classP n tl = foldl AppT (ConT n) tl +#else +classP = ClassP +#endif From 2ece62bd26e49f5127b92dd11e3289c95e0a9ca1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 15 May 2015 08:05:49 +0300 Subject: [PATCH 0180/1204] Update the Attoparsec dep --- CHANGELOG.md | 3 +++ hasql.cabal | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c22df42ea..8f87057596 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.7.3.1 +* Attoparsec-0.13 support + # 0.7.3 * GHC 7.10 support diff --git a/hasql.cabal b/hasql.cabal index 5749fe41d3..526bfd677d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.3 + 0.7.3.1 synopsis: A minimalistic general high level API for relational databases description: @@ -101,7 +101,7 @@ library -- template-haskell >= 2.8 && < 2.11, -- - attoparsec >= 0.10 && < 0.13, + attoparsec >= 0.10 && < 0.14, -- vector < 0.11, text >= 1.0 && < 1.3, From d34c06a4eb7ce9594cc753600fa4a1ef2d6e1e65 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 31 May 2015 04:38:24 +0300 Subject: [PATCH 0181/1204] Relax the "either" dependency --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 526bfd677d..575ba5ef2f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.3.1 + 0.7.3.2 synopsis: A minimalistic general high level API for relational databases description: @@ -106,7 +106,7 @@ library vector < 0.11, text >= 1.0 && < 1.3, -- - either >= 4.3 && < 4.4, + either >= 4.3 && < 5, list-t >= 0.3.1 && < 0.5, mmorph == 1.0.*, mtl >= 2.1 && < 2.3, From d38acbe88cc2230ae59c6fda70d27f5020a186c6 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 31 May 2015 14:16:25 -0400 Subject: [PATCH 0182/1204] Adds a basic README file --- README.md | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000000..277c69016e --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +# Hasql [![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) + + +Hasql provides a robust and concise yet powerful API for communication with arbitrary relational databases using SQL. + +Currently the only backend available is for PostgreSQL ([which can yield great performance improvements](https://nikita-volkov.github.io/hasql-benchmarks/) over HDBC or postgresql-simple). + +The code used here file is the [demo found in the repository](https://github.com/nikita-volkov/hasql/blob/master/demo/Main.hs) + +## Openning a connection + +For greater convenience the Hasql has a built-in connection pool. All interactions with the database backend are done within the context of such a pool. + +So we have functions to create a pool and one to release all resources held by the pool: + +```haskell +H.acquirePool + :: Hasql.Backend.Cx c => + Hasql.Backend.CxSettings c -> H.PoolSettings -> IO (H.Pool c) +``` + +and + +```haskell +H.releasePool :: H.Pool c -> IO () +``` + +To create the pool we need to pass the connection settings (which are backend dependent) and the pool settings. The code sample below will open a connection to a PostgreSQL database. + +```haskell +{-# LANGUAGE QuasiQuotes, ScopedTypeVariables, OverloadedStrings #-} + +-- Import the API from the "hasql" library +import qualified Hasql as H + +-- Import the backend API from the "hasql-postgres" library +import qualified Hasql.Postgres as HP +let postgresSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" + +-- Prepare the pool settings with a smart constructor, +-- which checks the inputted values on correctness. +-- Set the connection pool size to 6 and the timeout to 30 seconds. +poolSettings <- maybe (fail "Improper session settings") return $ + H.poolSettings 6 30 + +-- Acquire the database connections pool. +-- Gotta help the compiler with the type signature of the pool a bit. +pool :: H.Pool HP.Postgres + <- H.acquirePool postgresSettings poolSettings +``` + +## Executing a statement + +To execute statements we will use a ```Session```, which is just a wrapper for the ```ReaderT``` monad. +This allow us to use the pool for all our session sub-computations. + +So the ```session``` function, is a wrapper for the ```runReaderT```, and besides a parameter with the pool, +we need to pass a function with the return type in ```H.Session``` monad. And as the return we get +either a ```SessionError``` or the result of our function. + +The function we will use to actually execute the transactions is the ```tx``` +which conveniently enough receives a transaction mode, the transactions we want to execute (along with their session context) +and returns the type ```H.Session c m r```. + +It is **important** to notice that running ```IO``` in ```Tx``` is prohibited. + +let's take a look at the signatures proceding: + +```haskell +H.session + :: H.Pool c -> H.Session c m a -> m (Either (H.SessionError c) a) + +H.tx + :: (Control.Monad.Trans.Control.MonadBaseControl IO m, + Hasql.Backend.CxTx c) => + H.TxMode -> (forall s. H.Tx c s r) -> H.Session c m r +``` + +The following code excerpt shows us how the demo code uses these functions to open a +session and start a transaction to create a new table: + +```haskell +-- Provide a context for execution of transactions. +-- 'Session' is merely a convenience wrapper around 'ReaderT'. +H.session pool $ do + + -- Execute a group of statements without any locking and ACID guarantees: + H.tx Nothing $ do + H.unitEx [H.stmt|DROP TABLE IF EXISTS a|] + H.unitEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] +``` + +## Transactions (isolation levels and transaction modes) + +You have probably noticed that the first parameter of ```tx``` belongs to the type ```TxMode```. +This parameter deserves some consideration, for it will determine the behaviour of our transaction. +Let's take a look at its type definition: + +```haskell +type TxMode = Maybe (TxIsolationLevel, TxWriteMode) + +data TxIsolationLevel = + RepeatableReads | + Serializable | + ReadCommitted | + ReadUncommitted + +type TxWriteMode = Maybe Bool +``` + +So when the ```mode``` is ```Nothing```, no transaction is explicitly estabilished on the server. +In PostgreSQL's case this means all commands be commited immediatly after execution +and their isolation level will be *Read Committed*. + +If we pass the tuple, the first element will be the transaction isolation level, you can read more about +[transaction isolation levels on wikipedia](https://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels). + +The second element is the write mode, which will be interpreted as: + + * ```Nothing``` indicates a "read" mode. + * ```Just True``` indicates a "write" mode. + * ```Just False``` indicates a "write" mode without committing (can be useful for testing purposes). + From 42f6bea6746501797cfc35f896b2040ff2cb64a1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Aug 2015 08:15:07 +0300 Subject: [PATCH 0183/1204] Relax dependencies --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 575ba5ef2f..1006c73168 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.7.3.2 + 0.7.4 synopsis: A minimalistic general high level API for relational databases description: @@ -103,7 +103,7 @@ library -- attoparsec >= 0.10 && < 0.14, -- - vector < 0.11, + vector < 0.12, text >= 1.0 && < 1.3, -- either >= 4.3 && < 5, From 310cbd590154dbb1cbe9185f617c2e375b6ac169 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Aug 2015 08:16:43 +0300 Subject: [PATCH 0184/1204] Fix Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b63713fb55..0f532c275b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,5 +58,6 @@ script: - | if [ "$tests" = "1" ]; then + cabal clean; cabal test --show-details=always; fi; From 851240de0fd50b4f09bcd1f9fac4420300ed4f5b Mon Sep 17 00:00:00 2001 From: mLuby Date: Thu, 29 Oct 2015 12:28:26 -0700 Subject: [PATCH 0185/1204] typofix openning -> opening --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 277c69016e..030381ddda 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Currently the only backend available is for PostgreSQL ([which can yield great p The code used here file is the [demo found in the repository](https://github.com/nikita-volkov/hasql/blob/master/demo/Main.hs) -## Openning a connection +## Opening a connection For greater convenience the Hasql has a built-in connection pool. All interactions with the database backend are done within the context of such a pool. From 38b69113d7c80e4a244d7b9acf2d9bc6663cabe5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 15 Oct 2015 10:59:10 +0300 Subject: [PATCH 0186/1204] Init --- .travis.yml | 53 +++++++++++++++++++++ LICENSE | 22 +++++++++ demo/Main.hs | 7 +++ hasql-tx.cabal | 93 +++++++++++++++++++++++++++++++++++++ library/Hasql/Tx.hs | 75 ++++++++++++++++++++++++++++++ library/Hasql/Tx/Prelude.hs | 59 +++++++++++++++++++++++ library/Hasql/Tx/Queries.hs | 75 ++++++++++++++++++++++++++++++ 7 files changed, 384 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 demo/Main.hs create mode 100644 hasql-tx.cabal create mode 100644 library/Hasql/Tx.hs create mode 100644 library/Hasql/Tx/Prelude.hs create mode 100644 library/Hasql/Tx/Queries.hs diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..633cafc257 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,53 @@ +env: + - ghc=7.6.1 cabal=1.18 + - ghc=7.8.1 cabal=1.18 + - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 + +install: + # Set up the Shell to treat the semicolon as && + - set -o pipefail && set -e + # Install GHC and Cabal + - + ghc=${ghc=7.10.1}; + cabal=${cabal=1.22}; + travis_retry sudo add-apt-repository -y ppa:hvr/ghc; + travis_retry sudo apt-get update; + travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; + # Update the Cabal database + - cabal update + # Switch to the distro: + - + export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; + # Install the lower bound dependencies + - + if [ "$lower_bound_dependencies" = "1" ]; + then + constraint_options=( + ); + fi; + # Install the library dependencies + - cabal install --only-dependencies --reorder-goals --force-reinstalls + ${constraint_options[@]} + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + # Build the library + - cabal build + # Configure and build the remaining stuff + - cabal configure + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + -f doctest + - cabal build + +script: + - | + if [ "$tests" = "1" ]; + then + cabal clean; + cabal test --show-details=always; + fi; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..defe17a5b7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015, Nikita Volkov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/demo/Main.hs b/demo/Main.hs new file mode 100644 index 0000000000..0c223f8409 --- /dev/null +++ b/demo/Main.hs @@ -0,0 +1,7 @@ +module Main where + +import BasePrelude hiding (assert, isRight, isLeft) + + +main = + undefined diff --git a/hasql-tx.cabal b/hasql-tx.cabal new file mode 100644 index 0000000000..4fdd736f54 --- /dev/null +++ b/hasql-tx.cabal @@ -0,0 +1,93 @@ +name: + hasql-tx +version: + 1 +category: + Database, DSL, PostgreSQL +synopsis: +homepage: + https://github.com/nikita-volkov/hasql-tx +bug-reports: + https://github.com/nikita-volkov/hasql-tx/issues +author: + Nikita Volkov +maintainer: + Nikita Volkov +copyright: + (c) 2015, Nikita Volkov +license: + MIT +license-file: + LICENSE +build-type: + Simple +cabal-version: + >=1.10 + + +source-repository head + type: + git + location: + git://github.com/nikita-volkov/hasql-tx.git + + +library + hs-source-dirs: + library + ghc-options: + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + other-modules: + Hasql.Tx.Prelude + Hasql.Tx.Queries + exposed-modules: + Hasql.Tx + build-depends: + hasql >= 1 && < 1.1, + -- parsing: + attoparsec >= 0.10 && < 0.14, + -- database: + postgresql-binary == 0.5.*, + postgresql-libpq == 0.9.*, + -- data: + aeson >= 0.7 && < 0.11, + uuid == 1.3.*, + vector >= 0.10 && < 0.12, + time >= 1.4 && < 1.6, + hashtables >= 1.1 && < 1.3, + scientific >= 0.2 && < 0.4, + text >= 1 && < 1.3, + bytestring >= 0.10 && < 0.11, + hashable >= 1.2 && < 1.3, + -- control: + contravariant >= 1.3 && < 2, + either >= 4.4.1 && < 5, + transformers >= 0.3 && < 0.5, + -- errors: + loch-th == 0.2.*, + placeholders == 0.1.*, + -- general: + base-prelude >= 0.1.19 && < 0.2 + + +executable demo + hs-source-dirs: + demo + main-is: + Main.hs + ghc-options: + -threaded + "-with-rtsopts=-N" + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + contravariant, + hasql-tx, + text, + bytestring, + base-prelude diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs new file mode 100644 index 0000000000..b229625fea --- /dev/null +++ b/library/Hasql/Tx.hs @@ -0,0 +1,75 @@ +module Hasql.Tx +where + +import Hasql.Tx.Prelude +import qualified Hasql.Connection as Connection +import qualified Hasql.Query as Query +import qualified Hasql.ErrorCodes as ErrorCodes +import qualified Hasql.Tx.Queries as Queries + + +newtype Tx a = + Tx (ReaderT (Connection.Connection, IORef Int) (EitherT Connection.ResultsError IO) a) + deriving (Functor, Applicative, Monad) + +-- | +-- +data Mode = + -- | + -- Read-only. No writes possible. + Read | + -- | + -- Write and commit. + Write | + -- | + -- Write without committing. + -- Useful for testing, + -- allowing you to modify your database, + -- producing some result based on your changes, + -- and to let Hasql roll all the changes back on the exit from the transaction. + WriteWithoutCommitting + deriving (Show, Eq, Ord, Enum, Bounded) + +-- | +-- For reference see +-- . +-- +data IsolationLevel = + ReadCommitted | + RepeatableRead | + Serializable + deriving (Show, Eq, Ord, Enum, Bounded) + +run :: Tx a -> Connection.Connection -> IsolationLevel -> Mode -> IO (Either Connection.ResultsError a) +run (Tx tx) connection isolation mode = + runEitherT $ do + EitherT $ Connection.executeParametricQuery connection (Queries.beginTransaction mode') () + counterRef <- lift $ newIORef 0 + resultEither <- lift $ runEitherT $ runReaderT tx (connection, counterRef) + case resultEither of + Left (Connection.ResultError (Connection.ServerError code _ _ _)) + | code == ErrorCodes.serialization_failure -> + EitherT $ run (Tx tx) connection isolation mode + _ -> do + result <- EitherT $ pure resultEither + let + query = + if commit + then Queries.commitTransaction + else Queries.abortTransaction + in + EitherT $ Connection.executeParametricQuery connection query () + pure result + where + mode' = + (unsafeCoerce isolation, write) + (write, commit) = + case mode of + Read -> (False, True) + Write -> (True, True) + WriteWithoutCommitting -> (True, False) + +parametricQuery :: Query.ParametricQuery a b -> a -> Tx b +parametricQuery query params = + Tx $ ReaderT $ \(connection, _) -> EitherT $ + Connection.executeParametricQuery connection query params diff --git a/library/Hasql/Tx/Prelude.hs b/library/Hasql/Tx/Prelude.hs new file mode 100644 index 0000000000..1a3a5af863 --- /dev/null +++ b/library/Hasql/Tx/Prelude.hs @@ -0,0 +1,59 @@ +module Hasql.Tx.Prelude +( + module Exports, + bug, + bottom, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) + +-- transformers +------------------------- +import Control.Monad.IO.Class as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) + +-- contravariant +------------------------- +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports + +-- either +------------------------- +import Control.Monad.Trans.Either as Exports +import Data.Either.Combinators as Exports + +-- text +------------------------- +import Data.Text as Exports (Text) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- placeholders +------------------------- +import Development.Placeholders as Exports + +-- loch-th +------------------------- +import Debug.Trace.LocationTH as Exports + +-- custom +------------------------- +import qualified Debug.Trace.LocationTH + + +bug = + [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] + where + msg = "A \"hasql\" package bug: " :: String + +bottom = + [e| $bug "Bottom evaluated" |] diff --git a/library/Hasql/Tx/Queries.hs b/library/Hasql/Tx/Queries.hs new file mode 100644 index 0000000000..f72e6bccee --- /dev/null +++ b/library/Hasql/Tx/Queries.hs @@ -0,0 +1,75 @@ +module Hasql.Tx.Queries +where + +import Hasql.Tx.Prelude +import Hasql.Query +import qualified Hasql.Serialization as S +import qualified Hasql.Deserialization as D + + +-- * Transactions +------------------------- + +data Isolation = + ReadCommitted | + RepeatableRead | + Serializable + +type TransactionMode = + (Isolation, Bool) + +beginTransaction :: TransactionMode -> ParametricQuery () () +beginTransaction (isolation, write) = + (template, mempty, D.result D.noResult, True) + where + template = + mconcat + [ + "BEGIN " + , + case isolation of + ReadCommitted -> "ISOLATION LEVEL READ COMMITTED" + RepeatableRead -> "ISOLATION LEVEL REPEATABLE READ" + Serializable -> "ISOLATION LEVEL SERIALIZABLE" + , + " " + , + case write of + True -> "READ WRITE" + False -> "READ ONLY" + ] + +commitTransaction :: ParametricQuery () () +commitTransaction = + ("COMMIT", mempty, D.result D.noResult, True) + +abortTransaction :: ParametricQuery () () +abortTransaction = + ("ABORT", mempty, D.result D.noResult, True) + + +-- * Streaming +------------------------- + +declareCursor :: ByteString -> ParametricQuery a b -> ParametricQuery a b +declareCursor name (template, serializer, deserializer, preparable) = + (template', serializer, deserializer, False) + where + template' = + "DECLARE " <> name <> " NO SCROLL CURSOR FOR " <> template + +closeCursor :: ParametricQuery ByteString () +closeCursor = + ("CLOSE $1", S.value (S.nonNull S.bytea), D.result D.noResult, True) + +fetchFromCursor :: D.Results a -> ParametricQuery (Int64, ByteString) a +fetchFromCursor deserializer = + (template, serializer, deserializer, True) + where + template = + "FETCH FORWARD $1 FROM $2" + serializer = + contramap fst (S.value (S.nonNull S.int8)) <> + contramap snd (S.value (S.nonNull S.bytea)) + + From b7cb974d895700307d311f02d57a125dd9f87a87 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 3 Nov 2015 09:22:41 +0300 Subject: [PATCH 0187/1204] Depend on "postgresql-error-codes" --- hasql-tx.cabal | 1 + library/Hasql/Tx.hs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 4fdd736f54..8ef70c8b2f 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -50,6 +50,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: + postgresql-error-codes >= 1 && < 2, postgresql-binary == 0.5.*, postgresql-libpq == 0.9.*, -- data: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index b229625fea..4e5ab0e2f0 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -4,8 +4,8 @@ where import Hasql.Tx.Prelude import qualified Hasql.Connection as Connection import qualified Hasql.Query as Query -import qualified Hasql.ErrorCodes as ErrorCodes import qualified Hasql.Tx.Queries as Queries +import qualified PostgreSQL.ErrorCodes as ErrorCodes newtype Tx a = From c9ef7eda7d64c1f85af7d4385c3ec58bdc23175e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 8 Nov 2015 21:09:42 +0300 Subject: [PATCH 0188/1204] Complete reimplementation --- CHANGELOG.md | 36 - README.md | 123 ---- Setup.hs | 42 ++ demo/Main.hs | 197 +++--- doctest/Main.hs | 66 ++ hasql.cabal | 198 +++--- hspec-postgres/Main.hs | 149 ----- hspec/Main.hs | 53 +- library/Hasql.hs | 387 ----------- library/Hasql/Commands.hs | 33 + library/Hasql/Connection.hs | 129 ++++ library/Hasql/CxRow.hs | 64 -- library/Hasql/Deserialization.hs | 732 +++++++++++++++++++++ library/Hasql/Deserialization/Array.hs | 31 + library/Hasql/Deserialization/Composite.hs | 26 + library/Hasql/Deserialization/Result.hs | 207 ++++++ library/Hasql/Deserialization/Results.hs | 76 +++ library/Hasql/Deserialization/Row.hs | 50 ++ library/Hasql/Deserialization/Value.hs | 22 + library/Hasql/IO.hs | 147 +++++ library/Hasql/PTI.hs | 93 +++ library/Hasql/Prelude.hs | 99 ++- library/Hasql/PreparedStatementRegistry.hs | 46 ++ library/Hasql/QQ.hs | 61 -- library/Hasql/QQ/Parser.hs | 65 -- library/Hasql/Query.hs | 29 + library/Hasql/Serialization.hs | 337 ++++++++++ library/Hasql/Serialization/Array.hs | 31 + library/Hasql/Serialization/Params.hs | 46 ++ library/Hasql/Serialization/Value.hs | 27 + library/Hasql/Settings.hs | 46 ++ library/Hasql/TH.hs | 80 --- 32 files changed, 2502 insertions(+), 1226 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 README.md create mode 100644 Setup.hs create mode 100644 doctest/Main.hs delete mode 100644 hspec-postgres/Main.hs delete mode 100644 library/Hasql.hs create mode 100644 library/Hasql/Commands.hs create mode 100644 library/Hasql/Connection.hs delete mode 100644 library/Hasql/CxRow.hs create mode 100644 library/Hasql/Deserialization.hs create mode 100644 library/Hasql/Deserialization/Array.hs create mode 100644 library/Hasql/Deserialization/Composite.hs create mode 100644 library/Hasql/Deserialization/Result.hs create mode 100644 library/Hasql/Deserialization/Results.hs create mode 100644 library/Hasql/Deserialization/Row.hs create mode 100644 library/Hasql/Deserialization/Value.hs create mode 100644 library/Hasql/IO.hs create mode 100644 library/Hasql/PTI.hs create mode 100644 library/Hasql/PreparedStatementRegistry.hs delete mode 100644 library/Hasql/QQ.hs delete mode 100644 library/Hasql/QQ/Parser.hs create mode 100644 library/Hasql/Query.hs create mode 100644 library/Hasql/Serialization.hs create mode 100644 library/Hasql/Serialization/Array.hs create mode 100644 library/Hasql/Serialization/Params.hs create mode 100644 library/Hasql/Serialization/Value.hs create mode 100644 library/Hasql/Settings.hs delete mode 100644 library/Hasql/TH.hs diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 8f87057596..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,36 +0,0 @@ -# 0.7.3.1 -* Attoparsec-0.13 support - -# 0.7.3 -* GHC 7.10 support - -# 0.7.2 -* Implement support for free variables by the quasi-quoter - -# 0.7.1 -* Relaxed the dependency on "monad-control" - -# 0.7.0 - Refinements and minor updates -* Streaming now is parameterized by the size of a chunk -* Introduced a new type `Ex` -* Changed the suffix of statement execution functions to `Ex` - -# 0.6.0 - Major API overhaul -* The connection pool acquisition is now explicit and is no longer handled by the `Session` monad. This should provide for a simpler integration with other libraries. -* The `Session` monad is now merely a convenience thing for providing a context to multiple transactions. One can run it as many times as he wants - it won't reestablish any resources any more. -* The connection timeout is now set using `Int` for simplicity. -* There are no exceptions any more. All the error-reporting is typed and done explicitly, using `Either`. -* The error types are now mostly backend-specific. -* The transaction mode is now extended to support uncommittable transactions with the `TxWriteMode` type. -* All `Tx` functions are now appended with a "Tx" suffix. -* Added `vectorTx` and `maybeTx` and updated the semantics of `singleTx`. -* `q` statement quasi-quoter is now renamed to more meaningful `stmt`. -* The `Statement` type is renamed to `Stmt` and is now exported from the main API. -* `RowParser` is now uninstantiable. This enforces the idiomatic usage of the library. -* Statement templates now support UTF-8. - -# 0.5.0 -* Update the "list-t" and "monad-control" deps - -# 0.4.1 -* Fix the transaction conflicts bug diff --git a/README.md b/README.md deleted file mode 100644 index 277c69016e..0000000000 --- a/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# Hasql [![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) - - -Hasql provides a robust and concise yet powerful API for communication with arbitrary relational databases using SQL. - -Currently the only backend available is for PostgreSQL ([which can yield great performance improvements](https://nikita-volkov.github.io/hasql-benchmarks/) over HDBC or postgresql-simple). - -The code used here file is the [demo found in the repository](https://github.com/nikita-volkov/hasql/blob/master/demo/Main.hs) - -## Openning a connection - -For greater convenience the Hasql has a built-in connection pool. All interactions with the database backend are done within the context of such a pool. - -So we have functions to create a pool and one to release all resources held by the pool: - -```haskell -H.acquirePool - :: Hasql.Backend.Cx c => - Hasql.Backend.CxSettings c -> H.PoolSettings -> IO (H.Pool c) -``` - -and - -```haskell -H.releasePool :: H.Pool c -> IO () -``` - -To create the pool we need to pass the connection settings (which are backend dependent) and the pool settings. The code sample below will open a connection to a PostgreSQL database. - -```haskell -{-# LANGUAGE QuasiQuotes, ScopedTypeVariables, OverloadedStrings #-} - --- Import the API from the "hasql" library -import qualified Hasql as H - --- Import the backend API from the "hasql-postgres" library -import qualified Hasql.Postgres as HP -let postgresSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" - --- Prepare the pool settings with a smart constructor, --- which checks the inputted values on correctness. --- Set the connection pool size to 6 and the timeout to 30 seconds. -poolSettings <- maybe (fail "Improper session settings") return $ - H.poolSettings 6 30 - --- Acquire the database connections pool. --- Gotta help the compiler with the type signature of the pool a bit. -pool :: H.Pool HP.Postgres - <- H.acquirePool postgresSettings poolSettings -``` - -## Executing a statement - -To execute statements we will use a ```Session```, which is just a wrapper for the ```ReaderT``` monad. -This allow us to use the pool for all our session sub-computations. - -So the ```session``` function, is a wrapper for the ```runReaderT```, and besides a parameter with the pool, -we need to pass a function with the return type in ```H.Session``` monad. And as the return we get -either a ```SessionError``` or the result of our function. - -The function we will use to actually execute the transactions is the ```tx``` -which conveniently enough receives a transaction mode, the transactions we want to execute (along with their session context) -and returns the type ```H.Session c m r```. - -It is **important** to notice that running ```IO``` in ```Tx``` is prohibited. - -let's take a look at the signatures proceding: - -```haskell -H.session - :: H.Pool c -> H.Session c m a -> m (Either (H.SessionError c) a) - -H.tx - :: (Control.Monad.Trans.Control.MonadBaseControl IO m, - Hasql.Backend.CxTx c) => - H.TxMode -> (forall s. H.Tx c s r) -> H.Session c m r -``` - -The following code excerpt shows us how the demo code uses these functions to open a -session and start a transaction to create a new table: - -```haskell --- Provide a context for execution of transactions. --- 'Session' is merely a convenience wrapper around 'ReaderT'. -H.session pool $ do - - -- Execute a group of statements without any locking and ACID guarantees: - H.tx Nothing $ do - H.unitEx [H.stmt|DROP TABLE IF EXISTS a|] - H.unitEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] -``` - -## Transactions (isolation levels and transaction modes) - -You have probably noticed that the first parameter of ```tx``` belongs to the type ```TxMode```. -This parameter deserves some consideration, for it will determine the behaviour of our transaction. -Let's take a look at its type definition: - -```haskell -type TxMode = Maybe (TxIsolationLevel, TxWriteMode) - -data TxIsolationLevel = - RepeatableReads | - Serializable | - ReadCommitted | - ReadUncommitted - -type TxWriteMode = Maybe Bool -``` - -So when the ```mode``` is ```Nothing```, no transaction is explicitly estabilished on the server. -In PostgreSQL's case this means all commands be commited immediatly after execution -and their isolation level will be *Read Committed*. - -If we pass the tuple, the first element will be the transaction isolation level, you can read more about -[transaction isolation levels on wikipedia](https://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels). - -The second element is the write mode, which will be interpreted as: - - * ```Nothing``` indicates a "read" mode. - * ```Just True``` indicates a "write" mode. - * ```Just False``` indicates a "write" mode without committing (can be useful for testing purposes). - diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 0000000000..c103c01099 --- /dev/null +++ b/Setup.hs @@ -0,0 +1,42 @@ +-- The code is mostly ripped from +-- https://github.com/ekmett/lens/blob/697582fb9a980f273dbf8496253c5bbefedd0a8b/Setup.lhs +import Data.List ( nub ) +import Data.Version ( showVersion ) +import Distribution.Package ( PackageName(PackageName), Package, PackageId, InstalledPackageId, packageVersion, packageName ) +import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) ) +import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks ) +import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose, copyFiles ) +import Distribution.Simple.BuildPaths ( autogenModulesDir ) +import Distribution.Simple.Setup ( BuildFlags(buildVerbosity), Flag(..), fromFlag, HaddockFlags(haddockDistPref)) +import Distribution.Simple.LocalBuildInfo ( withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps) ) +import Distribution.Text ( display ) +import Distribution.Verbosity ( Verbosity, normal ) +import System.FilePath ( () ) + +main :: IO () +main = defaultMainWithHooks simpleUserHooks + { buildHook = \pkg lbi hooks flags -> do + generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi + buildHook simpleUserHooks pkg lbi hooks flags + } + +generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO () +generateBuildModule verbosity pkg lbi = do + let dir = autogenModulesDir lbi + createDirectoryIfMissingVerbose verbosity True dir + withLibLBI pkg lbi $ \_ libcfg -> do + withTestLBI pkg lbi $ \suite suitecfg -> do + rewriteFile (dir "Build_" ++ testName suite ++ ".hs") $ unlines + [ "module Build_" ++ testName suite ++ " where" + , "import Prelude" + , "deps :: [String]" + , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg)) + ] + where + formatdeps = map (formatone . snd) + formatone p = case packageName p of + PackageName n -> n ++ "-" ++ showVersion (packageVersion p) + +testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)] +testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys + diff --git a/demo/Main.hs b/demo/Main.hs index 1ba5660bcc..2202a985e2 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -1,77 +1,122 @@ --- You can execute this file with 'cabal bench demo'. -{-# LANGUAGE QuasiQuotes, ScopedTypeVariables, OverloadedStrings #-} - -import Control.Monad hiding (forM_, mapM_, forM, mapM) -import Control.Monad.IO.Class -import Control.Monad.Trans.Class -import Control.Monad.Trans.Maybe -import Data.Functor.Identity -import Data.Foldable - --- Import the API from the "hasql" library -import qualified Hasql as H - --- Import the backend API from the "hasql-postgres" library -import qualified Hasql.Postgres as HP - - -main = do - - let postgresSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" - - -- Prepare the pool settings with a smart constructor, - -- which checks the inputted values on correctness. - -- Set the connection pool size to 6 and the timeout to 30 seconds. - poolSettings <- maybe (fail "Improper session settings") return $ - H.poolSettings 6 30 - - -- Acquire the database connections pool. - -- Gotta help the compiler with the type signature of the pool a bit. - pool :: H.Pool HP.Postgres - <- H.acquirePool postgresSettings poolSettings - - -- Provide a context for execution of transactions. - -- 'Session' is merely a convenience wrapper around 'ReaderT'. - H.session pool $ do - - -- Execute a group of statements without any locking and ACID guarantees: - H.tx Nothing $ do - H.unitEx [H.stmt|DROP TABLE IF EXISTS a|] - H.unitEx [H.stmt|CREATE TABLE a (id SERIAL NOT NULL, balance INT8, PRIMARY KEY (id))|] - -- Insert three rows: - replicateM_ 3 $ do - H.unitEx [H.stmt|INSERT INTO a (balance) VALUES (0)|] - - -- Declare a list of transfer settings, which we'll later use. - -- The tuple structure is: - -- @(withdrawalAccountID, arrivalAccountID, amount)@ - let transfers :: [(Int, Int, Int)] = - [(1, 2, 20), (2, 1, 30), (2, 3, 100)] - - forM_ transfers $ \(id1, id2, amount) -> do - -- Run a transaction with ACID guarantees. - -- Hasql will automatically roll it back and retry it in case of conflicts. - H.tx (Just (H.Serializable, (Just True))) $ do - -- Use MaybeT to handle empty results: - runMaybeT $ do - -- To distinguish results rows containing just one column, - -- we use 'Identity' as a sort of a single element tuple. - Identity balance1 <- MaybeT $ H.maybeEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id1 - Identity balance2 <- MaybeT $ H.maybeEx $ [H.stmt|SELECT balance FROM a WHERE id=?|] id2 - lift $ H.unitEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance1 - amount) id1 - lift $ H.unitEx $ [H.stmt|UPDATE a SET balance=? WHERE id=?|] (balance2 + amount) id2 - - -- Output all the updated rows: - do - -- Unfortunately in this case there's no way to infer the type of the results, - -- so we need to specify it explicitly: - rows <- H.tx Nothing $ H.vectorEx $ [H.stmt|SELECT * FROM a|] - forM_ rows $ \(id :: Int, amount :: Int) -> do - liftIO $ putStrLn $ "ID: " ++ show id ++ ", Amount: " ++ show amount - - -- Release all previously acquired resources. Just for fun. - H.releasePool pool - - - +module Main where + +import BasePrelude hiding (assert, isRight, isLeft) +import Data.Text (Text) +import Data.ByteString (ByteString) +import Data.Functor.Contravariant +import Data.Default.Class +import Contravariant.Extras +import qualified Hasql.Query as Query; +import qualified Hasql.Serialization as S +import qualified Hasql.Deserialization as D +import qualified Hasql.Connection as Connection + + +main = + do + connectionEither <- Connection.acquire settings + case connectionEither of + Left e -> print e + Right connection -> do + result <- Connection.executeParametricQuery connection sumParametricQuery (1, 2) + print result + where + settings = + Connection.ParametricSettings "localhost" 5432 "postgres" "" "postgres" + sumParametricQuery = + (,,,) template serializer deserializer True + where + template = + "SELECT $1 + $2" + serializer = + contramap fst (S.value S.int8) <> + contramap snd (S.value S.int8) + deserializer = + D.result (D.singleRow (D.value D.int8)) + + + +-- * Model +------------------------- + + +data Account = + Account { + email :: Text , + password :: ByteString , + firstName :: Text , + lastName :: Text + } + + +-- * Queries +------------------------- + + +updateMenu :: Query.ParametricQuery (Text, Int64) Int64 +updateMenu = + (,,,) template serializer deserializer True + where + template = + "UPDATE menu SET title = $1 WHERE id = $2" + serializer = + contrazip2 (S.value S.text) + (S.value S.int8) + deserializer = + D.result (D.rowsAffected) + +accountByEmail :: Query.ParametricQuery Text (Maybe (Int64, Account)) +accountByEmail = + (,,,) template serializer deserializer True + where + template = + "SELECT id, email, password, first_name, last_name \ + \FROM account WHERE email = $1" + serializer = + S.value S.text + deserializer = + D.result (D.maybeRow (identifiedDeserializer accountDeserializer)) + +insertAccount :: Query.ParametricQuery Account Int64 +insertAccount = + (,,,) template serializer deserializer True + where + template = + "INSERT INTO account (email, password, first_name, last_name) \ + \VALUES ($1, $2, $3, $4) \ + \RETURNING id" + serializer = + accountSerializer + deserializer = + D.result (D.singleRow idDeserializer) + + +-- * Deserializers +------------------------- + + +idDeserializer :: D.Row Int64 +idDeserializer = + D.value D.int8 + +accountDeserializer :: D.Row Account +accountDeserializer = + liftM4 Account (D.value def) (D.value def) (D.value def) (D.value def) + +identifiedDeserializer :: D.Row a -> D.Row ( Int64 , a ) +identifiedDeserializer aDeserializer = + liftM2 (,) idDeserializer aDeserializer + + +-- * Serializers +------------------------- + + +accountSerializer :: S.Params Account +accountSerializer = + contramap (\(Account a b c d) -> (a, b, c, d)) $ + contrazip4 (S.value S.text) + (S.value S.bytea) + (S.value S.text) + (S.value S.text) diff --git a/doctest/Main.hs b/doctest/Main.hs new file mode 100644 index 0000000000..11e3bd850b --- /dev/null +++ b/doctest/Main.hs @@ -0,0 +1,66 @@ +-- The code is mostly ripped from +-- https://github.com/ekmett/lens/blob/d1d97469f0e93c1d3535308954a060e8a04e37aa/tests/doctests.hsc +import BasePrelude +import System.Directory +import System.FilePath +import Test.DocTest +import Build_doctest (deps) + +main :: IO () +main = do + sources <- getSources + doctest $ dfltParams ++ map ("-package="++) deps ++ sources + where + dfltParams = + [ + "-isrc", + "-idist/build/autogen", + "-optP-include", + "-optPdist/build/autogen/cabal_macros.h", + "-XArrows", + "-XBangPatterns", + "-XConstraintKinds", + "-XDataKinds", + "-XDefaultSignatures", + "-XDeriveDataTypeable", + "-XDeriveFunctor", + "-XDeriveGeneric", + "-XEmptyDataDecls", + "-XFlexibleContexts", + "-XFlexibleInstances", + "-XFunctionalDependencies", + "-XGADTs", + "-XGeneralizedNewtypeDeriving", + "-XImpredicativeTypes", + "-XLambdaCase", + "-XLiberalTypeSynonyms", + "-XMultiParamTypeClasses", + "-XMultiWayIf", + "-XNoImplicitPrelude", + "-XNoMonomorphismRestriction", + "-XOverloadedStrings", + "-XPatternGuards", + "-XParallelListComp", + "-XQuasiQuotes", + "-XRankNTypes", + "-XRecordWildCards", + "-XScopedTypeVariables", + "-XStandaloneDeriving", + "-XTemplateHaskell", + "-XTupleSections", + "-XTypeFamilies", + "-XTypeOperators", + "-hide-all-packages" + ] + +getSources :: IO [FilePath] +getSources = filter (isSuffixOf ".hs") <$> go "library" + where + go dir = do + (dirs, files) <- getFilesAndDirectories dir + (files ++) . concat <$> mapM go dirs + +getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath]) +getFilesAndDirectories dir = do + c <- map (dir ) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir + (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c diff --git a/hasql.cabal b/hasql.cabal index 1006c73168..94e69ed78a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,53 +1,13 @@ name: hasql version: - 0.7.4 + 1 +category: + Hasql, Database, PostgreSQL synopsis: - A minimalistic general high level API for relational databases + A very efficient PostgreSQL driver and a flexible mapping API description: - A robust and concise yet powerful API for communication with arbitrary - relational databases using SQL. - . - Features: - . - * Concise and crisp API. Just a few functions and two monads doing all the - boilerplate job for you. - . - * A powerful transaction abstraction, which provides - an automated resolution of conflicts. - The API ensures that you're only able to perform a specific - set of actions in the transaction context, - which allows Hasql to safely resolve conflicting transactions - by automatically retrying them. - This is much inspired by STM and ST. - . - * Support for cursors. Allows to fetch virtually limitless result sets in a - constant memory using streaming. - . - * Employment of prepared statements. - Every statement you emit gets prepared and cached. - This raises the performance of the backend. - . - * Automated management of resources related to connections, transactions and - cursors. - . - * A built-in connection pool. - . - * Compile-time generation of templates. You just can't write a statement with an - incorrect number of placeholders. - . - * Ability to map to any types actually supported by the backend. - . - Links: - . - * . - . - * . - . - * . - . -category: - Database + This package is the root of the \"hasql\" ecosystem. homepage: https://github.com/nikita-volkov/hasql bug-reports: @@ -63,11 +23,9 @@ license: license-file: LICENSE build-type: - Simple + Custom cabal-version: >=1.10 -extra-source-files: - CHANGELOG.md source-repository head @@ -81,123 +39,127 @@ library hs-source-dirs: library ghc-options: - -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: Hasql.Prelude - Hasql.QQ.Parser - Hasql.CxRow - Hasql.TH - Hasql.QQ + Hasql.PTI + Hasql.IO + Hasql.Settings + Hasql.Commands + Hasql.Deserialization.Array + Hasql.Deserialization.Composite + Hasql.Deserialization.Value + Hasql.Deserialization.Row + Hasql.Deserialization.Result + Hasql.Deserialization.Results + Hasql.Serialization.Array + Hasql.Serialization.Value + Hasql.Serialization.Params + Hasql.PreparedStatementRegistry exposed-modules: - Hasql + Hasql.Query + Hasql.Deserialization + Hasql.Serialization + Hasql.Connection build-depends: - -- - resource-pool == 0.2.*, - hasql-backend == 0.4.*, - -- - template-haskell >= 2.8 && < 2.11, - -- + -- parsing: attoparsec >= 0.10 && < 0.14, - -- - vector < 0.12, - text >= 1.0 && < 1.3, - -- - either >= 4.3 && < 5, - list-t >= 0.3.1 && < 0.5, - mmorph == 1.0.*, - mtl >= 2.1 && < 2.3, - monad-control >= 0.3 && < 1.1, - transformers-base == 0.4.*, + -- database: + postgresql-binary >= 0.7.2 && < 0.8, + postgresql-libpq == 0.9.*, + -- data: + dlist >= 0.7 && < 0.8, + aeson >= 0.7 && < 0.11, + uuid == 1.3.*, + vector >= 0.10 && < 0.12, + time >= 1.4 && < 1.6, + hashtables >= 1.1 && < 1.3, + scientific >= 0.2 && < 0.4, + text >= 1 && < 1.3, + bytestring >= 0.10 && < 0.11, + hashable >= 1.2 && < 1.3, + -- control: + data-default-class >= 0.0.1 && < 0.1, + profunctors >= 5.1 && < 6, + contravariant-extras == 0.1.*, + contravariant >= 1.3 && < 2, + either >= 4.4.1 && < 5, transformers >= 0.3 && < 0.5, - base-prelude >= 0.1.3 && < 0.2, - base >= 4.6 && < 4.9 + -- errors: + loch-th == 0.2.*, + placeholders == 0.1.*, + -- general: + base-prelude >= 0.1.19 && < 0.2, + base >= 4.6 && < 5 -test-suite hspec - type: +test-suite doctest + type: exitcode-stdio-1.0 - hs-source-dirs: - hspec - main-is: + hs-source-dirs: + doctest + main-is: Main.hs ghc-options: -threaded "-with-rtsopts=-N" - -funbox-strict-fields + build-depends: + doctest == 0.10.*, + directory == 1.2.*, + filepath >= 1.3 && < 1.5, + base-prelude >= 0.1.19 && < 0.2, + base default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 - build-depends: - -- - hasql, - hasql-backend, - -- - hspec == 2.1.*, - -- - vector, - -- - mtl-prelude < 3, - base-prelude -test-suite hspec-postgres +test-suite hspec type: exitcode-stdio-1.0 hs-source-dirs: - hspec-postgres + hspec main-is: Main.hs ghc-options: -threaded "-with-rtsopts=-N" - -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: - -- + -- database: hasql, - hasql-postgres == 0.10.*, - -- - slave-thread == 0.1.*, - -- - hspec == 2.1.*, - -- - text, - -- - monad-control, - either, - mtl-prelude < 3, - base-prelude + -- testing: + hspec >= 2.2.0 && < 2.3, + quickcheck-instances >= 0.3.11 && < 0.4, + QuickCheck >= 2.8.1 && < 2.9, + -- general: + base-prelude >= 0.1.19 && < 0.2 --- Well, it's not a benchmark actually, --- but in Cabal there's no better way to specify an executable, --- which is not intended for distribution. -benchmark demo - type: - exitcode-stdio-1.0 +executable demo hs-source-dirs: demo main-is: Main.hs ghc-options: - -O2 -threaded "-with-rtsopts=-N" - -funbox-strict-fields + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: + data-default-class, + contravariant-extras, + contravariant, hasql, - hasql-postgres == 0.10.*, - transformers >= 0.3 && < 0.5, - base - - + text, + bytestring, + base-prelude diff --git a/hspec-postgres/Main.hs b/hspec-postgres/Main.hs deleted file mode 100644 index d643a06921..0000000000 --- a/hspec-postgres/Main.hs +++ /dev/null @@ -1,149 +0,0 @@ -import BasePrelude -import MTLPrelude -import Control.Monad.Trans.Either -import Control.Monad.Trans.Control -import Test.Hspec -import Data.Text (Text) -import qualified Hasql as H -import qualified Hasql.Postgres as HP -import qualified SlaveThread - - -main = - hspec $ do - - context "Multivalue clauses" $ do - -- See http://www.postgresql.org/docs/current/interactive/functions-comparisons.html - - it "contains" $ do - flip shouldBe (Right True) =<< do - session $ - fmap runIdentity $ H.tx Nothing $ H.singleEx $ [H.stmt|SELECT 2 = ANY (?)|] [1,2,3 :: Int] - - it "contains not" $ do - flip shouldBe (Right False) =<< do - session $ - fmap runIdentity $ H.tx Nothing $ H.singleEx $ [H.stmt|SELECT 2 != ALL (?)|] [1,2,3 :: Int] - - context "Tx" $ do - - it "does not commit if in uncommitting mode" $ do - flip shouldBe (Right (Nothing :: Maybe (Identity Int))) =<< do - session $ do - H.tx Nothing $ do - H.unitEx $ [H.stmt|DROP TABLE IF EXISTS a|] - H.unitEx $ [H.stmt|CREATE TABLE a (x INT8 NOT NULL, PRIMARY KEY (x))|] - H.tx (Just (H.Serializable, Just False)) $ do - H.unitEx $ [H.stmt|INSERT INTO a (x) VALUES (2)|] - H.tx Nothing $ do - H.maybeEx $ [H.stmt|SELECT x FROM a WHERE x = 2|] - - context "UTF-8 templates" $ do - - it "encode properly" $ do - flip shouldBe (Right (Just (Identity ("Ёжик" :: Text)))) =<< do - session $ H.tx Nothing $ H.maybeEx $ [H.stmt| SELECT 'Ёжик' |] - - context "Bug" $ do - - context "Unhandled transaction conflict" $ do - - it "should not be" $ do - session $ H.tx Nothing $ do - H.unitEx [H.stmt|DROP TABLE IF EXISTS artist|] - H.unitEx [H.stmt|DROP TABLE IF EXISTS artist_union|] - H.unitEx $ - [H.stmt| - CREATE TABLE "artist_union" ( - "id" BIGSERIAL, - PRIMARY KEY ("id") - ) - |] - H.unitEx $ - [H.stmt| - CREATE TABLE "artist" ( - "id" BIGSERIAL, - "artist_union_id" INT8 NOT NULL, - "names" TEXT[] NOT NULL, - PRIMARY KEY ("id"), - FOREIGN KEY ("artist_union_id") REFERENCES "artist_union" ("id") ON DELETE CASCADE - ) - |] - (signal, block) <- newBatchGate 6 - let - insertArtistUnion :: H.Tx HP.Postgres s Int64 - insertArtistUnion = - fmap (runIdentity . fromJust) $ H.maybeEx $ - [H.stmt| - INSERT INTO artist_union DEFAULT VALUES RETURNING id - |] - insertArtist :: Int64 -> [Text] -> H.Tx HP.Postgres s Int64 - insertArtist unionID artistNames = - fmap (runIdentity . fromJust) $ H.maybeEx $ - [H.stmt| - INSERT INTO artist - (artist_union_id, - names) - VALUES (?, ?) - RETURNING id - |] - unionID - artistNames - process = - SlaveThread.fork $ do - session $ replicateM_ 100 $ do - H.tx (Just (H.Serializable, Just True)) $ do - unionID <- insertArtistUnion - insertArtist unionID ["a", "b", "c"] - signal - replicateM_ 6 process - block - - context "CxRow" $ do - - it "should fail on incorrect arity" $ do - flip shouldSatisfy (\case Left (H.ResultError _) -> True; _ -> False) =<< do - session $ do - H.tx Nothing $ do - H.unitEx [H.stmt|DROP TABLE IF EXISTS data|] - H.unitEx [H.stmt|CREATE TABLE data ( - field1 DECIMAL NOT NULL, - field2 BIGINT NOT NULL, - PRIMARY KEY (field1) - )|] - H.unitEx [H.stmt|INSERT INTO data (field1, field2) VALUES (0, 0)|] - mrow :: Maybe (Double, Int64, String) <- - H.tx Nothing $ - H.maybeEx $ [H.stmt|SELECT * FROM data|] - return () - - --- * Helpers -------------------------- - -newBatchGate :: Int -> IO (IO (), IO ()) -newBatchGate amount = - do - counter <- atomically $ newTVar amount - return $ - let signal = atomically $ readTVar counter >>= writeTVar counter . pred - block = atomically $ readTVar counter >>= \x -> when (x > 0) retry - in (signal, block) - - --- * Hasql utils -------------------------- - -type Session m = - H.Session HP.Postgres m - -session :: MonadBaseControl IO m => Session m r -> m (Either (H.SessionError HP.Postgres) r) -session m = - control $ \unlift -> do - p <- H.acquirePool backendSettings poolSettings - r <- unlift $ H.session p m - H.releasePool p - return r - where - backendSettings = HP.ParamSettings "localhost" 5432 "postgres" "" "postgres" - poolSettings = fromJust $ H.poolSettings 6 30 diff --git a/hspec/Main.hs b/hspec/Main.hs index e80f3afeb0..9c93f130c5 100644 --- a/hspec/Main.hs +++ b/hspec/Main.hs @@ -1,51 +1,10 @@ -import BasePrelude -import Test.Hspec -import qualified Hasql as H -import qualified Hasql.Backend as HB -import qualified Data.Vector as V - - -data X +module Main where -data instance HB.StmtParam X = - StmtParam String - deriving (Eq, Show) - -deriving instance Show (HB.Stmt X) -deriving instance Eq (HB.Stmt X) +import BasePrelude hiding (assert, isRight, isLeft) +import Test.Hspec +import Test.QuickCheck +import Test.QuickCheck.Instances -instance HB.CxValue X Char where - encodeValue = StmtParam . show main = - hspec $ do - context "Quasi quoter" $ do - it "supports free variables" $ do - let a = 'a' - b = 'b' - in - (flip shouldBe) - (HB.Stmt "SELECT (? + ?)" (V.fromList [HB.encodeValue a, HB.encodeValue b]) True) - ([H.stmt| SELECT ($a + $b) |] :: HB.Stmt X) - it "supports ordered placeholders" $ do - (flip shouldBe) - (HB.Stmt "SELECT (? + ?)" (V.fromList [HB.encodeValue 'a', HB.encodeValue 'b']) True) - ([H.stmt| SELECT (? + ?) |] 'a' 'b' :: HB.Stmt X) - it "does not drop quotes" $ do - let - HB.Stmt t _ _ = - [H.stmt| SELECT "a", 'b' |] - (flip shouldBe) - "SELECT \"a\", 'b'" - t - it "cleans whitespace" $ do - let - HB.Stmt t _ _ = - [H.stmt| CREATE TABLE data ( - field1 DECIMAL NOT NULL, - field2 BIGINT NOT NULL, - PRIMARY KEY (field1) - ) |] - (flip shouldBe) - "CREATE TABLE data ( field1 DECIMAL NOT NULL, field2 BIGINT NOT NULL, PRIMARY KEY (field1) )" - t + error "TODO" diff --git a/library/Hasql.hs b/library/Hasql.hs deleted file mode 100644 index 3eeac825dc..0000000000 --- a/library/Hasql.hs +++ /dev/null @@ -1,387 +0,0 @@ -{-# LANGUAGE UndecidableInstances, CPP #-} --- | --- This is the API of the \"hasql\" library. --- For an introduction to the package --- and links to more documentation please refer to --- <../ the package's index page>. --- --- This API is completely disinfected from exceptions. --- All error-reporting is explicit and --- is presented using the 'Either' type. -module Hasql -( - -- * Pool - Pool, - acquirePool, - releasePool, - - -- ** Pool Settings - PoolSettings, - poolSettings, - - -- * Session - Session, - session, - - -- ** Session Error - SessionError(..), - - -- * Statement - Bknd.Stmt, - QQ.stmt, - - -- * Statement Execution - Ex, - unitEx, - countEx, - singleEx, - maybeEx, - listEx, - vectorEx, - streamEx, - - -- * Transaction - Tx, - tx, - - -- ** Transaction Settings - Bknd.TxMode(..), - Bknd.TxIsolationLevel(..), - Bknd.TxWriteMode(..), - - -- ** Result Stream - TxStream, - TxStreamListT, - - -- * Row Parser - CxRow.CxRow, -) -where - -import Hasql.Prelude -import qualified Hasql.Backend as Bknd -import qualified Hasql.CxRow as CxRow -import qualified Hasql.QQ as QQ -import qualified ListT -import qualified Data.Pool as Pool -import qualified Data.Vector as Vector -import qualified Data.Vector.Mutable as MVector -import qualified Language.Haskell.TH.Syntax as TH - - --- * Resources -------------------------- - --- | --- A connection pool. -newtype Pool c = - Pool (Pool.Pool (Either (Bknd.CxError c) c)) - --- | --- Given backend-specific connection settings and pool settings, --- acquire a backend connection pool, --- which can then be used to work with the DB. --- --- When combining Hasql with other libraries, --- which throw exceptions it makes sence to utilize --- @Control.Exception.'bracket'@ --- like this: --- --- >bracket (acquirePool bkndStngs poolStngs) (releasePool) $ \pool -> do --- > session pool $ do --- > ... --- > ... any other IO code -acquirePool :: Bknd.Cx c => Bknd.CxSettings c -> PoolSettings -> IO (Pool c) -acquirePool cxSettings (PoolSettings size timeout) = - fmap Pool $ - Pool.createPool (Bknd.acquireCx cxSettings) - (either (const $ return ()) Bknd.releaseCx) - (1) - (fromIntegral timeout) - (size) - --- | --- Release all connections acquired by the pool. -releasePool :: Pool c -> IO () -releasePool (Pool p) = - Pool.destroyAllResources p - - --- ** Pool Settings -------------------------- - --- | --- Settings of a pool. -data PoolSettings = - PoolSettings !Int !Int - deriving (Show) - -instance TH.Lift PoolSettings where - lift (PoolSettings a b) = - [|PoolSettings a b|] - - --- | --- A smart constructor for pool settings. -poolSettings :: - Int - -- ^ - -- The maximum number of connections to keep open. - -- The smallest acceptable value is 1. - -- Requests for connections will block if this limit is reached. - -> - Int - -- ^ - -- The amount of seconds for which an unused connection is kept open. - -- The smallest acceptable value is 1. - -> - Maybe PoolSettings - -- ^ - -- Maybe pool settings, if they are correct. -poolSettings size timeout = - if size > 0 && timeout >= 1 - then Just $ PoolSettings size timeout - else Nothing - - --- * Session -------------------------- - --- | --- A convenience wrapper around 'ReaderT', --- which provides a shared context for execution and error-handling of transactions. -newtype Session c m r = - Session (ReaderT (Pool c) (EitherT (SessionError c) m) r) - deriving (Functor, Applicative, Monad, MonadIO, MonadError (SessionError c)) - -instance MonadTrans (Session c) where - lift = Session . lift . lift - -deriving instance MonadBase IO m => MonadBase IO (Session c m) - -instance MFunctor (Session c) where - hoist f (Session m) = - Session $ ReaderT $ \e -> - EitherT $ f $ runEitherT $ flip runReaderT e $ m - - -#if MIN_VERSION_monad_control(1,0,0) - -instance MonadTransControl (Session c) where - type StT (Session c) a = Either (SessionError c) a - liftWith onUnlift = - Session $ ReaderT $ \e -> - lift $ onUnlift $ \(Session m) -> - runEitherT $ flip runReaderT e $ m - restoreT = - Session . ReaderT . const . EitherT - -instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where - type StM (Session c m) a = ComposeSt (Session c) m a - liftBaseWith = defaultLiftBaseWith - restoreM = defaultRestoreM - -#else - -instance MonadTransControl (Session c) where - newtype StT (Session c) a = - SessionStT (Either (SessionError c) a) - liftWith onUnlift = - Session $ ReaderT $ \e -> - lift $ onUnlift $ \(Session m) -> - liftM SessionStT $ runEitherT $ flip runReaderT e $ m - restoreT = - Session . ReaderT . const . EitherT . liftM (\(SessionStT a) -> a) - -instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where - newtype StM (Session c m) a = - SessionStM (ComposeSt (Session c) m a) - liftBaseWith = - defaultLiftBaseWith SessionStM - restoreM = - defaultRestoreM $ \(SessionStM a) -> a - -#endif - --- | --- Execute a session using an established connection pool. --- --- This is merely a wrapper around 'runReaderT', --- so you can run it around every transaction, --- if you want. -session :: Pool c -> Session c m a -> m (Either (SessionError c) a) -session pool m = - runEitherT $ flip runReaderT pool $ case m of Session m -> m - - --- * Transaction -------------------------- - --- | --- A transaction specialized for a backend connection @c@, --- associated with its intermediate results using an anonymous type-argument @s@ (same trick as in 'ST') --- and producing a result @r@. --- --- Running `IO` in `Tx` is prohibited. --- The motivation is identical to `STM`: --- the `Tx` block may get executed multiple times if any transaction conflicts arise. --- This will result in your effectful `IO` code being executed --- an unpredictable amount of times as well, --- which, chances are, is not what you want. -newtype Tx c s r = - Tx { unwrapTx :: EitherT (SessionError c) (Bknd.Tx c) r } - deriving (Functor, Applicative, Monad) - - -data SessionError c = - -- | - -- A backend-specific connection acquisition error. - -- E.g., a failure to establish a connection. - CxError (Bknd.CxError c) | - -- | - -- A backend-specific transaction error. - -- It should cover all possible failures related to an established connection, - -- including the loss of connection, query errors and database failures. - TxError (Bknd.TxError c) | - -- | - -- Attempt to parse a result into an incompatible type. - -- Indicates either a mismatching schema or an incorrect query. - ResultError Text - -deriving instance (Show (Bknd.CxError c), Show (Bknd.TxError c)) => Show (SessionError c) -deriving instance (Eq (Bknd.CxError c), Eq (Bknd.TxError c)) => Eq (SessionError c) - --- | --- Execute a transaction in a session. --- --- This function ensures on the type level, --- that it's impossible to return @'TxStreamListT' s m r@ from it. -tx :: (Bknd.CxTx c, MonadBaseControl IO m) => Bknd.TxMode -> (forall s. Tx c s r) -> Session c m r -tx mode (Tx m) = - Session $ ReaderT $ \(Pool pool) -> - Pool.withResource pool $ \e -> do - c <- hoistEither $ mapLeft CxError e - let - attempt = - do - r <- EitherT $ liftBase $ fmap (either (Left . TxError) Right) $ - Bknd.runTx c mode $ runEitherT m - maybe attempt hoistEither r - in attempt - - --- * Statements execution -------------------------- - --- | --- Statement executor. --- --- Just an alias to a function, which executes a statement in 'Tx'. -type Ex c s r = - Bknd.Stmt c -> Tx c s r - --- | --- Execute a statement without processing the result. -unitEx :: Ex c s () -unitEx = - Tx . lift . Bknd.unitTx - --- | --- Execute a statement and count the amount of affected rows. --- Useful for resolving how many rows were updated or deleted. -countEx :: Bknd.CxValue c Word64 => Ex c s Word64 -countEx = - Tx . lift . Bknd.countTx - --- | --- Execute a statement, --- which produces exactly one result row. --- E.g., @INSERT@, which returns an autoincremented identifier, --- or @SELECT COUNT@, or @SELECT EXISTS@. --- --- Please note that using this executor for selecting rows is conceptually wrong, --- since in that case the results are always optional. --- Use 'maybeEx', 'listEx' or 'vectorEx' instead. --- --- If the result is empty this executor will raise 'ResultError'. -singleEx :: CxRow.CxRow c r => Ex c s r -singleEx = - join . fmap (maybe (Tx $ left $ ResultError "No rows on 'singleEx'") return) . - maybeEx - --- | --- Execute a statement, --- which optionally produces a single result row. -maybeEx :: CxRow.CxRow c r => Ex c s (Maybe r) -maybeEx = - fmap (fmap Vector.unsafeHead . mfilter (not . Vector.null) . Just) . vectorEx - --- | --- Execute a statement, --- and produce a list of results. -listEx :: CxRow.CxRow c r => Ex c s [r] -listEx = - fmap toList . vectorEx - --- | --- Execute a statement, --- and produce a vector of results. -vectorEx :: CxRow.CxRow c r => Ex c s (Vector r) -vectorEx s = - Tx $ do - r <- lift $ Bknd.vectorTx s - EitherT $ return $ traverse ((mapLeft ResultError) . CxRow.parseRow) $ r - --- | --- Given a batch size, execute a statement with a cursor, --- and produce a result stream. --- --- The cursor allows you to fetch virtually limitless results in a constant memory --- at a cost of a small overhead. --- --- The batch size parameter controls how many rows will be fetched --- during every roundtrip to the database. --- A minimum value of 256 seems to be sane. --- --- Note that in most databases cursors require establishing a database transaction, --- so depending on a backend the transaction may result in an error, --- if you run it improperly. -streamEx :: CxRow.CxRow c r => Int -> Ex c s (TxStream c s r) -streamEx n s = - Tx $ do - r <- lift $ Bknd.streamTx n s - return $ TxStreamListT $ do - row <- hoist (Tx . lift) r - lift $ Tx $ EitherT $ return $ mapLeft ResultError $ CxRow.parseRow $ row - - --- * Result Stream -------------------------- - --- | --- A stream of results, --- which fetches approximately only those that you reach. -type TxStream c s = - TxStreamListT s (Tx c s) - --- | --- A wrapper around 'ListT.ListT', --- which uses the same trick as the 'ST' monad to associate with the --- context monad and become impossible to be returned from it, --- using the anonymous type parameter @s@. --- This lets the library ensure that it is safe to automatically --- release all the connections associated with this stream. --- --- All the functions of the \"list-t\" library are applicable to this type, --- amongst which are 'ListT.head', 'ListT.toList', 'ListT.fold', 'ListT.traverse_'. -newtype TxStreamListT s m r = - TxStreamListT (ListT.ListT m r) - deriving (Functor, Applicative, Alternative, Monad, MonadTrans, MonadPlus, - Monoid, ListT.MonadCons) - -instance ListT.MonadTransUncons (TxStreamListT s) where - uncons = - (liftM . fmap . fmap) (unsafeCoerce :: ListT.ListT m r -> TxStreamListT s m r) . - ListT.uncons . - (unsafeCoerce :: TxStreamListT s m r -> ListT.ListT m r) - diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs new file mode 100644 index 0000000000..6bba49a92b --- /dev/null +++ b/library/Hasql/Commands.hs @@ -0,0 +1,33 @@ +module Hasql.Commands +( + Commands, + asBytes, + setEncodingToUTF8, + setMinClientMessagesToWarning, +) +where + +import Hasql.Prelude +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy.Builder as BB +import qualified Data.ByteString.Lazy.Builder.ASCII as BB +import qualified Data.ByteString.Lazy as BL + + +newtype Commands = + Commands ( DList BB.Builder ) + deriving ( Monoid ) + +asBytes :: Commands -> ByteString +asBytes (Commands list) = + BL.toStrict $ BB.toLazyByteString $ foldMap (<> BB.char7 ';') $ list + +setEncodingToUTF8 :: Commands +setEncodingToUTF8 = + Commands (pure "SET client_encoding = 'UTF8'") + +setMinClientMessagesToWarning :: Commands +setMinClientMessagesToWarning = + Commands (pure "SET client_min_messages TO WARNING") + + diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs new file mode 100644 index 0000000000..0d6c16752a --- /dev/null +++ b/library/Hasql/Connection.hs @@ -0,0 +1,129 @@ +module Hasql.Connection +( + Connection, + Settings.Settings(..), + acquire, + release, + executeParametricQuery, + -- * Errors + AcquisitionError(..), + ResultsError(..), + ResultError(..), + RowError(..), +) +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Query as Query +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Deserialization.Results as ResultsDeserialization +import qualified Hasql.Deserialization as Deserialization +import qualified Hasql.Serialization.Params as ParamsSerialization +import qualified Hasql.Serialization as Serialization +import qualified Hasql.Settings as Settings +import qualified Hasql.IO as IO + + +-- | +-- A single connection to the database. +data Connection = + Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry + +data ResultsError = + -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with connection. + ClientError !( Maybe ByteString ) | + ResultError !ResultError + deriving ( Show ) + +data ResultError = + -- | + -- An error reported by the DB. Code, message, details, hint. + -- + -- * The SQLSTATE code for the error. The SQLSTATE code identifies the type of error that has occurred; + -- it can be used by front-end applications to perform specific operations (such as error handling) + -- in response to a particular database error. + -- For a list of the possible SQLSTATE codes, see Appendix A. + -- This field is not localizable, and is always present. + -- + -- * The primary human-readable error message (typically one line). Always present. + -- + -- * Detail: an optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * Hint: an optional suggestion what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. Might run to multiple lines. + ServerError !ByteString !ByteString !( Maybe ByteString ) !( Maybe ByteString ) | + -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult !Text | + -- | + -- An error of the row reader, preceded by the index of the row. + RowError !Int !RowError | + -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows !Int + deriving ( Show ) + +data RowError = + EndOfInput | + UnexpectedNull | + ValueError !Text + deriving ( Show ) + +-- | +-- A connection acquistion error. +data AcquisitionError = + -- | Some errors during connection. + BadConnectionStatus !( Maybe ByteString ) | + -- | The server is running a too old version of Postgres. + UnsupportedVersion !Int + deriving ( Show ) + +-- | +-- Acquire a connection using the provided settings. +acquire :: Settings.Settings -> IO ( Either AcquisitionError Connection ) +acquire settings = + runEitherT $ do + pqConnection <- lift (IO.acquireConnection settings) + lift (IO.checkConnectionStatus pqConnection) >>= traverse (left . BadConnectionStatus) + lift (IO.checkServerVersion pqConnection) >>= traverse (left . UnsupportedVersion) + lift (IO.initConnection pqConnection) + integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) + registry <- lift (IO.acquirePreparedStatementRegistry) + pure (Connection pqConnection integerDatetimes registry) + +-- | +-- Release the connection. +release :: Connection -> IO () +release (Connection pqConnection _ _) = + LibPQ.finish pqConnection + +-- | +-- Execute a query, producing either a deserialization failure or a successful result. +executeParametricQuery :: Connection -> Query.ParametricQuery a b -> a -> IO ( Either ResultsError b ) +executeParametricQuery (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = + fmap (mapLeft coerceResultsError) $ runEitherT $ do + EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params + EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) + +-- | +-- WARNING: We need to take special care that the structure of +-- the "ResultsDeserialization.Error" type in the public API is an exact copy of +-- "Error", since we're using coercion. +coerceResultsError :: ResultsDeserialization.Error -> ResultsError +coerceResultsError = + unsafeCoerce + +coerceDeserializer :: Deserialization.Results a -> ResultsDeserialization.Results a +coerceDeserializer = + unsafeCoerce + +coerceSerializer :: Serialization.Params a -> ParamsSerialization.Params a +coerceSerializer = + unsafeCoerce diff --git a/library/Hasql/CxRow.hs b/library/Hasql/CxRow.hs deleted file mode 100644 index d2b070e64c..0000000000 --- a/library/Hasql/CxRow.hs +++ /dev/null @@ -1,64 +0,0 @@ -module Hasql.CxRow where - -import Hasql.Prelude -import Language.Haskell.TH -import qualified Hasql.Backend as Bknd -import qualified Data.Vector as Vector -import qualified Hasql.TH as THUtil - - --- | --- This class is only intended to be used with the supplied instances, --- which should be enough to cover all use cases. -class CxRow c r where - parseRow :: Bknd.ResultRow c -> Either Text r - -instance CxRow c () where - parseRow row = - if Vector.null row - then Right () - else Left "Not an empty row" - -instance Bknd.CxValue c v => CxRow c (Identity v) where - parseRow row = do - Identity <$> Bknd.decodeValue (Vector.unsafeHead row) - --- Generate tuple instaces using Template Haskell: -return $ flip map [2 .. 24] $ \arity -> - let - varNames = - [1 .. arity] >>= \i -> return (mkName ('v' : show i)) - varTypes = - map VarT varNames - connectionType = - VarT (mkName "c") - constraints = - map (\t -> THUtil.classP ''Bknd.CxValue [connectionType, t]) varTypes - head = - AppT (AppT (ConT ''CxRow) connectionType) (foldl AppT (TupleT arity) varTypes) - parseRowDec = - FunD 'parseRow [Clause [VarP rowVarName] (NormalB e) []] - where - rowVarName = mkName "row" - e = - THUtil.purify $ - [| - let actualLength = Vector.length $(varE rowVarName) - expectedLength = $(litE (IntegerL $ fromIntegral arity)) - in if actualLength == expectedLength - then $(pure $ THUtil.applicativeE (ConE (tupleDataName arity)) lookups) - else Left $ fromString $ ($ "") $ - showString "Inappropriate row length: " . shows actualLength . - showString ", expecting: " . shows expectedLength . - showString " instead" - |] - where - lookups = do - i <- [0 .. pred arity] - return $ THUtil.purify $ - [| - Bknd.decodeValue - (Vector.unsafeIndex $(varE rowVarName) $(litE (IntegerL $ fromIntegral i)) ) - |] - in InstanceD constraints head [parseRowDec] - diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs new file mode 100644 index 0000000000..a3de489a9f --- /dev/null +++ b/library/Hasql/Deserialization.hs @@ -0,0 +1,732 @@ +-- | +-- A DSL for creating result deserializers. +module Hasql.Deserialization +( + -- * Results + Results, + result, + -- * Result + Result, + noResult, + rowsAffected, + singleRow, + -- ** Specialized multi-row results + maybeRow, + rowsVector, + rowsList, + -- ** Multi-row traversers + foldlRows, + foldrRows, + generateRows, + -- * Row + Row, + value, + nullableValue, + -- * Value + Value, + bool, + int2, + int4, + int8, + float4, + float8, + numeric, + char, + text, + bytea, + date, + timestamp, + timestamptz, + time, + timetz, + interval, + uuid, + json, + array, + composite, + hstore, + -- * Array + Array, + arrayDimension, + arrayValue, + arrayNullableValue, + -- * Composite + Composite, + compositeValue, + compositeNullableValue, +) +where + +import Hasql.Prelude hiding (maybe, bool) +import qualified Data.Aeson as Aeson +import qualified Data.Vector as Vector +import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified Hasql.Deserialization.Results as Results +import qualified Hasql.Deserialization.Result as Result +import qualified Hasql.Deserialization.Row as Row +import qualified Hasql.Deserialization.Value as Value +import qualified Hasql.Deserialization.Array as Array +import qualified Hasql.Deserialization.Composite as Composite +import qualified Hasql.Prelude as Prelude + + +-- * Results +------------------------- + +-- | +-- Deserializer of possibly multiple results of a single query. +-- +-- Multiple results get produced by non-parametric queries with multiple statements. +-- +-- Parametric queries always produce exactly one result, +-- so don't confuse this with a multi-row result. +-- +newtype Results a = + Results (Results.Results a) + deriving (Functor, Applicative, Monad) + +-- | +-- Lift an individual result deserializer to +-- a deserializer of multiple results. +{-# INLINABLE result #-} +result :: Result a -> Results a +result (Result result) = + Results (Results.single result) + +-- ** Instances +------------------------- + +-- | Maps to @(result 'noResult')@. +instance Default (Results ()) where + {-# INLINE def #-} + def = + result noResult + +-- | Maps to @(result 'rowsAffected')@. +instance Default (Results Int64) where + {-# INLINE def #-} + def = + result rowsAffected + +-- | Maps to @(result ('maybeRow' def))@. +instance Default (Row a) => Default (Results (Maybe a)) where + {-# INLINE def #-} + def = + result (maybeRow def) + +-- | Maps to @(result ('rowsVector' def))@. +instance Default (Row a) => Default (Results (Vector a)) where + {-# INLINE def #-} + def = + result (rowsVector def) + +-- | Maps to @(result ('rowsList' def))@. +instance Default (Row a) => Default (Results ([] a)) where + {-# INLINE def #-} + def = + result (rowsList def) + +-- | Maps to @(result (fmap Identity ('singleRow' def)))@. +instance Default (Row a) => Default (Results (Identity a)) where + {-# INLINE def #-} + def = + result (fmap Identity (singleRow def)) + + +-- * Result +------------------------- + +-- | +-- Deserializer of an individual result. +-- +newtype Result a = + Result (Result.Result a) + deriving (Functor) + +-- | +-- Deserialize no value from the result. +-- +-- Useful for statements like @INSERT@ or @CREATE@. +-- +{-# INLINABLE noResult #-} +noResult :: Result () +noResult = + Result Result.unit + +-- | +-- Get the amount of rows affected by such statements as +-- @UPDATE@ or @DELETE@. +-- +{-# INLINABLE rowsAffected #-} +rowsAffected :: Result Int64 +rowsAffected = + Result Result.rowsAffected + +-- | +-- Exactly one row. +-- Will raise the 'Hasql.Connection.UnexpectedAmountOfRows' error if it's any other. +-- +{-# INLINABLE singleRow #-} +singleRow :: Row a -> Result a +singleRow (Row row) = + Result (Result.single row) + +-- ** Multi-row traversers +------------------------- + +-- | +-- Given a function like 'Vector.generateM' packs multiple results accordingly. +-- +{-# INLINABLE generateRows #-} +generateRows :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row a -> Result b +generateRows generateM (Row row) = + Result (Result.generate generateM row) + +-- | +-- Foldl multiple rows. +-- +{-# INLINABLE foldlRows #-} +foldlRows :: (a -> b -> a) -> a -> Row b -> Result a +foldlRows step init (Row row) = + Result (Result.foldl step init row) + +-- | +-- Foldr multiple rows. +-- +{-# INLINABLE foldrRows #-} +foldrRows :: (b -> a -> a) -> a -> Row b -> Result a +foldrRows step init (Row row) = + Result (Result.foldr step init row) + +-- ** Specialized multi-row results +------------------------- + +-- | +-- Maybe one row or none. +-- +{-# INLINABLE maybeRow #-} +maybeRow :: Row a -> Result (Maybe a) +maybeRow (Row row) = + Result (Result.maybe row) + +-- | +-- Zero or more rows packed into the vector. +-- +{-# INLINABLE rowsVector #-} +rowsVector :: Row a -> Result (Vector a) +rowsVector (Row row) = + Result (Result.generate Vector.generateM row) + +-- | +-- Zero or more rows packed into the list. +-- +{-# INLINABLE rowsList #-} +rowsList :: Row a -> Result [ a ] +rowsList (Row row) = + Result (Result.foldr (:) [] row) + + +-- ** Instances +------------------------- + +-- | Maps to 'noResult'. +instance Default (Result ()) where + {-# INLINE def #-} + def = + noResult + +-- | Maps to 'rowsAffected'. +instance Default (Result Int64) where + {-# INLINE def #-} + def = + rowsAffected + +-- | Maps to @('maybeRow' def)@. +instance Default (Row a) => Default (Result (Maybe a)) where + {-# INLINE def #-} + def = + maybeRow def + +-- | Maps to @('rowsVector' def)@. +instance Default (Row a) => Default (Result (Vector a)) where + {-# INLINE def #-} + def = + rowsVector def + +-- | Maps to @('rowsList' def)@. +instance Default (Row a) => Default (Result ([] a)) where + {-# INLINE def #-} + def = + rowsList def + +-- | Maps to @(fmap Identity ('singleRow' def)@. +instance Default (Row a) => Default (Result (Identity a)) where + {-# INLINE def #-} + def = + fmap Identity (singleRow def) + + +-- * Row +------------------------- + +-- | +-- Deserializer of an individual row, +-- which gets composed of column value deserializers. +-- +-- E.g.: +-- +-- >x :: Row (Maybe Int64, Text, TimeOfDay) +-- >x = +-- > (,,) <$> nullableValue int8 <*> value text <*> value time +-- +newtype Row a = + Row (Row.Row a) + deriving (Functor, Applicative, Monad) + +-- | +-- Lift an individual non-nullable value deserializer to a composable row deserializer. +-- +{-# INLINABLE value #-} +value :: Value a -> Row a +value (Value imp) = + Row (Row.nonNullValue imp) + +-- | +-- Lift an individual nullable value deserializer to a composable row deserializer. +-- +{-# INLINABLE nullableValue #-} +nullableValue :: Value a -> Row (Maybe a) +nullableValue (Value imp) = + Row (Row.value imp) + + +-- ** Instances +------------------------- + +instance Default (Value a) => Default (Row (Identity a)) where + {-# INLINE def #-} + def = + fmap Identity (value def) + +instance Default (Value a) => Default (Row (Maybe a)) where + {-# INLINE def #-} + def = + nullableValue def + +instance (Default (Value a1), Default (Value a2)) => Default (Row (a1, a2)) where + {-# INLINE def #-} + def = + ap (fmap (,) (value def)) (value def) + + +-- * Value +------------------------- + +-- | +-- Deserializer of an individual value. +-- +newtype Value a = + Value (Value.Value a) + deriving (Functor) + + +-- ** Plain value deserializers +------------------------- + +-- | +-- Deserializer of the @BOOL@ values. +-- +{-# INLINABLE bool #-} +bool :: Value Bool +bool = + Value (Value.decoder (const Decoder.bool)) + +-- | +-- Deserializer of the @INT2@ values. +-- +{-# INLINABLE int2 #-} +int2 :: Value Int16 +int2 = + Value (Value.decoder (const Decoder.int)) + +-- | +-- Deserializer of the @INT4@ values. +-- +{-# INLINABLE int4 #-} +int4 :: Value Int32 +int4 = + Value (Value.decoder (const Decoder.int)) + +-- | +-- Deserializer of the @INT8@ values. +-- +{-# INLINABLE int8 #-} +int8 :: Value Int64 +int8 = + Value (Value.decoder (const Decoder.int)) + +-- | +-- Deserializer of the @FLOAT4@ values. +-- +{-# INLINABLE float4 #-} +float4 :: Value Float +float4 = + Value (Value.decoder (const Decoder.float4)) + +-- | +-- Deserializer of the @FLOAT8@ values. +-- +{-# INLINABLE float8 #-} +float8 :: Value Double +float8 = + Value (Value.decoder (const Decoder.float8)) + +-- | +-- Deserializer of the @NUMERIC@ values. +-- +{-# INLINABLE numeric #-} +numeric :: Value Scientific +numeric = + Value (Value.decoder (const Decoder.numeric)) + +-- | +-- Deserializer of the @CHAR@ values. +-- Note that it supports UTF-8 values. +{-# INLINABLE char #-} +char :: Value Char +char = + Value (Value.decoder (const Decoder.char)) + +-- | +-- Deserializer of the @TEXT@ values. +-- +{-# INLINABLE text #-} +text :: Value Text +text = + Value (Value.decoder (const Decoder.text_strict)) + +-- | +-- Deserializer of the @BYTEA@ values. +-- +{-# INLINABLE bytea #-} +bytea :: Value ByteString +bytea = + Value (Value.decoder (const Decoder.bytea_strict)) + +-- | +-- Deserializer of the @DATE@ values. +-- +{-# INLINABLE date #-} +date :: Value Day +date = + Value (Value.decoder (const Decoder.date)) + +-- | +-- Deserializer of the @TIMESTAMP@ values. +-- +{-# INLINABLE timestamp #-} +timestamp :: Value LocalTime +timestamp = + Value (Value.decoder (Prelude.bool Decoder.timestamp_float Decoder.timestamp_int)) + +-- | +-- Deserializer of the @TIMESTAMPTZ@ values. +-- +-- /NOTICE/ +-- +-- Postgres does not store the timezone information of @TIMESTAMPTZ@. +-- Instead it stores a UTC value and performs silent conversions +-- to the currently set timezone, when dealt with in the text format. +-- However this library bypasses the silent conversions +-- and communicates with Postgres using the UTC values directly. +{-# INLINABLE timestamptz #-} +timestamptz :: Value UTCTime +timestamptz = + Value (Value.decoder (Prelude.bool Decoder.timestamptz_float Decoder.timestamptz_int)) + +-- | +-- Deserializer of the @TIME@ values. +-- +{-# INLINABLE time #-} +time :: Value TimeOfDay +time = + Value (Value.decoder (Prelude.bool Decoder.time_float Decoder.time_int)) + +-- | +-- Deserializer of the @TIMETZ@ values. +-- +-- Unlike in case of @TIMESTAMPTZ@, +-- Postgres does store the timezone information for @TIMETZ@. +-- However the Haskell's \"time\" library does not contain any composite type, +-- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' +-- to represent a value on the Haskell's side. +{-# INLINABLE timetz #-} +timetz :: Value (TimeOfDay, TimeZone) +timetz = + Value (Value.decoder (Prelude.bool Decoder.timetz_float Decoder.timetz_int)) + +-- | +-- Deserializer of the @INTERVAL@ values. +-- +{-# INLINABLE interval #-} +interval :: Value DiffTime +interval = + Value (Value.decoder (Prelude.bool Decoder.interval_float Decoder.interval_int)) + +-- | +-- Deserializer of the @UUID@ values. +-- +{-# INLINABLE uuid #-} +uuid :: Value UUID +uuid = + Value (Value.decoder (const Decoder.uuid)) + +-- | +-- Deserializer of the @JSON@ values. +-- +{-# INLINABLE json #-} +json :: Value Aeson.Value +json = + Value (Value.decoder (const Decoder.json)) + + +-- ** Composite value deserializers +------------------------- + +-- | +-- Lifts the 'Array' deserializer to the 'Value' deserializer. +-- +{-# INLINABLE array #-} +array :: Array a -> Value a +array (Array imp) = + Value (Value.decoder (Array.run imp)) + +-- | +-- Lifts the 'Composite' deserializer to the 'Value' deserializer. +-- +{-# INLINABLE composite #-} +composite :: Composite a -> Value a +composite (Composite imp) = + Value (Value.decoder (Composite.run imp)) + +-- | +-- A generic deserializer of @HSTORE@ values. +-- +-- Here's how you can use it to construct a specific value: +-- +-- @ +-- x :: Value [(Text, Maybe Text)] +-- x = +-- hstore 'replicateM' +-- @ +-- +{-# INLINABLE hstore #-} +hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a +hstore replicateM = + Value (Value.decoder (const (Decoder.hstore replicateM Decoder.text_strict Decoder.text_strict))) + + +-- ** Instances +------------------------- + +-- | +-- Maps to 'bool'. +instance Default (Value Bool) where + {-# INLINE def #-} + def = + bool + +-- | +-- Maps to 'int2'. +instance Default (Value Int16) where + {-# INLINE def #-} + def = + int2 + +-- | +-- Maps to 'int4'. +instance Default (Value Int32) where + {-# INLINE def #-} + def = + int4 + +-- | +-- Maps to 'int8'. +instance Default (Value Int64) where + {-# INLINE def #-} + def = + int8 + +-- | +-- Maps to 'float4'. +instance Default (Value Float) where + {-# INLINE def #-} + def = + float4 + +-- | +-- Maps to 'float8'. +instance Default (Value Double) where + {-# INLINE def #-} + def = + float8 + +-- | +-- Maps to 'numeric'. +instance Default (Value Scientific) where + {-# INLINE def #-} + def = + numeric + +-- | +-- Maps to 'char'. +instance Default (Value Char) where + {-# INLINE def #-} + def = + char + +-- | +-- Maps to 'text'. +instance Default (Value Text) where + {-# INLINE def #-} + def = + text + +-- | +-- Maps to 'bytea'. +instance Default (Value ByteString) where + {-# INLINE def #-} + def = + bytea + +-- | +-- Maps to 'date'. +instance Default (Value Day) where + {-# INLINE def #-} + def = + date + +-- | +-- Maps to 'timestamp'. +instance Default (Value LocalTime) where + {-# INLINE def #-} + def = + timestamp + +-- | +-- Maps to 'timestamptz'. +instance Default (Value UTCTime) where + {-# INLINE def #-} + def = + timestamptz + +-- | +-- Maps to 'time'. +instance Default (Value TimeOfDay) where + {-# INLINE def #-} + def = + time + +-- | +-- Maps to 'timetz'. +instance Default (Value (TimeOfDay, TimeZone)) where + {-# INLINE def #-} + def = + timetz + +-- | +-- Maps to 'interval'. +instance Default (Value DiffTime) where + {-# INLINE def #-} + def = + interval + +-- | +-- Maps to 'uuid'. +instance Default (Value UUID) where + {-# INLINE def #-} + def = + uuid + +-- | +-- Maps to 'json'. +instance Default (Value Aeson.Value) where + {-# INLINE def #-} + def = + json + + +-- * Array deserializers +------------------------- + +-- | +-- A generic array deserializer. +-- +-- Here's how you can use it to produce a specific array value deserializer: +-- +-- @ +-- x :: Value [[Text]] +-- x = +-- array (arrayDimension 'replicateM' (arrayDimension 'replicateM' (arrayValue text))) +-- @ +-- +newtype Array a = + Array (Array.Array a) + deriving (Functor) + +-- | +-- A function for parsing a dimension of an array. +-- Provides support for multi-dimensional arrays. +-- +-- Accepts: +-- +-- * An implementation of the @replicateM@ function +-- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), +-- which determines the output value. +-- +-- * A deserializer of its components, which can be either another 'arrayDimension', +-- 'arrayValue' or 'arrayNullableValue'. +-- +{-# INLINABLE arrayDimension #-} +arrayDimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +arrayDimension replicateM (Array imp) = + Array (Array.dimension replicateM imp) + +-- | +-- Lift a 'Value' deserializer into an 'Array' deserializer for parsing of non-nullable leaf values. +{-# INLINABLE arrayValue #-} +arrayValue :: Value a -> Array a +arrayValue (Value imp) = + Array (Array.nonNullValue (Value.run imp)) + +-- | +-- Lift a 'Value' deserializer into an 'Array' deserializer for parsing of nullable leaf values. +{-# INLINABLE arrayNullableValue #-} +arrayNullableValue :: Value a -> Array (Maybe a) +arrayNullableValue (Value imp) = + Array (Array.value (Value.run imp)) + + +-- * Composite deserializers +------------------------- + +-- | +-- Composable deserializer of composite values (rows, records). +newtype Composite a = + Composite (Composite.Composite a) + deriving (Functor, Applicative, Monad) + +-- | +-- Lift a 'Value' deserializer into an 'Composite' deserializer for parsing of non-nullable leaf values. +{-# INLINABLE compositeValue #-} +compositeValue :: Value a -> Composite a +compositeValue (Value imp) = + Composite (Composite.nonNullValue (Value.run imp)) + +-- | +-- Lift a 'Value' deserializer into an 'Composite' deserializer for parsing of nullable leaf values. +{-# INLINABLE compositeNullableValue #-} +compositeNullableValue :: Value a -> Composite (Maybe a) +compositeNullableValue (Value imp) = + Composite (Composite.value (Value.run imp)) + diff --git a/library/Hasql/Deserialization/Array.hs b/library/Hasql/Deserialization/Array.hs new file mode 100644 index 0000000000..40b108fc8b --- /dev/null +++ b/library/Hasql/Deserialization/Array.hs @@ -0,0 +1,31 @@ +module Hasql.Deserialization.Array where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Decoder as Decoder + + +newtype Array a = + Array (ReaderT Bool Decoder.ArrayDecoder a) + deriving (Functor) + +{-# INLINE run #-} +run :: Array a -> Bool -> Decoder.Decoder a +run (Array imp) env = + Decoder.array (runReaderT imp env) + +{-# INLINE dimension #-} +dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +dimension replicateM (Array imp) = + Array $ ReaderT $ \env -> Decoder.arrayDimension replicateM (runReaderT imp env) + +{-# INLINE value #-} +value :: (Bool -> Decoder.Decoder a) -> Array (Maybe a) +value decoder' = + Array $ ReaderT $ Decoder.arrayValue . decoder' + +{-# INLINE nonNullValue #-} +nonNullValue :: (Bool -> Decoder.Decoder a) -> Array a +nonNullValue decoder' = + Array $ ReaderT $ Decoder.arrayNonNullValue . decoder' + diff --git a/library/Hasql/Deserialization/Composite.hs b/library/Hasql/Deserialization/Composite.hs new file mode 100644 index 0000000000..1af29d706e --- /dev/null +++ b/library/Hasql/Deserialization/Composite.hs @@ -0,0 +1,26 @@ +module Hasql.Deserialization.Composite where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Decoder as Decoder + + +newtype Composite a = + Composite (ReaderT Bool Decoder.CompositeDecoder a) + deriving (Functor, Applicative, Monad) + +{-# INLINE run #-} +run :: Composite a -> Bool -> Decoder.Decoder a +run (Composite imp) env = + Decoder.composite (runReaderT imp env) + +{-# INLINE value #-} +value :: (Bool -> Decoder.Decoder a) -> Composite (Maybe a) +value decoder' = + Composite $ ReaderT $ Decoder.compositeValue . decoder' + +{-# INLINE nonNullValue #-} +nonNullValue :: (Bool -> Decoder.Decoder a) -> Composite a +nonNullValue decoder' = + Composite $ ReaderT $ Decoder.compositeNonNullValue . decoder' + diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs new file mode 100644 index 0000000000..aa025d0fbc --- /dev/null +++ b/library/Hasql/Deserialization/Result.hs @@ -0,0 +1,207 @@ +module Hasql.Deserialization.Result where + +import Hasql.Prelude hiding (maybe, many) +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Deserialization.Row as Row +import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec +import qualified Data.ByteString as ByteString +import qualified Hasql.Prelude as Prelude + + +newtype Result a = + Result ( ReaderT ( Bool , LibPQ.Result ) ( EitherT Error IO ) a ) + deriving ( Functor , Applicative , Monad ) + +data Error = + -- | + -- An error reported by the DB. Code, message, details, hint. + -- + -- * The SQLSTATE code for the error. The SQLSTATE code identifies the type of error that has occurred; + -- it can be used by front-end applications to perform specific operations (such as error handling) + -- in response to a particular database error. + -- For a list of the possible SQLSTATE codes, see Appendix A. + -- This field is not localizable, and is always present. + -- + -- * The primary human-readable error message (typically one line). Always present. + -- + -- * Detail: an optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * Hint: an optional suggestion what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. Might run to multiple lines. + ServerError !ByteString !ByteString !( Maybe ByteString ) !( Maybe ByteString ) | + -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult !Text | + -- | + -- An error of the row reader, preceded by the index of the row. + RowError !Int !Row.Error | + -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows !Int + deriving ( Show ) + +run :: Result a -> ( Bool , LibPQ.Result ) -> IO ( Either Error a ) +run (Result reader) env = + runEitherT (runReaderT reader env) + +unit :: Result () +unit = + checkExecStatus $ \case + LibPQ.CommandOk -> True + LibPQ.TuplesOk -> True + _ -> False + +rowsAffected :: Result Int64 +rowsAffected = + do + checkExecStatus $ \case + LibPQ.CommandOk -> True + _ -> False + Result $ ReaderT $ \(_, result) -> EitherT $ + LibPQ.cmdTuples result & fmap cmdTuplesReader + where + cmdTuplesReader = + notNothing >=> notEmpty >=> decimal + where + notNothing = + Prelude.maybe (Left (UnexpectedResult "No bytes")) Right + notEmpty bytes = + if ByteString.null bytes + then Left (UnexpectedResult "Empty bytes") + else Right bytes + decimal bytes = + mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ + Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes + +checkExecStatus :: ( LibPQ.ExecStatus -> Bool ) -> Result () +checkExecStatus predicate = + do + status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result + unless (predicate status) $ do + case status of + LibPQ.BadResponse -> serverError + LibPQ.NonfatalError -> serverError + LibPQ.FatalError -> serverError + _ -> Result $ lift $ EitherT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) + +serverError :: Result () +serverError = + Result $ ReaderT $ \(_, result) -> EitherT $ do + code <- + fmap (fromMaybe ($bug "No code")) $ + LibPQ.resultErrorField result LibPQ.DiagSqlstate + message <- + fmap (fromMaybe ($bug "No message")) $ + LibPQ.resultErrorField result LibPQ.DiagMessagePrimary + detail <- + LibPQ.resultErrorField result LibPQ.DiagMessageDetail + hint <- + LibPQ.resultErrorField result LibPQ.DiagMessageHint + pure $ Left $ ServerError code message detail hint + +maybe :: Row.Row a -> Result ( Maybe a ) +maybe rowDes = + do + checkExecStatus $ \case + LibPQ.TuplesOk -> True + _ -> False + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + maxRows <- LibPQ.ntuples result + case maxRows of + 0 -> return (Right Nothing) + 1 -> do + maxCols <- LibPQ.nfields result + fmap (fmap Just . mapLeft (RowError 0)) $ Row.run rowDes (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + where + rowToInt (LibPQ.Row n) = + fromIntegral n + intToRow = + LibPQ.Row . fromIntegral + +single :: Row.Row a -> Result a +single rowDes = + do + checkExecStatus $ \case + LibPQ.TuplesOk -> True + _ -> False + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + maxRows <- LibPQ.ntuples result + case maxRows of + 1 -> do + maxCols <- LibPQ.nfields result + fmap (mapLeft (RowError 0)) $ Row.run rowDes (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + where + rowToInt (LibPQ.Row n) = + fromIntegral n + intToRow = + LibPQ.Row . fromIntegral + +generate :: ( forall m. Monad m => Int -> ( Int -> m a ) -> m b ) -> Row.Row a -> Result b +generate generateM rowDes = + do + checkExecStatus $ \case + LibPQ.TuplesOk -> True + _ -> False + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + runEitherT $ generateM (rowToInt maxRows) $ \row -> + EitherT $ fmap (mapLeft (RowError row)) $ + Row.run rowDes (result, intToRow row, maxCols, integerDatetimes) + where + rowToInt (LibPQ.Row n) = + fromIntegral n + intToRow = + LibPQ.Row . fromIntegral + +foldl :: ( a -> b -> a ) -> a -> Row.Row b -> Result a +foldl step init rowDes = + do + checkExecStatus $ \case + LibPQ.TuplesOk -> True + _ -> False + Result $ ReaderT $ \(integerDatetimes, result) -> do + maxRows <- lift $ LibPQ.ntuples result + maxCols <- lift $ LibPQ.nfields result + ref <- lift $ newIORef init + forM_ [0 .. pred (rowToInt maxRows)] $ \rowIndex -> do + row <- + EitherT $ fmap (mapLeft (RowError rowIndex)) $ + Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + lift $ modifyIORef ref (\acc -> step acc row) + lift $ readIORef ref + where + rowToInt (LibPQ.Row n) = + fromIntegral n + intToRow = + LibPQ.Row . fromIntegral + +foldr :: ( b -> a -> a ) -> a -> Row.Row b -> Result a +foldr step init rowDes = + do + checkExecStatus $ \case + LibPQ.TuplesOk -> True + _ -> False + Result $ ReaderT $ \(integerDatetimes, result) -> do + maxRows <- lift $ LibPQ.ntuples result + maxCols <- lift $ LibPQ.nfields result + ref <- lift $ newIORef init + forM_ (enumToZero (rowToInt maxRows)) $ \rowIndex -> do + row <- + EitherT $ fmap (mapLeft (RowError rowIndex)) $ + Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + lift $ modifyIORef ref (\acc -> step row acc) + lift $ readIORef ref + where + enumToZero n = + iterate pred (pred n) & take n + rowToInt (LibPQ.Row n) = + fromIntegral n + intToRow = + LibPQ.Row . fromIntegral + diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs new file mode 100644 index 0000000000..ded61e82fd --- /dev/null +++ b/library/Hasql/Deserialization/Results.hs @@ -0,0 +1,76 @@ +-- | +-- An API for retrieval of multiple results. +-- Can be used to handle: +-- +-- * A single result, +-- +-- * Individual results of a multi-statement query +-- with the help of "Applicative" and "Monad", +-- +-- * Row-by-row fetching. +-- +module Hasql.Deserialization.Results where + +import Hasql.Prelude hiding (maybe, many) +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Prelude as Prelude +import qualified Hasql.Deserialization.Result as Result +import qualified Hasql.Deserialization.Row as Row + + +newtype Results a = + Results ( ReaderT ( Bool , LibPQ.Connection ) ( EitherT Error IO ) a ) + deriving ( Functor , Applicative , Monad ) + +data Error = + -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with the connection. + ClientError !(Maybe ByteString) | + ResultError !Result.Error + +{-# INLINE run #-} +run :: Results a -> ( Bool , LibPQ.Connection ) -> IO ( Either Error a ) +run (Results stack) env = + runEitherT (runReaderT stack env) + +clientError :: Results a +clientError = + Results $ ReaderT $ \(_, connection) -> EitherT $ + fmap (Left . ClientError) (LibPQ.errorMessage connection) + +-- | +-- Parse a single result. +{-# INLINABLE single #-} +single :: Result.Result a -> Results a +single resultDes = + Results $ ReaderT $ \(integerDatetimes, connection) -> EitherT $ do + resultMaybe <- LibPQ.getResult connection + case resultMaybe of + Just result -> + fmap (mapLeft ResultError) (Result.run resultDes (integerDatetimes, result)) + Nothing -> + fmap (Left . ClientError) (LibPQ.errorMessage connection) + +-- | +-- Fetch a single result. +{-# INLINABLE getResult #-} +getResult :: Results LibPQ.Result +getResult = + Results $ ReaderT $ \(_, connection) -> EitherT $ do + resultMaybe <- LibPQ.getResult connection + case resultMaybe of + Just result -> pure (Right result) + Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) + +-- | +-- Fetch a single result. +{-# INLINABLE getResultMaybe #-} +getResultMaybe :: Results ( Maybe LibPQ.Result ) +getResultMaybe = + Results $ ReaderT $ \(_, connection) -> lift $ LibPQ.getResult connection + +cancel :: Results () +cancel = + undefined diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs new file mode 100644 index 0000000000..89cef00142 --- /dev/null +++ b/library/Hasql/Deserialization/Row.hs @@ -0,0 +1,50 @@ +module Hasql.Deserialization.Row where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified Hasql.Deserialization.Value as Value + + +newtype Row a = + Row + (EitherT Error + (ReaderT + (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) + (StateT LibPQ.Column IO)) + a) + deriving (Functor, Applicative, Monad) + +data Error = + EndOfInput | + UnexpectedNull | + ValueError !Text + deriving (Show) + + +run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Error a) +run (Row m) env = + flip evalStateT 0 (flip runReaderT env (runEitherT m)) + + +error :: Error -> Row a +error x = + Row (EitherT (return (Left x))) + +-- | +-- Next value, decoded using the provided value deserializer. +value :: Value.Value a -> Row (Maybe a) +value valueDes = + Row $ EitherT $ ReaderT $ \(result, row, maxCol, integerDatetimes) -> StateT $ \col -> + if col < maxCol + then + flip fmap (LibPQ.getvalue result row col) $ \x -> + (traverse (mapLeft ValueError . Decoder.run (Value.run valueDes integerDatetimes)) x, + succ col) + else return (Left EndOfInput, col) + +-- | +-- Next value, decoded using the provided value deserializer. +nonNullValue :: Value.Value a -> Row a +nonNullValue valueDes = + value valueDes >>= maybe (error UnexpectedNull) pure diff --git a/library/Hasql/Deserialization/Value.hs b/library/Hasql/Deserialization/Value.hs new file mode 100644 index 0000000000..31b845ab67 --- /dev/null +++ b/library/Hasql/Deserialization/Value.hs @@ -0,0 +1,22 @@ +module Hasql.Deserialization.Value where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Decoder as Decoder + + +newtype Value a = + Value (ReaderT Bool Decoder.Decoder a) + deriving (Functor) + + +{-# INLINE run #-} +run :: Value a -> Bool -> Decoder.Decoder a +run (Value imp) integerDatetimes = + runReaderT imp integerDatetimes + +{-# INLINE decoder #-} +decoder :: (Bool -> Decoder.Decoder a) -> Value a +decoder = + Value . ReaderT + diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs new file mode 100644 index 0000000000..6d78fbe0cb --- /dev/null +++ b/library/Hasql/IO.hs @@ -0,0 +1,147 @@ +-- | +-- An API of low-level IO operations. +module Hasql.IO +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Commands as Commands +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Deserialization.Result as ResultDeserialization +import qualified Hasql.Deserialization.Results as ResultsDeserialization +import qualified Hasql.Serialization.Params as ParamsSerialization +import qualified Hasql.Settings as Settings +import qualified Data.DList as DList + + +{-# INLINE acquireConnection #-} +acquireConnection :: Settings.Settings -> IO LibPQ.Connection +acquireConnection settings = + LibPQ.connectdb (Settings.asBytes settings) + +{-# INLINE acquirePreparedStatementRegistry #-} +acquirePreparedStatementRegistry :: IO PreparedStatementRegistry.PreparedStatementRegistry +acquirePreparedStatementRegistry = + PreparedStatementRegistry.new + +{-# INLINE releaseConnection #-} +releaseConnection :: LibPQ.Connection -> IO () +releaseConnection connection = + LibPQ.finish connection + +{-# INLINABLE checkConnectionStatus #-} +checkConnectionStatus :: LibPQ.Connection -> IO (Maybe (Maybe ByteString)) +checkConnectionStatus c = + do + s <- LibPQ.status c + case s of + LibPQ.ConnectionOk -> return Nothing + _ -> fmap Just (LibPQ.errorMessage c) + +{-# INLINE checkServerVersion #-} +checkServerVersion :: LibPQ.Connection -> IO (Maybe Int) +checkServerVersion c = + fmap (mfilter (< 80200) . Just) (LibPQ.serverVersion c) + +{-# INLINE getIntegerDatetimes #-} +getIntegerDatetimes :: LibPQ.Connection -> IO Bool +getIntegerDatetimes c = + fmap decodeValue $ LibPQ.parameterStatus c "integer_datetimes" + where + decodeValue = + \case + Just "on" -> True + _ -> False + +{-# INLINABLE initConnection #-} +initConnection :: LibPQ.Connection -> IO () +initConnection c = + void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodingToUTF8 <> Commands.setMinClientMessagesToWarning)) + +{-# INLINE getResults #-} +getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO ( Either ResultsDeserialization.Error a ) +getResults connection integerDatetimes des = + do + result <- ResultsDeserialization.run des (integerDatetimes, connection) + fix $ \loop -> LibPQ.getResult connection >>= maybe (pure ()) (const loop) + pure result + +{-# INLINABLE getPreparedStatementKey #-} +getPreparedStatementKey :: + LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> [ LibPQ.Oid ] -> + IO ( Either ResultsDeserialization.Error ByteString ) +getPreparedStatementKey connection registry template oidList = + do + keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry + case keyMaybe of + Just key -> + pure (pure key) + Nothing -> + do + key <- PreparedStatementRegistry.register template wordOIDList registry + sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) + let resultsDeserializer = + if sent + then ResultsDeserialization.single ResultDeserialization.unit + else ResultsDeserialization.clientError + runEitherT $ do + EitherT $ getResults connection undefined resultsDeserializer + pure key + where + wordOIDList = + map (\(LibPQ.Oid x) -> fromIntegral x) oidList + +{-# INLINABLE checkedSend #-} +checkedSend :: LibPQ.Connection -> IO Bool -> IO ( Either ResultsDeserialization.Error () ) +checkedSend connection send = + send >>= \case + False -> fmap (Left . ResultsDeserialization.ClientError) $ LibPQ.errorMessage connection + True -> pure (Right ()) + +{-# INLINABLE sendPreparedParametricQuery #-} +sendPreparedParametricQuery :: + LibPQ.Connection -> + PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> + [ LibPQ.Oid ] -> + [ Maybe ( ByteString , LibPQ.Format ) ] -> + IO ( Either ResultsDeserialization.Error () ) +sendPreparedParametricQuery connection registry template oidList valueAndFormatList = + runEitherT $ do + key <- EitherT $ getPreparedStatementKey connection registry template oidList + EitherT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + +{-# INLINABLE sendUnpreparedParametricQuery #-} +sendUnpreparedParametricQuery :: + LibPQ.Connection -> + ByteString -> + [ Maybe ( LibPQ.Oid , ByteString , LibPQ.Format ) ] -> + IO ( Either ResultsDeserialization.Error () ) +sendUnpreparedParametricQuery connection template paramList = + checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary + +{-# INLINABLE sendParametricQuery #-} +sendParametricQuery :: + LibPQ.Connection -> + Bool -> + PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> + ParamsSerialization.Params a -> + Bool -> + a -> + IO ( Either ResultsDeserialization.Error () ) +sendParametricQuery connection integerDatetimes registry template serializer prepared params = + if prepared + then + let + (oidList, valueAndFormatList) = + ParamsSerialization.run' serializer params integerDatetimes + in + sendPreparedParametricQuery connection registry template oidList valueAndFormatList + else + let + paramList = + ParamsSerialization.run'' serializer params integerDatetimes + in + sendUnpreparedParametricQuery connection template paramList diff --git a/library/Hasql/PTI.hs b/library/Hasql/PTI.hs new file mode 100644 index 0000000000..61cb0a998e --- /dev/null +++ b/library/Hasql/PTI.hs @@ -0,0 +1,93 @@ +module Hasql.PTI where + +import Hasql.Prelude hiding (bool) +import qualified Database.PostgreSQL.LibPQ as LibPQ + + +-- | A Postgresql type info +data PTI = PTI { ptiOID :: !OID, ptiArrayOID :: !(Maybe OID) } + +-- | A Word32 and a LibPQ representation of an OID +data OID = OID { oidWord32 :: !Word32, oidPQ :: !LibPQ.Oid } + +mkOID :: Word32 -> OID +mkOID x = + OID x ((LibPQ.Oid . fromIntegral) x) + +mkPTI :: Word32 -> Maybe Word32 -> PTI +mkPTI oid arrayOID = + PTI (mkOID oid) (fmap mkOID arrayOID) + + +-- * Constants +------------------------- + +abstime = mkPTI 702 (Just 1023) +aclitem = mkPTI 1033 (Just 1034) +bit = mkPTI 1560 (Just 1561) +bool = mkPTI 16 (Just 1000) +box = mkPTI 603 (Just 1020) +bpchar = mkPTI 1042 (Just 1014) +bytea = mkPTI 17 (Just 1001) +char = mkPTI 18 (Just 1002) +cid = mkPTI 29 (Just 1012) +cidr = mkPTI 650 (Just 651) +circle = mkPTI 718 (Just 719) +cstring = mkPTI 2275 (Just 1263) +date = mkPTI 1082 (Just 1182) +daterange = mkPTI 3912 (Just 3913) +float4 = mkPTI 700 (Just 1021) +float8 = mkPTI 701 (Just 1022) +gtsvector = mkPTI 3642 (Just 3644) +inet = mkPTI 869 (Just 1041) +int2 = mkPTI 21 (Just 1005) +int2vector = mkPTI 22 (Just 1006) +int4 = mkPTI 23 (Just 1007) +int4range = mkPTI 3904 (Just 3905) +int8 = mkPTI 20 (Just 1016) +int8range = mkPTI 3926 (Just 3927) +interval = mkPTI 1186 (Just 1187) +json = mkPTI 114 (Just 199) +line = mkPTI 628 (Just 629) +lseg = mkPTI 601 (Just 1018) +macaddr = mkPTI 829 (Just 1040) +money = mkPTI 790 (Just 791) +name = mkPTI 19 (Just 1003) +numeric = mkPTI 1700 (Just 1231) +numrange = mkPTI 3906 (Just 3907) +oid = mkPTI 26 (Just 1028) +oidvector = mkPTI 30 (Just 1013) +path = mkPTI 602 (Just 1019) +point = mkPTI 600 (Just 1017) +polygon = mkPTI 604 (Just 1027) +record = mkPTI 2249 (Just 2287) +refcursor = mkPTI 1790 (Just 2201) +regclass = mkPTI 2205 (Just 2210) +regconfig = mkPTI 3734 (Just 3735) +regdictionary = mkPTI 3769 (Just 3770) +regoper = mkPTI 2203 (Just 2208) +regoperator = mkPTI 2204 (Just 2209) +regproc = mkPTI 24 (Just 1008) +regprocedure = mkPTI 2202 (Just 2207) +regtype = mkPTI 2206 (Just 2211) +reltime = mkPTI 703 (Just 1024) +text = mkPTI 25 (Just 1009) +tid = mkPTI 27 (Just 1010) +time = mkPTI 1083 (Just 1183) +timestamp = mkPTI 1114 (Just 1115) +timestamptz = mkPTI 1184 (Just 1185) +timetz = mkPTI 1266 (Just 1270) +tinterval = mkPTI 704 (Just 1025) +tsquery = mkPTI 3615 (Just 3645) +tsrange = mkPTI 3908 (Just 3909) +tstzrange = mkPTI 3910 (Just 3911) +tsvector = mkPTI 3614 (Just 3643) +txid_snapshot = mkPTI 2970 (Just 2949) +unknown = mkPTI 705 Nothing +uuid = mkPTI 2950 (Just 2951) +varbit = mkPTI 1562 (Just 1563) +varchar = mkPTI 1043 (Just 1015) +void = mkPTI 2278 Nothing +xid = mkPTI 28 (Just 1011) +xml = mkPTI 142 (Just 143) + diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 1d74ac9b28..0b07845855 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -1,53 +1,112 @@ module Hasql.Prelude ( module Exports, + LazyByteString, + ByteStringBuilder, + LazyText, + TextBuilder, + bug, + bottom, ) where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (left, right, isLeft, isRight) +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) -- transformers ------------------------- -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Control.Monad.Trans.Writer as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Control.Monad.Trans.Maybe as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Control.Monad.Trans.Class as Exports import Control.Monad.IO.Class as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Data.Functor.Identity as Exports --- transformers-base +-- data-default-class ------------------------- -import Control.Monad.Base as Exports +import Data.Default.Class as Exports --- monad-control +-- profunctors ------------------------- -import Control.Monad.Trans.Control as Exports hiding (embed, embed_) +import Data.Profunctor.Unsafe as Exports --- mtl +-- contravariant ------------------------- -import Control.Monad.Error.Class as Exports hiding (Error) - --- mmorph -------------------------- -import Control.Monad.Morph as Exports +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports -- either ------------------------- import Control.Monad.Trans.Either as Exports import Data.Either.Combinators as Exports --- list-t +-- hashable ------------------------- -import ListT as Exports (ListT) +import Data.Hashable as Exports (Hashable(..)) + +-- text +------------------------- +import Data.Text as Exports (Text) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) + +-- uuid +------------------------- +import Data.UUID as Exports (UUID) + +-- time +------------------------- +import Data.Time as Exports -- vector ------------------------- import Data.Vector as Exports (Vector) --- text +-- dlist ------------------------- -import Data.Text as Exports (Text) +import Data.DList as Exports (DList) + +-- placeholders +------------------------- +import Development.Placeholders as Exports + +-- loch-th +------------------------- +import Debug.Trace.LocationTH as Exports + +-- custom +------------------------- +import qualified Debug.Trace.LocationTH +import qualified Data.Text.Lazy +import qualified Data.Text.Lazy.Builder +import qualified Data.ByteString.Lazy +import qualified Data.ByteString.Builder + + +type LazyByteString = + Data.ByteString.Lazy.ByteString + +type ByteStringBuilder = + Data.ByteString.Builder.Builder + +type LazyText = + Data.Text.Lazy.Text + +type TextBuilder = + Data.Text.Lazy.Builder.Builder + +bug = + [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] + where + msg = "A \"hasql\" package bug: " :: String + +bottom = + [e| $bug "Bottom evaluated" |] diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs new file mode 100644 index 0000000000..2ee1d20cff --- /dev/null +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -0,0 +1,46 @@ +module Hasql.PreparedStatementRegistry +( + PreparedStatementRegistry, + new, + lookup, + register, +) +where + +import Hasql.Prelude hiding (lookup) +import qualified Data.HashTable.IO as Hashtables + + +data PreparedStatementRegistry = + PreparedStatementRegistry !(Hashtables.BasicHashTable LocalKey ByteString) !(IORef Word) + +{-# INLINABLE new #-} +new :: IO PreparedStatementRegistry +new = + PreparedStatementRegistry <$> Hashtables.new <*> newIORef 0 + +{-# INLINABLE lookup #-} +lookup :: ByteString -> [Word32] -> PreparedStatementRegistry -> IO (Maybe ByteString) +lookup template oids (PreparedStatementRegistry table counter) = + Hashtables.lookup table (LocalKey template oids) + +{-# INLINABLE register #-} +register :: ByteString -> [Word32] -> PreparedStatementRegistry -> IO ByteString +register template oids (PreparedStatementRegistry table counter) = + do + n <- readIORef counter + writeIORef counter (succ n) + let remoteKey = fromString (show n) + Hashtables.insert table (LocalKey template oids) remoteKey + return remoteKey + +-- | +-- Local statement key. +data LocalKey = + LocalKey !ByteString ![Word32] + deriving (Show, Eq) + +instance Hashable LocalKey where + {-# INLINE hashWithSalt #-} + hashWithSalt salt (LocalKey template types) = + hashWithSalt salt template diff --git a/library/Hasql/QQ.hs b/library/Hasql/QQ.hs deleted file mode 100644 index 7ec9a9c9d2..0000000000 --- a/library/Hasql/QQ.hs +++ /dev/null @@ -1,61 +0,0 @@ -module Hasql.QQ where - -import Hasql.Prelude -import Hasql.TH -import Language.Haskell.TH -import Language.Haskell.TH.Quote -import Language.Haskell.TH.Syntax -import qualified Data.Text as Text -import qualified Hasql.QQ.Parser as Parser -import qualified Hasql.Backend as Bknd - - --- | --- Produces a lambda-expression, --- which takes as many parameters as there are placeholders in the quoted text --- and results in a 'Bknd.Stmt'. --- --- E.g.: --- --- >selectSum :: Int -> Int -> Stmt c --- >selectSum = [stmt|SELECT (? + ?)|] --- --- It also allows to directly refer to free variables like so: --- --- >selectSum :: Int -> Int -> Stmt c --- >selectSum a b = [stmt|SELECT ($a + $b)|] -stmt :: QuasiQuoter -stmt = - QuasiQuoter - (parseExp) - (const $ fail "Pattern context is not supported") - (const $ fail "Type context is not supported") - (const $ fail "Declaration context is not supported") - where - parseExp = - fmap (uncurry statementF) . - either (fail . showString "Parsing failure: ") return . - Parser.parse . - fromString - statementF t params = - LamE - (map VarP argNames) - (purify [|Bknd.Stmt $(pure statementE) $(pure argsE) True|]) - where - (varNames, argNames) = - (\(a, b) -> (reverse a, reverse b)) $ - flip execState ([], []) $ forM_ params $ \case - Parser.ParamName n -> - modify $ \(a, b) -> (mkName (Text.unpack n) : a, b) - Parser.OrderedPlaceholder -> - modify $ \(a, b) -> - let n = mkName $ '_' : show (length b + 1) - in (n : a, n : b) - Parser.IndexedPlaceholder i -> - fail "Indexed placeholders are not supported" - statementE = - LitE (StringL (Text.unpack t)) - argsE = - vectorE $ - map (\x -> purify [| Bknd.encodeValue $(varE x) |]) $ - varNames diff --git a/library/Hasql/QQ/Parser.hs b/library/Hasql/QQ/Parser.hs deleted file mode 100644 index 12e8f038d3..0000000000 --- a/library/Hasql/QQ/Parser.hs +++ /dev/null @@ -1,65 +0,0 @@ -module Hasql.QQ.Parser where - -import Hasql.Prelude hiding (takeWhile) -import Data.Attoparsec.Text hiding (Result) -import qualified Data.Text as T -import qualified Data.Text.Lazy as TL -import qualified Data.Text.Lazy.Builder as TLB - - -type Result = - (Text, [Param]) - -data Param = - ParamName Text | - OrderedPlaceholder | - IndexedPlaceholder Int - --- | --- Produces a whitespace-cleaned text and a count of placeholders in it. -parse :: Text -> Either String (Text, [Param]) -parse = - parseOnly $ singleTemplate - -singleTemplate :: Parser (Text, [Param]) -singleTemplate = - template <* - ((endOfInput) <|> - (() <$ skipSpace <* char ';' <* fail "A semicolon detected, but only single statements are allowed")) - -template :: Parser (Text, [Param]) -template = - runWriterT $ do - lift $ skipSpace - fmap (TL.toStrict . TLB.toLazyText . mconcat) $ - many $ - (mempty <$ lift (takeWhile1 isSpace <* endOfInput)) <|> - (TLB.singleton ' ' <$ lift (takeWhile1 isSpace)) <|> - (TLB.fromText <$> lift stringLit) <|> - (TLB.singleton '?' <$ (lift param >>= tell . pure)) <|> - (TLB.singleton <$> lift (notChar ';')) - -stringLit :: Parser Text -stringLit = - do - quote <- - char '"' <|> char '\'' - content <- - fmap mconcat $ many $ - TLB.fromText <$> string "\\\\" <|> - TLB.fromText <$> string (fromString ['\\', quote]) <|> - TLB.singleton <$> notChar quote - char quote - return $ TL.toStrict . TLB.toLazyText $ - TLB.singleton quote <> content <> TLB.singleton quote - -param :: Parser Param -param = - (char '$' *> ((ParamName <$> paramName) <|> (IndexedPlaceholder <$> decimal))) <|> - (OrderedPlaceholder <$ char '?') - -paramName :: Parser Text -paramName = - T.cons <$> satisfy isLower <*> takeWhile (\c -> isAlphaNum c || elem c extraChars) - where - extraChars = "_'" :: [Char] diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs new file mode 100644 index 0000000000..68f2c4fb7e --- /dev/null +++ b/library/Hasql/Query.hs @@ -0,0 +1,29 @@ +module Hasql.Query +( + ParametricQuery(..), + NonparametricQuery(..), +) +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Deserialization as Deserialization +import qualified Hasql.Serialization as Serialization + + +-- | +-- A strictly single-statement query, which can be parameterized and prepared. +-- +-- SQL template, params serializer, results deserializer and a flag, determining whether it should be prepared. +-- +type ParametricQuery a b = + (ByteString, Serialization.Params a, Deserialization.Results b, Bool) + +-- | +-- A non-parameterizable and non-preparable query, +-- which however can contain multiple statements. +-- +-- SQL, results deserializer. +-- +type NonparametricQuery a = + (ByteString, Deserialization.Results a) diff --git a/library/Hasql/Serialization.hs b/library/Hasql/Serialization.hs new file mode 100644 index 0000000000..f89f42fe96 --- /dev/null +++ b/library/Hasql/Serialization.hs @@ -0,0 +1,337 @@ +module Hasql.Serialization +( + -- * Params + Params, + value, + nullableValue, + -- * Value + Value, + bool, + int2, + int4, + int8, + float4, + float8, + numeric, + char, + text, + bytea, + date, + timestamp, + timestamptz, + time, + timetz, + interval, + uuid, + json, + array, + -- * Array + Array, + arrayValue, + arrayNullableValue, + arrayDimension, +) +where + +import Hasql.Prelude hiding (bool) +import qualified PostgreSQL.Binary.Encoder as Encoder +import qualified Data.Aeson as Aeson +import qualified Hasql.Serialization.Params as Params +import qualified Hasql.Serialization.Value as Value +import qualified Hasql.Serialization.Array as Array +import qualified Hasql.PTI as PTI +import qualified Hasql.Prelude as Prelude + + +-- * Parameters Product Serializer +------------------------- + +-- | +-- Serializer of some representation of a parameters product. +-- +-- Has instances of 'Contravariant', 'Divisible' and 'Monoid', +-- which you can use to compose multiple parameters together. +-- E.g., +-- +-- >someParamsSerializer :: Params (Int64, Maybe Text) +-- >someParamsSerializer = +-- > contramap fst (value int8) <> +-- > contramap snd (nullableValue text) +-- +newtype Params a = + Params (Params.Params a) + deriving (Contravariant, Divisible, Monoid) + +-- | +-- Lift an individual value serializer to a parameters serializer. +-- +{-# INLINABLE value #-} +value :: Value a -> Params a +value (Value x) = + Params (Params.value x) + +-- | +-- Lift an individual nullable value serializer to a parameters serializer. +-- +{-# INLINABLE nullableValue #-} +nullableValue :: Value a -> Params (Maybe a) +nullableValue (Value x) = + Params (Params.nullableValue x) + + +-- ** Instances +------------------------- + +instance Default (Value a) => Default (Params (Identity a)) where + {-# INLINE def #-} + def = + contramap runIdentity (value def) + +instance (Default (Value a1), Default (Value a2)) => Default (Params (a1, a2)) where + {-# INLINE def #-} + def = + contramap fst (value def) <> + contramap snd (value def) + + +-- * Value Serializer +------------------------- + +-- | +-- An individual value serializer. +-- Will be mapped to a single placeholder in the query. +-- +newtype Value a = + Value (Value.Value a) + deriving (Contravariant) + +{-# INLINABLE bool #-} +bool :: Value Bool +bool = + Value (Value.unsafePTI PTI.bool (const Encoder.bool)) + +{-# INLINABLE int2 #-} +int2 :: Value Int16 +int2 = + Value (Value.unsafePTI PTI.int2 (const Encoder.int2_int16)) + +{-# INLINABLE int4 #-} +int4 :: Value Int32 +int4 = + Value (Value.unsafePTI PTI.int4 (const Encoder.int4_int32)) + +{-# INLINABLE int8 #-} +int8 :: Value Int64 +int8 = + Value (Value.unsafePTI PTI.int8 (const Encoder.int8_int64)) + +{-# INLINABLE float4 #-} +float4 :: Value Float +float4 = + Value (Value.unsafePTI PTI.float4 (const Encoder.float4)) + +{-# INLINABLE float8 #-} +float8 :: Value Double +float8 = + Value (Value.unsafePTI PTI.float8 (const Encoder.float8)) + +{-# INLINABLE numeric #-} +numeric :: Value Scientific +numeric = + Value (Value.unsafePTI PTI.numeric (const Encoder.numeric)) + +{-# INLINABLE char #-} +char :: Value Char +char = + Value (Value.unsafePTI PTI.char (const Encoder.char)) + +{-# INLINABLE text #-} +text :: Value Text +text = + Value (Value.unsafePTI PTI.text (const Encoder.text_strict)) + +{-# INLINABLE bytea #-} +bytea :: Value ByteString +bytea = + Value (Value.unsafePTI PTI.bytea (const Encoder.bytea_strict)) + +{-# INLINABLE date #-} +date :: Value Day +date = + Value (Value.unsafePTI PTI.date (const Encoder.date)) + +{-# INLINABLE timestamp #-} +timestamp :: Value LocalTime +timestamp = + Value (Value.unsafePTI PTI.timestamp (Prelude.bool Encoder.timestamp_int Encoder.timestamp_float)) + +{-# INLINABLE timestamptz #-} +timestamptz :: Value UTCTime +timestamptz = + Value (Value.unsafePTI PTI.timestamptz (Prelude.bool Encoder.timestamptz_int Encoder.timestamptz_float)) + +{-# INLINABLE time #-} +time :: Value TimeOfDay +time = + Value (Value.unsafePTI PTI.time (Prelude.bool Encoder.time_int Encoder.time_float)) + +{-# INLINABLE timetz #-} +timetz :: Value (TimeOfDay, TimeZone) +timetz = + Value (Value.unsafePTI PTI.timetz (Prelude.bool Encoder.timetz_int Encoder.timetz_float)) + +{-# INLINABLE interval #-} +interval :: Value DiffTime +interval = + Value (Value.unsafePTI PTI.interval (Prelude.bool Encoder.interval_int Encoder.interval_float)) + +{-# INLINABLE uuid #-} +uuid :: Value UUID +uuid = + Value (Value.unsafePTI PTI.uuid (const Encoder.uuid)) + +{-# INLINABLE json #-} +json :: Value Aeson.Value +json = + Value (Value.unsafePTI PTI.json (const Encoder.json)) + +{-# INLINABLE array #-} +array :: Array a -> Value a +array (Array imp) = + Array.run imp & \(arrayOID, encoder') -> + Value (Value.Value arrayOID arrayOID encoder') + + +-- ** Instances +------------------------- + +-- | Maps to 'bool'. +instance Default (Value Bool) where + {-# INLINE def #-} + def = + bool + +-- | Maps to 'int2'. +instance Default (Value Int16) where + {-# INLINE def #-} + def = + int2 + +-- | Maps to 'int4'. +instance Default (Value Int32) where + {-# INLINE def #-} + def = + int4 + +-- | Maps to 'int8'. +instance Default (Value Int64) where + {-# INLINE def #-} + def = + int8 + +-- | Maps to 'float4'. +instance Default (Value Float) where + {-# INLINE def #-} + def = + float4 + +-- | Maps to 'float8'. +instance Default (Value Double) where + {-# INLINE def #-} + def = + float8 + +-- | Maps to 'numeric'. +instance Default (Value Scientific) where + {-# INLINE def #-} + def = + numeric + +-- | Maps to 'char'. +instance Default (Value Char) where + {-# INLINE def #-} + def = + char + +-- | Maps to 'text'. +instance Default (Value Text) where + {-# INLINE def #-} + def = + text + +-- | Maps to 'bytea'. +instance Default (Value ByteString) where + {-# INLINE def #-} + def = + bytea + +-- | Maps to 'date'. +instance Default (Value Day) where + {-# INLINE def #-} + def = + date + +-- | Maps to 'timestamp'. +instance Default (Value LocalTime) where + {-# INLINE def #-} + def = + timestamp + +-- | Maps to 'timestamptz'. +instance Default (Value UTCTime) where + {-# INLINE def #-} + def = + timestamptz + +-- | Maps to 'time'. +instance Default (Value TimeOfDay) where + {-# INLINE def #-} + def = + time + +-- | Maps to 'timetz'. +instance Default (Value (TimeOfDay, TimeZone)) where + {-# INLINE def #-} + def = + timetz + +-- | Maps to 'interval'. +instance Default (Value DiffTime) where + {-# INLINE def #-} + def = + interval + +-- | Maps to 'uuid'. +instance Default (Value UUID) where + {-# INLINE def #-} + def = + uuid + +-- | Maps to 'json'. +instance Default (Value Aeson.Value) where + {-# INLINE def #-} + def = + json + + +-- * Array +------------------------- + +newtype Array a = + Array (Array.Array a) + +{-# INLINABLE arrayValue #-} +arrayValue :: Value a -> Array a +arrayValue (Value (Value.Value elementOID arrayOID encoder')) = + Array (Array.value elementOID arrayOID encoder') + +{-# INLINABLE arrayNullableValue #-} +arrayNullableValue :: Value a -> Array (Maybe a) +arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = + Array (Array.nullableValue elementOID arrayOID encoder') + +{-# INLINABLE arrayDimension #-} +arrayDimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c +arrayDimension foldl (Array imp) = + Array (Array.dimension foldl imp) + diff --git a/library/Hasql/Serialization/Array.hs b/library/Hasql/Serialization/Array.hs new file mode 100644 index 0000000000..13641bcac8 --- /dev/null +++ b/library/Hasql/Serialization/Array.hs @@ -0,0 +1,31 @@ +module Hasql.Serialization.Array where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Encoder as Encoder +import qualified Hasql.PTI as PTI + + +data Array a = + Array PTI.OID PTI.OID (Bool -> Encoder.ArrayEncoder a) + +{-# INLINE run #-} +run :: Array a -> (PTI.OID, Bool -> Encoder.Encoder a) +run (Array valueOID arrayOID encoder') = + (arrayOID, \env -> Encoder.array (PTI.oidWord32 valueOID) (encoder' env)) + +{-# INLINE value #-} +value :: PTI.OID -> PTI.OID -> (Bool -> Encoder.Encoder a) -> Array a +value valueOID arrayOID encoder' = + Array valueOID arrayOID (Encoder.arrayValue . encoder') + +{-# INLINE nullableValue #-} +nullableValue :: PTI.OID -> PTI.OID -> (Bool -> Encoder.Encoder a) -> Array (Maybe a) +nullableValue valueOID arrayOID encoder' = + Array valueOID arrayOID (Encoder.arrayNullableValue . encoder') + +{-# INLINE dimension #-} +dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c +dimension foldl (Array valueOID arrayOID encoder') = + Array valueOID arrayOID (Encoder.arrayDimension foldl . encoder') + diff --git a/library/Hasql/Serialization/Params.hs b/library/Hasql/Serialization/Params.hs new file mode 100644 index 0000000000..98be0f3036 --- /dev/null +++ b/library/Hasql/Serialization/Params.hs @@ -0,0 +1,46 @@ +module Hasql.Serialization.Params where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Encoder as Encoder +import qualified Hasql.Serialization.Value as Value +import qualified Hasql.PTI as PTI + + +-- | +-- Serializer of some representation of a parameters product. +newtype Params a = + Params (Op (DList (LibPQ.Oid, Bool -> Maybe ByteString)) a) + deriving (Contravariant, Divisible, Monoid) + +run :: Params a -> a -> DList (LibPQ.Oid, Bool -> Maybe ByteString) +run (Params (Op op)) params = + op params + +run' :: Params a -> a -> Bool -> ([LibPQ.Oid], [Maybe (ByteString, LibPQ.Format)]) +run' (Params (Op op)) params integerDatetimes = + foldr step ([], []) (op params) + where + step (oid, bytesGetter) ~(oidList, bytesAndFormatList) = + (,) + (oid : oidList) + (fmap (\bytes -> (bytes, LibPQ.Binary)) (bytesGetter integerDatetimes) : bytesAndFormatList) + +run'' :: Params a -> a -> Bool -> [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] +run'' (Params (Op op)) params integerDatetimes = + foldr step [] (op params) + where + step a b = + mapping a : b + where + mapping (oid, bytesGetter) = + (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure LibPQ.Binary + +value :: Value.Value a -> Params a +value = + contramap Just . nullableValue + +nullableValue :: Value.Value a -> Params (Maybe a) +nullableValue (Value.Value valueOID arrayOID encoder') = + Params $ Op $ \input -> + pure (PTI.oidPQ valueOID, \env -> fmap (Encoder.run (encoder' env)) input) diff --git a/library/Hasql/Serialization/Value.hs b/library/Hasql/Serialization/Value.hs new file mode 100644 index 0000000000..bd73ddaa54 --- /dev/null +++ b/library/Hasql/Serialization/Value.hs @@ -0,0 +1,27 @@ +module Hasql.Serialization.Value where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified PostgreSQL.Binary.Encoder as Encoder +import qualified Hasql.PTI as PTI + + +data Value a = + Value PTI.OID PTI.OID (Bool -> Encoder.Encoder a) + +instance Contravariant Value where + {-# INLINE contramap #-} + contramap f (Value valueOID arrayOID encoder) = + Value valueOID arrayOID (\integerDatetimes input -> encoder integerDatetimes (f input)) + +{-# INLINE run #-} +run :: Value a -> (PTI.OID, PTI.OID, Bool -> Encoder.Encoder a) +run (Value valueOID arrayOID encoder') = + (valueOID, arrayOID, encoder') + +{-# INLINE unsafePTI #-} +unsafePTI :: PTI.PTI -> (Bool -> Encoder.Encoder a) -> Value a +unsafePTI pti encoder' = + Value (PTI.ptiOID pti) (fromMaybe ($bug "No array OID") (PTI.ptiArrayOID pti)) encoder' + + diff --git a/library/Hasql/Settings.hs b/library/Hasql/Settings.hs new file mode 100644 index 0000000000..4daf934872 --- /dev/null +++ b/library/Hasql/Settings.hs @@ -0,0 +1,46 @@ +module Hasql.Settings where + +import Hasql.Prelude +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy.Builder as BB +import qualified Data.ByteString.Lazy.Builder.ASCII as BB +import qualified Data.ByteString.Lazy as BL + + +-- | +-- Connection settings. +data Settings = + -- | + -- A host, a port, a user, a password and a database. + ParametricSettings ByteString Word16 ByteString ByteString ByteString | + -- | + -- All settings encoded in a single byte string according to + -- . + RawSettings ByteString + deriving (Show) + +{-# INLINE asBytes #-} +asBytes :: Settings -> ByteString +asBytes = + \case + ParametricSettings host port user password database -> + BL.toStrict $ BB.toLazyByteString $ mconcat $ intersperse (BB.char7 ' ') $ catMaybes $ + [ + mappend (BB.string7 "host=") . BB.byteString <$> + mfilter (not . B.null) (pure host) + , + mappend (BB.string7 "port=") . BB.word16Dec <$> + mfilter (/= 0) (pure port) + , + mappend (BB.string7 "user=") . BB.byteString <$> + mfilter (not . B.null) (pure user) + , + mappend (BB.string7 "password=") . BB.byteString <$> + mfilter (not . B.null) (pure password) + , + mappend (BB.string7 "dbname=") . BB.byteString <$> + mfilter (not . B.null) (pure database) + ] + RawSettings bytes -> + bytes + diff --git a/library/Hasql/TH.hs b/library/Hasql/TH.hs deleted file mode 100644 index d9a6b614aa..0000000000 --- a/library/Hasql/TH.hs +++ /dev/null @@ -1,80 +0,0 @@ -{-# LANGUAGE CPP #-} --- | --- TH utils. -module Hasql.TH where - -import Hasql.Prelude -import Language.Haskell.TH -import qualified Data.Vector as Vector -import qualified Data.Vector.Mutable as MVector - - -applicativeE :: Exp -> [Exp] -> Exp -applicativeE head = - \case - [] -> error "Empty expressions list" - exps -> - reduce $ - head : VarE '(<$>) : intersperse (VarE '(<*>)) exps - where - reduce = - \case - e : o : t -> UInfixE e o (reduce t) - e : [] -> e - _ -> error $ "Unexpected queue size. Exps: " <> show exps - -purify :: Q a -> a -purify = unsafePerformIO . runQ - --- | --- Produce a lambda expression of a given arity, --- which efficiently constructs a vector of a size equal to the arity. -vectorLamE :: Int -> Exp -vectorLamE arity = - LamE (map VarP argNames) body - where - argNames = - map (mkName . ('_' :) . show) [1 .. arity] - body = - vectorE $ map VarE argNames - -vectorE :: [Exp] -> Exp -vectorE cellExps = - if null cellExps - then - VarE 'Vector.empty - else - AppE (VarE 'runST) $ DoE $ - pure vectorDeclarationStmt <> cellAssignmentStmts <> pure freezingStmt - where - vectorVarName = - mkName "v" - vectorDeclarationStmt = - (BindS - (VarP vectorVarName) - (AppE - (VarE 'MVector.unsafeNew) - (LitE (IntegerL (fromIntegral (length cellExps)))))) - cellAssignmentStmts = - map (NoBindS . uncurry cellAssignmentExp) $ zip [0..] cellExps - where - cellAssignmentExp index exp = - (AppE - (AppE - (AppE - (VarE 'MVector.unsafeWrite) - (VarE vectorVarName)) - (LitE (IntegerL (fromIntegral index)))) - (exp)) - freezingStmt = - (NoBindS - (AppE - (VarE 'Vector.unsafeFreeze) - (VarE vectorVarName))) - -classP :: Name -> [Type] -> Pred -#if MIN_VERSION_template_haskell(2,10,0) -classP n tl = foldl AppT (ConT n) tl -#else -classP = ClassP -#endif From 5c9cc57ab2dde806d9dbb78efb42ab888d293c01 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 8 Nov 2015 21:18:59 +0300 Subject: [PATCH 0189/1204] Consistent styling --- Setup.hs | 24 ++++++++++++------------ demo/Main.hs | 8 ++++---- library/Hasql/Commands.hs | 4 ++-- library/Hasql/Connection.hs | 18 +++++++++--------- library/Hasql/Deserialization.hs | 2 +- library/Hasql/Deserialization/Result.hs | 20 ++++++++++---------- library/Hasql/Deserialization/Results.hs | 8 ++++---- library/Hasql/IO.hs | 20 ++++++++++---------- library/Hasql/Prelude.hs | 2 +- 9 files changed, 53 insertions(+), 53 deletions(-) diff --git a/Setup.hs b/Setup.hs index c103c01099..a800e78d43 100644 --- a/Setup.hs +++ b/Setup.hs @@ -1,17 +1,17 @@ -- The code is mostly ripped from -- https://github.com/ekmett/lens/blob/697582fb9a980f273dbf8496253c5bbefedd0a8b/Setup.lhs -import Data.List ( nub ) -import Data.Version ( showVersion ) -import Distribution.Package ( PackageName(PackageName), Package, PackageId, InstalledPackageId, packageVersion, packageName ) -import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) ) -import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks ) -import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose, copyFiles ) -import Distribution.Simple.BuildPaths ( autogenModulesDir ) -import Distribution.Simple.Setup ( BuildFlags(buildVerbosity), Flag(..), fromFlag, HaddockFlags(haddockDistPref)) -import Distribution.Simple.LocalBuildInfo ( withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps) ) -import Distribution.Text ( display ) -import Distribution.Verbosity ( Verbosity, normal ) -import System.FilePath ( () ) +import Data.List (nub) +import Data.Version (showVersion) +import Distribution.Package (PackageName(PackageName), Package, PackageId, InstalledPackageId, packageVersion, packageName) +import Distribution.PackageDescription (PackageDescription(), TestSuite(..)) +import Distribution.Simple (defaultMainWithHooks, UserHooks(..), simpleUserHooks) +import Distribution.Simple.Utils (rewriteFile, createDirectoryIfMissingVerbose, copyFiles) +import Distribution.Simple.BuildPaths (autogenModulesDir) +import Distribution.Simple.Setup (BuildFlags(buildVerbosity), Flag(..), fromFlag, HaddockFlags(haddockDistPref)) +import Distribution.Simple.LocalBuildInfo (withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps)) +import Distribution.Text (display) +import Distribution.Verbosity (Verbosity, normal) +import System.FilePath (()) main :: IO () main = defaultMainWithHooks simpleUserHooks diff --git a/demo/Main.hs b/demo/Main.hs index 2202a985e2..d036a3dd31 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -42,9 +42,9 @@ main = data Account = Account { - email :: Text , - password :: ByteString , - firstName :: Text , + email :: Text, + password :: ByteString, + firstName :: Text, lastName :: Text } @@ -103,7 +103,7 @@ accountDeserializer :: D.Row Account accountDeserializer = liftM4 Account (D.value def) (D.value def) (D.value def) (D.value def) -identifiedDeserializer :: D.Row a -> D.Row ( Int64 , a ) +identifiedDeserializer :: D.Row a -> D.Row (Int64, a) identifiedDeserializer aDeserializer = liftM2 (,) idDeserializer aDeserializer diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs index 6bba49a92b..a73e44ccb9 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Commands.hs @@ -15,8 +15,8 @@ import qualified Data.ByteString.Lazy as BL newtype Commands = - Commands ( DList BB.Builder ) - deriving ( Monoid ) + Commands (DList BB.Builder) + deriving (Monoid) asBytes :: Commands -> ByteString asBytes (Commands list) = diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 0d6c16752a..5ee4720eeb 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -35,9 +35,9 @@ data ResultsError = -- An error on the client-side, -- with a message generated by the \"libpq\" library. -- Usually indicates problems with connection. - ClientError !( Maybe ByteString ) | + ClientError !(Maybe ByteString) | ResultError !ResultError - deriving ( Show ) + deriving (Show) data ResultError = -- | @@ -57,7 +57,7 @@ data ResultError = -- * Hint: an optional suggestion what to do about the problem. -- This is intended to differ from detail in that it offers advice (potentially inappropriate) -- rather than hard facts. Might run to multiple lines. - ServerError !ByteString !ByteString !( Maybe ByteString ) !( Maybe ByteString ) | + ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | -- | -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. @@ -68,26 +68,26 @@ data ResultError = -- | -- An unexpected amount of rows. UnexpectedAmountOfRows !Int - deriving ( Show ) + deriving (Show) data RowError = EndOfInput | UnexpectedNull | ValueError !Text - deriving ( Show ) + deriving (Show) -- | -- A connection acquistion error. data AcquisitionError = -- | Some errors during connection. - BadConnectionStatus !( Maybe ByteString ) | + BadConnectionStatus !(Maybe ByteString) | -- | The server is running a too old version of Postgres. UnsupportedVersion !Int - deriving ( Show ) + deriving (Show) -- | -- Acquire a connection using the provided settings. -acquire :: Settings.Settings -> IO ( Either AcquisitionError Connection ) +acquire :: Settings.Settings -> IO (Either AcquisitionError Connection) acquire settings = runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) @@ -106,7 +106,7 @@ release (Connection pqConnection _ _) = -- | -- Execute a query, producing either a deserialization failure or a successful result. -executeParametricQuery :: Connection -> Query.ParametricQuery a b -> a -> IO ( Either ResultsError b ) +executeParametricQuery :: Connection -> Query.ParametricQuery a b -> a -> IO (Either ResultsError b) executeParametricQuery (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index a3de489a9f..4be5c64645 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -221,7 +221,7 @@ rowsVector (Row row) = -- Zero or more rows packed into the list. -- {-# INLINABLE rowsList #-} -rowsList :: Row a -> Result [ a ] +rowsList :: Row a -> Result [a] rowsList (Row row) = Result (Result.foldr (:) [] row) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index aa025d0fbc..bce5b16c25 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -9,8 +9,8 @@ import qualified Hasql.Prelude as Prelude newtype Result a = - Result ( ReaderT ( Bool , LibPQ.Result ) ( EitherT Error IO ) a ) - deriving ( Functor , Applicative , Monad ) + Result (ReaderT (Bool, LibPQ.Result) (EitherT Error IO) a) + deriving (Functor, Applicative, Monad) data Error = -- | @@ -30,7 +30,7 @@ data Error = -- * Hint: an optional suggestion what to do about the problem. -- This is intended to differ from detail in that it offers advice (potentially inappropriate) -- rather than hard facts. Might run to multiple lines. - ServerError !ByteString !ByteString !( Maybe ByteString ) !( Maybe ByteString ) | + ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | -- | -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. @@ -41,9 +41,9 @@ data Error = -- | -- An unexpected amount of rows. UnexpectedAmountOfRows !Int - deriving ( Show ) + deriving (Show) -run :: Result a -> ( Bool , LibPQ.Result ) -> IO ( Either Error a ) +run :: Result a -> (Bool, LibPQ.Result) -> IO (Either Error a) run (Result reader) env = runEitherT (runReaderT reader env) @@ -76,7 +76,7 @@ rowsAffected = mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes -checkExecStatus :: ( LibPQ.ExecStatus -> Bool ) -> Result () +checkExecStatus :: (LibPQ.ExecStatus -> Bool) -> Result () checkExecStatus predicate = do status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result @@ -102,7 +102,7 @@ serverError = LibPQ.resultErrorField result LibPQ.DiagMessageHint pure $ Left $ ServerError code message detail hint -maybe :: Row.Row a -> Result ( Maybe a ) +maybe :: Row.Row a -> Result (Maybe a) maybe rowDes = do checkExecStatus $ \case @@ -141,7 +141,7 @@ single rowDes = intToRow = LibPQ.Row . fromIntegral -generate :: ( forall m. Monad m => Int -> ( Int -> m a ) -> m b ) -> Row.Row a -> Result b +generate :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row.Row a -> Result b generate generateM rowDes = do checkExecStatus $ \case @@ -159,7 +159,7 @@ generate generateM rowDes = intToRow = LibPQ.Row . fromIntegral -foldl :: ( a -> b -> a ) -> a -> Row.Row b -> Result a +foldl :: (a -> b -> a) -> a -> Row.Row b -> Result a foldl step init rowDes = do checkExecStatus $ \case @@ -181,7 +181,7 @@ foldl step init rowDes = intToRow = LibPQ.Row . fromIntegral -foldr :: ( b -> a -> a ) -> a -> Row.Row b -> Result a +foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a foldr step init rowDes = do checkExecStatus $ \case diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index ded61e82fd..ae53571015 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -19,8 +19,8 @@ import qualified Hasql.Deserialization.Row as Row newtype Results a = - Results ( ReaderT ( Bool , LibPQ.Connection ) ( EitherT Error IO ) a ) - deriving ( Functor , Applicative , Monad ) + Results (ReaderT (Bool, LibPQ.Connection) (EitherT Error IO) a) + deriving (Functor, Applicative, Monad) data Error = -- | @@ -31,7 +31,7 @@ data Error = ResultError !Result.Error {-# INLINE run #-} -run :: Results a -> ( Bool , LibPQ.Connection ) -> IO ( Either Error a ) +run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either Error a) run (Results stack) env = runEitherT (runReaderT stack env) @@ -67,7 +67,7 @@ getResult = -- | -- Fetch a single result. {-# INLINABLE getResultMaybe #-} -getResultMaybe :: Results ( Maybe LibPQ.Result ) +getResultMaybe :: Results (Maybe LibPQ.Result) getResultMaybe = Results $ ReaderT $ \(_, connection) -> lift $ LibPQ.getResult connection diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 6d78fbe0cb..b32bfab8b7 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -59,7 +59,7 @@ initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodingToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO ( Either ResultsDeserialization.Error a ) +getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO (Either ResultsDeserialization.Error a) getResults connection integerDatetimes des = do result <- ResultsDeserialization.run des (integerDatetimes, connection) @@ -69,8 +69,8 @@ getResults connection integerDatetimes des = {-# INLINABLE getPreparedStatementKey #-} getPreparedStatementKey :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> - ByteString -> [ LibPQ.Oid ] -> - IO ( Either ResultsDeserialization.Error ByteString ) + ByteString -> [LibPQ.Oid] -> + IO (Either ResultsDeserialization.Error ByteString) getPreparedStatementKey connection registry template oidList = do keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry @@ -93,7 +93,7 @@ getPreparedStatementKey connection registry template oidList = map (\(LibPQ.Oid x) -> fromIntegral x) oidList {-# INLINABLE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO ( Either ResultsDeserialization.Error () ) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDeserialization.Error ()) checkedSend connection send = send >>= \case False -> fmap (Left . ResultsDeserialization.ClientError) $ LibPQ.errorMessage connection @@ -104,9 +104,9 @@ sendPreparedParametricQuery :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> - [ LibPQ.Oid ] -> - [ Maybe ( ByteString , LibPQ.Format ) ] -> - IO ( Either ResultsDeserialization.Error () ) + [LibPQ.Oid] -> + [Maybe (ByteString, LibPQ.Format)] -> + IO (Either ResultsDeserialization.Error ()) sendPreparedParametricQuery connection registry template oidList valueAndFormatList = runEitherT $ do key <- EitherT $ getPreparedStatementKey connection registry template oidList @@ -116,8 +116,8 @@ sendPreparedParametricQuery connection registry template oidList valueAndFormatL sendUnpreparedParametricQuery :: LibPQ.Connection -> ByteString -> - [ Maybe ( LibPQ.Oid , ByteString , LibPQ.Format ) ] -> - IO ( Either ResultsDeserialization.Error () ) + [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> + IO (Either ResultsDeserialization.Error ()) sendUnpreparedParametricQuery connection template paramList = checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary @@ -130,7 +130,7 @@ sendParametricQuery :: ParamsSerialization.Params a -> Bool -> a -> - IO ( Either ResultsDeserialization.Error () ) + IO (Either ResultsDeserialization.Error ()) sendParametricQuery connection integerDatetimes registry template serializer prepared params = if prepared then diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 0b07845855..095b639943 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -1,5 +1,5 @@ module Hasql.Prelude -( +( module Exports, LazyByteString, ByteStringBuilder, From 535b910feaca1d4910b6904b1307fcca1251f390 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 9 Nov 2015 07:10:40 +0300 Subject: [PATCH 0190/1204] Docs --- library/Hasql/Prelude.hs | 4 +++ library/Hasql/Serialization.hs | 55 ++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 095b639943..82a3885379 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -37,6 +37,10 @@ import Data.Profunctor.Unsafe as Exports import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports +-- contravariant-extras +------------------------- +import Contravariant.Extras as Exports + -- either ------------------------- import Control.Monad.Trans.Either as Exports diff --git a/library/Hasql/Serialization.hs b/library/Hasql/Serialization.hs index f89f42fe96..48bab6375c 100644 --- a/library/Hasql/Serialization.hs +++ b/library/Hasql/Serialization.hs @@ -47,16 +47,33 @@ import qualified Hasql.Prelude as Prelude ------------------------- -- | --- Serializer of some representation of a parameters product. +-- Serializer of some representation of the parameters product. -- -- Has instances of 'Contravariant', 'Divisible' and 'Monoid', -- which you can use to compose multiple parameters together. -- E.g., -- --- >someParamsSerializer :: Params (Int64, Maybe Text) --- >someParamsSerializer = --- > contramap fst (value int8) <> --- > contramap snd (nullableValue text) +-- @ +-- someParamsSerializer :: Params (Int64, Maybe Text) +-- someParamsSerializer = +-- 'contramap' fst (value int8) <> +-- 'contramap' snd (nullableValue text) +-- @ +-- +-- As a general solution for tuples of any arity, instead of 'fst' and 'snd', +-- consider such solutions as +-- the @@ macro. +-- +-- Alternatively you can achieve the same using the functions of the @contrazip@ family +-- from the \"contravariant-extras\" package, +-- which are especially helpful when dealing with tuples. +-- E.g., +-- +-- @ +-- someParamsSerializer :: Params (Int64, Maybe Text) +-- someParamsSerializer = +-- 'contrazip2' (value int8) (nullableValue text) +-- @ -- newtype Params a = Params (Params.Params a) @@ -195,6 +212,8 @@ json :: Value Aeson.Value json = Value (Value.unsafePTI PTI.json (const Encoder.json)) +-- | +-- Unlifts the 'Array' serializer to the plain 'Value' serializer. {-# INLINABLE array #-} array :: Array a -> Value a array (Array imp) = @@ -317,19 +336,45 @@ instance Default (Value Aeson.Value) where -- * Array ------------------------- +-- | +-- A generic array serializer. +-- +-- Here's an example of its usage: +-- +-- >x :: Value [[Int64]] +-- >x = +-- > array (arrayDimension foldl' (arrayDimension foldl' (arrayValue int8))) +-- newtype Array a = Array (Array.Array a) +-- | +-- Lifts the 'Value' serializer into the 'Array' serializer of a non-nullable value. {-# INLINABLE arrayValue #-} arrayValue :: Value a -> Array a arrayValue (Value (Value.Value elementOID arrayOID encoder')) = Array (Array.value elementOID arrayOID encoder') +-- | +-- Lifts the 'Value' serializer into the 'Array' serializer of a nullable value. {-# INLINABLE arrayNullableValue #-} arrayNullableValue :: Value a -> Array (Maybe a) arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = Array (Array.nullableValue elementOID arrayOID encoder') +-- | +-- A serializer of an array dimension, +-- which thus provides support for multidimensional arrays. +-- +-- Accepts: +-- +-- * An implementation of the left-fold operation, +-- such as @Data.Foldable.'foldl''@, +-- which determines the input value. +-- +-- * A component serializer, which can be either another 'arrayDimension', +-- 'arrayValue' or 'arrayNullableValue'. +-- {-# INLINABLE arrayDimension #-} arrayDimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c arrayDimension foldl (Array imp) = From 9e684170a17696f7273225e9f1bfb73b26309024 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 10 Nov 2015 17:53:14 +0300 Subject: [PATCH 0191/1204] Enum --- hasql.cabal | 2 +- library/Hasql/Deserialization.hs | 8 ++++++++ library/Hasql/Serialization.hs | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 94e69ed78a..423e3eca5a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -68,7 +68,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.7.2 && < 0.8, + postgresql-binary >= 0.7.3 && < 0.8, postgresql-libpq == 0.9.*, -- data: dlist >= 0.7 && < 0.8, diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 4be5c64645..9de2b2d9e0 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -45,6 +45,7 @@ module Hasql.Deserialization array, composite, hstore, + enum, -- * Array Array, arrayDimension, @@ -525,6 +526,13 @@ hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a hstore replicateM = Value (Value.decoder (const (Decoder.hstore replicateM Decoder.text_strict Decoder.text_strict))) +-- | +-- Given a partial mapping from text to value, +-- produces a deserializer of that value. +enum :: (Text -> Maybe a) -> Value a +enum mapping = + Value (Value.decoder (const (Decoder.enum mapping))) + -- ** Instances ------------------------- diff --git a/library/Hasql/Serialization.hs b/library/Hasql/Serialization.hs index 48bab6375c..b61cfccedf 100644 --- a/library/Hasql/Serialization.hs +++ b/library/Hasql/Serialization.hs @@ -25,6 +25,7 @@ module Hasql.Serialization uuid, json, array, + enum, -- * Array Array, arrayValue, @@ -220,6 +221,15 @@ array (Array imp) = Array.run imp & \(arrayOID, encoder') -> Value (Value.Value arrayOID arrayOID encoder') +-- | +-- Given a function, +-- which maps the value into the textual enum label from the DB side, +-- produces a serializer of that value. +{-# INLINABLE enum #-} +enum :: (a -> Text) -> Value a +enum mapping = + Value (Value.unsafePTI PTI.text (const (Encoder.enum mapping))) + -- ** Instances ------------------------- From 85782bdf5baf37b00f7084c488a6b817a4c8e2e0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 10 Nov 2015 21:19:41 +0300 Subject: [PATCH 0192/1204] Init tasty --- hasql.cabal | 24 ++++++++++++++++++++---- hspec/Main.hs | 10 ---------- tasty/Main.hs | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+), 14 deletions(-) delete mode 100644 hspec/Main.hs create mode 100644 tasty/Main.hs diff --git a/hasql.cabal b/hasql.cabal index 423e3eca5a..e609b66f4a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -118,11 +118,11 @@ test-suite doctest Haskell2010 -test-suite hspec +test-suite tasty type: exitcode-stdio-1.0 hs-source-dirs: - hspec + tasty main-is: Main.hs ghc-options: @@ -136,11 +136,27 @@ test-suite hspec -- database: hasql, -- testing: - hspec >= 2.2.0 && < 2.3, + tasty == 0.11.*, + tasty-quickcheck == 0.8.*, + tasty-smallcheck == 0.8.*, + tasty-hunit == 0.9.*, quickcheck-instances >= 0.3.11 && < 0.4, QuickCheck >= 2.8.1 && < 2.9, + -- data: + uuid == 1.3.*, + time >= 1.4 && < 1.6, + scientific >= 0.2 && < 0.4, + bytestring >= 0.10.4 && < 0.11, + text >= 1 && < 2, + vector >= 0.10 && < 0.12, -- general: - base-prelude >= 0.1.19 && < 0.2 + conversion == 1.*, + conversion-bytestring == 1.*, + conversion-text == 1.*, + either == 4.*, + transformers, + base-prelude, + base executable demo diff --git a/hspec/Main.hs b/hspec/Main.hs deleted file mode 100644 index 9c93f130c5..0000000000 --- a/hspec/Main.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Main where - -import BasePrelude hiding (assert, isRight, isLeft) -import Test.Hspec -import Test.QuickCheck -import Test.QuickCheck.Instances - - -main = - error "TODO" diff --git a/tasty/Main.hs b/tasty/Main.hs new file mode 100644 index 0000000000..b6f967785e --- /dev/null +++ b/tasty/Main.hs @@ -0,0 +1,19 @@ +module Main where + +import BasePrelude hiding (assert, isRight, isLeft) +import Control.Monad.IO.Class +import Test.QuickCheck.Instances +import Test.Tasty +import qualified Test.Tasty.HUnit as HUnit +import qualified Test.Tasty.SmallCheck as SmallCheck +import qualified Test.Tasty.QuickCheck as QuickCheck +import qualified Test.QuickCheck as QuickCheck + + +main = + defaultMain tree + +tree = + testGroup "" + [ + ] From 663cc1a12e2a9b93694fb18b682b82d2775a5908 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 14 Nov 2015 13:58:30 +0300 Subject: [PATCH 0193/1204] Unite Query and Connection into Hasql --- demo/Main.hs | 57 +++++++++++------------ hasql.cabal | 3 +- library/{Hasql/Connection.hs => Hasql.hs} | 27 +++++++++-- library/Hasql/Deserialization.hs | 2 +- library/Hasql/Query.hs | 29 ------------ 5 files changed, 54 insertions(+), 64 deletions(-) rename library/{Hasql/Connection.hs => Hasql.hs} (86%) delete mode 100644 library/Hasql/Query.hs diff --git a/demo/Main.hs b/demo/Main.hs index d036a3dd31..338968e9f1 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -6,33 +6,32 @@ import Data.ByteString (ByteString) import Data.Functor.Contravariant import Data.Default.Class import Contravariant.Extras -import qualified Hasql.Query as Query; -import qualified Hasql.Serialization as S -import qualified Hasql.Deserialization as D -import qualified Hasql.Connection as Connection +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD main = do - connectionEither <- Connection.acquire settings + connectionEither <- H.acquire settings case connectionEither of Left e -> print e Right connection -> do - result <- Connection.executeParametricQuery connection sumParametricQuery (1, 2) + result <- H.executeParametricQuery connection sumParametricQuery (1, 2) print result where settings = - Connection.ParametricSettings "localhost" 5432 "postgres" "" "postgres" + H.ParametricSettings "localhost" 5432 "postgres" "" "postgres" sumParametricQuery = (,,,) template serializer deserializer True where template = "SELECT $1 + $2" serializer = - contramap fst (S.value S.int8) <> - contramap snd (S.value S.int8) + contramap fst (HS.value HS.int8) <> + contramap snd (HS.value HS.int8) deserializer = - D.result (D.singleRow (D.value D.int8)) + HD.result (HD.singleRow (HD.value HD.int8)) @@ -53,19 +52,19 @@ data Account = ------------------------- -updateMenu :: Query.ParametricQuery (Text, Int64) Int64 +updateMenu :: H.ParametricQuery (Text, Int64) Int64 updateMenu = (,,,) template serializer deserializer True where template = "UPDATE menu SET title = $1 WHERE id = $2" serializer = - contrazip2 (S.value S.text) - (S.value S.int8) + contrazip2 (HS.value HS.text) + (HS.value HS.int8) deserializer = - D.result (D.rowsAffected) + HD.result (HD.rowsAffected) -accountByEmail :: Query.ParametricQuery Text (Maybe (Int64, Account)) +accountByEmail :: H.ParametricQuery Text (Maybe (Int64, Account)) accountByEmail = (,,,) template serializer deserializer True where @@ -73,11 +72,11 @@ accountByEmail = "SELECT id, email, password, first_name, last_name \ \FROM account WHERE email = $1" serializer = - S.value S.text + HS.value HS.text deserializer = - D.result (D.maybeRow (identifiedDeserializer accountDeserializer)) + HD.result (HD.maybeRow (identifiedDeserializer accountDeserializer)) -insertAccount :: Query.ParametricQuery Account Int64 +insertAccount :: H.ParametricQuery Account Int64 insertAccount = (,,,) template serializer deserializer True where @@ -88,22 +87,22 @@ insertAccount = serializer = accountSerializer deserializer = - D.result (D.singleRow idDeserializer) + HD.result (HD.singleRow idDeserializer) -- * Deserializers ------------------------- -idDeserializer :: D.Row Int64 +idDeserializer :: HD.Row Int64 idDeserializer = - D.value D.int8 + HD.value HD.int8 -accountDeserializer :: D.Row Account +accountDeserializer :: HD.Row Account accountDeserializer = - liftM4 Account (D.value def) (D.value def) (D.value def) (D.value def) + liftM4 Account (HD.value def) (HD.value def) (HD.value def) (HD.value def) -identifiedDeserializer :: D.Row a -> D.Row (Int64, a) +identifiedDeserializer :: HD.Row a -> HD.Row (Int64, a) identifiedDeserializer aDeserializer = liftM2 (,) idDeserializer aDeserializer @@ -112,11 +111,11 @@ identifiedDeserializer aDeserializer = ------------------------- -accountSerializer :: S.Params Account +accountSerializer :: HS.Params Account accountSerializer = contramap (\(Account a b c d) -> (a, b, c, d)) $ - contrazip4 (S.value S.text) - (S.value S.bytea) - (S.value S.text) - (S.value S.text) + contrazip4 (HS.value HS.text) + (HS.value HS.bytea) + (HS.value HS.text) + (HS.value HS.text) diff --git a/hasql.cabal b/hasql.cabal index e609b66f4a..24771c0922 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -60,10 +60,9 @@ library Hasql.Serialization.Params Hasql.PreparedStatementRegistry exposed-modules: - Hasql.Query Hasql.Deserialization Hasql.Serialization - Hasql.Connection + Hasql build-depends: -- parsing: attoparsec >= 0.10 && < 0.14, diff --git a/library/Hasql/Connection.hs b/library/Hasql.hs similarity index 86% rename from library/Hasql/Connection.hs rename to library/Hasql.hs index 5ee4720eeb..5fc7d3e34c 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql.hs @@ -1,9 +1,13 @@ -module Hasql.Connection +module Hasql ( + -- * Connection management Connection, Settings.Settings(..), acquire, release, + -- * Query execution + ParametricQuery(..), + NonparametricQuery(..), executeParametricQuery, -- * Errors AcquisitionError(..), @@ -15,7 +19,6 @@ where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Query as Query import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Deserialization.Results as ResultsDeserialization import qualified Hasql.Deserialization as Deserialization @@ -104,9 +107,27 @@ release :: Connection -> IO () release (Connection pqConnection _ _) = LibPQ.finish pqConnection + +-- | +-- A strictly single-statement query, which can be parameterized and prepared. +-- +-- SQL template, params serializer, results deserializer and a flag, determining whether it should be prepared. +-- +type ParametricQuery a b = + (ByteString, Serialization.Params a, Deserialization.Results b, Bool) + +-- | +-- A non-parameterizable and non-preparable query, +-- which however can contain multiple statements. +-- +-- SQL, results deserializer. +-- +type NonparametricQuery a = + (ByteString, Deserialization.Results a) + -- | -- Execute a query, producing either a deserialization failure or a successful result. -executeParametricQuery :: Connection -> Query.ParametricQuery a b -> a -> IO (Either ResultsError b) +executeParametricQuery :: Connection -> ParametricQuery a b -> a -> IO (Either ResultsError b) executeParametricQuery (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 9de2b2d9e0..f0cf2bcad0 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -165,7 +165,7 @@ rowsAffected = -- | -- Exactly one row. --- Will raise the 'Hasql.Connection.UnexpectedAmountOfRows' error if it's any other. +-- Will raise the 'Hasql.UnexpectedAmountOfRows' error if it's any other. -- {-# INLINABLE singleRow #-} singleRow :: Row a -> Result a diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs deleted file mode 100644 index 68f2c4fb7e..0000000000 --- a/library/Hasql/Query.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Hasql.Query -( - ParametricQuery(..), - NonparametricQuery(..), -) -where - -import Hasql.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Deserialization as Deserialization -import qualified Hasql.Serialization as Serialization - - --- | --- A strictly single-statement query, which can be parameterized and prepared. --- --- SQL template, params serializer, results deserializer and a flag, determining whether it should be prepared. --- -type ParametricQuery a b = - (ByteString, Serialization.Params a, Deserialization.Results b, Bool) - --- | --- A non-parameterizable and non-preparable query, --- which however can contain multiple statements. --- --- SQL, results deserializer. --- -type NonparametricQuery a = - (ByteString, Deserialization.Results a) From 1f34c3f4f3d3e1eee2c5068a8644661a53681363 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Nov 2015 10:29:33 +0300 Subject: [PATCH 0194/1204] Non-parametric query execution and refactorings --- library/Hasql.hs | 11 ++++++++++- library/Hasql/Deserialization/Results.hs | 16 ++++++++++++++++ library/Hasql/IO.hs | 10 ++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 5fc7d3e34c..5ddd9ffc8d 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -9,6 +9,7 @@ module Hasql ParametricQuery(..), NonparametricQuery(..), executeParametricQuery, + executeNonparametricQuery, -- * Errors AcquisitionError(..), ResultsError(..), @@ -126,13 +127,21 @@ type NonparametricQuery a = (ByteString, Deserialization.Results a) -- | --- Execute a query, producing either a deserialization failure or a successful result. +-- Execute a parametric query, producing either a deserialization failure or a successful result. executeParametricQuery :: Connection -> ParametricQuery a b -> a -> IO (Either ResultsError b) executeParametricQuery (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) +-- | +-- Execute a non-parametric query, producing either a deserialization failure or a successful result. +executeNonparametricQuery :: Connection -> NonparametricQuery a -> IO (Either ResultsError a) +executeNonparametricQuery (Connection pqConnection integerDatetimes registry) (sql, deserializer) = + fmap (mapLeft coerceResultsError) $ runEitherT $ do + EitherT $ IO.sendNonparametricQuery pqConnection sql + EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) + -- | -- WARNING: We need to take special care that the structure of -- the "ResultsDeserialization.Error" type in the public API is an exact copy of diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index ae53571015..98e9f4ec21 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -71,6 +71,22 @@ getResultMaybe :: Results (Maybe LibPQ.Result) getResultMaybe = Results $ ReaderT $ \(_, connection) -> lift $ LibPQ.getResult connection +{-# INLINABLE dropRemainders #-} +dropRemainders :: Results () +dropRemainders = + Results $ ReaderT $ \(integerDatetimes, connection) -> loop integerDatetimes connection + where + loop integerDatetimes connection = + getResultMaybe >>= Prelude.maybe (pure ()) onResult + where + getResultMaybe = + lift $ LibPQ.getResult connection + onResult result = + checkErrors *> loop integerDatetimes connection + where + checkErrors = + EitherT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) + cancel :: Results () cancel = undefined diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index b32bfab8b7..6b3ad908b4 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -61,10 +61,7 @@ initConnection c = {-# INLINE getResults #-} getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO (Either ResultsDeserialization.Error a) getResults connection integerDatetimes des = - do - result <- ResultsDeserialization.run des (integerDatetimes, connection) - fix $ \loop -> LibPQ.getResult connection >>= maybe (pure ()) (const loop) - pure result + ResultsDeserialization.run (des <* ResultsDeserialization.dropRemainders) (integerDatetimes, connection) {-# INLINABLE getPreparedStatementKey #-} getPreparedStatementKey :: @@ -145,3 +142,8 @@ sendParametricQuery connection integerDatetimes registry template serializer pre ParamsSerialization.run'' serializer params integerDatetimes in sendUnpreparedParametricQuery connection template paramList + +{-# INLINABLE sendNonparametricQuery #-} +sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDeserialization.Error ()) +sendNonparametricQuery connection sql = + checkedSend connection $ LibPQ.sendQuery connection sql From 676f52c6bb1cf3d0593043ea8698575918fa9c56 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Nov 2015 12:10:28 +0300 Subject: [PATCH 0195/1204] Update errors --- library/Hasql.hs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 5ddd9ffc8d..c8245b0633 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -41,7 +41,7 @@ data ResultsError = -- Usually indicates problems with connection. ClientError !(Maybe ByteString) | ResultError !ResultError - deriving (Show) + deriving (Show, Eq) data ResultError = -- | @@ -72,22 +72,18 @@ data ResultError = -- | -- An unexpected amount of rows. UnexpectedAmountOfRows !Int - deriving (Show) + deriving (Show, Eq) data RowError = EndOfInput | UnexpectedNull | ValueError !Text - deriving (Show) + deriving (Show, Eq) -- | -- A connection acquistion error. -data AcquisitionError = - -- | Some errors during connection. - BadConnectionStatus !(Maybe ByteString) | - -- | The server is running a too old version of Postgres. - UnsupportedVersion !Int - deriving (Show) +type AcquisitionError = + Maybe ByteString -- | -- Acquire a connection using the provided settings. @@ -95,8 +91,7 @@ acquire :: Settings.Settings -> IO (Either AcquisitionError Connection) acquire settings = runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) - lift (IO.checkConnectionStatus pqConnection) >>= traverse (left . BadConnectionStatus) - lift (IO.checkServerVersion pqConnection) >>= traverse (left . UnsupportedVersion) + lift (IO.checkConnectionStatus pqConnection) >>= traverse left lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) registry <- lift (IO.acquirePreparedStatementRegistry) From d4534fe9ba7b5dc9908c30e1b18cd42482b3abe1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Nov 2015 14:41:53 +0300 Subject: [PATCH 0196/1204] Drop the NonparametricQuery, since its backing "libpq" API does not support the binary protocol --- demo/Main.hs | 10 +++++----- library/Hasql.hs | 33 +++++++-------------------------- 2 files changed, 12 insertions(+), 31 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index 338968e9f1..e75f609e61 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -17,12 +17,12 @@ main = case connectionEither of Left e -> print e Right connection -> do - result <- H.executeParametricQuery connection sumParametricQuery (1, 2) + result <- H.query connection sumQuery (1, 2) print result where settings = H.ParametricSettings "localhost" 5432 "postgres" "" "postgres" - sumParametricQuery = + sumQuery = (,,,) template serializer deserializer True where template = @@ -52,7 +52,7 @@ data Account = ------------------------- -updateMenu :: H.ParametricQuery (Text, Int64) Int64 +updateMenu :: H.Query (Text, Int64) Int64 updateMenu = (,,,) template serializer deserializer True where @@ -64,7 +64,7 @@ updateMenu = deserializer = HD.result (HD.rowsAffected) -accountByEmail :: H.ParametricQuery Text (Maybe (Int64, Account)) +accountByEmail :: H.Query Text (Maybe (Int64, Account)) accountByEmail = (,,,) template serializer deserializer True where @@ -76,7 +76,7 @@ accountByEmail = deserializer = HD.result (HD.maybeRow (identifiedDeserializer accountDeserializer)) -insertAccount :: H.ParametricQuery Account Int64 +insertAccount :: H.Query Account Int64 insertAccount = (,,,) template serializer deserializer True where diff --git a/library/Hasql.hs b/library/Hasql.hs index c8245b0633..1304b28228 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,15 +1,13 @@ module Hasql ( - -- * Connection management + -- * Connection Connection, Settings.Settings(..), acquire, release, - -- * Query execution - ParametricQuery(..), - NonparametricQuery(..), - executeParametricQuery, - executeNonparametricQuery, + -- * Query + Query(..), + query, -- * Errors AcquisitionError(..), ResultsError(..), @@ -109,34 +107,17 @@ release (Connection pqConnection _ _) = -- -- SQL template, params serializer, results deserializer and a flag, determining whether it should be prepared. -- -type ParametricQuery a b = +type Query a b = (ByteString, Serialization.Params a, Deserialization.Results b, Bool) --- | --- A non-parameterizable and non-preparable query, --- which however can contain multiple statements. --- --- SQL, results deserializer. --- -type NonparametricQuery a = - (ByteString, Deserialization.Results a) - -- | -- Execute a parametric query, producing either a deserialization failure or a successful result. -executeParametricQuery :: Connection -> ParametricQuery a b -> a -> IO (Either ResultsError b) -executeParametricQuery (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = +query :: Connection -> Query a b -> a -> IO (Either ResultsError b) +query (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) --- | --- Execute a non-parametric query, producing either a deserialization failure or a successful result. -executeNonparametricQuery :: Connection -> NonparametricQuery a -> IO (Either ResultsError a) -executeNonparametricQuery (Connection pqConnection integerDatetimes registry) (sql, deserializer) = - fmap (mapLeft coerceResultsError) $ runEitherT $ do - EitherT $ IO.sendNonparametricQuery pqConnection sql - EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) - -- | -- WARNING: We need to take special care that the structure of -- the "ResultsDeserialization.Error" type in the public API is an exact copy of From 3438be4777ddaa011ea1b21c0327f749f9c85636 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Nov 2015 14:45:56 +0300 Subject: [PATCH 0197/1204] Unit Default Params --- library/Hasql/Serialization.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library/Hasql/Serialization.hs b/library/Hasql/Serialization.hs index b61cfccedf..0d10e04335 100644 --- a/library/Hasql/Serialization.hs +++ b/library/Hasql/Serialization.hs @@ -100,6 +100,11 @@ nullableValue (Value x) = -- ** Instances ------------------------- +instance Default (Params ()) where + {-# INLINE def #-} + def = + mempty + instance Default (Value a) => Default (Params (Identity a)) where {-# INLINE def #-} def = From 79d3be1a7876c328144c504b3550a7cbf42d0451 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Nov 2015 12:13:45 +0300 Subject: [PATCH 0198/1204] Tests --- hasql.cabal | 32 +++++++----- tasty/Main.hs | 119 ++++++++++++++++++++++++++++++++++++++++-- tasty/Main/DSL.hs | 41 +++++++++++++++ tasty/Main/Prelude.hs | 73 ++++++++++++++++++++++++++ tasty/Main/Queries.hs | 27 ++++++++++ 5 files changed, 275 insertions(+), 17 deletions(-) create mode 100644 tasty/Main/DSL.hs create mode 100644 tasty/Main/Prelude.hs create mode 100644 tasty/Main/Queries.hs diff --git a/hasql.cabal b/hasql.cabal index 24771c0922..a968bce858 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -117,6 +117,8 @@ test-suite doctest Haskell2010 +-- Note that this test-suite is supposed to be single-threaded. +-- Hence the absense of the appropriate GHC flags. test-suite tasty type: exitcode-stdio-1.0 @@ -124,9 +126,10 @@ test-suite tasty tasty main-is: Main.hs - ghc-options: - -threaded - "-with-rtsopts=-N" + other-modules: + Main.DSL + Main.Queries + Main.Prelude default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: @@ -142,17 +145,20 @@ test-suite tasty quickcheck-instances >= 0.3.11 && < 0.4, QuickCheck >= 2.8.1 && < 2.9, -- data: - uuid == 1.3.*, - time >= 1.4 && < 1.6, - scientific >= 0.2 && < 0.4, - bytestring >= 0.10.4 && < 0.11, - text >= 1 && < 2, - vector >= 0.10 && < 0.12, + uuid, + time, + scientific, + bytestring, + text, + vector, + hashable, + dlist, -- general: - conversion == 1.*, - conversion-bytestring == 1.*, - conversion-text == 1.*, - either == 4.*, + data-default-class, + profunctors, + contravariant, + contravariant-extras, + either, transformers, base-prelude, base diff --git a/tasty/Main.hs b/tasty/Main.hs index b6f967785e..d050b850f8 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -1,19 +1,130 @@ module Main where -import BasePrelude hiding (assert, isRight, isLeft) -import Control.Monad.IO.Class +import Main.Prelude hiding (assert, isRight, isLeft) import Test.QuickCheck.Instances import Test.Tasty +import qualified Main.Queries as Queries import qualified Test.Tasty.HUnit as HUnit import qualified Test.Tasty.SmallCheck as SmallCheck import qualified Test.Tasty.QuickCheck as QuickCheck import qualified Test.QuickCheck as QuickCheck - +import qualified Main.DSL as DSL +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD main = defaultMain tree tree = - testGroup "" + testGroup "All tests" [ + HUnit.testCase "Enum" $ + HUnit.assertEqual "" (Right "ok") $ + let + actual = + unsafePerformIO $ + DSL.session $ do + let + query = + (sql, mempty, HD.result HD.noResult, True) + where + sql = + "drop type if exists mood" + in DSL.query () query + let + query = + (sql, mempty, HD.result HD.noResult, True) + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.query () query + let + query = + (sql, serializer, deserializer, True) + where + sql = + "select ($1 :: mood)" + deserializer = + HD.result (HD.singleRow (HD.value (HD.enum (Just . id)))) + serializer = + HS.value (HS.enum id) + in DSL.query "ok" query + in actual + , + HUnit.testCase "The same prepared statement used on different types" $ + HUnit.assertEqual "" (Right ("ok", 1)) $ + let + actual = + unsafePerformIO $ + DSL.session $ do + let + effect1 = + DSL.query "ok" query + where + query = + (sql, serializer, deserializer, True) + where + sql = + "select $1" + serializer = + HS.value HS.text + deserializer = + HD.result (HD.singleRow (HD.value (HD.text))) + effect2 = + DSL.query 1 query + where + query = + (sql, serializer, deserializer, True) + where + sql = + "select $1" + serializer = + HS.value HS.int8 + deserializer = + HD.result (HD.singleRow (HD.value HD.int8)) + in (,) <$> effect1 <*> effect2 + in actual + , + HUnit.testCase "Affected rows counting" $ + HUnit.assertEqual "" (Right 100) $ + let + actual = + unsafePerformIO $ + DSL.session $ do + dropTable + createTable + replicateM_ 100 insertRow + deleteRows <* dropTable + where + dropTable = + DSL.query () $ Queries.plain $ + "drop table if exists a" + createTable = + DSL.query () $ Queries.plain $ + "create table a (id bigserial not null, name varchar not null, primary key (id))" + insertRow = + DSL.query () $ Queries.plain $ + "insert into a (name) values ('a')" + deleteRows = + DSL.query () (sql, def, deserializer, False) + where + sql = + "delete from a" + deserializer = + HD.result HD.rowsAffected + in actual + , + HUnit.testCase "Result of an auto-incremented column" $ + let + actualIO = + DSL.session $ do + DSL.query () $ Queries.plain $ "drop table if exists a" + DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" + id1 <- DSL.query () ("insert into a (v) values ('a') returning id", def, HD.result (HD.singleRow (HD.value HD.int4)), False) + id2 <- DSL.query () ("insert into a (v) values ('b') returning id", def, HD.result (HD.singleRow (HD.value HD.int4)), False) + DSL.query () $ Queries.plain $ "drop table if exists a" + pure (id1, id2) + in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO ] + diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs new file mode 100644 index 0000000000..4b3bb32929 --- /dev/null +++ b/tasty/Main/DSL.hs @@ -0,0 +1,41 @@ +module Main.DSL where + +import Main.Prelude +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD + + +newtype Session a = + Session (ReaderT H.Connection (EitherT H.ResultsError IO) a) + deriving (Functor, Applicative, Monad, MonadIO) + +data SessionError = + ConnectionError (H.AcquisitionError) | + ResultsError (H.ResultsError) + deriving (Show, Eq) + +session :: Session a -> IO (Either SessionError a) +session (Session impl) = + runEitherT $ acquire >>= \connection -> use connection <* release connection + where + acquire = + EitherT $ fmap (mapLeft ConnectionError) $ H.acquire settings + where + settings = + H.ParametricSettings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + use connection = + bimapEitherT ResultsError id $ + runReaderT impl connection + release connection = + lift $ H.release connection + +query :: a -> H.Query a b -> Session b +query params query = + Session $ ReaderT $ \connection -> EitherT $ H.query connection query params diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs new file mode 100644 index 0000000000..06a5e4a9f7 --- /dev/null +++ b/tasty/Main/Prelude.hs @@ -0,0 +1,73 @@ +module Main.Prelude +( + module Exports, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) + +-- transformers +------------------------- +import Control.Monad.IO.Class as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Data.Functor.Identity as Exports + +-- data-default-class +------------------------- +import Data.Default.Class as Exports + +-- profunctors +------------------------- +import Data.Profunctor.Unsafe as Exports + +-- contravariant +------------------------- +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports + +-- contravariant-extras +------------------------- +import Contravariant.Extras as Exports + +-- either +------------------------- +import Control.Monad.Trans.Either as Exports +import Data.Either.Combinators as Exports + +-- hashable +------------------------- +import Data.Hashable as Exports (Hashable(..)) + +-- text +------------------------- +import Data.Text as Exports (Text) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) + +-- uuid +------------------------- +import Data.UUID as Exports (UUID) + +-- time +------------------------- +import Data.Time as Exports + +-- vector +------------------------- +import Data.Vector as Exports (Vector) + +-- dlist +------------------------- +import Data.DList as Exports (DList) diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs new file mode 100644 index 0000000000..9cb6b2a19a --- /dev/null +++ b/tasty/Main/Queries.hs @@ -0,0 +1,27 @@ +module Main.Queries where + +import Main.Prelude hiding (def) +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD +import qualified Main.Prelude as Prelude + + +def :: ByteString -> H.Query () () +def sql = + (sql, Prelude.def, Prelude.def, False) + +plain :: ByteString -> H.Query () () +plain sql = + (sql, mempty, HD.result HD.noResult, False) + +dropType :: ByteString -> H.Query () () +dropType name = + plain $ + "drop type if exists " <> name + +createEnum :: ByteString -> [ByteString] -> H.Query () () +createEnum name values = + plain $ + "create type " <> name <> " as enum (" <> + mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) <> ")" From eb9c4be7328850687f48823464f874b85a3013e7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Nov 2015 20:03:33 +0300 Subject: [PATCH 0199/1204] Rename a few things --- demo/Main.hs | 2 +- library/Hasql.hs | 19 +++++++++---------- tasty/Main/DSL.hs | 6 +++--- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index e75f609e61..ec8dbea205 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -13,7 +13,7 @@ import qualified Hasql.Deserialization as HD main = do - connectionEither <- H.acquire settings + connectionEither <- H.connect settings case connectionEither of Left e -> print e Right connection -> do diff --git a/library/Hasql.hs b/library/Hasql.hs index 1304b28228..0e0278feaf 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -3,16 +3,15 @@ module Hasql -- * Connection Connection, Settings.Settings(..), - acquire, - release, + ConnectionError(..), + connect, + disconnect, -- * Query Query(..), - query, - -- * Errors - AcquisitionError(..), ResultsError(..), ResultError(..), RowError(..), + query, ) where @@ -80,13 +79,13 @@ data RowError = -- | -- A connection acquistion error. -type AcquisitionError = +type ConnectionError = Maybe ByteString -- | -- Acquire a connection using the provided settings. -acquire :: Settings.Settings -> IO (Either AcquisitionError Connection) -acquire settings = +connect :: Settings.Settings -> IO (Either ConnectionError Connection) +connect settings = runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) lift (IO.checkConnectionStatus pqConnection) >>= traverse left @@ -97,8 +96,8 @@ acquire settings = -- | -- Release the connection. -release :: Connection -> IO () -release (Connection pqConnection _ _) = +disconnect :: Connection -> IO () +disconnect (Connection pqConnection _ _) = LibPQ.finish pqConnection diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 4b3bb32929..249794d6f4 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -11,7 +11,7 @@ newtype Session a = deriving (Functor, Applicative, Monad, MonadIO) data SessionError = - ConnectionError (H.AcquisitionError) | + ConnectionError (H.ConnectionError) | ResultsError (H.ResultsError) deriving (Show, Eq) @@ -20,7 +20,7 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ H.acquire settings + EitherT $ fmap (mapLeft ConnectionError) $ H.connect settings where settings = H.ParametricSettings host port user password database @@ -34,7 +34,7 @@ session (Session impl) = bimapEitherT ResultsError id $ runReaderT impl connection release connection = - lift $ H.release connection + lift $ H.disconnect connection query :: a -> H.Query a b -> Session b query params query = From 7694de6814dd7a86c85ca2e4df4f8807955cc949 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Nov 2015 20:13:15 +0300 Subject: [PATCH 0200/1204] Remove the "Results" layer from the public deserialization API --- demo/Main.hs | 8 +-- library/Hasql.hs | 6 +-- library/Hasql/Deserialization.hs | 88 ++++---------------------------- tasty/Main.hs | 16 +++--- tasty/Main/Queries.hs | 2 +- 5 files changed, 27 insertions(+), 93 deletions(-) diff --git a/demo/Main.hs b/demo/Main.hs index ec8dbea205..d803424b49 100644 --- a/demo/Main.hs +++ b/demo/Main.hs @@ -31,7 +31,7 @@ main = contramap fst (HS.value HS.int8) <> contramap snd (HS.value HS.int8) deserializer = - HD.result (HD.singleRow (HD.value HD.int8)) + HD.singleRow (HD.value HD.int8) @@ -62,7 +62,7 @@ updateMenu = contrazip2 (HS.value HS.text) (HS.value HS.int8) deserializer = - HD.result (HD.rowsAffected) + HD.rowsAffected accountByEmail :: H.Query Text (Maybe (Int64, Account)) accountByEmail = @@ -74,7 +74,7 @@ accountByEmail = serializer = HS.value HS.text deserializer = - HD.result (HD.maybeRow (identifiedDeserializer accountDeserializer)) + HD.maybeRow (identifiedDeserializer accountDeserializer) insertAccount :: H.Query Account Int64 insertAccount = @@ -87,7 +87,7 @@ insertAccount = serializer = accountSerializer deserializer = - HD.result (HD.singleRow idDeserializer) + HD.singleRow idDeserializer -- * Deserializers diff --git a/library/Hasql.hs b/library/Hasql.hs index 0e0278feaf..74e17b1c41 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -104,10 +104,10 @@ disconnect (Connection pqConnection _ _) = -- | -- A strictly single-statement query, which can be parameterized and prepared. -- --- SQL template, params serializer, results deserializer and a flag, determining whether it should be prepared. +-- SQL template, params serializer, result deserializer and a flag, determining whether it should be prepared. -- type Query a b = - (ByteString, Serialization.Params a, Deserialization.Results b, Bool) + (ByteString, Serialization.Params a, Deserialization.Result b, Bool) -- | -- Execute a parametric query, producing either a deserialization failure or a successful result. @@ -125,7 +125,7 @@ coerceResultsError :: ResultsDeserialization.Error -> ResultsError coerceResultsError = unsafeCoerce -coerceDeserializer :: Deserialization.Results a -> ResultsDeserialization.Results a +coerceDeserializer :: Deserialization.Result a -> ResultsDeserialization.Results a coerceDeserializer = unsafeCoerce diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index f0cf2bcad0..e1efbe4a54 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -2,9 +2,6 @@ -- A DSL for creating result deserializers. module Hasql.Deserialization ( - -- * Results - Results, - result, -- * Result Result, noResult, @@ -71,77 +68,14 @@ import qualified Hasql.Deserialization.Composite as Composite import qualified Hasql.Prelude as Prelude --- * Results -------------------------- - --- | --- Deserializer of possibly multiple results of a single query. --- --- Multiple results get produced by non-parametric queries with multiple statements. --- --- Parametric queries always produce exactly one result, --- so don't confuse this with a multi-row result. --- -newtype Results a = - Results (Results.Results a) - deriving (Functor, Applicative, Monad) - --- | --- Lift an individual result deserializer to --- a deserializer of multiple results. -{-# INLINABLE result #-} -result :: Result a -> Results a -result (Result result) = - Results (Results.single result) - --- ** Instances -------------------------- - --- | Maps to @(result 'noResult')@. -instance Default (Results ()) where - {-# INLINE def #-} - def = - result noResult - --- | Maps to @(result 'rowsAffected')@. -instance Default (Results Int64) where - {-# INLINE def #-} - def = - result rowsAffected - --- | Maps to @(result ('maybeRow' def))@. -instance Default (Row a) => Default (Results (Maybe a)) where - {-# INLINE def #-} - def = - result (maybeRow def) - --- | Maps to @(result ('rowsVector' def))@. -instance Default (Row a) => Default (Results (Vector a)) where - {-# INLINE def #-} - def = - result (rowsVector def) - --- | Maps to @(result ('rowsList' def))@. -instance Default (Row a) => Default (Results ([] a)) where - {-# INLINE def #-} - def = - result (rowsList def) - --- | Maps to @(result (fmap Identity ('singleRow' def)))@. -instance Default (Row a) => Default (Results (Identity a)) where - {-# INLINE def #-} - def = - result (fmap Identity (singleRow def)) - - -- * Result ------------------------- -- | --- Deserializer of an individual result. +-- Deserializer of a query result. -- newtype Result a = - Result (Result.Result a) + Result (Results.Results a) deriving (Functor) -- | @@ -152,7 +86,7 @@ newtype Result a = {-# INLINABLE noResult #-} noResult :: Result () noResult = - Result Result.unit + Result (Results.single Result.unit) -- | -- Get the amount of rows affected by such statements as @@ -161,7 +95,7 @@ noResult = {-# INLINABLE rowsAffected #-} rowsAffected :: Result Int64 rowsAffected = - Result Result.rowsAffected + Result (Results.single Result.rowsAffected) -- | -- Exactly one row. @@ -170,7 +104,7 @@ rowsAffected = {-# INLINABLE singleRow #-} singleRow :: Row a -> Result a singleRow (Row row) = - Result (Result.single row) + Result (Results.single (Result.single row)) -- ** Multi-row traversers ------------------------- @@ -181,7 +115,7 @@ singleRow (Row row) = {-# INLINABLE generateRows #-} generateRows :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row a -> Result b generateRows generateM (Row row) = - Result (Result.generate generateM row) + Result (Results.single (Result.generate generateM row)) -- | -- Foldl multiple rows. @@ -189,7 +123,7 @@ generateRows generateM (Row row) = {-# INLINABLE foldlRows #-} foldlRows :: (a -> b -> a) -> a -> Row b -> Result a foldlRows step init (Row row) = - Result (Result.foldl step init row) + Result (Results.single (Result.foldl step init row)) -- | -- Foldr multiple rows. @@ -197,7 +131,7 @@ foldlRows step init (Row row) = {-# INLINABLE foldrRows #-} foldrRows :: (b -> a -> a) -> a -> Row b -> Result a foldrRows step init (Row row) = - Result (Result.foldr step init row) + Result (Results.single (Result.foldr step init row)) -- ** Specialized multi-row results ------------------------- @@ -208,7 +142,7 @@ foldrRows step init (Row row) = {-# INLINABLE maybeRow #-} maybeRow :: Row a -> Result (Maybe a) maybeRow (Row row) = - Result (Result.maybe row) + Result (Results.single (Result.maybe row)) -- | -- Zero or more rows packed into the vector. @@ -216,7 +150,7 @@ maybeRow (Row row) = {-# INLINABLE rowsVector #-} rowsVector :: Row a -> Result (Vector a) rowsVector (Row row) = - Result (Result.generate Vector.generateM row) + Result (Results.single (Result.generate Vector.generateM row)) -- | -- Zero or more rows packed into the list. @@ -224,7 +158,7 @@ rowsVector (Row row) = {-# INLINABLE rowsList #-} rowsList :: Row a -> Result [a] rowsList (Row row) = - Result (Result.foldr (:) [] row) + Result (Results.single (Result.foldr (:) [] row)) -- ** Instances diff --git a/tasty/Main.hs b/tasty/Main.hs index d050b850f8..266aa82f50 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -27,14 +27,14 @@ tree = DSL.session $ do let query = - (sql, mempty, HD.result HD.noResult, True) + (sql, mempty, HD.noResult, True) where sql = "drop type if exists mood" in DSL.query () query let query = - (sql, mempty, HD.result HD.noResult, True) + (sql, mempty, HD.noResult, True) where sql = "create type mood as enum ('sad', 'ok', 'happy')" @@ -46,7 +46,7 @@ tree = sql = "select ($1 :: mood)" deserializer = - HD.result (HD.singleRow (HD.value (HD.enum (Just . id)))) + (HD.singleRow (HD.value (HD.enum (Just . id)))) serializer = HS.value (HS.enum id) in DSL.query "ok" query @@ -70,7 +70,7 @@ tree = serializer = HS.value HS.text deserializer = - HD.result (HD.singleRow (HD.value (HD.text))) + (HD.singleRow (HD.value (HD.text))) effect2 = DSL.query 1 query where @@ -82,7 +82,7 @@ tree = serializer = HS.value HS.int8 deserializer = - HD.result (HD.singleRow (HD.value HD.int8)) + (HD.singleRow (HD.value HD.int8)) in (,) <$> effect1 <*> effect2 in actual , @@ -112,7 +112,7 @@ tree = sql = "delete from a" deserializer = - HD.result HD.rowsAffected + HD.rowsAffected in actual , HUnit.testCase "Result of an auto-incremented column" $ @@ -121,8 +121,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () ("insert into a (v) values ('a') returning id", def, HD.result (HD.singleRow (HD.value HD.int4)), False) - id2 <- DSL.query () ("insert into a (v) values ('b') returning id", def, HD.result (HD.singleRow (HD.value HD.int4)), False) + id1 <- DSL.query () ("insert into a (v) values ('a') returning id", def, (HD.singleRow (HD.value HD.int4)), False) + id2 <- DSL.query () ("insert into a (v) values ('b') returning id", def, (HD.singleRow (HD.value HD.int4)), False) DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 9cb6b2a19a..ba92ddd0e8 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -13,7 +13,7 @@ def sql = plain :: ByteString -> H.Query () () plain sql = - (sql, mempty, HD.result HD.noResult, False) + (sql, mempty, HD.noResult, False) dropType :: ByteString -> H.Query () () dropType name = From 4ec8931ed41f7ef58117acc4827e7a6ea812dc05 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Nov 2015 22:06:47 +0300 Subject: [PATCH 0201/1204] Benchmarks --- benchmark/Main.hs | 49 ++++++++++++++++++++++++++ benchmark/Main/Prelude.hs | 73 +++++++++++++++++++++++++++++++++++++++ benchmark/Main/Queries.hs | 27 +++++++++++++++ hasql.cabal | 43 +++++++++++++++++++++++ 4 files changed, 192 insertions(+) create mode 100644 benchmark/Main.hs create mode 100644 benchmark/Main/Prelude.hs create mode 100644 benchmark/Main/Queries.hs diff --git a/benchmark/Main.hs b/benchmark/Main.hs new file mode 100644 index 0000000000..27120dc181 --- /dev/null +++ b/benchmark/Main.hs @@ -0,0 +1,49 @@ +module Main where + +import Main.Prelude +import Criterion.Main +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD +import qualified Main.Queries as Q + + +main = + H.connect settings >>= either (fail . show) use + where + settings = + H.ParametricSettings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + use connection = + defaultMain + [ + bgroup "decoding" + [ + bgroup "1 column" + [ + bench "1 row" $ nfIO $ query () (Q.select1 1) + , + bench "100 rows" $ nfIO $ query () (Q.select1 100) + , + bench "10000 rows" $ nfIO $ query () (Q.select1 10000) + ] + , + bgroup "4 columns" + [ + bench "1 row" $ nfIO $ query () (Q.select4 1) + , + bench "100 rows" $ nfIO $ query () (Q.select4 100) + , + bench "10000 rows" $ nfIO $ query () (Q.select4 10000) + ] + ] + ] + where + query :: a -> H.Query a b -> IO b + query params query = + H.query connection query params >>= either (fail . show) pure diff --git a/benchmark/Main/Prelude.hs b/benchmark/Main/Prelude.hs new file mode 100644 index 0000000000..06a5e4a9f7 --- /dev/null +++ b/benchmark/Main/Prelude.hs @@ -0,0 +1,73 @@ +module Main.Prelude +( + module Exports, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) + +-- transformers +------------------------- +import Control.Monad.IO.Class as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Data.Functor.Identity as Exports + +-- data-default-class +------------------------- +import Data.Default.Class as Exports + +-- profunctors +------------------------- +import Data.Profunctor.Unsafe as Exports + +-- contravariant +------------------------- +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports + +-- contravariant-extras +------------------------- +import Contravariant.Extras as Exports + +-- either +------------------------- +import Control.Monad.Trans.Either as Exports +import Data.Either.Combinators as Exports + +-- hashable +------------------------- +import Data.Hashable as Exports (Hashable(..)) + +-- text +------------------------- +import Data.Text as Exports (Text) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) + +-- uuid +------------------------- +import Data.UUID as Exports (UUID) + +-- time +------------------------- +import Data.Time as Exports + +-- vector +------------------------- +import Data.Vector as Exports (Vector) + +-- dlist +------------------------- +import Data.DList as Exports (DList) diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs new file mode 100644 index 0000000000..8e78f78557 --- /dev/null +++ b/benchmark/Main/Queries.hs @@ -0,0 +1,27 @@ +module Main.Queries where + +import Main.Prelude +import qualified Hasql as H +import qualified Hasql.Serialization as HS +import qualified Hasql.Deserialization as HD + + +select1 :: Int -> H.Query () (Vector Int64) +select1 amount = + (sql, mempty, deserializer, True) + where + sql = + "values " <> + mconcat (intersperse ", " (replicate amount "(1)")) + deserializer = + HD.rowsVector (HD.value HD.int8) + +select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) +select4 amount = + (sql, mempty, deserializer, True) + where + sql = + "values " <> + mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) + deserializer = + HD.rowsVector ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) diff --git a/hasql.cabal b/hasql.cabal index a968bce858..9c487290a8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -184,3 +184,46 @@ executable demo text, bytestring, base-prelude + + +benchmark benchmark + type: + exitcode-stdio-1.0 + hs-source-dirs: + benchmark + main-is: + Main.hs + other-modules: + Main.Queries + ghc-options: + -O2 + -threaded + "-with-rtsopts=-N" + -funbox-strict-fields + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + hasql, + -- benchmarking: + criterion == 1.1.*, + -- data: + uuid, + time, + scientific, + bytestring, + text, + vector, + hashable, + dlist, + -- general: + data-default-class, + profunctors, + contravariant, + contravariant-extras, + either, + transformers, + base-prelude, + base + From de69caa6bca4fb95df5c64dac116d54880417a78 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 18 Nov 2015 22:46:26 +0300 Subject: [PATCH 0202/1204] Refactoring --- library/Hasql/Deserialization.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index e1efbe4a54..4a9cb273e6 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -149,16 +149,16 @@ maybeRow (Row row) = -- {-# INLINABLE rowsVector #-} rowsVector :: Row a -> Result (Vector a) -rowsVector (Row row) = - Result (Results.single (Result.generate Vector.generateM row)) +rowsVector = + generateRows Vector.generateM -- | -- Zero or more rows packed into the list. -- {-# INLINABLE rowsList #-} rowsList :: Row a -> Result [a] -rowsList (Row row) = - Result (Results.single (Result.foldr (:) [] row)) +rowsList = + foldrRows (:) [] -- ** Instances From 7ed67357ec90d4aa093d4e70fdb610ba9b985544 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 18 Nov 2015 22:56:36 +0300 Subject: [PATCH 0203/1204] List decoding test --- tasty/Main.hs | 6 ++++++ tasty/Main/Queries.hs | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 266aa82f50..84904a890d 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -126,5 +126,11 @@ tree = DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO + , + HUnit.testCase "List decoding" $ + let + actualIO = + DSL.session $ DSL.query () $ Queries.selectList + in HUnit.assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index ba92ddd0e8..13dd56b8bb 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -25,3 +25,12 @@ createEnum name values = plain $ "create type " <> name <> " as enum (" <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) <> ")" + +selectList :: H.Query () ([] (Int64, Int64)) +selectList = + (sql, mempty, deserializer, True) + where + sql = + "values (1,2), (3,4), (5,6)" + deserializer = + HD.rowsList ((,) <$> HD.value HD.int8 <*> HD.value HD.int8) From ce921693f20cc42ee7c2fd10e99ed1ac6e15ba2b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 03:13:12 +0300 Subject: [PATCH 0204/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 9c487290a8..82f7697c19 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1 + 0.8 category: Hasql, Database, PostgreSQL synopsis: From 4d9f3b90f548b78ed0b4e41866570bff3ee77b98 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 07:18:09 +0300 Subject: [PATCH 0205/1204] Profiling configuration options --- hasql.cabal | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 82f7697c19..00411f5f66 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -170,8 +170,14 @@ executable demo main-is: Main.hs ghc-options: + -O2 -threaded "-with-rtsopts=-N" + ghc-prof-options: + -O2 + -threaded + -fprof-auto + "-with-rtsopts=-N -p -s -h -i0.1" default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: @@ -199,7 +205,11 @@ benchmark benchmark -O2 -threaded "-with-rtsopts=-N" - -funbox-strict-fields + ghc-prof-options: + -O2 + -threaded + -fprof-auto + "-with-rtsopts=-N -p -s -h -i0.1" default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: From 3dd489bc5f6b622722fb4a12c35ddb79b4b50f7a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 07:59:49 +0300 Subject: [PATCH 0206/1204] Pragmas --- library/Hasql/Deserialization/Result.hs | 13 +++++++++++++ library/Hasql/Deserialization/Results.hs | 2 +- library/Hasql/Deserialization/Row.hs | 6 ++++++ library/Hasql/Deserialization/Value.hs | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index bce5b16c25..08426f4a8e 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -43,10 +43,12 @@ data Error = UnexpectedAmountOfRows !Int deriving (Show) +{-# INLINE run #-} run :: Result a -> (Bool, LibPQ.Result) -> IO (Either Error a) run (Result reader) env = runEitherT (runReaderT reader env) +{-# INLINE unit #-} unit :: Result () unit = checkExecStatus $ \case @@ -54,6 +56,7 @@ unit = LibPQ.TuplesOk -> True _ -> False +{-# INLINE rowsAffected #-} rowsAffected :: Result Int64 rowsAffected = do @@ -76,8 +79,10 @@ rowsAffected = mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes +{-# INLINE checkExecStatus #-} checkExecStatus :: (LibPQ.ExecStatus -> Bool) -> Result () checkExecStatus predicate = + {-# SCC "checkExecStatus" #-} do status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result unless (predicate status) $ do @@ -87,6 +92,7 @@ checkExecStatus predicate = LibPQ.FatalError -> serverError _ -> Result $ lift $ EitherT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) +{-# INLINE serverError #-} serverError :: Result () serverError = Result $ ReaderT $ \(_, result) -> EitherT $ do @@ -102,6 +108,7 @@ serverError = LibPQ.resultErrorField result LibPQ.DiagMessageHint pure $ Left $ ServerError code message detail hint +{-# INLINE maybe #-} maybe :: Row.Row a -> Result (Maybe a) maybe rowDes = do @@ -122,6 +129,7 @@ maybe rowDes = intToRow = LibPQ.Row . fromIntegral +{-# INLINE single #-} single :: Row.Row a -> Result a single rowDes = do @@ -141,8 +149,10 @@ single rowDes = intToRow = LibPQ.Row . fromIntegral +{-# INLINE generate #-} generate :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row.Row a -> Result b generate generateM rowDes = + {-# SCC "generate" #-} do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -159,8 +169,10 @@ generate generateM rowDes = intToRow = LibPQ.Row . fromIntegral +{-# INLINE foldl #-} foldl :: (a -> b -> a) -> a -> Row.Row b -> Result a foldl step init rowDes = + {-# SCC "foldl" #-} do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -181,6 +193,7 @@ foldl step init rowDes = intToRow = LibPQ.Row . fromIntegral +{-# INLINE foldr #-} foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a foldr step init rowDes = do diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index 98e9f4ec21..f0ff395032 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -42,7 +42,7 @@ clientError = -- | -- Parse a single result. -{-# INLINABLE single #-} +{-# INLINE single #-} single :: Result.Result a -> Results a single resultDes = Results $ ReaderT $ \(integerDatetimes, connection) -> EitherT $ do diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs index 89cef00142..4fb0fb80ef 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Deserialization/Row.hs @@ -22,19 +22,23 @@ data Error = deriving (Show) +{-# INLINE run #-} run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Error a) run (Row m) env = flip evalStateT 0 (flip runReaderT env (runEitherT m)) +{-# INLINE error #-} error :: Error -> Row a error x = Row (EitherT (return (Left x))) -- | -- Next value, decoded using the provided value deserializer. +{-# INLINE value #-} value :: Value.Value a -> Row (Maybe a) value valueDes = + {-# SCC "value" #-} Row $ EitherT $ ReaderT $ \(result, row, maxCol, integerDatetimes) -> StateT $ \col -> if col < maxCol then @@ -45,6 +49,8 @@ value valueDes = -- | -- Next value, decoded using the provided value deserializer. +{-# INLINE nonNullValue #-} nonNullValue :: Value.Value a -> Row a nonNullValue valueDes = + {-# SCC "nonNullValue" #-} value valueDes >>= maybe (error UnexpectedNull) pure diff --git a/library/Hasql/Deserialization/Value.hs b/library/Hasql/Deserialization/Value.hs index 31b845ab67..311ecb5257 100644 --- a/library/Hasql/Deserialization/Value.hs +++ b/library/Hasql/Deserialization/Value.hs @@ -18,5 +18,6 @@ run (Value imp) integerDatetimes = {-# INLINE decoder #-} decoder :: (Bool -> Decoder.Decoder a) -> Value a decoder = + {-# SCC "decoder" #-} Value . ReaderT From a3b34e6b0e89bdfe9f373c30a2545fb1a0e03fd4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 08:18:28 +0300 Subject: [PATCH 0207/1204] Attempt to optimize Row --- library/Hasql/Deserialization/Row.hs | 38 ++++++++++++++++------------ 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs index 4fb0fb80ef..77e695f4d0 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Deserialization/Row.hs @@ -7,14 +7,12 @@ import qualified Hasql.Deserialization.Value as Value newtype Row a = - Row - (EitherT Error - (ReaderT - (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) - (StateT LibPQ.Column IO)) - a) + Row (EitherT Error (ReaderT Env IO) a) deriving (Functor, Applicative, Monad) +data Env = + Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) + data Error = EndOfInput | UnexpectedNull | @@ -22,11 +20,15 @@ data Error = deriving (Show) +-- * Functions +------------------------- + {-# INLINE run #-} run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Error a) -run (Row m) env = - flip evalStateT 0 (flip runReaderT env (runEitherT m)) - +run (Row impl) (result, row, columnsAmount, integerDatetimes) = + do + columnRef <- newIORef 0 + runReaderT (runEitherT impl) (Env result row columnsAmount integerDatetimes columnRef) {-# INLINE error #-} error :: Error -> Row a @@ -39,13 +41,17 @@ error x = value :: Value.Value a -> Row (Maybe a) value valueDes = {-# SCC "value" #-} - Row $ EitherT $ ReaderT $ \(result, row, maxCol, integerDatetimes) -> StateT $ \col -> - if col < maxCol - then - flip fmap (LibPQ.getvalue result row col) $ \x -> - (traverse (mapLeft ValueError . Decoder.run (Value.run valueDes integerDatetimes)) x, - succ col) - else return (Left EndOfInput, col) + Row $ EitherT $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> do + col <- readIORef columnRef + writeIORef columnRef (succ col) + if col < columnsAmount + then do + valueMaybe <- LibPQ.getvalue result row col + pure $ + case valueMaybe of + Nothing -> Right Nothing + Just value -> fmap Just $ mapLeft ValueError $ Decoder.run (Value.run valueDes integerDatetimes) value + else return (Left EndOfInput) -- | -- Next value, decoded using the provided value deserializer. From 5c094a9aed98ab5d49c58ea09721478e18211181 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:27:44 +0300 Subject: [PATCH 0208/1204] Another attempt to optimize Row --- library/Hasql/Deserialization/Row.hs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs index 77e695f4d0..a1d5a35026 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Deserialization/Row.hs @@ -7,7 +7,7 @@ import qualified Hasql.Deserialization.Value as Value newtype Row a = - Row (EitherT Error (ReaderT Env IO) a) + Row (ReaderT Env (EitherT Error IO) a) deriving (Functor, Applicative, Monad) data Env = @@ -28,12 +28,12 @@ run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Erro run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 - runReaderT (runEitherT impl) (Env result row columnsAmount integerDatetimes columnRef) + runEitherT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) {-# INLINE error #-} error :: Error -> Row a error x = - Row (EitherT (return (Left x))) + Row (ReaderT (const (EitherT (pure (Left x))))) -- | -- Next value, decoded using the provided value deserializer. @@ -41,7 +41,7 @@ error x = value :: Value.Value a -> Row (Maybe a) value valueDes = {-# SCC "value" #-} - Row $ EitherT $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> do + Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> EitherT $ do col <- readIORef columnRef writeIORef columnRef (succ col) if col < columnsAmount @@ -51,12 +51,22 @@ value valueDes = case valueMaybe of Nothing -> Right Nothing Just value -> fmap Just $ mapLeft ValueError $ Decoder.run (Value.run valueDes integerDatetimes) value - else return (Left EndOfInput) + else pure (Left EndOfInput) -- | -- Next value, decoded using the provided value deserializer. {-# INLINE nonNullValue #-} nonNullValue :: Value.Value a -> Row a nonNullValue valueDes = - {-# SCC "nonNullValue" #-} - value valueDes >>= maybe (error UnexpectedNull) pure + {-# SCC "nonNullValue" #-} + Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> EitherT $ do + col <- readIORef columnRef + writeIORef columnRef (succ col) + if col < columnsAmount + then do + valueMaybe <- LibPQ.getvalue result row col + pure $ + case valueMaybe of + Nothing -> Left UnexpectedNull + Just value -> mapLeft ValueError $ Decoder.run (Value.run valueDes integerDatetimes) value + else pure (Left EndOfInput) From e511cb7114b7b7ff82172a643443513ea0c1b3b5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:28:09 +0300 Subject: [PATCH 0209/1204] Update benchmarks --- benchmark/Main/Queries.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index 8e78f78557..f9930d6143 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -6,7 +6,7 @@ import qualified Hasql.Serialization as HS import qualified Hasql.Deserialization as HD -select1 :: Int -> H.Query () (Vector Int64) +select1 :: Int -> H.Query () ([] Int64) select1 amount = (sql, mempty, deserializer, True) where @@ -14,9 +14,9 @@ select1 amount = "values " <> mconcat (intersperse ", " (replicate amount "(1)")) deserializer = - HD.rowsVector (HD.value HD.int8) + HD.rowsList (HD.value HD.int8) -select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) +select4 :: Int -> H.Query () ([] (Int64, Int64, Int64, Int64)) select4 amount = (sql, mempty, deserializer, True) where @@ -24,4 +24,4 @@ select4 amount = "values " <> mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) deserializer = - HD.rowsVector ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) + HD.rowsList ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) From 36c18a2fd6672a59b07b938ef86fab258988e35a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:28:26 +0300 Subject: [PATCH 0210/1204] SCC --- library/Hasql/Deserialization.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 4a9cb273e6..1873adc246 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -298,7 +298,8 @@ int4 = {-# INLINABLE int8 #-} int8 :: Value Int64 int8 = - Value (Value.decoder (const Decoder.int)) + {-# SCC "int8" #-} + Value (Value.decoder (const ({-# SCC "int8.int" #-} Decoder.int))) -- | -- Deserializer of the @FLOAT4@ values. From f1e5ac78c434223b7ccf5ffc03f505e39588aabe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:29:10 +0300 Subject: [PATCH 0211/1204] unsafeFreeResult --- library/Hasql/Deserialization/Results.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index f0ff395032..de03e9f9d2 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -49,7 +49,8 @@ single resultDes = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - fmap (mapLeft ResultError) (Result.run resultDes (integerDatetimes, result)) + mapLeft ResultError <$> Result.run resultDes (integerDatetimes, result) + <* LibPQ.unsafeFreeResult result Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) From c6cb62de9e55c3034ccdef4c230dd375ea17af31 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:29:22 +0300 Subject: [PATCH 0212/1204] SCC --- library/Hasql/Deserialization/Result.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index 08426f4a8e..7c24c8d6ec 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -196,6 +196,7 @@ foldl step init rowDes = {-# INLINE foldr #-} foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a foldr step init rowDes = + {-# SCC "foldr" #-} do checkExecStatus $ \case LibPQ.TuplesOk -> True From 56980658deb805ea049bc90219445a8c377b7aa0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 09:29:46 +0300 Subject: [PATCH 0213/1204] Attempt to optimize Result --- library/Hasql/Deserialization/Result.hs | 46 ++++++++++++++----------- library/Hasql/Prelude.hs | 6 ++++ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index 7c24c8d6ec..a142a1d041 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -177,16 +177,19 @@ foldl step init rowDes = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> do - maxRows <- lift $ LibPQ.ntuples result - maxCols <- lift $ LibPQ.nfields result - ref <- lift $ newIORef init + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + accRef <- newIORef init + failureRef <- newIORef Nothing forM_ [0 .. pred (rowToInt maxRows)] $ \rowIndex -> do - row <- - EitherT $ fmap (mapLeft (RowError rowIndex)) $ - Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) - lift $ modifyIORef ref (\acc -> step acc row) - lift $ readIORef ref + rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left x -> writeIORef failureRef (Just (RowError rowIndex x)) + Right x -> modifyIORef accRef (\acc -> step acc x) + readIORef failureRef >>= \case + Nothing -> Right <$> readIORef accRef + Just x -> pure (Left x) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -201,19 +204,20 @@ foldr step init rowDes = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> do - maxRows <- lift $ LibPQ.ntuples result - maxCols <- lift $ LibPQ.nfields result - ref <- lift $ newIORef init - forM_ (enumToZero (rowToInt maxRows)) $ \rowIndex -> do - row <- - EitherT $ fmap (mapLeft (RowError rowIndex)) $ - Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) - lift $ modifyIORef ref (\acc -> step row acc) - lift $ readIORef ref + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + accRef <- newIORef init + failureRef <- newIORef Nothing + forMToZero_ (rowToInt maxRows) $ \rowIndex -> do + rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left x -> writeIORef failureRef (Just (RowError rowIndex x)) + Right x -> modifyIORef accRef (\acc -> step x acc) + readIORef failureRef >>= \case + Nothing -> Right <$> readIORef accRef + Just x -> pure (Left x) where - enumToZero n = - iterate pred (pred n) & take n rowToInt (LibPQ.Row n) = fromIntegral n intToRow = diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 82a3885379..7b30d4d825 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -7,6 +7,7 @@ module Hasql.Prelude TextBuilder, bug, bottom, + forMToZero_, ) where @@ -114,3 +115,8 @@ bug = bottom = [e| $bug "Bottom evaluated" |] + +{-# INLINE forMToZero_ #-} +forMToZero_ :: Applicative m => Int -> (Int -> m a) -> m () +forMToZero_ !startN f = + ($ pred startN) $ fix $ \loop !n -> if n >= 0 then f n *> loop (pred n) else pure () From d46f657dd9b6b620954d4d5e3fc03383391002e4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 20 Nov 2015 10:01:28 +0300 Subject: [PATCH 0214/1204] Revert a useless optimization --- library/Hasql/Deserialization/Row.hs | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs index a1d5a35026..e702303e3f 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Deserialization/Row.hs @@ -49,8 +49,11 @@ value valueDes = valueMaybe <- LibPQ.getvalue result row col pure $ case valueMaybe of - Nothing -> Right Nothing - Just value -> fmap Just $ mapLeft ValueError $ Decoder.run (Value.run valueDes integerDatetimes) value + Nothing -> + Right Nothing + Just value -> + fmap Just $ mapLeft ValueError $ + {-# SCC "decode" #-} Decoder.run (Value.run valueDes integerDatetimes) value else pure (Left EndOfInput) -- | @@ -58,15 +61,5 @@ value valueDes = {-# INLINE nonNullValue #-} nonNullValue :: Value.Value a -> Row a nonNullValue valueDes = - {-# SCC "nonNullValue" #-} - Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> EitherT $ do - col <- readIORef columnRef - writeIORef columnRef (succ col) - if col < columnsAmount - then do - valueMaybe <- LibPQ.getvalue result row col - pure $ - case valueMaybe of - Nothing -> Left UnexpectedNull - Just value -> mapLeft ValueError $ Decoder.run (Value.run valueDes integerDatetimes) value - else pure (Left EndOfInput) + {-# SCC "nonNullValue" #-} + value valueDes >>= maybe (error UnexpectedNull) pure From 75df827903de86a2a0ddb44c5c3a55130e2c0930 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:39:09 +0300 Subject: [PATCH 0215/1204] Drop doctest --- Setup.hs | 42 ------------------------------- doctest/Main.hs | 66 ------------------------------------------------- hasql.cabal | 24 +----------------- 3 files changed, 1 insertion(+), 131 deletions(-) delete mode 100644 Setup.hs delete mode 100644 doctest/Main.hs diff --git a/Setup.hs b/Setup.hs deleted file mode 100644 index a800e78d43..0000000000 --- a/Setup.hs +++ /dev/null @@ -1,42 +0,0 @@ --- The code is mostly ripped from --- https://github.com/ekmett/lens/blob/697582fb9a980f273dbf8496253c5bbefedd0a8b/Setup.lhs -import Data.List (nub) -import Data.Version (showVersion) -import Distribution.Package (PackageName(PackageName), Package, PackageId, InstalledPackageId, packageVersion, packageName) -import Distribution.PackageDescription (PackageDescription(), TestSuite(..)) -import Distribution.Simple (defaultMainWithHooks, UserHooks(..), simpleUserHooks) -import Distribution.Simple.Utils (rewriteFile, createDirectoryIfMissingVerbose, copyFiles) -import Distribution.Simple.BuildPaths (autogenModulesDir) -import Distribution.Simple.Setup (BuildFlags(buildVerbosity), Flag(..), fromFlag, HaddockFlags(haddockDistPref)) -import Distribution.Simple.LocalBuildInfo (withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps)) -import Distribution.Text (display) -import Distribution.Verbosity (Verbosity, normal) -import System.FilePath (()) - -main :: IO () -main = defaultMainWithHooks simpleUserHooks - { buildHook = \pkg lbi hooks flags -> do - generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi - buildHook simpleUserHooks pkg lbi hooks flags - } - -generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO () -generateBuildModule verbosity pkg lbi = do - let dir = autogenModulesDir lbi - createDirectoryIfMissingVerbose verbosity True dir - withLibLBI pkg lbi $ \_ libcfg -> do - withTestLBI pkg lbi $ \suite suitecfg -> do - rewriteFile (dir "Build_" ++ testName suite ++ ".hs") $ unlines - [ "module Build_" ++ testName suite ++ " where" - , "import Prelude" - , "deps :: [String]" - , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg)) - ] - where - formatdeps = map (formatone . snd) - formatone p = case packageName p of - PackageName n -> n ++ "-" ++ showVersion (packageVersion p) - -testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)] -testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys - diff --git a/doctest/Main.hs b/doctest/Main.hs deleted file mode 100644 index 11e3bd850b..0000000000 --- a/doctest/Main.hs +++ /dev/null @@ -1,66 +0,0 @@ --- The code is mostly ripped from --- https://github.com/ekmett/lens/blob/d1d97469f0e93c1d3535308954a060e8a04e37aa/tests/doctests.hsc -import BasePrelude -import System.Directory -import System.FilePath -import Test.DocTest -import Build_doctest (deps) - -main :: IO () -main = do - sources <- getSources - doctest $ dfltParams ++ map ("-package="++) deps ++ sources - where - dfltParams = - [ - "-isrc", - "-idist/build/autogen", - "-optP-include", - "-optPdist/build/autogen/cabal_macros.h", - "-XArrows", - "-XBangPatterns", - "-XConstraintKinds", - "-XDataKinds", - "-XDefaultSignatures", - "-XDeriveDataTypeable", - "-XDeriveFunctor", - "-XDeriveGeneric", - "-XEmptyDataDecls", - "-XFlexibleContexts", - "-XFlexibleInstances", - "-XFunctionalDependencies", - "-XGADTs", - "-XGeneralizedNewtypeDeriving", - "-XImpredicativeTypes", - "-XLambdaCase", - "-XLiberalTypeSynonyms", - "-XMultiParamTypeClasses", - "-XMultiWayIf", - "-XNoImplicitPrelude", - "-XNoMonomorphismRestriction", - "-XOverloadedStrings", - "-XPatternGuards", - "-XParallelListComp", - "-XQuasiQuotes", - "-XRankNTypes", - "-XRecordWildCards", - "-XScopedTypeVariables", - "-XStandaloneDeriving", - "-XTemplateHaskell", - "-XTupleSections", - "-XTypeFamilies", - "-XTypeOperators", - "-hide-all-packages" - ] - -getSources :: IO [FilePath] -getSources = filter (isSuffixOf ".hs") <$> go "library" - where - go dir = do - (dirs, files) <- getFilesAndDirectories dir - (files ++) . concat <$> mapM go dirs - -getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath]) -getFilesAndDirectories dir = do - c <- map (dir ) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir - (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c diff --git a/hasql.cabal b/hasql.cabal index 00411f5f66..840ebf92b1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -23,7 +23,7 @@ license: license-file: LICENSE build-type: - Custom + Simple cabal-version: >=1.10 @@ -95,28 +95,6 @@ library base >= 4.6 && < 5 -test-suite doctest - type: - exitcode-stdio-1.0 - hs-source-dirs: - doctest - main-is: - Main.hs - ghc-options: - -threaded - "-with-rtsopts=-N" - build-depends: - doctest == 0.10.*, - directory == 1.2.*, - filepath >= 1.3 && < 1.5, - base-prelude >= 0.1.19 && < 0.2, - base - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 - - -- Note that this test-suite is supposed to be single-threaded. -- Hence the absense of the appropriate GHC flags. test-suite tasty From f1fb618d0cf8a40042ca2d65c55ff9ef50a24397 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:39:38 +0300 Subject: [PATCH 0216/1204] Drop demo --- demo/Main.hs | 121 --------------------------------------------------- hasql.cabal | 28 ------------ 2 files changed, 149 deletions(-) delete mode 100644 demo/Main.hs diff --git a/demo/Main.hs b/demo/Main.hs deleted file mode 100644 index d803424b49..0000000000 --- a/demo/Main.hs +++ /dev/null @@ -1,121 +0,0 @@ -module Main where - -import BasePrelude hiding (assert, isRight, isLeft) -import Data.Text (Text) -import Data.ByteString (ByteString) -import Data.Functor.Contravariant -import Data.Default.Class -import Contravariant.Extras -import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD - - -main = - do - connectionEither <- H.connect settings - case connectionEither of - Left e -> print e - Right connection -> do - result <- H.query connection sumQuery (1, 2) - print result - where - settings = - H.ParametricSettings "localhost" 5432 "postgres" "" "postgres" - sumQuery = - (,,,) template serializer deserializer True - where - template = - "SELECT $1 + $2" - serializer = - contramap fst (HS.value HS.int8) <> - contramap snd (HS.value HS.int8) - deserializer = - HD.singleRow (HD.value HD.int8) - - - --- * Model -------------------------- - - -data Account = - Account { - email :: Text, - password :: ByteString, - firstName :: Text, - lastName :: Text - } - - --- * Queries -------------------------- - - -updateMenu :: H.Query (Text, Int64) Int64 -updateMenu = - (,,,) template serializer deserializer True - where - template = - "UPDATE menu SET title = $1 WHERE id = $2" - serializer = - contrazip2 (HS.value HS.text) - (HS.value HS.int8) - deserializer = - HD.rowsAffected - -accountByEmail :: H.Query Text (Maybe (Int64, Account)) -accountByEmail = - (,,,) template serializer deserializer True - where - template = - "SELECT id, email, password, first_name, last_name \ - \FROM account WHERE email = $1" - serializer = - HS.value HS.text - deserializer = - HD.maybeRow (identifiedDeserializer accountDeserializer) - -insertAccount :: H.Query Account Int64 -insertAccount = - (,,,) template serializer deserializer True - where - template = - "INSERT INTO account (email, password, first_name, last_name) \ - \VALUES ($1, $2, $3, $4) \ - \RETURNING id" - serializer = - accountSerializer - deserializer = - HD.singleRow idDeserializer - - --- * Deserializers -------------------------- - - -idDeserializer :: HD.Row Int64 -idDeserializer = - HD.value HD.int8 - -accountDeserializer :: HD.Row Account -accountDeserializer = - liftM4 Account (HD.value def) (HD.value def) (HD.value def) (HD.value def) - -identifiedDeserializer :: HD.Row a -> HD.Row (Int64, a) -identifiedDeserializer aDeserializer = - liftM2 (,) idDeserializer aDeserializer - - --- * Serializers -------------------------- - - -accountSerializer :: HS.Params Account -accountSerializer = - contramap (\(Account a b c d) -> (a, b, c, d)) $ - contrazip4 (HS.value HS.text) - (HS.value HS.bytea) - (HS.value HS.text) - (HS.value HS.text) - diff --git a/hasql.cabal b/hasql.cabal index 840ebf92b1..9fbc1b2777 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -142,34 +142,6 @@ test-suite tasty base -executable demo - hs-source-dirs: - demo - main-is: - Main.hs - ghc-options: - -O2 - -threaded - "-with-rtsopts=-N" - ghc-prof-options: - -O2 - -threaded - -fprof-auto - "-with-rtsopts=-N -p -s -h -i0.1" - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 - build-depends: - data-default-class, - contravariant-extras, - contravariant, - hasql, - text, - bytestring, - base-prelude - - benchmark benchmark type: exitcode-stdio-1.0 From 22b60cdfd98e7eb8266806b36721996df56d7823 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:41:19 +0300 Subject: [PATCH 0217/1204] Add "deepseq" to the benchmark's Prelude --- benchmark/Main/Prelude.hs | 4 ++++ hasql.cabal | 1 + 2 files changed, 5 insertions(+) diff --git a/benchmark/Main/Prelude.hs b/benchmark/Main/Prelude.hs index 06a5e4a9f7..a293bc62c8 100644 --- a/benchmark/Main/Prelude.hs +++ b/benchmark/Main/Prelude.hs @@ -71,3 +71,7 @@ import Data.Vector as Exports (Vector) -- dlist ------------------------- import Data.DList as Exports (DList) + +-- deepseq +------------------------- +import Control.DeepSeq as Exports (NFData(..), force, deepseq, ($!!)) diff --git a/hasql.cabal b/hasql.cabal index 9fbc1b2777..6bdc3e2019 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -178,6 +178,7 @@ benchmark benchmark hashable, dlist, -- general: + deepseq >= 1 && < 2, data-default-class, profunctors, contravariant, From d8b7bc8326ae48433510c27426f0dd620ac3b30a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:57:44 +0300 Subject: [PATCH 0218/1204] "strictCons" --- library/Hasql/Deserialization.hs | 2 +- library/Hasql/Prelude.hs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 1873adc246..b9db2e033f 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -158,7 +158,7 @@ rowsVector = {-# INLINABLE rowsList #-} rowsList :: Row a -> Result [a] rowsList = - foldrRows (:) [] + foldrRows strictCons [] -- ** Instances diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 7b30d4d825..eced2f3f8f 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -8,6 +8,7 @@ module Hasql.Prelude bug, bottom, forMToZero_, + strictCons, ) where @@ -120,3 +121,8 @@ bottom = forMToZero_ :: Applicative m => Int -> (Int -> m a) -> m () forMToZero_ !startN f = ($ pred startN) $ fix $ \loop !n -> if n >= 0 then f n *> loop (pred n) else pure () + +{-# INLINE strictCons #-} +strictCons :: a -> [a] -> [a] +strictCons !a b = + let !c = a : b in c From 8a6a265a7260392475551e45c3b61cf4d9ce1875 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:58:43 +0300 Subject: [PATCH 0219/1204] SCC --- benchmark/Main.hs | 1 + benchmark/Main/Queries.hs | 6 ++++-- library/Hasql.hs | 2 ++ library/Hasql/Deserialization/Result.hs | 2 +- library/Hasql/Deserialization/Results.hs | 1 + library/Hasql/IO.hs | 3 +++ library/Hasql/Serialization/Params.hs | 3 +++ 7 files changed, 15 insertions(+), 3 deletions(-) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index 27120dc181..90bc6947f7 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -46,4 +46,5 @@ main = where query :: a -> H.Query a b -> IO b query params query = + {-# SCC "query" #-} H.query connection query params >>= either (fail . show) pure diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index f9930d6143..a8eb96e672 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -8,9 +8,10 @@ import qualified Hasql.Deserialization as HD select1 :: Int -> H.Query () ([] Int64) select1 amount = + {-# SCC "select1" #-} (sql, mempty, deserializer, True) where - sql = + !sql = "values " <> mconcat (intersperse ", " (replicate amount "(1)")) deserializer = @@ -18,9 +19,10 @@ select1 amount = select4 :: Int -> H.Query () ([] (Int64, Int64, Int64, Int64)) select4 amount = + {-# SCC "select4" #-} (sql, mempty, deserializer, True) where - sql = + !sql = "values " <> mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) deserializer = diff --git a/library/Hasql.hs b/library/Hasql.hs index 74e17b1c41..76251488d3 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -86,6 +86,7 @@ type ConnectionError = -- Acquire a connection using the provided settings. connect :: Settings.Settings -> IO (Either ConnectionError Connection) connect settings = + {-# SCC "connect" #-} runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) lift (IO.checkConnectionStatus pqConnection) >>= traverse left @@ -113,6 +114,7 @@ type Query a b = -- Execute a parametric query, producing either a deserialization failure or a successful result. query :: Connection -> Query a b -> a -> IO (Either ResultsError b) query (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = + {-# SCC "query" #-} fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index a142a1d041..3d3dab3893 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -177,7 +177,7 @@ foldl step init rowDes = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ {-# SCC "traversal" #-} do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result accRef <- newIORef init diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index de03e9f9d2..3bb9fdc926 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -75,6 +75,7 @@ getResultMaybe = {-# INLINABLE dropRemainders #-} dropRemainders :: Results () dropRemainders = + {-# SCC "dropRemainders" #-} Results $ ReaderT $ \(integerDatetimes, connection) -> loop integerDatetimes connection where loop integerDatetimes connection = diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 6b3ad908b4..da2f12851e 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -61,6 +61,7 @@ initConnection c = {-# INLINE getResults #-} getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO (Either ResultsDeserialization.Error a) getResults connection integerDatetimes des = + {-# SCC "getResults" #-} ResultsDeserialization.run (des <* ResultsDeserialization.dropRemainders) (integerDatetimes, connection) {-# INLINABLE getPreparedStatementKey #-} @@ -69,6 +70,7 @@ getPreparedStatementKey :: ByteString -> [LibPQ.Oid] -> IO (Either ResultsDeserialization.Error ByteString) getPreparedStatementKey connection registry template oidList = + {-# SCC "getPreparedStatementKey" #-} do keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry case keyMaybe of @@ -129,6 +131,7 @@ sendParametricQuery :: a -> IO (Either ResultsDeserialization.Error ()) sendParametricQuery connection integerDatetimes registry template serializer prepared params = + {-# SCC "sendParametricQuery" #-} if prepared then let diff --git a/library/Hasql/Serialization/Params.hs b/library/Hasql/Serialization/Params.hs index 98be0f3036..abe30cf2b2 100644 --- a/library/Hasql/Serialization/Params.hs +++ b/library/Hasql/Serialization/Params.hs @@ -15,10 +15,12 @@ newtype Params a = run :: Params a -> a -> DList (LibPQ.Oid, Bool -> Maybe ByteString) run (Params (Op op)) params = + {-# SCC "run" #-} op params run' :: Params a -> a -> Bool -> ([LibPQ.Oid], [Maybe (ByteString, LibPQ.Format)]) run' (Params (Op op)) params integerDatetimes = + {-# SCC "run'" #-} foldr step ([], []) (op params) where step (oid, bytesGetter) ~(oidList, bytesAndFormatList) = @@ -28,6 +30,7 @@ run' (Params (Op op)) params integerDatetimes = run'' :: Params a -> a -> Bool -> [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] run'' (Params (Op op)) params integerDatetimes = + {-# SCC "run''" #-} foldr step [] (op params) where step a b = From c1ee2801ce8ec830d1bcfd014e19e1613058fb35 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:59:47 +0300 Subject: [PATCH 0220/1204] Inlining --- library/Hasql/Deserialization/Results.hs | 7 ++++--- library/Hasql/IO.hs | 16 ++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index 3bb9fdc926..529e209629 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -35,6 +35,7 @@ run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either Error a) run (Results stack) env = runEitherT (runReaderT stack env) +{-# INLINE clientError #-} clientError :: Results a clientError = Results $ ReaderT $ \(_, connection) -> EitherT $ @@ -56,7 +57,7 @@ single resultDes = -- | -- Fetch a single result. -{-# INLINABLE getResult #-} +{-# INLINE getResult #-} getResult :: Results LibPQ.Result getResult = Results $ ReaderT $ \(_, connection) -> EitherT $ do @@ -67,12 +68,12 @@ getResult = -- | -- Fetch a single result. -{-# INLINABLE getResultMaybe #-} +{-# INLINE getResultMaybe #-} getResultMaybe :: Results (Maybe LibPQ.Result) getResultMaybe = Results $ ReaderT $ \(_, connection) -> lift $ LibPQ.getResult connection -{-# INLINABLE dropRemainders #-} +{-# INLINE dropRemainders #-} dropRemainders :: Results () dropRemainders = {-# SCC "dropRemainders" #-} diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index da2f12851e..33720a04d7 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -29,7 +29,7 @@ releaseConnection :: LibPQ.Connection -> IO () releaseConnection connection = LibPQ.finish connection -{-# INLINABLE checkConnectionStatus #-} +{-# INLINE checkConnectionStatus #-} checkConnectionStatus :: LibPQ.Connection -> IO (Maybe (Maybe ByteString)) checkConnectionStatus c = do @@ -53,7 +53,7 @@ getIntegerDatetimes c = Just "on" -> True _ -> False -{-# INLINABLE initConnection #-} +{-# INLINE initConnection #-} initConnection :: LibPQ.Connection -> IO () initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodingToUTF8 <> Commands.setMinClientMessagesToWarning)) @@ -64,7 +64,7 @@ getResults connection integerDatetimes des = {-# SCC "getResults" #-} ResultsDeserialization.run (des <* ResultsDeserialization.dropRemainders) (integerDatetimes, connection) -{-# INLINABLE getPreparedStatementKey #-} +{-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> @@ -91,14 +91,14 @@ getPreparedStatementKey connection registry template oidList = wordOIDList = map (\(LibPQ.Oid x) -> fromIntegral x) oidList -{-# INLINABLE checkedSend #-} +{-# INLINE checkedSend #-} checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDeserialization.Error ()) checkedSend connection send = send >>= \case False -> fmap (Left . ResultsDeserialization.ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) -{-# INLINABLE sendPreparedParametricQuery #-} +{-# INLINE sendPreparedParametricQuery #-} sendPreparedParametricQuery :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> @@ -111,7 +111,7 @@ sendPreparedParametricQuery connection registry template oidList valueAndFormatL key <- EitherT $ getPreparedStatementKey connection registry template oidList EitherT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary -{-# INLINABLE sendUnpreparedParametricQuery #-} +{-# INLINE sendUnpreparedParametricQuery #-} sendUnpreparedParametricQuery :: LibPQ.Connection -> ByteString -> @@ -120,7 +120,7 @@ sendUnpreparedParametricQuery :: sendUnpreparedParametricQuery connection template paramList = checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary -{-# INLINABLE sendParametricQuery #-} +{-# INLINE sendParametricQuery #-} sendParametricQuery :: LibPQ.Connection -> Bool -> @@ -146,7 +146,7 @@ sendParametricQuery connection integerDatetimes registry template serializer pre in sendUnpreparedParametricQuery connection template paramList -{-# INLINABLE sendNonparametricQuery #-} +{-# INLINE sendNonparametricQuery #-} sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDeserialization.Error ()) sendNonparametricQuery connection sql = checkedSend connection $ LibPQ.sendQuery connection sql From f0b67085428c2b99456243cbe1a8c23120575bd8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 09:59:51 +0300 Subject: [PATCH 0221/1204] Clean up --- library/Hasql/Deserialization/Results.hs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Deserialization/Results.hs index 529e209629..89bfc5d064 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Deserialization/Results.hs @@ -89,7 +89,3 @@ dropRemainders = where checkErrors = EitherT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) - -cancel :: Results () -cancel = - undefined From 9d7bfadb27287603e841c8d875c5558a343479bf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 10:16:21 +0300 Subject: [PATCH 0222/1204] Fix the benchmarks declaration evaluation issues --- benchmark/Main.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index 90bc6947f7..9d98c0d92f 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -26,20 +26,20 @@ main = [ bgroup "1 column" [ - bench "1 row" $ nfIO $ query () (Q.select1 1) + bench "1 row" $ nfIO $! query () $! Q.select1 1 , - bench "100 rows" $ nfIO $ query () (Q.select1 100) + bench "100 rows" $ nfIO $! query () $! Q.select1 100 , - bench "10000 rows" $ nfIO $ query () (Q.select1 10000) + bench "10000 rows" $ nfIO $! query () $! Q.select1 10000 ] , bgroup "4 columns" [ - bench "1 row" $ nfIO $ query () (Q.select4 1) + bench "1 row" $ nfIO $! query () $! Q.select4 1 , - bench "100 rows" $ nfIO $ query () (Q.select4 100) + bench "100 rows" $ nfIO $! query () $! Q.select4 100 , - bench "10000 rows" $ nfIO $ query () (Q.select4 10000) + bench "10000 rows" $ nfIO $! query () $! Q.select4 10000 ] ] ] From 8937fe6e1e7770657d49c6f818a1c0add2d6ef76 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 10:32:12 +0300 Subject: [PATCH 0223/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 6bdc3e2019..f805ca6de7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.8 + 0.8.1 category: Hasql, Database, PostgreSQL synopsis: From 23c3946bac5b93f27f18131c7982e2da24a646aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 11:44:57 +0300 Subject: [PATCH 0224/1204] The "getvalue'" optimization! --- library/Hasql/Deserialization/Row.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Deserialization/Row.hs index e702303e3f..7758a986b1 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Deserialization/Row.hs @@ -46,7 +46,7 @@ value valueDes = writeIORef columnRef (succ col) if col < columnsAmount then do - valueMaybe <- LibPQ.getvalue result row col + valueMaybe <- {-# SCC "getvalue'" #-} LibPQ.getvalue' result row col pure $ case valueMaybe of Nothing -> From 103c80090ae49c1b59e6a2a630915a525d6e71f5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 11:46:00 +0300 Subject: [PATCH 0225/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index f805ca6de7..a75bb0176a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.8.1 + 0.8.2 category: Hasql, Database, PostgreSQL synopsis: From 89470ff67219fb7936be8d313e2aa17405b5889c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 12:01:32 +0300 Subject: [PATCH 0226/1204] Optimize "foldl" --- library/Hasql/Deserialization/Result.hs | 2 +- library/Hasql/Prelude.hs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index 3d3dab3893..4a014275a1 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -182,7 +182,7 @@ foldl step init rowDes = maxCols <- LibPQ.nfields result accRef <- newIORef init failureRef <- newIORef Nothing - forM_ [0 .. pred (rowToInt maxRows)] $ \rowIndex -> do + forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of Left x -> writeIORef failureRef (Just (RowError rowIndex x)) diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index eced2f3f8f..b7e71eb74b 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -8,6 +8,7 @@ module Hasql.Prelude bug, bottom, forMToZero_, + forMFromZero_, strictCons, ) where @@ -122,6 +123,11 @@ forMToZero_ :: Applicative m => Int -> (Int -> m a) -> m () forMToZero_ !startN f = ($ pred startN) $ fix $ \loop !n -> if n >= 0 then f n *> loop (pred n) else pure () +{-# INLINE forMFromZero_ #-} +forMFromZero_ :: Applicative m => Int -> (Int -> m a) -> m () +forMFromZero_ !endN f = + ($ 0) $ fix $ \loop !n -> if n < endN then f n *> loop (succ n) else pure () + {-# INLINE strictCons #-} strictCons :: a -> [a] -> [a] strictCons !a b = From 36eedbee7aa012f6e5bc1f13547f6a2d94769613 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 13:10:29 +0300 Subject: [PATCH 0227/1204] Optimize Vector --- benchmark/Main/Queries.hs | 8 +++---- hasql.cabal | 2 +- library/Hasql/Deserialization.hs | 13 ++--------- library/Hasql/Deserialization/Result.hs | 31 +++++++++++++++---------- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index a8eb96e672..fa95749d8a 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -6,7 +6,7 @@ import qualified Hasql.Serialization as HS import qualified Hasql.Deserialization as HD -select1 :: Int -> H.Query () ([] Int64) +select1 :: Int -> H.Query () (Vector Int64) select1 amount = {-# SCC "select1" #-} (sql, mempty, deserializer, True) @@ -15,9 +15,9 @@ select1 amount = "values " <> mconcat (intersperse ", " (replicate amount "(1)")) deserializer = - HD.rowsList (HD.value HD.int8) + HD.rowsVector (HD.value HD.int8) -select4 :: Int -> H.Query () ([] (Int64, Int64, Int64, Int64)) +select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) select4 amount = {-# SCC "select4" #-} (sql, mempty, deserializer, True) @@ -26,4 +26,4 @@ select4 amount = "values " <> mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) deserializer = - HD.rowsList ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) + HD.rowsVector ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) diff --git a/hasql.cabal b/hasql.cabal index a75bb0176a..cf97dd8e0b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.8.2 + 0.9 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index b9db2e033f..29ad029a8b 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -14,7 +14,6 @@ module Hasql.Deserialization -- ** Multi-row traversers foldlRows, foldrRows, - generateRows, -- * Row Row, value, @@ -109,14 +108,6 @@ singleRow (Row row) = -- ** Multi-row traversers ------------------------- --- | --- Given a function like 'Vector.generateM' packs multiple results accordingly. --- -{-# INLINABLE generateRows #-} -generateRows :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row a -> Result b -generateRows generateM (Row row) = - Result (Results.single (Result.generate generateM row)) - -- | -- Foldl multiple rows. -- @@ -149,8 +140,8 @@ maybeRow (Row row) = -- {-# INLINABLE rowsVector #-} rowsVector :: Row a -> Result (Vector a) -rowsVector = - generateRows Vector.generateM +rowsVector (Row row) = + Result (Results.single (Result.vector row)) -- | -- Zero or more rows packed into the list. diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Deserialization/Result.hs index 4a014275a1..8a52f228be 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Deserialization/Result.hs @@ -6,6 +6,8 @@ import qualified Hasql.Deserialization.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString import qualified Hasql.Prelude as Prelude +import qualified Data.Vector as Vector +import qualified Data.Vector.Mutable as MutableVector newtype Result a = @@ -149,10 +151,9 @@ single rowDes = intToRow = LibPQ.Row . fromIntegral -{-# INLINE generate #-} -generate :: (forall m. Monad m => Int -> (Int -> m a) -> m b) -> Row.Row a -> Result b -generate generateM rowDes = - {-# SCC "generate" #-} +{-# INLINE vector #-} +vector :: Row.Row a -> Result (Vector a) +vector rowDes = do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -160,9 +161,16 @@ generate generateM rowDes = Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result - runEitherT $ generateM (rowToInt maxRows) $ \row -> - EitherT $ fmap (mapLeft (RowError row)) $ - Row.run rowDes (result, intToRow row, maxCols, integerDatetimes) + mvector <- MutableVector.unsafeNew (rowToInt maxRows) + failureRef <- newIORef Nothing + forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do + rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Right !x -> MutableVector.unsafeWrite mvector rowIndex x + readIORef failureRef >>= \case + Nothing -> Right <$> Vector.unsafeFreeze mvector + Just x -> pure (Left x) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -185,8 +193,8 @@ foldl step init rowDes = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left x -> writeIORef failureRef (Just (RowError rowIndex x)) - Right x -> modifyIORef accRef (\acc -> step acc x) + Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Right !x -> modifyIORef accRef (\acc -> step acc x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef Just x -> pure (Left x) @@ -212,8 +220,8 @@ foldr step init rowDes = forMToZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left x -> writeIORef failureRef (Just (RowError rowIndex x)) - Right x -> modifyIORef accRef (\acc -> step x acc) + Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Right !x -> modifyIORef accRef (\acc -> step x acc) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef Just x -> pure (Left x) @@ -222,4 +230,3 @@ foldr step init rowDes = fromIntegral n intToRow = LibPQ.Row . fromIntegral - From 6fe2069c5ba7ae62f2a5b7fe82c2c719f054a929 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 13:18:55 +0300 Subject: [PATCH 0228/1204] Docs --- library/Hasql/Deserialization.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 29ad029a8b..76b298cca0 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -138,6 +138,9 @@ maybeRow (Row row) = -- | -- Zero or more rows packed into the vector. -- +-- It's recommended to prefer this function to 'rowsList', +-- since it performs notably faster. +-- {-# INLINABLE rowsVector #-} rowsVector :: Row a -> Result (Vector a) rowsVector (Row row) = From 9d5687e4de15aafd3802bc847e1414919f8b2c61 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 13:20:44 +0300 Subject: [PATCH 0229/1204] Docs --- library/Hasql/Deserialization.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Deserialization.hs index 76b298cca0..af135c9635 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Deserialization.hs @@ -654,14 +654,14 @@ newtype Composite a = deriving (Functor, Applicative, Monad) -- | --- Lift a 'Value' deserializer into an 'Composite' deserializer for parsing of non-nullable leaf values. +-- Lift a 'Value' deserializer into a 'Composite' deserializer for parsing of non-nullable leaf values. {-# INLINABLE compositeValue #-} compositeValue :: Value a -> Composite a compositeValue (Value imp) = Composite (Composite.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' deserializer into an 'Composite' deserializer for parsing of nullable leaf values. +-- Lift a 'Value' deserializer into a 'Composite' deserializer for parsing of nullable leaf values. {-# INLINABLE compositeNullableValue #-} compositeNullableValue :: Value a -> Composite (Maybe a) compositeNullableValue (Value imp) = From 7dc7b790cc1a27655e58c57c9aa0dc095fbf84ef Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 13:36:01 +0300 Subject: [PATCH 0230/1204] Switch to the Encoding/Decoding idioms --- benchmark/Main.hs | 4 +- benchmark/Main/Queries.hs | 12 +-- hasql.cabal | 22 ++--- library/Hasql.hs | 30 +++--- .../Hasql/{Deserialization.hs => Decoding.hs} | 98 +++++++++---------- .../{Deserialization => Decoding}/Array.hs | 2 +- .../Composite.hs | 2 +- .../{Deserialization => Decoding}/Result.hs | 24 ++--- .../{Deserialization => Decoding}/Results.hs | 10 +- .../{Deserialization => Decoding}/Row.hs | 16 +-- .../{Deserialization => Decoding}/Value.hs | 2 +- .../Hasql/{Serialization.hs => Encoding.hs} | 42 ++++---- .../{Serialization => Encoding}/Array.hs | 2 +- .../{Serialization => Encoding}/Params.hs | 6 +- .../{Serialization => Encoding}/Value.hs | 2 +- library/Hasql/IO.hs | 40 ++++---- tasty/Main.hs | 32 +++--- tasty/Main/DSL.hs | 4 +- tasty/Main/Queries.hs | 8 +- 19 files changed, 179 insertions(+), 179 deletions(-) rename library/Hasql/{Deserialization.hs => Decoding.hs} (83%) rename library/Hasql/{Deserialization => Decoding}/Array.hs (95%) rename library/Hasql/{Deserialization => Decoding}/Composite.hs (94%) rename library/Hasql/{Deserialization => Decoding}/Result.hs (94%) rename library/Hasql/{Deserialization => Decoding}/Results.hs (91%) rename library/Hasql/{Deserialization => Decoding}/Row.hs (82%) rename library/Hasql/{Deserialization => Decoding}/Value.hs (92%) rename library/Hasql/{Serialization.hs => Encoding.hs} (88%) rename library/Hasql/{Serialization => Encoding}/Array.hs (96%) rename library/Hasql/{Serialization => Encoding}/Params.hs (90%) rename library/Hasql/{Serialization => Encoding}/Value.hs (95%) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index 9d98c0d92f..cc94559402 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -3,8 +3,8 @@ module Main where import Main.Prelude import Criterion.Main import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD import qualified Main.Queries as Q diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index fa95749d8a..9e07175d1d 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -2,28 +2,28 @@ module Main.Queries where import Main.Prelude import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD select1 :: Int -> H.Query () (Vector Int64) select1 amount = {-# SCC "select1" #-} - (sql, mempty, deserializer, True) + (sql, mempty, decoder, True) where !sql = "values " <> mconcat (intersperse ", " (replicate amount "(1)")) - deserializer = + decoder = HD.rowsVector (HD.value HD.int8) select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) select4 amount = {-# SCC "select4" #-} - (sql, mempty, deserializer, True) + (sql, mempty, decoder, True) where !sql = "values " <> mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) - deserializer = + decoder = HD.rowsVector ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) diff --git a/hasql.cabal b/hasql.cabal index cf97dd8e0b..5cf467944b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -49,19 +49,19 @@ library Hasql.IO Hasql.Settings Hasql.Commands - Hasql.Deserialization.Array - Hasql.Deserialization.Composite - Hasql.Deserialization.Value - Hasql.Deserialization.Row - Hasql.Deserialization.Result - Hasql.Deserialization.Results - Hasql.Serialization.Array - Hasql.Serialization.Value - Hasql.Serialization.Params + Hasql.Decoding.Array + Hasql.Decoding.Composite + Hasql.Decoding.Value + Hasql.Decoding.Row + Hasql.Decoding.Result + Hasql.Decoding.Results + Hasql.Encoding.Array + Hasql.Encoding.Value + Hasql.Encoding.Params Hasql.PreparedStatementRegistry exposed-modules: - Hasql.Deserialization - Hasql.Serialization + Hasql.Decoding + Hasql.Encoding Hasql build-depends: -- parsing: diff --git a/library/Hasql.hs b/library/Hasql.hs index 76251488d3..35e073da12 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -18,10 +18,10 @@ where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Deserialization.Results as ResultsDeserialization -import qualified Hasql.Deserialization as Deserialization -import qualified Hasql.Serialization.Params as ParamsSerialization -import qualified Hasql.Serialization as Serialization +import qualified Hasql.Decoding.Results as ResultsDecoding +import qualified Hasql.Decoding as Decoding +import qualified Hasql.Encoding.Params as ParamsEncoding +import qualified Hasql.Encoding as Encoding import qualified Hasql.Settings as Settings import qualified Hasql.IO as IO @@ -105,32 +105,32 @@ disconnect (Connection pqConnection _ _) = -- | -- A strictly single-statement query, which can be parameterized and prepared. -- --- SQL template, params serializer, result deserializer and a flag, determining whether it should be prepared. +-- SQL template, params encoder, result decoder and a flag, determining whether it should be prepared. -- type Query a b = - (ByteString, Serialization.Params a, Deserialization.Result b, Bool) + (ByteString, Encoding.Params a, Decoding.Result b, Bool) -- | -- Execute a parametric query, producing either a deserialization failure or a successful result. query :: Connection -> Query a b -> a -> IO (Either ResultsError b) -query (Connection pqConnection integerDatetimes registry) (template, serializer, deserializer, preparable) params = +query (Connection pqConnection integerDatetimes registry) (template, encoder, decoder, preparable) params = {-# SCC "query" #-} fmap (mapLeft coerceResultsError) $ runEitherT $ do - EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceSerializer serializer) preparable params - EitherT $ IO.getResults pqConnection integerDatetimes (coerceDeserializer deserializer) + EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params + EitherT $ IO.getResults pqConnection integerDatetimes (coerceDecoder decoder) -- | -- WARNING: We need to take special care that the structure of --- the "ResultsDeserialization.Error" type in the public API is an exact copy of +-- the "ResultsDecoding.Error" type in the public API is an exact copy of -- "Error", since we're using coercion. -coerceResultsError :: ResultsDeserialization.Error -> ResultsError +coerceResultsError :: ResultsDecoding.Error -> ResultsError coerceResultsError = unsafeCoerce -coerceDeserializer :: Deserialization.Result a -> ResultsDeserialization.Results a -coerceDeserializer = +coerceDecoder :: Decoding.Result a -> ResultsDecoding.Results a +coerceDecoder = unsafeCoerce -coerceSerializer :: Serialization.Params a -> ParamsSerialization.Params a -coerceSerializer = +coerceEncoder :: Encoding.Params a -> ParamsEncoding.Params a +coerceEncoder = unsafeCoerce diff --git a/library/Hasql/Deserialization.hs b/library/Hasql/Decoding.hs similarity index 83% rename from library/Hasql/Deserialization.hs rename to library/Hasql/Decoding.hs index af135c9635..c79b9fcd52 100644 --- a/library/Hasql/Deserialization.hs +++ b/library/Hasql/Decoding.hs @@ -1,6 +1,6 @@ -- | --- A DSL for creating result deserializers. -module Hasql.Deserialization +-- A DSL for creating result decoders. +module Hasql.Decoding ( -- * Result Result, @@ -58,12 +58,12 @@ import Hasql.Prelude hiding (maybe, bool) import qualified Data.Aeson as Aeson import qualified Data.Vector as Vector import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Deserialization.Results as Results -import qualified Hasql.Deserialization.Result as Result -import qualified Hasql.Deserialization.Row as Row -import qualified Hasql.Deserialization.Value as Value -import qualified Hasql.Deserialization.Array as Array -import qualified Hasql.Deserialization.Composite as Composite +import qualified Hasql.Decoding.Results as Results +import qualified Hasql.Decoding.Result as Result +import qualified Hasql.Decoding.Row as Row +import qualified Hasql.Decoding.Value as Value +import qualified Hasql.Decoding.Array as Array +import qualified Hasql.Decoding.Composite as Composite import qualified Hasql.Prelude as Prelude @@ -71,14 +71,14 @@ import qualified Hasql.Prelude as Prelude ------------------------- -- | --- Deserializer of a query result. +-- Decoder of a query result. -- newtype Result a = Result (Results.Results a) deriving (Functor) -- | --- Deserialize no value from the result. +-- Decode no value from the result. -- -- Useful for statements like @INSERT@ or @CREATE@. -- @@ -199,8 +199,8 @@ instance Default (Row a) => Default (Result (Identity a)) where ------------------------- -- | --- Deserializer of an individual row, --- which gets composed of column value deserializers. +-- Decoder of an individual row, +-- which gets composed of column value decoders. -- -- E.g.: -- @@ -213,7 +213,7 @@ newtype Row a = deriving (Functor, Applicative, Monad) -- | --- Lift an individual non-nullable value deserializer to a composable row deserializer. +-- Lift an individual non-nullable value decoder to a composable row decoder. -- {-# INLINABLE value #-} value :: Value a -> Row a @@ -221,7 +221,7 @@ value (Value imp) = Row (Row.nonNullValue imp) -- | --- Lift an individual nullable value deserializer to a composable row deserializer. +-- Lift an individual nullable value decoder to a composable row decoder. -- {-# INLINABLE nullableValue #-} nullableValue :: Value a -> Row (Maybe a) @@ -252,18 +252,18 @@ instance (Default (Value a1), Default (Value a2)) => Default (Row (a1, a2)) wher ------------------------- -- | --- Deserializer of an individual value. +-- Decoder of an individual value. -- newtype Value a = Value (Value.Value a) deriving (Functor) --- ** Plain value deserializers +-- ** Plain value decoders ------------------------- -- | --- Deserializer of the @BOOL@ values. +-- Decoder of the @BOOL@ values. -- {-# INLINABLE bool #-} bool :: Value Bool @@ -271,7 +271,7 @@ bool = Value (Value.decoder (const Decoder.bool)) -- | --- Deserializer of the @INT2@ values. +-- Decoder of the @INT2@ values. -- {-# INLINABLE int2 #-} int2 :: Value Int16 @@ -279,7 +279,7 @@ int2 = Value (Value.decoder (const Decoder.int)) -- | --- Deserializer of the @INT4@ values. +-- Decoder of the @INT4@ values. -- {-# INLINABLE int4 #-} int4 :: Value Int32 @@ -287,7 +287,7 @@ int4 = Value (Value.decoder (const Decoder.int)) -- | --- Deserializer of the @INT8@ values. +-- Decoder of the @INT8@ values. -- {-# INLINABLE int8 #-} int8 :: Value Int64 @@ -296,7 +296,7 @@ int8 = Value (Value.decoder (const ({-# SCC "int8.int" #-} Decoder.int))) -- | --- Deserializer of the @FLOAT4@ values. +-- Decoder of the @FLOAT4@ values. -- {-# INLINABLE float4 #-} float4 :: Value Float @@ -304,7 +304,7 @@ float4 = Value (Value.decoder (const Decoder.float4)) -- | --- Deserializer of the @FLOAT8@ values. +-- Decoder of the @FLOAT8@ values. -- {-# INLINABLE float8 #-} float8 :: Value Double @@ -312,7 +312,7 @@ float8 = Value (Value.decoder (const Decoder.float8)) -- | --- Deserializer of the @NUMERIC@ values. +-- Decoder of the @NUMERIC@ values. -- {-# INLINABLE numeric #-} numeric :: Value Scientific @@ -320,7 +320,7 @@ numeric = Value (Value.decoder (const Decoder.numeric)) -- | --- Deserializer of the @CHAR@ values. +-- Decoder of the @CHAR@ values. -- Note that it supports UTF-8 values. {-# INLINABLE char #-} char :: Value Char @@ -328,7 +328,7 @@ char = Value (Value.decoder (const Decoder.char)) -- | --- Deserializer of the @TEXT@ values. +-- Decoder of the @TEXT@ values. -- {-# INLINABLE text #-} text :: Value Text @@ -336,7 +336,7 @@ text = Value (Value.decoder (const Decoder.text_strict)) -- | --- Deserializer of the @BYTEA@ values. +-- Decoder of the @BYTEA@ values. -- {-# INLINABLE bytea #-} bytea :: Value ByteString @@ -344,7 +344,7 @@ bytea = Value (Value.decoder (const Decoder.bytea_strict)) -- | --- Deserializer of the @DATE@ values. +-- Decoder of the @DATE@ values. -- {-# INLINABLE date #-} date :: Value Day @@ -352,7 +352,7 @@ date = Value (Value.decoder (const Decoder.date)) -- | --- Deserializer of the @TIMESTAMP@ values. +-- Decoder of the @TIMESTAMP@ values. -- {-# INLINABLE timestamp #-} timestamp :: Value LocalTime @@ -360,7 +360,7 @@ timestamp = Value (Value.decoder (Prelude.bool Decoder.timestamp_float Decoder.timestamp_int)) -- | --- Deserializer of the @TIMESTAMPTZ@ values. +-- Decoder of the @TIMESTAMPTZ@ values. -- -- /NOTICE/ -- @@ -375,7 +375,7 @@ timestamptz = Value (Value.decoder (Prelude.bool Decoder.timestamptz_float Decoder.timestamptz_int)) -- | --- Deserializer of the @TIME@ values. +-- Decoder of the @TIME@ values. -- {-# INLINABLE time #-} time :: Value TimeOfDay @@ -383,7 +383,7 @@ time = Value (Value.decoder (Prelude.bool Decoder.time_float Decoder.time_int)) -- | --- Deserializer of the @TIMETZ@ values. +-- Decoder of the @TIMETZ@ values. -- -- Unlike in case of @TIMESTAMPTZ@, -- Postgres does store the timezone information for @TIMETZ@. @@ -396,7 +396,7 @@ timetz = Value (Value.decoder (Prelude.bool Decoder.timetz_float Decoder.timetz_int)) -- | --- Deserializer of the @INTERVAL@ values. +-- Decoder of the @INTERVAL@ values. -- {-# INLINABLE interval #-} interval :: Value DiffTime @@ -404,7 +404,7 @@ interval = Value (Value.decoder (Prelude.bool Decoder.interval_float Decoder.interval_int)) -- | --- Deserializer of the @UUID@ values. +-- Decoder of the @UUID@ values. -- {-# INLINABLE uuid #-} uuid :: Value UUID @@ -412,7 +412,7 @@ uuid = Value (Value.decoder (const Decoder.uuid)) -- | --- Deserializer of the @JSON@ values. +-- Decoder of the @JSON@ values. -- {-# INLINABLE json #-} json :: Value Aeson.Value @@ -420,11 +420,11 @@ json = Value (Value.decoder (const Decoder.json)) --- ** Composite value deserializers +-- ** Composite value decoders ------------------------- -- | --- Lifts the 'Array' deserializer to the 'Value' deserializer. +-- Lifts the 'Array' decoder to the 'Value' decoder. -- {-# INLINABLE array #-} array :: Array a -> Value a @@ -432,7 +432,7 @@ array (Array imp) = Value (Value.decoder (Array.run imp)) -- | --- Lifts the 'Composite' deserializer to the 'Value' deserializer. +-- Lifts the 'Composite' decoder to the 'Value' decoder. -- {-# INLINABLE composite #-} composite :: Composite a -> Value a @@ -440,7 +440,7 @@ composite (Composite imp) = Value (Value.decoder (Composite.run imp)) -- | --- A generic deserializer of @HSTORE@ values. +-- A generic decoder of @HSTORE@ values. -- -- Here's how you can use it to construct a specific value: -- @@ -457,7 +457,7 @@ hstore replicateM = -- | -- Given a partial mapping from text to value, --- produces a deserializer of that value. +-- produces a decoder of that value. enum :: (Text -> Maybe a) -> Value a enum mapping = Value (Value.decoder (const (Decoder.enum mapping))) @@ -593,13 +593,13 @@ instance Default (Value Aeson.Value) where json --- * Array deserializers +-- * Array decoders ------------------------- -- | --- A generic array deserializer. +-- A generic array decoder. -- --- Here's how you can use it to produce a specific array value deserializer: +-- Here's how you can use it to produce a specific array value decoder: -- -- @ -- x :: Value [[Text]] @@ -621,7 +621,7 @@ newtype Array a = -- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), -- which determines the output value. -- --- * A deserializer of its components, which can be either another 'arrayDimension', +-- * A decoder of its components, which can be either another 'arrayDimension', -- 'arrayValue' or 'arrayNullableValue'. -- {-# INLINABLE arrayDimension #-} @@ -630,38 +630,38 @@ arrayDimension replicateM (Array imp) = Array (Array.dimension replicateM imp) -- | --- Lift a 'Value' deserializer into an 'Array' deserializer for parsing of non-nullable leaf values. +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf values. {-# INLINABLE arrayValue #-} arrayValue :: Value a -> Array a arrayValue (Value imp) = Array (Array.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' deserializer into an 'Array' deserializer for parsing of nullable leaf values. +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf values. {-# INLINABLE arrayNullableValue #-} arrayNullableValue :: Value a -> Array (Maybe a) arrayNullableValue (Value imp) = Array (Array.value (Value.run imp)) --- * Composite deserializers +-- * Composite decoders ------------------------- -- | --- Composable deserializer of composite values (rows, records). +-- Composable decoder of composite values (rows, records). newtype Composite a = Composite (Composite.Composite a) deriving (Functor, Applicative, Monad) -- | --- Lift a 'Value' deserializer into a 'Composite' deserializer for parsing of non-nullable leaf values. +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. {-# INLINABLE compositeValue #-} compositeValue :: Value a -> Composite a compositeValue (Value imp) = Composite (Composite.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' deserializer into a 'Composite' deserializer for parsing of nullable leaf values. +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf values. {-# INLINABLE compositeNullableValue #-} compositeNullableValue :: Value a -> Composite (Maybe a) compositeNullableValue (Value imp) = diff --git a/library/Hasql/Deserialization/Array.hs b/library/Hasql/Decoding/Array.hs similarity index 95% rename from library/Hasql/Deserialization/Array.hs rename to library/Hasql/Decoding/Array.hs index 40b108fc8b..629e20ab03 100644 --- a/library/Hasql/Deserialization/Array.hs +++ b/library/Hasql/Decoding/Array.hs @@ -1,4 +1,4 @@ -module Hasql.Deserialization.Array where +module Hasql.Decoding.Array where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Deserialization/Composite.hs b/library/Hasql/Decoding/Composite.hs similarity index 94% rename from library/Hasql/Deserialization/Composite.hs rename to library/Hasql/Decoding/Composite.hs index 1af29d706e..04360cc549 100644 --- a/library/Hasql/Deserialization/Composite.hs +++ b/library/Hasql/Decoding/Composite.hs @@ -1,4 +1,4 @@ -module Hasql.Deserialization.Composite where +module Hasql.Decoding.Composite where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Deserialization/Result.hs b/library/Hasql/Decoding/Result.hs similarity index 94% rename from library/Hasql/Deserialization/Result.hs rename to library/Hasql/Decoding/Result.hs index 8a52f228be..d90b37b4f4 100644 --- a/library/Hasql/Deserialization/Result.hs +++ b/library/Hasql/Decoding/Result.hs @@ -1,8 +1,8 @@ -module Hasql.Deserialization.Result where +module Hasql.Decoding.Result where import Hasql.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Deserialization.Row as Row +import qualified Hasql.Decoding.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString import qualified Hasql.Prelude as Prelude @@ -112,7 +112,7 @@ serverError = {-# INLINE maybe #-} maybe :: Row.Row a -> Result (Maybe a) -maybe rowDes = +maybe rowDec = do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -123,7 +123,7 @@ maybe rowDes = 0 -> return (Right Nothing) 1 -> do maxCols <- LibPQ.nfields result - fmap (fmap Just . mapLeft (RowError 0)) $ Row.run rowDes (result, 0, maxCols, integerDatetimes) + fmap (fmap Just . mapLeft (RowError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -133,7 +133,7 @@ maybe rowDes = {-# INLINE single #-} single :: Row.Row a -> Result a -single rowDes = +single rowDec = do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -143,7 +143,7 @@ single rowDes = case maxRows of 1 -> do maxCols <- LibPQ.nfields result - fmap (mapLeft (RowError 0)) $ Row.run rowDes (result, 0, maxCols, integerDatetimes) + fmap (mapLeft (RowError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -153,7 +153,7 @@ single rowDes = {-# INLINE vector #-} vector :: Row.Row a -> Result (Vector a) -vector rowDes = +vector rowDec = do checkExecStatus $ \case LibPQ.TuplesOk -> True @@ -164,7 +164,7 @@ vector rowDes = mvector <- MutableVector.unsafeNew (rowToInt maxRows) failureRef <- newIORef Nothing forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) Right !x -> MutableVector.unsafeWrite mvector rowIndex x @@ -179,7 +179,7 @@ vector rowDes = {-# INLINE foldl #-} foldl :: (a -> b -> a) -> a -> Row.Row b -> Result a -foldl step init rowDes = +foldl step init rowDec = {-# SCC "foldl" #-} do checkExecStatus $ \case @@ -191,7 +191,7 @@ foldl step init rowDes = accRef <- newIORef init failureRef <- newIORef Nothing forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) Right !x -> modifyIORef accRef (\acc -> step acc x) @@ -206,7 +206,7 @@ foldl step init rowDes = {-# INLINE foldr #-} foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a -foldr step init rowDes = +foldr step init rowDec = {-# SCC "foldr" #-} do checkExecStatus $ \case @@ -218,7 +218,7 @@ foldr step init rowDes = accRef <- newIORef init failureRef <- newIORef Nothing forMToZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDes (result, intToRow rowIndex, maxCols, integerDatetimes) + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) Right !x -> modifyIORef accRef (\acc -> step x acc) diff --git a/library/Hasql/Deserialization/Results.hs b/library/Hasql/Decoding/Results.hs similarity index 91% rename from library/Hasql/Deserialization/Results.hs rename to library/Hasql/Decoding/Results.hs index 89bfc5d064..bc14276df0 100644 --- a/library/Hasql/Deserialization/Results.hs +++ b/library/Hasql/Decoding/Results.hs @@ -9,13 +9,13 @@ -- -- * Row-by-row fetching. -- -module Hasql.Deserialization.Results where +module Hasql.Decoding.Results where import Hasql.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Prelude as Prelude -import qualified Hasql.Deserialization.Result as Result -import qualified Hasql.Deserialization.Row as Row +import qualified Hasql.Decoding.Result as Result +import qualified Hasql.Decoding.Row as Row newtype Results a = @@ -45,12 +45,12 @@ clientError = -- Parse a single result. {-# INLINE single #-} single :: Result.Result a -> Results a -single resultDes = +single resultDec = Results $ ReaderT $ \(integerDatetimes, connection) -> EitherT $ do resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - mapLeft ResultError <$> Result.run resultDes (integerDatetimes, result) + mapLeft ResultError <$> Result.run resultDec (integerDatetimes, result) <* LibPQ.unsafeFreeResult result Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) diff --git a/library/Hasql/Deserialization/Row.hs b/library/Hasql/Decoding/Row.hs similarity index 82% rename from library/Hasql/Deserialization/Row.hs rename to library/Hasql/Decoding/Row.hs index 7758a986b1..52c6741a8a 100644 --- a/library/Hasql/Deserialization/Row.hs +++ b/library/Hasql/Decoding/Row.hs @@ -1,9 +1,9 @@ -module Hasql.Deserialization.Row where +module Hasql.Decoding.Row where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Deserialization.Value as Value +import qualified Hasql.Decoding.Value as Value newtype Row a = @@ -36,10 +36,10 @@ error x = Row (ReaderT (const (EitherT (pure (Left x))))) -- | --- Next value, decoded using the provided value deserializer. +-- Next value, decoded using the provided value decoder. {-# INLINE value #-} value :: Value.Value a -> Row (Maybe a) -value valueDes = +value valueDec = {-# SCC "value" #-} Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> EitherT $ do col <- readIORef columnRef @@ -53,13 +53,13 @@ value valueDes = Right Nothing Just value -> fmap Just $ mapLeft ValueError $ - {-# SCC "decode" #-} Decoder.run (Value.run valueDes integerDatetimes) value + {-# SCC "decode" #-} Decoder.run (Value.run valueDec integerDatetimes) value else pure (Left EndOfInput) -- | --- Next value, decoded using the provided value deserializer. +-- Next value, decoded using the provided value decoder. {-# INLINE nonNullValue #-} nonNullValue :: Value.Value a -> Row a -nonNullValue valueDes = +nonNullValue valueDec = {-# SCC "nonNullValue" #-} - value valueDes >>= maybe (error UnexpectedNull) pure + value valueDec >>= maybe (error UnexpectedNull) pure diff --git a/library/Hasql/Deserialization/Value.hs b/library/Hasql/Decoding/Value.hs similarity index 92% rename from library/Hasql/Deserialization/Value.hs rename to library/Hasql/Decoding/Value.hs index 311ecb5257..bc9152fee1 100644 --- a/library/Hasql/Deserialization/Value.hs +++ b/library/Hasql/Decoding/Value.hs @@ -1,4 +1,4 @@ -module Hasql.Deserialization.Value where +module Hasql.Decoding.Value where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Serialization.hs b/library/Hasql/Encoding.hs similarity index 88% rename from library/Hasql/Serialization.hs rename to library/Hasql/Encoding.hs index 0d10e04335..a17560b608 100644 --- a/library/Hasql/Serialization.hs +++ b/library/Hasql/Encoding.hs @@ -1,4 +1,4 @@ -module Hasql.Serialization +module Hasql.Encoding ( -- * Params Params, @@ -37,26 +37,26 @@ where import Hasql.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoder as Encoder import qualified Data.Aeson as Aeson -import qualified Hasql.Serialization.Params as Params -import qualified Hasql.Serialization.Value as Value -import qualified Hasql.Serialization.Array as Array +import qualified Hasql.Encoding.Params as Params +import qualified Hasql.Encoding.Value as Value +import qualified Hasql.Encoding.Array as Array import qualified Hasql.PTI as PTI import qualified Hasql.Prelude as Prelude --- * Parameters Product Serializer +-- * Parameters Product Encoder ------------------------- -- | --- Serializer of some representation of the parameters product. +-- Encoder of some representation of the parameters product. -- -- Has instances of 'Contravariant', 'Divisible' and 'Monoid', -- which you can use to compose multiple parameters together. -- E.g., -- -- @ --- someParamsSerializer :: Params (Int64, Maybe Text) --- someParamsSerializer = +-- someParamsEncoder :: Params (Int64, Maybe Text) +-- someParamsEncoder = -- 'contramap' fst (value int8) <> -- 'contramap' snd (nullableValue text) -- @ @@ -71,8 +71,8 @@ import qualified Hasql.Prelude as Prelude -- E.g., -- -- @ --- someParamsSerializer :: Params (Int64, Maybe Text) --- someParamsSerializer = +-- someParamsEncoder :: Params (Int64, Maybe Text) +-- someParamsEncoder = -- 'contrazip2' (value int8) (nullableValue text) -- @ -- @@ -81,7 +81,7 @@ newtype Params a = deriving (Contravariant, Divisible, Monoid) -- | --- Lift an individual value serializer to a parameters serializer. +-- Lift an individual value encoder to a parameters encoder. -- {-# INLINABLE value #-} value :: Value a -> Params a @@ -89,7 +89,7 @@ value (Value x) = Params (Params.value x) -- | --- Lift an individual nullable value serializer to a parameters serializer. +-- Lift an individual nullable value encoder to a parameters encoder. -- {-# INLINABLE nullableValue #-} nullableValue :: Value a -> Params (Maybe a) @@ -117,11 +117,11 @@ instance (Default (Value a1), Default (Value a2)) => Default (Params (a1, a2)) w contramap snd (value def) --- * Value Serializer +-- * Value Encoder ------------------------- -- | --- An individual value serializer. +-- An individual value encoder. -- Will be mapped to a single placeholder in the query. -- newtype Value a = @@ -219,7 +219,7 @@ json = Value (Value.unsafePTI PTI.json (const Encoder.json)) -- | --- Unlifts the 'Array' serializer to the plain 'Value' serializer. +-- Unlifts the 'Array' encoder to the plain 'Value' encoder. {-# INLINABLE array #-} array :: Array a -> Value a array (Array imp) = @@ -229,7 +229,7 @@ array (Array imp) = -- | -- Given a function, -- which maps the value into the textual enum label from the DB side, --- produces a serializer of that value. +-- produces a encoder of that value. {-# INLINABLE enum #-} enum :: (a -> Text) -> Value a enum mapping = @@ -352,7 +352,7 @@ instance Default (Value Aeson.Value) where ------------------------- -- | --- A generic array serializer. +-- A generic array encoder. -- -- Here's an example of its usage: -- @@ -364,21 +364,21 @@ newtype Array a = Array (Array.Array a) -- | --- Lifts the 'Value' serializer into the 'Array' serializer of a non-nullable value. +-- Lifts the 'Value' encoder into the 'Array' encoder of a non-nullable value. {-# INLINABLE arrayValue #-} arrayValue :: Value a -> Array a arrayValue (Value (Value.Value elementOID arrayOID encoder')) = Array (Array.value elementOID arrayOID encoder') -- | --- Lifts the 'Value' serializer into the 'Array' serializer of a nullable value. +-- Lifts the 'Value' encoder into the 'Array' encoder of a nullable value. {-# INLINABLE arrayNullableValue #-} arrayNullableValue :: Value a -> Array (Maybe a) arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = Array (Array.nullableValue elementOID arrayOID encoder') -- | --- A serializer of an array dimension, +-- A encoder of an array dimension, -- which thus provides support for multidimensional arrays. -- -- Accepts: @@ -387,7 +387,7 @@ arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = -- such as @Data.Foldable.'foldl''@, -- which determines the input value. -- --- * A component serializer, which can be either another 'arrayDimension', +-- * A component encoder, which can be either another 'arrayDimension', -- 'arrayValue' or 'arrayNullableValue'. -- {-# INLINABLE arrayDimension #-} diff --git a/library/Hasql/Serialization/Array.hs b/library/Hasql/Encoding/Array.hs similarity index 96% rename from library/Hasql/Serialization/Array.hs rename to library/Hasql/Encoding/Array.hs index 13641bcac8..d25634a3be 100644 --- a/library/Hasql/Serialization/Array.hs +++ b/library/Hasql/Encoding/Array.hs @@ -1,4 +1,4 @@ -module Hasql.Serialization.Array where +module Hasql.Encoding.Array where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Serialization/Params.hs b/library/Hasql/Encoding/Params.hs similarity index 90% rename from library/Hasql/Serialization/Params.hs rename to library/Hasql/Encoding/Params.hs index abe30cf2b2..d9b85b7969 100644 --- a/library/Hasql/Serialization/Params.hs +++ b/library/Hasql/Encoding/Params.hs @@ -1,14 +1,14 @@ -module Hasql.Serialization.Params where +module Hasql.Encoding.Params where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.Serialization.Value as Value +import qualified Hasql.Encoding.Value as Value import qualified Hasql.PTI as PTI -- | --- Serializer of some representation of a parameters product. +-- Encoder of some representation of a parameters product. newtype Params a = Params (Op (DList (LibPQ.Oid, Bool -> Maybe ByteString)) a) deriving (Contravariant, Divisible, Monoid) diff --git a/library/Hasql/Serialization/Value.hs b/library/Hasql/Encoding/Value.hs similarity index 95% rename from library/Hasql/Serialization/Value.hs rename to library/Hasql/Encoding/Value.hs index bd73ddaa54..1cd944ce7c 100644 --- a/library/Hasql/Serialization/Value.hs +++ b/library/Hasql/Encoding/Value.hs @@ -1,4 +1,4 @@ -module Hasql.Serialization.Value where +module Hasql.Encoding.Value where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 33720a04d7..e4a2a85774 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -7,9 +7,9 @@ import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Commands as Commands import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Deserialization.Result as ResultDeserialization -import qualified Hasql.Deserialization.Results as ResultsDeserialization -import qualified Hasql.Serialization.Params as ParamsSerialization +import qualified Hasql.Decoding.Result as ResultDecoding +import qualified Hasql.Decoding.Results as ResultsDecoding +import qualified Hasql.Encoding.Params as ParamsEncoding import qualified Hasql.Settings as Settings import qualified Data.DList as DList @@ -59,16 +59,16 @@ initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodingToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDeserialization.Results a -> IO (Either ResultsDeserialization.Error a) +getResults :: LibPQ.Connection -> Bool -> ResultsDecoding.Results a -> IO (Either ResultsDecoding.Error a) getResults connection integerDatetimes des = {-# SCC "getResults" #-} - ResultsDeserialization.run (des <* ResultsDeserialization.dropRemainders) (integerDatetimes, connection) + ResultsDecoding.run (des <* ResultsDecoding.dropRemainders) (integerDatetimes, connection) {-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> - IO (Either ResultsDeserialization.Error ByteString) + IO (Either ResultsDecoding.Error ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} do @@ -80,22 +80,22 @@ getPreparedStatementKey connection registry template oidList = do key <- PreparedStatementRegistry.register template wordOIDList registry sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - let resultsDeserializer = + let resultsDecoder = if sent - then ResultsDeserialization.single ResultDeserialization.unit - else ResultsDeserialization.clientError + then ResultsDecoding.single ResultDecoding.unit + else ResultsDecoding.clientError runEitherT $ do - EitherT $ getResults connection undefined resultsDeserializer + EitherT $ getResults connection undefined resultsDecoder pure key where wordOIDList = map (\(LibPQ.Oid x) -> fromIntegral x) oidList {-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDeserialization.Error ()) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoding.Error ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ResultsDeserialization.ClientError) $ LibPQ.errorMessage connection + False -> fmap (Left . ResultsDecoding.ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricQuery #-} @@ -105,7 +105,7 @@ sendPreparedParametricQuery :: ByteString -> [LibPQ.Oid] -> [Maybe (ByteString, LibPQ.Format)] -> - IO (Either ResultsDeserialization.Error ()) + IO (Either ResultsDecoding.Error ()) sendPreparedParametricQuery connection registry template oidList valueAndFormatList = runEitherT $ do key <- EitherT $ getPreparedStatementKey connection registry template oidList @@ -116,7 +116,7 @@ sendUnpreparedParametricQuery :: LibPQ.Connection -> ByteString -> [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> - IO (Either ResultsDeserialization.Error ()) + IO (Either ResultsDecoding.Error ()) sendUnpreparedParametricQuery connection template paramList = checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary @@ -126,27 +126,27 @@ sendParametricQuery :: Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> - ParamsSerialization.Params a -> + ParamsEncoding.Params a -> Bool -> a -> - IO (Either ResultsDeserialization.Error ()) -sendParametricQuery connection integerDatetimes registry template serializer prepared params = + IO (Either ResultsDecoding.Error ()) +sendParametricQuery connection integerDatetimes registry template encoder prepared params = {-# SCC "sendParametricQuery" #-} if prepared then let (oidList, valueAndFormatList) = - ParamsSerialization.run' serializer params integerDatetimes + ParamsEncoding.run' encoder params integerDatetimes in sendPreparedParametricQuery connection registry template oidList valueAndFormatList else let paramList = - ParamsSerialization.run'' serializer params integerDatetimes + ParamsEncoding.run'' encoder params integerDatetimes in sendUnpreparedParametricQuery connection template paramList {-# INLINE sendNonparametricQuery #-} -sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDeserialization.Error ()) +sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoding.Error ()) sendNonparametricQuery connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/tasty/Main.hs b/tasty/Main.hs index 84904a890d..25379d5f8f 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -10,8 +10,8 @@ import qualified Test.Tasty.QuickCheck as QuickCheck import qualified Test.QuickCheck as QuickCheck import qualified Main.DSL as DSL import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD main = defaultMain tree @@ -41,14 +41,14 @@ tree = in DSL.query () query let query = - (sql, serializer, deserializer, True) + (sql, encoder, decoder, True) where sql = "select ($1 :: mood)" - deserializer = + decoder = (HD.singleRow (HD.value (HD.enum (Just . id)))) - serializer = - HS.value (HS.enum id) + encoder = + HE.value (HE.enum id) in DSL.query "ok" query in actual , @@ -63,25 +63,25 @@ tree = DSL.query "ok" query where query = - (sql, serializer, deserializer, True) + (sql, encoder, decoder, True) where sql = "select $1" - serializer = - HS.value HS.text - deserializer = + encoder = + HE.value HE.text + decoder = (HD.singleRow (HD.value (HD.text))) effect2 = DSL.query 1 query where query = - (sql, serializer, deserializer, True) + (sql, encoder, decoder, True) where sql = "select $1" - serializer = - HS.value HS.int8 - deserializer = + encoder = + HE.value HE.int8 + decoder = (HD.singleRow (HD.value HD.int8)) in (,) <$> effect1 <*> effect2 in actual @@ -107,11 +107,11 @@ tree = DSL.query () $ Queries.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () (sql, def, deserializer, False) + DSL.query () (sql, def, decoder, False) where sql = "delete from a" - deserializer = + decoder = HD.rowsAffected in actual , diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 249794d6f4..3a120ddf53 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -2,8 +2,8 @@ module Main.DSL where import Main.Prelude import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD newtype Session a = diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 13dd56b8bb..c845098266 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -2,8 +2,8 @@ module Main.Queries where import Main.Prelude hiding (def) import qualified Hasql as H -import qualified Hasql.Serialization as HS -import qualified Hasql.Deserialization as HD +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD import qualified Main.Prelude as Prelude @@ -28,9 +28,9 @@ createEnum name values = selectList :: H.Query () ([] (Int64, Int64)) selectList = - (sql, mempty, deserializer, True) + (sql, mempty, decoder, True) where sql = "values (1,2), (3,4), (5,6)" - deserializer = + decoder = HD.rowsList ((,) <$> HD.value HD.int8 <*> HD.value HD.int8) From 31e4c3283f4f565de2b456cffd011d6990ea69d0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 15:13:55 +0300 Subject: [PATCH 0231/1204] Update "contravariant-extras" --- hasql.cabal | 2 +- library/Hasql/Encoding.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 5cf467944b..8d97975db1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -83,7 +83,7 @@ library -- control: data-default-class >= 0.0.1 && < 0.1, profunctors >= 5.1 && < 6, - contravariant-extras == 0.1.*, + contravariant-extras == 0.2.*, contravariant >= 1.3 && < 2, either >= 4.4.1 && < 5, transformers >= 0.3 && < 0.5, diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index a17560b608..6970335fdb 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -65,7 +65,7 @@ import qualified Hasql.Prelude as Prelude -- consider such solutions as -- the @@ macro. -- --- Alternatively you can achieve the same using the functions of the @contrazip@ family +-- Alternatively you can achieve the same using the functions of the @contramap@ family -- from the \"contravariant-extras\" package, -- which are especially helpful when dealing with tuples. -- E.g., @@ -73,7 +73,7 @@ import qualified Hasql.Prelude as Prelude -- @ -- someParamsEncoder :: Params (Int64, Maybe Text) -- someParamsEncoder = --- 'contrazip2' (value int8) (nullableValue text) +-- 'contramap2' (value int8) (nullableValue text) -- @ -- newtype Params a = From 71df29a9fb0be1f09b99cd163974314fcbe0711b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 15:20:12 +0300 Subject: [PATCH 0232/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8d97975db1..389fb6197e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.9 + 0.10 category: Hasql, Database, PostgreSQL synopsis: From 5935393c8a031cbf0320465e4db495b78a0a3e61 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 15:30:14 +0300 Subject: [PATCH 0233/1204] Update "contravariant-extras" --- hasql.cabal | 4 ++-- library/Hasql/Encoding.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 389fb6197e..7642e50c3c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.10 + 0.10.1 category: Hasql, Database, PostgreSQL synopsis: @@ -83,7 +83,7 @@ library -- control: data-default-class >= 0.0.1 && < 0.1, profunctors >= 5.1 && < 6, - contravariant-extras == 0.2.*, + contravariant-extras == 0.3.*, contravariant >= 1.3 && < 2, either >= 4.4.1 && < 5, transformers >= 0.3 && < 0.5, diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index 6970335fdb..a17560b608 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -65,7 +65,7 @@ import qualified Hasql.Prelude as Prelude -- consider such solutions as -- the @@ macro. -- --- Alternatively you can achieve the same using the functions of the @contramap@ family +-- Alternatively you can achieve the same using the functions of the @contrazip@ family -- from the \"contravariant-extras\" package, -- which are especially helpful when dealing with tuples. -- E.g., @@ -73,7 +73,7 @@ import qualified Hasql.Prelude as Prelude -- @ -- someParamsEncoder :: Params (Int64, Maybe Text) -- someParamsEncoder = --- 'contramap2' (value int8) (nullableValue text) +-- 'contrazip2' (value int8) (nullableValue text) -- @ -- newtype Params a = From 53baaa77d8f3248fa3298fa6f4c489d6144cf8c8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:22:38 +0300 Subject: [PATCH 0234/1204] Docs --- library/Hasql/Encoding.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index a17560b608..eb25859876 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -76,6 +76,31 @@ import qualified Hasql.Prelude as Prelude -- 'contrazip2' (value int8) (nullableValue text) -- @ -- +-- Here's how you can implement encoders for custom composite types: +-- +-- @ +-- data Person = +-- Person { name :: Text, gender :: Gender, age :: Int } +-- +-- data Gender = +-- Male | Female +-- +-- personParams :: Params Person +-- personParams = +-- 'contramap' name (value text) <> +-- 'contramap' gender (value genderValue) <> +-- 'contramap' (fromIntegral . age) (value int8) +-- +-- genderValue :: Value Gender +-- genderValue = +-- 'contramap' genderText text +-- where +-- genderText gender = +-- case gender of +-- Male -> "male" +-- Female -> "female" +-- @ +-- newtype Params a = Params (Params.Params a) deriving (Contravariant, Divisible, Monoid) From 0e98ce77ad283affd4e2cb6cce7af3e311c35f2d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:41:13 +0300 Subject: [PATCH 0235/1204] Docs --- library/Hasql/Decoding.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Decoding.hs b/library/Hasql/Decoding.hs index c79b9fcd52..bbe0fc4ce6 100644 --- a/library/Hasql/Decoding.hs +++ b/library/Hasql/Decoding.hs @@ -139,7 +139,7 @@ maybeRow (Row row) = -- Zero or more rows packed into the vector. -- -- It's recommended to prefer this function to 'rowsList', --- since it performs notably faster. +-- since it performs notably better. -- {-# INLINABLE rowsVector #-} rowsVector :: Row a -> Result (Vector a) From 521a8c0e4ba3de443f1400a06460bb548312c38a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:42:12 +0300 Subject: [PATCH 0236/1204] Docs --- library/Hasql/Decoding.hs | 2 +- library/Hasql/Encoding.hs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Decoding.hs b/library/Hasql/Decoding.hs index bbe0fc4ce6..63c32a1e2c 100644 --- a/library/Hasql/Decoding.hs +++ b/library/Hasql/Decoding.hs @@ -1,5 +1,5 @@ -- | --- A DSL for creating result decoders. +-- A DSL for declaration of result decoders. module Hasql.Decoding ( -- * Result diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index eb25859876..8862ea8dc8 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -1,3 +1,5 @@ +-- | +-- A DSL for declaration of query parameter encoders. module Hasql.Encoding ( -- * Params From 7bade853599ba57778d83ede888eaf6a4f48b5c1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:46:10 +0300 Subject: [PATCH 0237/1204] Map the "char" encoder to the "text" OID --- library/Hasql/Encoding.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index 8862ea8dc8..10497b99f5 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -193,7 +193,7 @@ numeric = {-# INLINABLE char #-} char :: Value Char char = - Value (Value.unsafePTI PTI.char (const Encoder.char)) + Value (Value.unsafePTI PTI.text (const Encoder.char)) {-# INLINABLE text #-} text :: Value Text From 5a2987f2fdabb9325e2baf06f95974728a2a5a42 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:46:16 +0300 Subject: [PATCH 0238/1204] Docs --- library/Hasql/Encoding.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index 10497b99f5..ca233d81b4 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -155,91 +155,129 @@ newtype Value a = Value (Value.Value a) deriving (Contravariant) +-- | +-- Encoder of @BOOL@ values. {-# INLINABLE bool #-} bool :: Value Bool bool = Value (Value.unsafePTI PTI.bool (const Encoder.bool)) +-- | +-- Encoder of @INT2@ values. {-# INLINABLE int2 #-} int2 :: Value Int16 int2 = Value (Value.unsafePTI PTI.int2 (const Encoder.int2_int16)) +-- | +-- Encoder of @INT4@ values. {-# INLINABLE int4 #-} int4 :: Value Int32 int4 = Value (Value.unsafePTI PTI.int4 (const Encoder.int4_int32)) +-- | +-- Encoder of @INT8@ values. {-# INLINABLE int8 #-} int8 :: Value Int64 int8 = Value (Value.unsafePTI PTI.int8 (const Encoder.int8_int64)) +-- | +-- Encoder of @FLOAT4@ values. {-# INLINABLE float4 #-} float4 :: Value Float float4 = Value (Value.unsafePTI PTI.float4 (const Encoder.float4)) +-- | +-- Encoder of @FLOAT8@ values. {-# INLINABLE float8 #-} float8 :: Value Double float8 = Value (Value.unsafePTI PTI.float8 (const Encoder.float8)) +-- | +-- Encoder of @NUMERIC@ values. {-# INLINABLE numeric #-} numeric :: Value Scientific numeric = Value (Value.unsafePTI PTI.numeric (const Encoder.numeric)) +-- | +-- Encoder of @CHAR@ values. +-- Note that it supports UTF-8 values and +-- identifies itself under the @TEXT@ OID because of that. {-# INLINABLE char #-} char :: Value Char char = Value (Value.unsafePTI PTI.text (const Encoder.char)) +-- | +-- Encoder of @TEXT@ values. {-# INLINABLE text #-} text :: Value Text text = Value (Value.unsafePTI PTI.text (const Encoder.text_strict)) +-- | +-- Encoder of @BYTEA@ values. {-# INLINABLE bytea #-} bytea :: Value ByteString bytea = Value (Value.unsafePTI PTI.bytea (const Encoder.bytea_strict)) +-- | +-- Encoder of @DATE@ values. {-# INLINABLE date #-} date :: Value Day date = Value (Value.unsafePTI PTI.date (const Encoder.date)) +-- | +-- Encoder of @TIMESTAMP@ values. {-# INLINABLE timestamp #-} timestamp :: Value LocalTime timestamp = Value (Value.unsafePTI PTI.timestamp (Prelude.bool Encoder.timestamp_int Encoder.timestamp_float)) +-- | +-- Encoder of @TIMESTAMPTZ@ values. {-# INLINABLE timestamptz #-} timestamptz :: Value UTCTime timestamptz = Value (Value.unsafePTI PTI.timestamptz (Prelude.bool Encoder.timestamptz_int Encoder.timestamptz_float)) +-- | +-- Encoder of @TIME@ values. {-# INLINABLE time #-} time :: Value TimeOfDay time = Value (Value.unsafePTI PTI.time (Prelude.bool Encoder.time_int Encoder.time_float)) +-- | +-- Encoder of @TIMETZ@ values. {-# INLINABLE timetz #-} timetz :: Value (TimeOfDay, TimeZone) timetz = Value (Value.unsafePTI PTI.timetz (Prelude.bool Encoder.timetz_int Encoder.timetz_float)) +-- | +-- Encoder of @INTERVAL@ values. {-# INLINABLE interval #-} interval :: Value DiffTime interval = Value (Value.unsafePTI PTI.interval (Prelude.bool Encoder.interval_int Encoder.interval_float)) +-- | +-- Encoder of @UUID@ values. {-# INLINABLE uuid #-} uuid :: Value UUID uuid = Value (Value.unsafePTI PTI.uuid (const Encoder.uuid)) +-- | +-- Encoder of @JSON@ values. {-# INLINABLE json #-} json :: Value Aeson.Value json = From 940955f4584b5e4dc55c646ed84855c773f482a1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:51:38 +0300 Subject: [PATCH 0239/1204] Docs --- library/Hasql.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/Hasql.hs b/library/Hasql.hs index 35e073da12..771ec9e09c 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -1,3 +1,7 @@ +-- | +-- This module provides a low-level effectful API dealing with connections to the database. +-- +-- The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. module Hasql ( -- * Connection From 03ca3bf5bf4465806b28dbc444cea1217ea5c8ed Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 16:52:25 +0300 Subject: [PATCH 0240/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7642e50c3c..81062237ab 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.10.1 + 0.10.1.1 category: Hasql, Database, PostgreSQL synopsis: From f46bd40a14b0324b9c3bdf1496e7c13a525c4643 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:03:37 +0300 Subject: [PATCH 0241/1204] Make Query a dedicated data-type --- benchmark/Main/Queries.hs | 4 ++-- library/Hasql.hs | 48 +++++++++++++++++++++++++++++++++++---- tasty/Main.hs | 16 ++++++------- tasty/Main/Queries.hs | 6 ++--- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index 9e07175d1d..1897eebc56 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -9,7 +9,7 @@ import qualified Hasql.Decoding as HD select1 :: Int -> H.Query () (Vector Int64) select1 amount = {-# SCC "select1" #-} - (sql, mempty, decoder, True) + H.Query sql mempty decoder True where !sql = "values " <> @@ -20,7 +20,7 @@ select1 amount = select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) select4 amount = {-# SCC "select4" #-} - (sql, mempty, decoder, True) + H.Query sql mempty decoder True where !sql = "values " <> diff --git a/library/Hasql.hs b/library/Hasql.hs index 771ec9e09c..244c6c52dc 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -109,15 +109,55 @@ disconnect (Connection pqConnection _ _) = -- | -- A strictly single-statement query, which can be parameterized and prepared. -- --- SQL template, params encoder, result decoder and a flag, determining whether it should be prepared. +-- Consists of the following: -- -type Query a b = - (ByteString, Encoding.Params a, Decoding.Result b, Bool) +-- * SQL template, +-- * params encoder, +-- * result decoder, +-- * a flag, determining whether it should be prepared. +-- +-- The SQL template must be formatted according to Postgres' standard, +-- with any non-ASCII characters of the template must be encoded using UTF-8. +-- According to the format, +-- parameters must be referred to using the positional notation, as in the following: +-- @$1@, @$2@, @$3@ and etc. +-- Those references must be used to refer to the values of the 'Encoding.Params' encoder. +-- +-- Following is an example of the declaration of a prepared statement with its associated codecs. +-- +-- @ +-- selectSum :: Hasql.'Hasql.Query' (Int64, Int64) Int64 +-- selectSum = +-- Hasql.'Hasql.Query' sql encoder decoder True +-- where +-- sql = +-- "select ($1 + $2)" +-- encoder = +-- 'contramap' 'fst' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') <> +-- 'contramap' 'snd' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') +-- decoder = +-- Hasql.Decoding.'Hasql.Decoding.singleRow' (Hasql.Decoding.'Hasql.Decoding.value' Hasql.Decoding.'Hasql.Decoding.int8') +-- @ +-- +-- The statement above accepts a product of two parameters of type 'Int64' +-- and results in a single result of type 'Int64'. +-- +data Query a b = + Query !ByteString !(Encoding.Params a) !(Decoding.Result b) !Bool + deriving (Functor) + +instance Profunctor Query where + lmap f (Query p1 p2 p3 p4) = + Query p1 (contramap f p2) p3 p4 + rmap f (Query p1 p2 p3 p4) = + Query p1 p2 (fmap f p3) p4 + dimap f1 f2 (Query p1 p2 p3 p4) = + Query p1 (contramap f1 p2) (fmap f2 p3) p4 -- | -- Execute a parametric query, producing either a deserialization failure or a successful result. query :: Connection -> Query a b -> a -> IO (Either ResultsError b) -query (Connection pqConnection integerDatetimes registry) (template, encoder, decoder, preparable) params = +query (Connection pqConnection integerDatetimes registry) (Query template encoder decoder preparable) params = {-# SCC "query" #-} fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params diff --git a/tasty/Main.hs b/tasty/Main.hs index 25379d5f8f..ea028ac401 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -27,21 +27,21 @@ tree = DSL.session $ do let query = - (sql, mempty, HD.noResult, True) + H.Query sql mempty HD.noResult True where sql = "drop type if exists mood" in DSL.query () query let query = - (sql, mempty, HD.noResult, True) + H.Query sql mempty HD.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" in DSL.query () query let query = - (sql, encoder, decoder, True) + H.Query sql encoder decoder True where sql = "select ($1 :: mood)" @@ -63,7 +63,7 @@ tree = DSL.query "ok" query where query = - (sql, encoder, decoder, True) + H.Query sql encoder decoder True where sql = "select $1" @@ -75,7 +75,7 @@ tree = DSL.query 1 query where query = - (sql, encoder, decoder, True) + H.Query sql encoder decoder True where sql = "select $1" @@ -107,7 +107,7 @@ tree = DSL.query () $ Queries.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () (sql, def, decoder, False) + DSL.query () $ H.Query sql def decoder False where sql = "delete from a" @@ -121,8 +121,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () ("insert into a (v) values ('a') returning id", def, (HD.singleRow (HD.value HD.int4)), False) - id2 <- DSL.query () ("insert into a (v) values ('b') returning id", def, (HD.singleRow (HD.value HD.int4)), False) + id1 <- DSL.query () $ H.Query "insert into a (v) values ('a') returning id" def (HD.singleRow (HD.value HD.int4)) False + id2 <- DSL.query () $ H.Query "insert into a (v) values ('b') returning id" def (HD.singleRow (HD.value HD.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index c845098266..e27d9acf04 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -9,11 +9,11 @@ import qualified Main.Prelude as Prelude def :: ByteString -> H.Query () () def sql = - (sql, Prelude.def, Prelude.def, False) + H.Query sql Prelude.def Prelude.def False plain :: ByteString -> H.Query () () plain sql = - (sql, mempty, HD.noResult, False) + H.Query sql mempty HD.noResult False dropType :: ByteString -> H.Query () () dropType name = @@ -28,7 +28,7 @@ createEnum name values = selectList :: H.Query () ([] (Int64, Int64)) selectList = - (sql, mempty, decoder, True) + H.Query sql mempty decoder True where sql = "values (1,2), (3,4), (5,6)" From 8dde5b38645312eb599a2b5bed0a0c60628f6024 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:36:27 +0300 Subject: [PATCH 0242/1204] Make Settings strict to conform with the rest of the API --- library/Hasql/Settings.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Settings.hs b/library/Hasql/Settings.hs index 4daf934872..29b53dbdec 100644 --- a/library/Hasql/Settings.hs +++ b/library/Hasql/Settings.hs @@ -12,11 +12,11 @@ import qualified Data.ByteString.Lazy as BL data Settings = -- | -- A host, a port, a user, a password and a database. - ParametricSettings ByteString Word16 ByteString ByteString ByteString | + ParametricSettings !ByteString !Word16 !ByteString !ByteString !ByteString | -- | -- All settings encoded in a single byte string according to -- . - RawSettings ByteString + RawSettings !ByteString deriving (Show) {-# INLINE asBytes #-} From ed23377f2eee839fceca90ced740a2e35cf5d1aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:46:36 +0300 Subject: [PATCH 0243/1204] Simplify Settings --- benchmark/Main.hs | 2 +- library/Hasql.hs | 4 ++- library/Hasql/IO.hs | 7 ++--- library/Hasql/Settings.hs | 63 +++++++++++++++++---------------------- tasty/Main/DSL.hs | 2 +- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index cc94559402..9bc196e759 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -12,7 +12,7 @@ main = H.connect settings >>= either (fail . show) use where settings = - H.ParametricSettings host port user password database + H.settings host port user password database where host = "localhost" port = 5432 diff --git a/library/Hasql.hs b/library/Hasql.hs index 244c6c52dc..f9fd53027c 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -4,9 +4,11 @@ -- The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. module Hasql ( + -- * Connection settings + Settings.Settings(..), + Settings.settings, -- * Connection Connection, - Settings.Settings(..), ConnectionError(..), connect, disconnect, diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index e4a2a85774..f958da1e81 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -10,14 +10,13 @@ import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Decoding.Result as ResultDecoding import qualified Hasql.Decoding.Results as ResultsDecoding import qualified Hasql.Encoding.Params as ParamsEncoding -import qualified Hasql.Settings as Settings import qualified Data.DList as DList {-# INLINE acquireConnection #-} -acquireConnection :: Settings.Settings -> IO LibPQ.Connection -acquireConnection settings = - LibPQ.connectdb (Settings.asBytes settings) +acquireConnection :: ByteString -> IO LibPQ.Connection +acquireConnection = + LibPQ.connectdb {-# INLINE acquirePreparedStatementRegistry #-} acquirePreparedStatementRegistry :: IO PreparedStatementRegistry.PreparedStatementRegistry diff --git a/library/Hasql/Settings.hs b/library/Hasql/Settings.hs index 29b53dbdec..0d87a4b12b 100644 --- a/library/Hasql/Settings.hs +++ b/library/Hasql/Settings.hs @@ -7,40 +7,33 @@ import qualified Data.ByteString.Lazy.Builder.ASCII as BB import qualified Data.ByteString.Lazy as BL --- | --- Connection settings. -data Settings = - -- | - -- A host, a port, a user, a password and a database. - ParametricSettings !ByteString !Word16 !ByteString !ByteString !ByteString | - -- | - -- All settings encoded in a single byte string according to - -- . - RawSettings !ByteString - deriving (Show) -{-# INLINE asBytes #-} -asBytes :: Settings -> ByteString -asBytes = - \case - ParametricSettings host port user password database -> - BL.toStrict $ BB.toLazyByteString $ mconcat $ intersperse (BB.char7 ' ') $ catMaybes $ - [ - mappend (BB.string7 "host=") . BB.byteString <$> - mfilter (not . B.null) (pure host) - , - mappend (BB.string7 "port=") . BB.word16Dec <$> - mfilter (/= 0) (pure port) - , - mappend (BB.string7 "user=") . BB.byteString <$> - mfilter (not . B.null) (pure user) - , - mappend (BB.string7 "password=") . BB.byteString <$> - mfilter (not . B.null) (pure password) - , - mappend (BB.string7 "dbname=") . BB.byteString <$> - mfilter (not . B.null) (pure database) - ] - RawSettings bytes -> - bytes +-- | +-- All settings encoded in a single byte-string according to +-- . +type Settings = + ByteString + +-- | +-- Encode a host, a port, a user, a password and a database into the PostgreSQL settings byte-string. +{-# INLINE settings #-} +settings :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> Settings +settings host port user password database = + BL.toStrict $ BB.toLazyByteString $ mconcat $ intersperse (BB.char7 ' ') $ catMaybes $ + [ + mappend (BB.string7 "host=") . BB.byteString <$> + mfilter (not . B.null) (pure host) + , + mappend (BB.string7 "port=") . BB.word16Dec <$> + mfilter (/= 0) (pure port) + , + mappend (BB.string7 "user=") . BB.byteString <$> + mfilter (not . B.null) (pure user) + , + mappend (BB.string7 "password=") . BB.byteString <$> + mfilter (not . B.null) (pure password) + , + mappend (BB.string7 "dbname=") . BB.byteString <$> + mfilter (not . B.null) (pure database) + ] diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 3a120ddf53..1897d55de7 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -23,7 +23,7 @@ session (Session impl) = EitherT $ fmap (mapLeft ConnectionError) $ H.connect settings where settings = - H.ParametricSettings host port user password database + H.settings host port user password database where host = "localhost" port = 5432 From 05dc480ab98e0ba92afda847a139c1e18192699a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:52:25 +0300 Subject: [PATCH 0244/1204] Docs --- library/Hasql.hs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index f9fd53027c..26dc9c2b5d 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -37,15 +37,21 @@ import qualified Hasql.IO as IO data Connection = Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry +-- | +-- An error of the result-decoder. data ResultsError = -- | -- An error on the client-side, -- with a message generated by the \"libpq\" library. -- Usually indicates problems with connection. ClientError !(Maybe ByteString) | + -- | + -- Decoder error details. ResultError !ResultError deriving (Show, Eq) +-- | +-- Decoder error details. data ResultError = -- | -- An error reported by the DB. Code, message, details, hint. @@ -77,14 +83,23 @@ data ResultError = UnexpectedAmountOfRows !Int deriving (Show, Eq) +-- | +-- An error during the decoding of a specific row. data RowError = + -- | + -- Appears on the attempt to parse more columns than there are in the result. EndOfInput | + -- | + -- Appears on the attempt to parse a @NULL@ as some value. UnexpectedNull | + -- | + -- Appears when a wrong value parser is used. + -- Comes with the error details. ValueError !Text deriving (Show, Eq) -- | --- A connection acquistion error. +-- Possible details of the connection acquistion error. type ConnectionError = Maybe ByteString From 7760d4d944194aa68f6d1d57c364945fde28008f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:54:46 +0300 Subject: [PATCH 0245/1204] Inlining --- library/Hasql.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql.hs b/library/Hasql.hs index 26dc9c2b5d..c98ec04e13 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -164,10 +164,13 @@ data Query a b = deriving (Functor) instance Profunctor Query where + {-# INLINE lmap #-} lmap f (Query p1 p2 p3 p4) = Query p1 (contramap f p2) p3 p4 + {-# INLINE rmap #-} rmap f (Query p1 p2 p3 p4) = Query p1 p2 (fmap f p3) p4 + {-# INLINE dimap #-} dimap f1 f2 (Query p1 p2 p3 p4) = Query p1 (contramap f1 p2) (fmap f2 p3) p4 From 9e80ecf5770a7de5fc4809cfc0006e2dd7211714 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 17:55:53 +0300 Subject: [PATCH 0246/1204] Docs --- library/Hasql.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index c98ec04e13..42309b575b 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -124,7 +124,7 @@ disconnect (Connection pqConnection _ _) = -- | --- A strictly single-statement query, which can be parameterized and prepared. +-- A specification of a strictly single-statement query, which can be parameterized and prepared. -- -- Consists of the following: -- From d1425a7ccb6aed8637ee88f340beacc1dde5b0c2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 18:03:29 +0300 Subject: [PATCH 0247/1204] Docs --- library/Hasql.hs | 2 +- library/Hasql/Encoding.hs | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/library/Hasql.hs b/library/Hasql.hs index 42309b575b..81a76be18d 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -150,7 +150,7 @@ disconnect (Connection pqConnection _ _) = -- sql = -- "select ($1 + $2)" -- encoder = --- 'contramap' 'fst' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') <> +-- 'contramap' 'fst' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') '<>' -- 'contramap' 'snd' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') -- decoder = -- Hasql.Decoding.'Hasql.Decoding.singleRow' (Hasql.Decoding.'Hasql.Decoding.value' Hasql.Decoding.'Hasql.Decoding.int8') diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index ca233d81b4..945c83bc14 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -59,18 +59,14 @@ import qualified Hasql.Prelude as Prelude -- @ -- someParamsEncoder :: Params (Int64, Maybe Text) -- someParamsEncoder = --- 'contramap' fst (value int8) <> --- 'contramap' snd (nullableValue text) +-- 'contramap' 'fst' (value int8) '<>' +-- 'contramap' 'snd' (nullableValue text) -- @ -- -- As a general solution for tuples of any arity, instead of 'fst' and 'snd', --- consider such solutions as --- the @@ macro. --- --- Alternatively you can achieve the same using the functions of the @contrazip@ family --- from the \"contravariant-extras\" package, --- which are especially helpful when dealing with tuples. --- E.g., +-- consider the functions of the @contrazip@ family +-- from the \"contravariant-extras\" package. +-- E.g., here's how you can achieve the same as the above: -- -- @ -- someParamsEncoder :: Params (Int64, Maybe Text) @@ -89,8 +85,8 @@ import qualified Hasql.Prelude as Prelude -- -- personParams :: Params Person -- personParams = --- 'contramap' name (value text) <> --- 'contramap' gender (value genderValue) <> +-- 'contramap' name (value text) '<>' +-- 'contramap' gender (value genderValue) '<>' -- 'contramap' (fromIntegral . age) (value int8) -- -- genderValue :: Value Gender From 108a7dc6d15bd40d4668230d26f03a304100f79c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 18:07:49 +0300 Subject: [PATCH 0248/1204] Docs --- library/Hasql/Encoding.hs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index 945c83bc14..e33a8b73f0 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -57,10 +57,10 @@ import qualified Hasql.Prelude as Prelude -- E.g., -- -- @ --- someParamsEncoder :: Params (Int64, Maybe Text) +-- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = --- 'contramap' 'fst' (value int8) '<>' --- 'contramap' 'snd' (nullableValue text) +-- 'contramap' 'fst' ('value' 'int8') '<>' +-- 'contramap' 'snd' ('nullableValue' 'text') -- @ -- -- As a general solution for tuples of any arity, instead of 'fst' and 'snd', @@ -69,9 +69,9 @@ import qualified Hasql.Prelude as Prelude -- E.g., here's how you can achieve the same as the above: -- -- @ --- someParamsEncoder :: Params (Int64, Maybe Text) +-- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = --- 'contrazip2' (value int8) (nullableValue text) +-- 'contrazip2' ('value' 'int8') ('nullableValue' 'text') -- @ -- -- Here's how you can implement encoders for custom composite types: @@ -83,15 +83,15 @@ import qualified Hasql.Prelude as Prelude -- data Gender = -- Male | Female -- --- personParams :: Params Person +-- personParams :: 'Params' Person -- personParams = --- 'contramap' name (value text) '<>' --- 'contramap' gender (value genderValue) '<>' --- 'contramap' (fromIntegral . age) (value int8) +-- 'contramap' name ('value' 'text') '<>' +-- 'contramap' gender ('value' genderValue) '<>' +-- 'contramap' (fromIntegral . age) ('value' 'int8') -- --- genderValue :: Value Gender +-- genderValue :: 'Value' Gender -- genderValue = --- 'contramap' genderText text +-- 'contramap' genderText 'text' -- where -- genderText gender = -- case gender of From 01a15773b08cb183ba95744f0fad9bb0e0a469b8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Nov 2015 22:13:24 +0300 Subject: [PATCH 0249/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 81062237ab..7d7a0ed2d4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.10.1.1 + 0.11 category: Hasql, Database, PostgreSQL synopsis: From ccc13a9a9b6660588d214d7eee3c8145a7edc9ce Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 08:34:01 +0300 Subject: [PATCH 0250/1204] Update the extensions --- hasql.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7d7a0ed2d4..6f59fc5dd6 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -40,7 +40,7 @@ library library ghc-options: default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: @@ -109,7 +109,7 @@ test-suite tasty Main.Queries Main.Prelude default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: @@ -161,7 +161,7 @@ benchmark benchmark -fprof-auto "-with-rtsopts=-N -p -s -h -i0.1" default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: From 66eee199cbd7d6688fb429583a1bf9ab8109f90c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 08:34:27 +0300 Subject: [PATCH 0251/1204] "noResult" -> "unit" --- library/Hasql/Decoding.hs | 12 ++++++------ tasty/Main.hs | 4 ++-- tasty/Main/Queries.hs | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/library/Hasql/Decoding.hs b/library/Hasql/Decoding.hs index 63c32a1e2c..6a917390f7 100644 --- a/library/Hasql/Decoding.hs +++ b/library/Hasql/Decoding.hs @@ -4,7 +4,7 @@ module Hasql.Decoding ( -- * Result Result, - noResult, + unit, rowsAffected, singleRow, -- ** Specialized multi-row results @@ -82,9 +82,9 @@ newtype Result a = -- -- Useful for statements like @INSERT@ or @CREATE@. -- -{-# INLINABLE noResult #-} -noResult :: Result () -noResult = +{-# INLINABLE unit #-} +unit :: Result () +unit = Result (Results.single Result.unit) -- | @@ -158,11 +158,11 @@ rowsList = -- ** Instances ------------------------- --- | Maps to 'noResult'. +-- | Maps to 'unit'. instance Default (Result ()) where {-# INLINE def #-} def = - noResult + unit -- | Maps to 'rowsAffected'. instance Default (Result Int64) where diff --git a/tasty/Main.hs b/tasty/Main.hs index ea028ac401..20a5b81edd 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -27,14 +27,14 @@ tree = DSL.session $ do let query = - H.Query sql mempty HD.noResult True + H.Query sql mempty HD.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - H.Query sql mempty HD.noResult True + H.Query sql mempty HD.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index e27d9acf04..ae904932be 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -13,7 +13,7 @@ def sql = plain :: ByteString -> H.Query () () plain sql = - H.Query sql mempty HD.noResult False + H.Query sql mempty HD.unit False dropType :: ByteString -> H.Query () () dropType name = From dd1e056f229ea008b9c137bd01fd449f94655741 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 08:54:47 +0300 Subject: [PATCH 0252/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 6f59fc5dd6..71e9f2447c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.11 + 0.12 category: Hasql, Database, PostgreSQL synopsis: From adedcaef3ce89687d379a2fa2fee82207fb65ecb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 08:56:39 +0300 Subject: [PATCH 0253/1204] Category --- hasql-tx.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 8ef70c8b2f..74741a3014 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -3,7 +3,7 @@ name: version: 1 category: - Database, DSL, PostgreSQL + Hasql, Database, PostgreSQL synopsis: homepage: https://github.com/nikita-volkov/hasql-tx From bd9174af9151b41bc98e463dc8f3beb30562b3e1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:07:58 +0300 Subject: [PATCH 0254/1204] Tuple instances --- library/Hasql/Encoding.hs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index e33a8b73f0..97fb0b2137 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -136,8 +136,22 @@ instance Default (Value a) => Default (Params (Identity a)) where instance (Default (Value a1), Default (Value a2)) => Default (Params (a1, a2)) where {-# INLINE def #-} def = - contramap fst (value def) <> - contramap snd (value def) + contrazip2 (value def) (value def) + +instance (Default (Value a1), Default (Value a2), Default (Value a3)) => Default (Params (a1, a2, a3)) where + {-# INLINE def #-} + def = + contrazip3 (value def) (value def) (value def) + +instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4)) => Default (Params (a1, a2, a3, a4)) where + {-# INLINE def #-} + def = + contrazip4 (value def) (value def) (value def) (value def) + +instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4), Default (Value a5)) => Default (Params (a1, a2, a3, a4, a5)) where + {-# INLINE def #-} + def = + contrazip5 (value def) (value def) (value def) (value def) (value def) -- * Value Encoder From c5aad7355eea15eb84ca372b593453f82aa1ef27 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:08:06 +0300 Subject: [PATCH 0255/1204] Params unit --- library/Hasql/Encoding.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index 97fb0b2137..a4bb0c6aa1 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -4,6 +4,7 @@ module Hasql.Encoding ( -- * Params Params, + unit, value, nullableValue, -- * Value @@ -103,6 +104,14 @@ newtype Params a = Params (Params.Params a) deriving (Contravariant, Divisible, Monoid) +-- | +-- Encode no parameters. +-- +{-# INLINABLE unit #-} +unit :: Params () +unit = + Params mempty + -- | -- Lift an individual value encoder to a parameters encoder. -- @@ -123,10 +132,12 @@ nullableValue (Value x) = -- ** Instances ------------------------- +-- | +-- Maps to 'unit'. instance Default (Params ()) where {-# INLINE def #-} def = - mempty + unit instance Default (Value a) => Default (Params (Identity a)) where {-# INLINE def #-} From 4f44fb30eaf527c543f2f989ee713b4ecd5f27bb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:10:49 +0300 Subject: [PATCH 0256/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 71e9f2447c..2843679463 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.12 + 0.12.1 category: Hasql, Database, PostgreSQL synopsis: From 837807c794e8c495baf3a50eef25901297b85c0f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:26:02 +0300 Subject: [PATCH 0257/1204] Updates --- hasql-tx.cabal | 12 ++------ library/Hasql/Tx.hs | 19 ++++++------ library/Hasql/Tx/Prelude.hs | 27 +++-------------- library/Hasql/Tx/Queries.hs | 58 ++++++++++++++++++++----------------- 4 files changed, 47 insertions(+), 69 deletions(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 74741a3014..909f9889f9 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -46,25 +46,19 @@ library exposed-modules: Hasql.Tx build-depends: - hasql >= 1 && < 1.1, + hasql >= 0.12.1 && < 0.13, -- parsing: attoparsec >= 0.10 && < 0.14, -- database: postgresql-error-codes >= 1 && < 2, - postgresql-binary == 0.5.*, - postgresql-libpq == 0.9.*, -- data: - aeson >= 0.7 && < 0.11, - uuid == 1.3.*, + bytestring-tree-builder >= 0.1 && < 0.2, vector >= 0.10 && < 0.12, - time >= 1.4 && < 1.6, - hashtables >= 1.1 && < 1.3, - scientific >= 0.2 && < 0.4, text >= 1 && < 1.3, bytestring >= 0.10 && < 0.11, - hashable >= 1.2 && < 1.3, -- control: contravariant >= 1.3 && < 2, + contravariant-extras >= 0.3 && < 0.4, either >= 4.4.1 && < 5, transformers >= 0.3 && < 0.5, -- errors: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index 4e5ab0e2f0..0c57fead88 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -2,14 +2,13 @@ module Hasql.Tx where import Hasql.Tx.Prelude -import qualified Hasql.Connection as Connection -import qualified Hasql.Query as Query +import qualified Hasql import qualified Hasql.Tx.Queries as Queries import qualified PostgreSQL.ErrorCodes as ErrorCodes newtype Tx a = - Tx (ReaderT (Connection.Connection, IORef Int) (EitherT Connection.ResultsError IO) a) + Tx (ReaderT (Hasql.Connection, IORef Int) (EitherT Hasql.ResultsError IO) a) deriving (Functor, Applicative, Monad) -- | @@ -40,14 +39,14 @@ data IsolationLevel = Serializable deriving (Show, Eq, Ord, Enum, Bounded) -run :: Tx a -> Connection.Connection -> IsolationLevel -> Mode -> IO (Either Connection.ResultsError a) +run :: Tx a -> Hasql.Connection -> IsolationLevel -> Mode -> IO (Either Hasql.ResultsError a) run (Tx tx) connection isolation mode = runEitherT $ do - EitherT $ Connection.executeParametricQuery connection (Queries.beginTransaction mode') () + EitherT $ Hasql.query connection (Queries.beginTransaction mode') () counterRef <- lift $ newIORef 0 resultEither <- lift $ runEitherT $ runReaderT tx (connection, counterRef) case resultEither of - Left (Connection.ResultError (Connection.ServerError code _ _ _)) + Left (Hasql.ResultError (Hasql.ServerError code _ _ _)) | code == ErrorCodes.serialization_failure -> EitherT $ run (Tx tx) connection isolation mode _ -> do @@ -58,7 +57,7 @@ run (Tx tx) connection isolation mode = then Queries.commitTransaction else Queries.abortTransaction in - EitherT $ Connection.executeParametricQuery connection query () + EitherT $ Hasql.query connection query () pure result where mode' = @@ -69,7 +68,7 @@ run (Tx tx) connection isolation mode = Write -> (True, True) WriteWithoutCommitting -> (True, False) -parametricQuery :: Query.ParametricQuery a b -> a -> Tx b -parametricQuery query params = +query :: Hasql.Query a b -> a -> Tx b +query query params = Tx $ ReaderT $ \(connection, _) -> EitherT $ - Connection.executeParametricQuery connection query params + Hasql.query connection query params diff --git a/library/Hasql/Tx/Prelude.hs b/library/Hasql/Tx/Prelude.hs index 1a3a5af863..679a65f1fd 100644 --- a/library/Hasql/Tx/Prelude.hs +++ b/library/Hasql/Tx/Prelude.hs @@ -1,8 +1,6 @@ module Hasql.Tx.Prelude ( module Exports, - bug, - bottom, ) where @@ -24,6 +22,10 @@ import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports +-- contravariant-extras +------------------------- +import Contravariant.Extras as Exports + -- either ------------------------- import Control.Monad.Trans.Either as Exports @@ -36,24 +38,3 @@ import Data.Text as Exports (Text) -- bytestring ------------------------- import Data.ByteString as Exports (ByteString) - --- placeholders -------------------------- -import Development.Placeholders as Exports - --- loch-th -------------------------- -import Debug.Trace.LocationTH as Exports - --- custom -------------------------- -import qualified Debug.Trace.LocationTH - - -bug = - [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] - where - msg = "A \"hasql\" package bug: " :: String - -bottom = - [e| $bug "Bottom evaluated" |] diff --git a/library/Hasql/Tx/Queries.hs b/library/Hasql/Tx/Queries.hs index f72e6bccee..a639842626 100644 --- a/library/Hasql/Tx/Queries.hs +++ b/library/Hasql/Tx/Queries.hs @@ -2,9 +2,10 @@ module Hasql.Tx.Queries where import Hasql.Tx.Prelude -import Hasql.Query -import qualified Hasql.Serialization as S -import qualified Hasql.Deserialization as D +import qualified Hasql as H +import qualified Hasql.Encoding as HE +import qualified Hasql.Decoding as HD +import qualified ByteString.TreeBuilder as TB -- * Transactions @@ -18,12 +19,13 @@ data Isolation = type TransactionMode = (Isolation, Bool) -beginTransaction :: TransactionMode -> ParametricQuery () () +beginTransaction :: TransactionMode -> H.Query () () beginTransaction (isolation, write) = - (template, mempty, D.result D.noResult, True) + H.Query sql HE.unit HD.unit True where - template = - mconcat + sql = + TB.toByteString $ + mconcat $ [ "BEGIN " , @@ -39,37 +41,39 @@ beginTransaction (isolation, write) = False -> "READ ONLY" ] -commitTransaction :: ParametricQuery () () +commitTransaction :: H.Query () () commitTransaction = - ("COMMIT", mempty, D.result D.noResult, True) + H.Query "commit" HE.unit HD.unit True -abortTransaction :: ParametricQuery () () +abortTransaction :: H.Query () () abortTransaction = - ("ABORT", mempty, D.result D.noResult, True) + H.Query "abort" HE.unit HD.unit True -- * Streaming ------------------------- -declareCursor :: ByteString -> ParametricQuery a b -> ParametricQuery a b -declareCursor name (template, serializer, deserializer, preparable) = - (template', serializer, deserializer, False) +declareCursor :: ByteString -> ByteString -> HE.Params a -> H.Query a () +declareCursor name sql encoder = + H.Query sql' encoder HD.unit False where - template' = - "DECLARE " <> name <> " NO SCROLL CURSOR FOR " <> template + sql' = + TB.toByteString $ + "DECLARE " <> TB.byteString name <> " NO SCROLL CURSOR FOR " <> TB.byteString sql -closeCursor :: ParametricQuery ByteString () +closeCursor :: H.Query ByteString () closeCursor = - ("CLOSE $1", S.value (S.nonNull S.bytea), D.result D.noResult, True) + H.Query "CLOSE $1" (HE.value HE.bytea) HD.unit True -fetchFromCursor :: D.Results a -> ParametricQuery (Int64, ByteString) a -fetchFromCursor deserializer = - (template, serializer, deserializer, True) +fetchFromCursor :: (b -> a -> b) -> b -> HD.Row a -> H.Query (Int64, ByteString) b +fetchFromCursor step init rowDec = + H.Query sql encoder decoder True where - template = + sql = "FETCH FORWARD $1 FROM $2" - serializer = - contramap fst (S.value (S.nonNull S.int8)) <> - contramap snd (S.value (S.nonNull S.bytea)) - - + encoder = + contrazip2 + (HE.value HE.int8) + (HE.value HE.bytea) + decoder = + HD.foldlRows step init rowDec From 1ab1bd1e3870ed5d467a47bc7c92e90e54efcaa7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:30:59 +0300 Subject: [PATCH 0258/1204] Docs --- hasql.cabal | 2 +- library/Hasql.hs | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 2843679463..89d2992140 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.12.1 + 0.12.1.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql.hs b/library/Hasql.hs index 81a76be18d..c815ef0598 100644 --- a/library/Hasql.hs +++ b/library/Hasql.hs @@ -54,22 +54,27 @@ data ResultsError = -- Decoder error details. data ResultError = -- | - -- An error reported by the DB. Code, message, details, hint. + -- An error reported by the DB. + -- Consists of the following: Code, message, details, hint. -- - -- * The SQLSTATE code for the error. The SQLSTATE code identifies the type of error that has occurred; - -- it can be used by front-end applications to perform specific operations (such as error handling) - -- in response to a particular database error. - -- For a list of the possible SQLSTATE codes, see Appendix A. - -- This field is not localizable, and is always present. + -- * __Code__. + -- The SQLSTATE code for the error. + -- It's recommended to use + -- + -- to work with those. -- - -- * The primary human-readable error message (typically one line). Always present. + -- * __Message__. + -- The primary human-readable error message (typically one line). Always present. -- - -- * Detail: an optional secondary error message carrying more detail about the problem. + -- * __Details__. + -- An optional secondary error message carrying more detail about the problem. -- Might run to multiple lines. -- - -- * Hint: an optional suggestion what to do about the problem. + -- * __Hint__. + -- An optional suggestion on what to do about the problem. -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. Might run to multiple lines. + -- rather than hard facts. + -- Might run to multiple lines. ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | -- | -- The database returned an unexpected result. From 5340ddb21d02daa29485f89bc61749000ec87e94 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 09:34:12 +0300 Subject: [PATCH 0259/1204] Docs, exports and release --- hasql-tx.cabal | 2 +- library/Hasql/Tx.hs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 909f9889f9..32fc68cc22 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -1,7 +1,7 @@ name: hasql-tx version: - 1 + 0.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index 0c57fead88..10547b0696 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -1,4 +1,13 @@ module Hasql.Tx +( + -- * Transaction settings + Mode(..), + IsolationLevel(..), + -- * Transaction monad + Tx, + run, + query, +) where import Hasql.Tx.Prelude @@ -39,6 +48,8 @@ data IsolationLevel = Serializable deriving (Show, Eq, Ord, Enum, Bounded) +-- | +-- Execute the transaction on a connection with the provided settings. run :: Tx a -> Hasql.Connection -> IsolationLevel -> Mode -> IO (Either Hasql.ResultsError a) run (Tx tx) connection isolation mode = runEitherT $ do @@ -68,6 +79,8 @@ run (Tx tx) connection isolation mode = Write -> (True, True) WriteWithoutCommitting -> (True, False) +-- | +-- Execute a query in the context of a transaction. query :: Hasql.Query a b -> a -> Tx b query query params = Tx $ ReaderT $ \(connection, _) -> EitherT $ From 93805d4a73994e2bcbc6f664889946c8e6de83ba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:10:21 +0300 Subject: [PATCH 0260/1204] Deep isolation --- benchmark/Main.hs | 12 ++++--- benchmark/Main/Queries.hs | 10 +++--- hasql.cabal | 10 ++++-- library/Hasql/Connection.hs | 12 +++++++ library/Hasql/Connection/Impl.hs | 37 ++++++++++++++++++++ library/{Hasql.hs => Hasql/Query.hs} | 52 ++++------------------------ tasty/Main.hs | 36 +++++++++---------- tasty/Main/DSL.hs | 20 ++++++----- tasty/Main/Queries.hs | 18 +++++----- 9 files changed, 113 insertions(+), 94 deletions(-) create mode 100644 library/Hasql/Connection.hs create mode 100644 library/Hasql/Connection/Impl.hs rename library/{Hasql.hs => Hasql/Query.hs} (77%) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index 9bc196e759..d06a68b4b5 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -2,17 +2,19 @@ module Main where import Main.Prelude import Criterion.Main -import qualified Hasql as H +import qualified Hasql.Connection as HC +import qualified Hasql.Settings as HS +import qualified Hasql.Query as HQ import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD import qualified Main.Queries as Q main = - H.connect settings >>= either (fail . show) use + HC.connect settings >>= either (fail . show) use where settings = - H.settings host port user password database + HS.settings host port user password database where host = "localhost" port = 5432 @@ -44,7 +46,7 @@ main = ] ] where - query :: a -> H.Query a b -> IO b + query :: a -> HQ.Query a b -> IO b query params query = {-# SCC "query" #-} - H.query connection query params >>= either (fail . show) pure + HQ.run query params connection >>= either (fail . show) pure diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index 1897eebc56..921671aafd 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -1,15 +1,15 @@ module Main.Queries where import Main.Prelude -import qualified Hasql as H +import qualified Hasql.Query as HQ import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD -select1 :: Int -> H.Query () (Vector Int64) +select1 :: Int -> HQ.Query () (Vector Int64) select1 amount = {-# SCC "select1" #-} - H.Query sql mempty decoder True + HQ.Query sql mempty decoder True where !sql = "values " <> @@ -17,10 +17,10 @@ select1 amount = decoder = HD.rowsVector (HD.value HD.int8) -select4 :: Int -> H.Query () (Vector (Int64, Int64, Int64, Int64)) +select4 :: Int -> HQ.Query () (Vector (Int64, Int64, Int64, Int64)) select4 amount = {-# SCC "select4" #-} - H.Query sql mempty decoder True + HQ.Query sql mempty decoder True where !sql = "values " <> diff --git a/hasql.cabal b/hasql.cabal index 89d2992140..0486f722fe 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,13 +1,15 @@ name: hasql version: - 0.12.1.1 + 0.13 category: Hasql, Database, PostgreSQL synopsis: A very efficient PostgreSQL driver and a flexible mapping API description: This package is the root of the \"hasql\" ecosystem. + . + The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. homepage: https://github.com/nikita-volkov/hasql bug-reports: @@ -47,7 +49,6 @@ library Hasql.Prelude Hasql.PTI Hasql.IO - Hasql.Settings Hasql.Commands Hasql.Decoding.Array Hasql.Decoding.Composite @@ -59,10 +60,13 @@ library Hasql.Encoding.Value Hasql.Encoding.Params Hasql.PreparedStatementRegistry + Hasql.Connection.Impl exposed-modules: Hasql.Decoding Hasql.Encoding - Hasql + Hasql.Settings + Hasql.Connection + Hasql.Query build-depends: -- parsing: attoparsec >= 0.10 && < 0.14, diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs new file mode 100644 index 0000000000..58e2fd0790 --- /dev/null +++ b/library/Hasql/Connection.hs @@ -0,0 +1,12 @@ +-- | +-- This module provides a low-level effectful API dealing with the connections to the database. +module Hasql.Connection +( + Connection, + ConnectionError(..), + connect, + disconnect, +) +where + +import Hasql.Connection.Impl diff --git a/library/Hasql/Connection/Impl.hs b/library/Hasql/Connection/Impl.hs new file mode 100644 index 0000000000..6801e00cb3 --- /dev/null +++ b/library/Hasql/Connection/Impl.hs @@ -0,0 +1,37 @@ +module Hasql.Connection.Impl +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.IO as IO + + +-- | +-- A single connection to the database. +data Connection = + Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry + +-- | +-- Possible details of the connection acquistion error. +type ConnectionError = + Maybe ByteString + +-- | +-- Acquire a connection using the provided settings. +connect :: ByteString -> IO (Either ConnectionError Connection) +connect settings = + {-# SCC "connect" #-} + runEitherT $ do + pqConnection <- lift (IO.acquireConnection settings) + lift (IO.checkConnectionStatus pqConnection) >>= traverse left + lift (IO.initConnection pqConnection) + integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) + registry <- lift (IO.acquirePreparedStatementRegistry) + pure (Connection pqConnection integerDatetimes registry) + +-- | +-- Release the connection. +disconnect :: Connection -> IO () +disconnect (Connection pqConnection _ _) = + LibPQ.finish pqConnection diff --git a/library/Hasql.hs b/library/Hasql/Query.hs similarity index 77% rename from library/Hasql.hs rename to library/Hasql/Query.hs index c815ef0598..663f8664db 100644 --- a/library/Hasql.hs +++ b/library/Hasql/Query.hs @@ -1,23 +1,13 @@ -- | -- This module provides a low-level effectful API dealing with connections to the database. --- --- The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. -module Hasql +module Hasql.Query ( - -- * Connection settings - Settings.Settings(..), - Settings.settings, - -- * Connection - Connection, - ConnectionError(..), - connect, - disconnect, - -- * Query Query(..), + -- * Execution ResultsError(..), ResultError(..), RowError(..), - query, + run, ) where @@ -30,13 +20,9 @@ import qualified Hasql.Encoding.Params as ParamsEncoding import qualified Hasql.Encoding as Encoding import qualified Hasql.Settings as Settings import qualified Hasql.IO as IO +import qualified Hasql.Connection.Impl as Connection --- | --- A single connection to the database. -data Connection = - Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry - -- | -- An error of the result-decoder. data ResultsError = @@ -103,30 +89,6 @@ data RowError = ValueError !Text deriving (Show, Eq) --- | --- Possible details of the connection acquistion error. -type ConnectionError = - Maybe ByteString - --- | --- Acquire a connection using the provided settings. -connect :: Settings.Settings -> IO (Either ConnectionError Connection) -connect settings = - {-# SCC "connect" #-} - runEitherT $ do - pqConnection <- lift (IO.acquireConnection settings) - lift (IO.checkConnectionStatus pqConnection) >>= traverse left - lift (IO.initConnection pqConnection) - integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) - registry <- lift (IO.acquirePreparedStatementRegistry) - pure (Connection pqConnection integerDatetimes registry) - --- | --- Release the connection. -disconnect :: Connection -> IO () -disconnect (Connection pqConnection _ _) = - LibPQ.finish pqConnection - -- | -- A specification of a strictly single-statement query, which can be parameterized and prepared. @@ -180,9 +142,9 @@ instance Profunctor Query where Query p1 (contramap f1 p2) (fmap f2 p3) p4 -- | --- Execute a parametric query, producing either a deserialization failure or a successful result. -query :: Connection -> Query a b -> a -> IO (Either ResultsError b) -query (Connection pqConnection integerDatetimes registry) (Query template encoder decoder preparable) params = +-- Execute the query, producing either a deserialization failure or a successful result. +run :: Query a b -> a -> Connection.Connection -> IO (Either ResultsError b) +run (Query template encoder decoder preparable) params (Connection.Connection pqConnection integerDatetimes registry) = {-# SCC "query" #-} fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params diff --git a/tasty/Main.hs b/tasty/Main.hs index 20a5b81edd..0ac2cdeadf 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -9,9 +9,9 @@ import qualified Test.Tasty.SmallCheck as SmallCheck import qualified Test.Tasty.QuickCheck as QuickCheck import qualified Test.QuickCheck as QuickCheck import qualified Main.DSL as DSL -import qualified Hasql as H -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Query as Query +import qualified Hasql.Encoding as Encoding +import qualified Hasql.Decoding as Decoding main = defaultMain tree @@ -27,28 +27,28 @@ tree = DSL.session $ do let query = - H.Query sql mempty HD.unit True + Query.Query sql mempty Decoding.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - H.Query sql mempty HD.unit True + Query.Query sql mempty Decoding.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" in DSL.query () query let query = - H.Query sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select ($1 :: mood)" decoder = - (HD.singleRow (HD.value (HD.enum (Just . id)))) + (Decoding.singleRow (Decoding.value (Decoding.enum (Just . id)))) encoder = - HE.value (HE.enum id) + Encoding.value (Encoding.enum id) in DSL.query "ok" query in actual , @@ -63,26 +63,26 @@ tree = DSL.query "ok" query where query = - H.Query sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1" encoder = - HE.value HE.text + Encoding.value Encoding.text decoder = - (HD.singleRow (HD.value (HD.text))) + (Decoding.singleRow (Decoding.value (Decoding.text))) effect2 = DSL.query 1 query where query = - H.Query sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1" encoder = - HE.value HE.int8 + Encoding.value Encoding.int8 decoder = - (HD.singleRow (HD.value HD.int8)) + (Decoding.singleRow (Decoding.value Decoding.int8)) in (,) <$> effect1 <*> effect2 in actual , @@ -107,12 +107,12 @@ tree = DSL.query () $ Queries.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () $ H.Query sql def decoder False + DSL.query () $ Query.Query sql def decoder False where sql = "delete from a" decoder = - HD.rowsAffected + Decoding.rowsAffected in actual , HUnit.testCase "Result of an auto-incremented column" $ @@ -121,8 +121,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ H.Query "insert into a (v) values ('a') returning id" def (HD.singleRow (HD.value HD.int4)) False - id2 <- DSL.query () $ H.Query "insert into a (v) values ('b') returning id" def (HD.singleRow (HD.value HD.int4)) False + id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoding.singleRow (Decoding.value Decoding.int4)) False + id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoding.singleRow (Decoding.value Decoding.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 1897d55de7..b0596d5cb9 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,18 +1,20 @@ module Main.DSL where import Main.Prelude -import qualified Hasql as H +import qualified Hasql.Connection as HC +import qualified Hasql.Query as HQ +import qualified Hasql.Settings as HS import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD newtype Session a = - Session (ReaderT H.Connection (EitherT H.ResultsError IO) a) + Session (ReaderT HC.Connection (EitherT HQ.ResultsError IO) a) deriving (Functor, Applicative, Monad, MonadIO) data SessionError = - ConnectionError (H.ConnectionError) | - ResultsError (H.ResultsError) + ConnectionError (HC.ConnectionError) | + ResultsError (HQ.ResultsError) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) @@ -20,10 +22,10 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ H.connect settings + EitherT $ fmap (mapLeft ConnectionError) $ HC.connect settings where settings = - H.settings host port user password database + HS.settings host port user password database where host = "localhost" port = 5432 @@ -34,8 +36,8 @@ session (Session impl) = bimapEitherT ResultsError id $ runReaderT impl connection release connection = - lift $ H.disconnect connection + lift $ HC.disconnect connection -query :: a -> H.Query a b -> Session b +query :: a -> HQ.Query a b -> Session b query params query = - Session $ ReaderT $ \connection -> EitherT $ H.query connection query params + Session $ ReaderT $ EitherT . HQ.run query params diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index ae904932be..2b1d628a1c 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -1,34 +1,34 @@ module Main.Queries where import Main.Prelude hiding (def) -import qualified Hasql as H +import qualified Hasql.Query as HQ import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD import qualified Main.Prelude as Prelude -def :: ByteString -> H.Query () () +def :: ByteString -> HQ.Query () () def sql = - H.Query sql Prelude.def Prelude.def False + HQ.Query sql Prelude.def Prelude.def False -plain :: ByteString -> H.Query () () +plain :: ByteString -> HQ.Query () () plain sql = - H.Query sql mempty HD.unit False + HQ.Query sql mempty HD.unit False -dropType :: ByteString -> H.Query () () +dropType :: ByteString -> HQ.Query () () dropType name = plain $ "drop type if exists " <> name -createEnum :: ByteString -> [ByteString] -> H.Query () () +createEnum :: ByteString -> [ByteString] -> HQ.Query () () createEnum name values = plain $ "create type " <> name <> " as enum (" <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) <> ")" -selectList :: H.Query () ([] (Int64, Int64)) +selectList :: HQ.Query () ([] (Int64, Int64)) selectList = - H.Query sql mempty decoder True + HQ.Query sql mempty decoder True where sql = "values (1,2), (3,4), (5,6)" From 90fcd08ca24fbb99de849ac30a58b951bd8e906f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:36:23 +0300 Subject: [PATCH 0261/1204] Inlining --- library/Hasql/Tx.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index 10547b0696..a89ddc5dad 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -50,6 +50,7 @@ data IsolationLevel = -- | -- Execute the transaction on a connection with the provided settings. +{-# INLINABLE run #-} run :: Tx a -> Hasql.Connection -> IsolationLevel -> Mode -> IO (Either Hasql.ResultsError a) run (Tx tx) connection isolation mode = runEitherT $ do @@ -81,6 +82,7 @@ run (Tx tx) connection isolation mode = -- | -- Execute a query in the context of a transaction. +{-# INLINABLE query #-} query :: Hasql.Query a b -> a -> Tx b query query params = Tx $ ReaderT $ \(connection, _) -> EitherT $ From dbbb1089de6ed06f9a60105053371cd343c1f949 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:36:46 +0300 Subject: [PATCH 0262/1204] Reorder args --- hasql-tx.cabal | 2 +- library/Hasql/Tx.hs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 32fc68cc22..0963627f4d 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -1,7 +1,7 @@ name: hasql-tx version: - 0.1 + 0.2 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index a89ddc5dad..a078995e5a 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -51,8 +51,8 @@ data IsolationLevel = -- | -- Execute the transaction on a connection with the provided settings. {-# INLINABLE run #-} -run :: Tx a -> Hasql.Connection -> IsolationLevel -> Mode -> IO (Either Hasql.ResultsError a) -run (Tx tx) connection isolation mode = +run :: Tx a -> IsolationLevel -> Mode -> Hasql.Connection -> IO (Either Hasql.ResultsError a) +run (Tx tx) isolation mode connection = runEitherT $ do EitherT $ Hasql.query connection (Queries.beginTransaction mode') () counterRef <- lift $ newIORef 0 @@ -60,7 +60,7 @@ run (Tx tx) connection isolation mode = case resultEither of Left (Hasql.ResultError (Hasql.ServerError code _ _ _)) | code == ErrorCodes.serialization_failure -> - EitherT $ run (Tx tx) connection isolation mode + EitherT $ run (Tx tx) isolation mode connection _ -> do result <- EitherT $ pure resultEither let @@ -83,7 +83,7 @@ run (Tx tx) connection isolation mode = -- | -- Execute a query in the context of a transaction. {-# INLINABLE query #-} -query :: Hasql.Query a b -> a -> Tx b -query query params = +query :: a -> Hasql.Query a b -> Tx b +query params query = Tx $ ReaderT $ \(connection, _) -> EitherT $ Hasql.query connection query params From 0edd4d108b234e04378d10661d6e6befc3740d15 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:42:18 +0300 Subject: [PATCH 0263/1204] typo --- library/Hasql/Encoding.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoding.hs index a4bb0c6aa1..7a7730e4ea 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoding.hs @@ -464,7 +464,7 @@ arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = Array (Array.nullableValue elementOID arrayOID encoder') -- | --- A encoder of an array dimension, +-- An encoder of an array dimension, -- which thus provides support for multidimensional arrays. -- -- Accepts: From 51624e54e141141cf5a162a1a8c622aa76b704fd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:45:22 +0300 Subject: [PATCH 0264/1204] Update to "hasql" 0.13 --- hasql-tx.cabal | 4 ++-- library/Hasql/Tx.hs | 17 +++++++++-------- library/Hasql/Tx/Queries.hs | 26 +++++++++++++------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index 0963627f4d..a8f2b901d2 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -1,7 +1,7 @@ name: hasql-tx version: - 0.2 + 0.2.1 category: Hasql, Database, PostgreSQL synopsis: @@ -46,7 +46,7 @@ library exposed-modules: Hasql.Tx build-depends: - hasql >= 0.12.1 && < 0.13, + hasql >= 0.13 && < 0.14, -- parsing: attoparsec >= 0.10 && < 0.14, -- database: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index a078995e5a..c507769502 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -11,13 +11,14 @@ module Hasql.Tx where import Hasql.Tx.Prelude -import qualified Hasql +import qualified Hasql.Connection as Connection +import qualified Hasql.Query as Query import qualified Hasql.Tx.Queries as Queries import qualified PostgreSQL.ErrorCodes as ErrorCodes newtype Tx a = - Tx (ReaderT (Hasql.Connection, IORef Int) (EitherT Hasql.ResultsError IO) a) + Tx (ReaderT (Connection.Connection, IORef Int) (EitherT Query.ResultsError IO) a) deriving (Functor, Applicative, Monad) -- | @@ -51,14 +52,14 @@ data IsolationLevel = -- | -- Execute the transaction on a connection with the provided settings. {-# INLINABLE run #-} -run :: Tx a -> IsolationLevel -> Mode -> Hasql.Connection -> IO (Either Hasql.ResultsError a) +run :: Tx a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) run (Tx tx) isolation mode connection = runEitherT $ do - EitherT $ Hasql.query connection (Queries.beginTransaction mode') () + EitherT $ Query.run (Queries.beginTransaction mode') () connection counterRef <- lift $ newIORef 0 resultEither <- lift $ runEitherT $ runReaderT tx (connection, counterRef) case resultEither of - Left (Hasql.ResultError (Hasql.ServerError code _ _ _)) + Left (Query.ResultError (Query.ServerError code _ _ _)) | code == ErrorCodes.serialization_failure -> EitherT $ run (Tx tx) isolation mode connection _ -> do @@ -69,7 +70,7 @@ run (Tx tx) isolation mode connection = then Queries.commitTransaction else Queries.abortTransaction in - EitherT $ Hasql.query connection query () + EitherT $ Query.run query () connection pure result where mode' = @@ -83,7 +84,7 @@ run (Tx tx) isolation mode connection = -- | -- Execute a query in the context of a transaction. {-# INLINABLE query #-} -query :: a -> Hasql.Query a b -> Tx b +query :: a -> Query.Query a b -> Tx b query params query = Tx $ ReaderT $ \(connection, _) -> EitherT $ - Hasql.query connection query params + Query.run query params connection diff --git a/library/Hasql/Tx/Queries.hs b/library/Hasql/Tx/Queries.hs index a639842626..f4899d0c6b 100644 --- a/library/Hasql/Tx/Queries.hs +++ b/library/Hasql/Tx/Queries.hs @@ -2,7 +2,7 @@ module Hasql.Tx.Queries where import Hasql.Tx.Prelude -import qualified Hasql as H +import qualified Hasql.Query as HQ import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD import qualified ByteString.TreeBuilder as TB @@ -19,9 +19,9 @@ data Isolation = type TransactionMode = (Isolation, Bool) -beginTransaction :: TransactionMode -> H.Query () () +beginTransaction :: TransactionMode -> HQ.Query () () beginTransaction (isolation, write) = - H.Query sql HE.unit HD.unit True + HQ.Query sql HE.unit HD.unit True where sql = TB.toByteString $ @@ -41,33 +41,33 @@ beginTransaction (isolation, write) = False -> "READ ONLY" ] -commitTransaction :: H.Query () () +commitTransaction :: HQ.Query () () commitTransaction = - H.Query "commit" HE.unit HD.unit True + HQ.Query "commit" HE.unit HD.unit True -abortTransaction :: H.Query () () +abortTransaction :: HQ.Query () () abortTransaction = - H.Query "abort" HE.unit HD.unit True + HQ.Query "abort" HE.unit HD.unit True -- * Streaming ------------------------- -declareCursor :: ByteString -> ByteString -> HE.Params a -> H.Query a () +declareCursor :: ByteString -> ByteString -> HE.Params a -> HQ.Query a () declareCursor name sql encoder = - H.Query sql' encoder HD.unit False + HQ.Query sql' encoder HD.unit False where sql' = TB.toByteString $ "DECLARE " <> TB.byteString name <> " NO SCROLL CURSOR FOR " <> TB.byteString sql -closeCursor :: H.Query ByteString () +closeCursor :: HQ.Query ByteString () closeCursor = - H.Query "CLOSE $1" (HE.value HE.bytea) HD.unit True + HQ.Query "CLOSE $1" (HE.value HE.bytea) HD.unit True -fetchFromCursor :: (b -> a -> b) -> b -> HD.Row a -> H.Query (Int64, ByteString) b +fetchFromCursor :: (b -> a -> b) -> b -> HD.Row a -> HQ.Query (Int64, ByteString) b fetchFromCursor step init rowDec = - H.Query sql encoder decoder True + HQ.Query sql encoder decoder True where sql = "FETCH FORWARD $1 FROM $2" From 6fafd9c407e476decfff7f11cab27026d3e43456 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:46:24 +0300 Subject: [PATCH 0265/1204] Correct docs --- library/Hasql/Query.hs | 2 -- 1 file changed, 2 deletions(-) diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 663f8664db..49eefc2882 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -1,5 +1,3 @@ --- | --- This module provides a low-level effectful API dealing with connections to the database. module Hasql.Query ( Query(..), From f4535f34f7ef60fd12581402cbd8d069f796e080 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:46:47 +0300 Subject: [PATCH 0266/1204] Release --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 0486f722fe..ea10ceb1c9 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.13 + 0.13.0.1 category: Hasql, Database, PostgreSQL synopsis: From 8f95a93c775b056873b25fc1ba131b5fd7cdb3f6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:49:54 +0300 Subject: [PATCH 0267/1204] Acquire/release --- hasql.cabal | 2 +- library/Hasql/Connection.hs | 4 ++-- library/Hasql/Connection/Impl.hs | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index ea10ceb1c9..0e46ad9875 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.13.0.1 + 0.14 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 58e2fd0790..5c1b867590 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -4,8 +4,8 @@ module Hasql.Connection ( Connection, ConnectionError(..), - connect, - disconnect, + acquire, + release, ) where diff --git a/library/Hasql/Connection/Impl.hs b/library/Hasql/Connection/Impl.hs index 6801e00cb3..fac8c295d8 100644 --- a/library/Hasql/Connection/Impl.hs +++ b/library/Hasql/Connection/Impl.hs @@ -18,10 +18,10 @@ type ConnectionError = Maybe ByteString -- | --- Acquire a connection using the provided settings. -connect :: ByteString -> IO (Either ConnectionError Connection) -connect settings = - {-# SCC "connect" #-} +-- Acquire a connection using the provided settings encoded according to the PostgreSQL format. +acquire :: ByteString -> IO (Either ConnectionError Connection) +acquire settings = + {-# SCC "acquire" #-} runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) lift (IO.checkConnectionStatus pqConnection) >>= traverse left @@ -32,6 +32,6 @@ connect settings = -- | -- Release the connection. -disconnect :: Connection -> IO () -disconnect (Connection pqConnection _ _) = +release :: Connection -> IO () +release (Connection pqConnection _ _) = LibPQ.finish pqConnection From afeb82da8eeb081ec90c661c629d9b280ed7a081 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:50:47 +0300 Subject: [PATCH 0268/1204] Update to "hasql" 0.14 --- hasql-tx.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index a8f2b901d2..c40db9952c 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -1,7 +1,7 @@ name: hasql-tx version: - 0.2.1 + 0.2.2 category: Hasql, Database, PostgreSQL synopsis: @@ -46,7 +46,7 @@ library exposed-modules: Hasql.Tx build-depends: - hasql >= 0.13 && < 0.14, + hasql >= 0.13 && < 0.15, -- parsing: attoparsec >= 0.10 && < 0.14, -- database: From d1236118540ed98a1156c50ede0626ea53d2b874 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:53:09 +0300 Subject: [PATCH 0269/1204] Docs correction --- hasql-tx.cabal | 2 +- library/Hasql/Tx.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-tx.cabal b/hasql-tx.cabal index c40db9952c..351e70b0df 100644 --- a/hasql-tx.cabal +++ b/hasql-tx.cabal @@ -1,7 +1,7 @@ name: hasql-tx version: - 0.2.2 + 0.2.2.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index c507769502..6e12e26dc7 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -50,7 +50,7 @@ data IsolationLevel = deriving (Show, Eq, Ord, Enum, Bounded) -- | --- Execute the transaction on a connection with the provided settings. +-- Execute the transaction using the provided isolation level, mode and a database connection. {-# INLINABLE run #-} run :: Tx a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) run (Tx tx) isolation mode connection = From 7ec4644a95503bb66d5f5ebd88e476fd2046d76d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 Nov 2015 10:57:08 +0300 Subject: [PATCH 0270/1204] Docs correction --- hasql.cabal | 2 +- library/Hasql/Decoding.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 0e46ad9875..a591fc531e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.14 + 0.14.0.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Decoding.hs b/library/Hasql/Decoding.hs index 6a917390f7..12d8f56486 100644 --- a/library/Hasql/Decoding.hs +++ b/library/Hasql/Decoding.hs @@ -98,7 +98,7 @@ rowsAffected = -- | -- Exactly one row. --- Will raise the 'Hasql.UnexpectedAmountOfRows' error if it's any other. +-- Will raise the 'Hasql.Query.UnexpectedAmountOfRows' error if it's any other. -- {-# INLINABLE singleRow #-} singleRow :: Row a -> Result a From 5009d7de9c4f916dd41fc603864715d581805f1d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Nov 2015 06:18:53 +0300 Subject: [PATCH 0271/1204] Docs --- library/Hasql/Tx.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Tx.hs b/library/Hasql/Tx.hs index 6e12e26dc7..0b9744ea6b 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Tx.hs @@ -35,7 +35,7 @@ data Mode = -- Useful for testing, -- allowing you to modify your database, -- producing some result based on your changes, - -- and to let Hasql roll all the changes back on the exit from the transaction. + -- and letting Hasql roll all the changes back on the exit from the transaction. WriteWithoutCommitting deriving (Show, Eq, Ord, Enum, Bounded) From 1cc7d02c22a63b5d7f6eacb033af09cca0fff893 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Nov 2015 07:09:52 +0300 Subject: [PATCH 0272/1204] Rename to "hasql-transaction" --- hasql-tx.cabal => hasql-transaction.cabal | 18 ++++++++-------- library/Hasql/{Tx.hs => Transaction.hs} | 22 ++++++++++---------- library/Hasql/{Tx => Transaction}/Prelude.hs | 2 +- library/Hasql/{Tx => Transaction}/Queries.hs | 4 ++-- 4 files changed, 23 insertions(+), 23 deletions(-) rename hasql-tx.cabal => hasql-transaction.cabal (89%) rename library/Hasql/{Tx.hs => Transaction.hs} (78%) rename library/Hasql/{Tx => Transaction}/Prelude.hs (96%) rename library/Hasql/{Tx => Transaction}/Queries.hs (96%) diff --git a/hasql-tx.cabal b/hasql-transaction.cabal similarity index 89% rename from hasql-tx.cabal rename to hasql-transaction.cabal index 351e70b0df..744319be83 100644 --- a/hasql-tx.cabal +++ b/hasql-transaction.cabal @@ -1,14 +1,14 @@ name: - hasql-tx + hasql-transaction version: - 0.2.2.1 + 0.3 category: Hasql, Database, PostgreSQL synopsis: homepage: - https://github.com/nikita-volkov/hasql-tx + https://github.com/nikita-volkov/hasql-transaction bug-reports: - https://github.com/nikita-volkov/hasql-tx/issues + https://github.com/nikita-volkov/hasql-transaction/issues author: Nikita Volkov maintainer: @@ -29,7 +29,7 @@ source-repository head type: git location: - git://github.com/nikita-volkov/hasql-tx.git + git://github.com/nikita-volkov/hasql-transaction.git library @@ -41,10 +41,10 @@ library default-language: Haskell2010 other-modules: - Hasql.Tx.Prelude - Hasql.Tx.Queries + Hasql.Transaction.Prelude + Hasql.Transaction.Queries exposed-modules: - Hasql.Tx + Hasql.Transaction build-depends: hasql >= 0.13 && < 0.15, -- parsing: @@ -82,7 +82,7 @@ executable demo Haskell2010 build-depends: contravariant, - hasql-tx, + hasql-transaction, text, bytestring, base-prelude diff --git a/library/Hasql/Tx.hs b/library/Hasql/Transaction.hs similarity index 78% rename from library/Hasql/Tx.hs rename to library/Hasql/Transaction.hs index 0b9744ea6b..652d50c6ad 100644 --- a/library/Hasql/Tx.hs +++ b/library/Hasql/Transaction.hs @@ -1,24 +1,24 @@ -module Hasql.Tx +module Hasql.Transaction ( -- * Transaction settings Mode(..), IsolationLevel(..), -- * Transaction monad - Tx, + Transaction, run, query, ) where -import Hasql.Tx.Prelude +import Hasql.Transaction.Prelude import qualified Hasql.Connection as Connection import qualified Hasql.Query as Query -import qualified Hasql.Tx.Queries as Queries +import qualified Hasql.Transaction.Queries as Queries import qualified PostgreSQL.ErrorCodes as ErrorCodes -newtype Tx a = - Tx (ReaderT (Connection.Connection, IORef Int) (EitherT Query.ResultsError IO) a) +newtype Transaction a = + Transaction (ReaderT (Connection.Connection, IORef Int) (EitherT Query.ResultsError IO) a) deriving (Functor, Applicative, Monad) -- | @@ -52,8 +52,8 @@ data IsolationLevel = -- | -- Execute the transaction using the provided isolation level, mode and a database connection. {-# INLINABLE run #-} -run :: Tx a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) -run (Tx tx) isolation mode connection = +run :: Transaction a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) +run (Transaction tx) isolation mode connection = runEitherT $ do EitherT $ Query.run (Queries.beginTransaction mode') () connection counterRef <- lift $ newIORef 0 @@ -61,7 +61,7 @@ run (Tx tx) isolation mode connection = case resultEither of Left (Query.ResultError (Query.ServerError code _ _ _)) | code == ErrorCodes.serialization_failure -> - EitherT $ run (Tx tx) isolation mode connection + EitherT $ run (Transaction tx) isolation mode connection _ -> do result <- EitherT $ pure resultEither let @@ -84,7 +84,7 @@ run (Tx tx) isolation mode connection = -- | -- Execute a query in the context of a transaction. {-# INLINABLE query #-} -query :: a -> Query.Query a b -> Tx b +query :: a -> Query.Query a b -> Transaction b query params query = - Tx $ ReaderT $ \(connection, _) -> EitherT $ + Transaction $ ReaderT $ \(connection, _) -> EitherT $ Query.run query params connection diff --git a/library/Hasql/Tx/Prelude.hs b/library/Hasql/Transaction/Prelude.hs similarity index 96% rename from library/Hasql/Tx/Prelude.hs rename to library/Hasql/Transaction/Prelude.hs index 679a65f1fd..2f8a237f25 100644 --- a/library/Hasql/Tx/Prelude.hs +++ b/library/Hasql/Transaction/Prelude.hs @@ -1,4 +1,4 @@ -module Hasql.Tx.Prelude +module Hasql.Transaction.Prelude ( module Exports, ) diff --git a/library/Hasql/Tx/Queries.hs b/library/Hasql/Transaction/Queries.hs similarity index 96% rename from library/Hasql/Tx/Queries.hs rename to library/Hasql/Transaction/Queries.hs index f4899d0c6b..cb825159a0 100644 --- a/library/Hasql/Tx/Queries.hs +++ b/library/Hasql/Transaction/Queries.hs @@ -1,7 +1,7 @@ -module Hasql.Tx.Queries +module Hasql.Transaction.Queries where -import Hasql.Tx.Prelude +import Hasql.Transaction.Prelude import qualified Hasql.Query as HQ import qualified Hasql.Encoding as HE import qualified Hasql.Decoding as HD From 5b266043374ae1fde3c02a28eb06ed22ce700833 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Nov 2015 07:10:28 +0300 Subject: [PATCH 0273/1204] Drop the demo --- demo/Main.hs | 7 ------- hasql-transaction.cabal | 20 -------------------- 2 files changed, 27 deletions(-) delete mode 100644 demo/Main.hs diff --git a/demo/Main.hs b/demo/Main.hs deleted file mode 100644 index 0c223f8409..0000000000 --- a/demo/Main.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Main where - -import BasePrelude hiding (assert, isRight, isLeft) - - -main = - undefined diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 744319be83..bd96906f66 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -66,23 +66,3 @@ library placeholders == 0.1.*, -- general: base-prelude >= 0.1.19 && < 0.2 - - -executable demo - hs-source-dirs: - demo - main-is: - Main.hs - ghc-options: - -threaded - "-with-rtsopts=-N" - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 - build-depends: - contravariant, - hasql-transaction, - text, - bytestring, - base-prelude From b8881f1ff40c03fe6911413a5724d211a9b6c975 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Nov 2015 07:10:42 +0300 Subject: [PATCH 0274/1204] Update the extensions --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index bd96906f66..81f8107245 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -37,7 +37,7 @@ library library ghc-options: default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: From 77cf80ce6bcf6d7fae40a29b17033b7b60689599 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 28 Nov 2015 06:24:23 +0300 Subject: [PATCH 0275/1204] Fixes --- benchmark/Main.hs | 2 +- hasql.cabal | 2 +- tasty/Main/DSL.hs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index d06a68b4b5..e09d93e5a2 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -11,7 +11,7 @@ import qualified Main.Queries as Q main = - HC.connect settings >>= either (fail . show) use + HC.acquire settings >>= either (fail . show) use where settings = HS.settings host port user password database diff --git a/hasql.cabal b/hasql.cabal index a591fc531e..d7bcf8f5ce 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.14.0.1 + 0.14.0.2 category: Hasql, Database, PostgreSQL synopsis: diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index b0596d5cb9..ceb125f254 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -22,7 +22,7 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ HC.connect settings + EitherT $ fmap (mapLeft ConnectionError) $ HC.acquire settings where settings = HS.settings host port user password database @@ -36,7 +36,7 @@ session (Session impl) = bimapEitherT ResultsError id $ runReaderT impl connection release connection = - lift $ HC.disconnect connection + lift $ HC.release connection query :: a -> HQ.Query a b -> Session b query params query = From 20677fa0235705a204d675db25161ee355d6d594 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 28 Nov 2015 07:03:01 +0300 Subject: [PATCH 0276/1204] Fixes --- hasql.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/hasql.cabal b/hasql.cabal index d7bcf8f5ce..473ab76ab1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -155,6 +155,7 @@ benchmark benchmark Main.hs other-modules: Main.Queries + Main.Prelude ghc-options: -O2 -threaded From ef1b6ff8b31c70c93ab05a42c286c742494e3f78 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 5 Dec 2015 09:09:31 +0300 Subject: [PATCH 0277/1204] Encoding/Decoding -> Encoders/Decoders --- benchmark/Main.hs | 4 +-- benchmark/Main/Queries.hs | 4 +-- hasql.cabal | 24 ++++++------- library/Hasql/Commands.hs | 6 ++-- library/Hasql/{Decoding.hs => Decoders.hs} | 14 ++++---- library/Hasql/{Decoding => Decoders}/Array.hs | 2 +- .../Hasql/{Decoding => Decoders}/Composite.hs | 2 +- .../Hasql/{Decoding => Decoders}/Result.hs | 4 +-- .../Hasql/{Decoding => Decoders}/Results.hs | 6 ++-- library/Hasql/{Decoding => Decoders}/Row.hs | 4 +-- library/Hasql/{Decoding => Decoders}/Value.hs | 2 +- library/Hasql/{Encoding.hs => Encoders.hs} | 8 ++--- library/Hasql/{Encoding => Encoders}/Array.hs | 2 +- .../Hasql/{Encoding => Encoders}/Params.hs | 4 +-- library/Hasql/{Encoding => Encoders}/Value.hs | 2 +- library/Hasql/IO.hs | 36 +++++++++---------- library/Hasql/Query.hs | 26 +++++++------- tasty/Main.hs | 26 +++++++------- tasty/Main/DSL.hs | 4 +-- tasty/Main/Queries.hs | 4 +-- 20 files changed, 92 insertions(+), 92 deletions(-) rename library/Hasql/{Decoding.hs => Decoders.hs} (97%) rename library/Hasql/{Decoding => Decoders}/Array.hs (96%) rename library/Hasql/{Decoding => Decoders}/Composite.hs (94%) rename library/Hasql/{Decoding => Decoders}/Result.hs (99%) rename library/Hasql/{Decoding => Decoders}/Results.hs (95%) rename library/Hasql/{Decoding => Decoders}/Row.hs (95%) rename library/Hasql/{Decoding => Decoders}/Value.hs (93%) rename library/Hasql/{Encoding.hs => Encoders.hs} (98%) rename library/Hasql/{Encoding => Encoders}/Array.hs (96%) rename library/Hasql/{Encoding => Encoders}/Params.hs (94%) rename library/Hasql/{Encoding => Encoders}/Value.hs (95%) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index e09d93e5a2..28c7ef64e5 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -5,8 +5,8 @@ import Criterion.Main import qualified Hasql.Connection as HC import qualified Hasql.Settings as HS import qualified Hasql.Query as HQ -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Decoders as HD import qualified Main.Queries as Q diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index 921671aafd..036d743b89 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -2,8 +2,8 @@ module Main.Queries where import Main.Prelude import qualified Hasql.Query as HQ -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Decoders as HD select1 :: Int -> HQ.Query () (Vector Int64) diff --git a/hasql.cabal b/hasql.cabal index 473ab76ab1..8716838c6d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.14.0.2 + 0.15 category: Hasql, Database, PostgreSQL synopsis: @@ -50,20 +50,20 @@ library Hasql.PTI Hasql.IO Hasql.Commands - Hasql.Decoding.Array - Hasql.Decoding.Composite - Hasql.Decoding.Value - Hasql.Decoding.Row - Hasql.Decoding.Result - Hasql.Decoding.Results - Hasql.Encoding.Array - Hasql.Encoding.Value - Hasql.Encoding.Params + Hasql.Decoders.Array + Hasql.Decoders.Composite + Hasql.Decoders.Value + Hasql.Decoders.Row + Hasql.Decoders.Result + Hasql.Decoders.Results + Hasql.Encoders.Array + Hasql.Encoders.Value + Hasql.Encoders.Params Hasql.PreparedStatementRegistry Hasql.Connection.Impl exposed-modules: - Hasql.Decoding - Hasql.Encoding + Hasql.Decoders + Hasql.Encoders Hasql.Settings Hasql.Connection Hasql.Query diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs index a73e44ccb9..f736114290 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Commands.hs @@ -2,7 +2,7 @@ module Hasql.Commands ( Commands, asBytes, - setEncodingToUTF8, + setEncodersToUTF8, setMinClientMessagesToWarning, ) where @@ -22,8 +22,8 @@ asBytes :: Commands -> ByteString asBytes (Commands list) = BL.toStrict $ BB.toLazyByteString $ foldMap (<> BB.char7 ';') $ list -setEncodingToUTF8 :: Commands -setEncodingToUTF8 = +setEncodersToUTF8 :: Commands +setEncodersToUTF8 = Commands (pure "SET client_encoding = 'UTF8'") setMinClientMessagesToWarning :: Commands diff --git a/library/Hasql/Decoding.hs b/library/Hasql/Decoders.hs similarity index 97% rename from library/Hasql/Decoding.hs rename to library/Hasql/Decoders.hs index 12d8f56486..f4fdb84d5b 100644 --- a/library/Hasql/Decoding.hs +++ b/library/Hasql/Decoders.hs @@ -1,6 +1,6 @@ -- | -- A DSL for declaration of result decoders. -module Hasql.Decoding +module Hasql.Decoders ( -- * Result Result, @@ -58,12 +58,12 @@ import Hasql.Prelude hiding (maybe, bool) import qualified Data.Aeson as Aeson import qualified Data.Vector as Vector import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Decoding.Results as Results -import qualified Hasql.Decoding.Result as Result -import qualified Hasql.Decoding.Row as Row -import qualified Hasql.Decoding.Value as Value -import qualified Hasql.Decoding.Array as Array -import qualified Hasql.Decoding.Composite as Composite +import qualified Hasql.Decoders.Results as Results +import qualified Hasql.Decoders.Result as Result +import qualified Hasql.Decoders.Row as Row +import qualified Hasql.Decoders.Value as Value +import qualified Hasql.Decoders.Array as Array +import qualified Hasql.Decoders.Composite as Composite import qualified Hasql.Prelude as Prelude diff --git a/library/Hasql/Decoding/Array.hs b/library/Hasql/Decoders/Array.hs similarity index 96% rename from library/Hasql/Decoding/Array.hs rename to library/Hasql/Decoders/Array.hs index 629e20ab03..4038e44f1c 100644 --- a/library/Hasql/Decoding/Array.hs +++ b/library/Hasql/Decoders/Array.hs @@ -1,4 +1,4 @@ -module Hasql.Decoding.Array where +module Hasql.Decoders.Array where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Decoding/Composite.hs b/library/Hasql/Decoders/Composite.hs similarity index 94% rename from library/Hasql/Decoding/Composite.hs rename to library/Hasql/Decoders/Composite.hs index 04360cc549..a304aef4d8 100644 --- a/library/Hasql/Decoding/Composite.hs +++ b/library/Hasql/Decoders/Composite.hs @@ -1,4 +1,4 @@ -module Hasql.Decoding.Composite where +module Hasql.Decoders.Composite where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Decoding/Result.hs b/library/Hasql/Decoders/Result.hs similarity index 99% rename from library/Hasql/Decoding/Result.hs rename to library/Hasql/Decoders/Result.hs index d90b37b4f4..53015644a2 100644 --- a/library/Hasql/Decoding/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -1,8 +1,8 @@ -module Hasql.Decoding.Result where +module Hasql.Decoders.Result where import Hasql.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoding.Row as Row +import qualified Hasql.Decoders.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString import qualified Hasql.Prelude as Prelude diff --git a/library/Hasql/Decoding/Results.hs b/library/Hasql/Decoders/Results.hs similarity index 95% rename from library/Hasql/Decoding/Results.hs rename to library/Hasql/Decoders/Results.hs index bc14276df0..2b415200de 100644 --- a/library/Hasql/Decoding/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -9,13 +9,13 @@ -- -- * Row-by-row fetching. -- -module Hasql.Decoding.Results where +module Hasql.Decoders.Results where import Hasql.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Prelude as Prelude -import qualified Hasql.Decoding.Result as Result -import qualified Hasql.Decoding.Row as Row +import qualified Hasql.Decoders.Result as Result +import qualified Hasql.Decoders.Row as Row newtype Results a = diff --git a/library/Hasql/Decoding/Row.hs b/library/Hasql/Decoders/Row.hs similarity index 95% rename from library/Hasql/Decoding/Row.hs rename to library/Hasql/Decoders/Row.hs index 52c6741a8a..83024160b6 100644 --- a/library/Hasql/Decoding/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -1,9 +1,9 @@ -module Hasql.Decoding.Row where +module Hasql.Decoders.Row where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Decoding.Value as Value +import qualified Hasql.Decoders.Value as Value newtype Row a = diff --git a/library/Hasql/Decoding/Value.hs b/library/Hasql/Decoders/Value.hs similarity index 93% rename from library/Hasql/Decoding/Value.hs rename to library/Hasql/Decoders/Value.hs index bc9152fee1..d8bfc3366c 100644 --- a/library/Hasql/Decoding/Value.hs +++ b/library/Hasql/Decoders/Value.hs @@ -1,4 +1,4 @@ -module Hasql.Decoding.Value where +module Hasql.Decoders.Value where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Encoding.hs b/library/Hasql/Encoders.hs similarity index 98% rename from library/Hasql/Encoding.hs rename to library/Hasql/Encoders.hs index 7a7730e4ea..a609d319b7 100644 --- a/library/Hasql/Encoding.hs +++ b/library/Hasql/Encoders.hs @@ -1,6 +1,6 @@ -- | -- A DSL for declaration of query parameter encoders. -module Hasql.Encoding +module Hasql.Encoders ( -- * Params Params, @@ -40,9 +40,9 @@ where import Hasql.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoder as Encoder import qualified Data.Aeson as Aeson -import qualified Hasql.Encoding.Params as Params -import qualified Hasql.Encoding.Value as Value -import qualified Hasql.Encoding.Array as Array +import qualified Hasql.Encoders.Params as Params +import qualified Hasql.Encoders.Value as Value +import qualified Hasql.Encoders.Array as Array import qualified Hasql.PTI as PTI import qualified Hasql.Prelude as Prelude diff --git a/library/Hasql/Encoding/Array.hs b/library/Hasql/Encoders/Array.hs similarity index 96% rename from library/Hasql/Encoding/Array.hs rename to library/Hasql/Encoders/Array.hs index d25634a3be..ea1e6691b7 100644 --- a/library/Hasql/Encoding/Array.hs +++ b/library/Hasql/Encoders/Array.hs @@ -1,4 +1,4 @@ -module Hasql.Encoding.Array where +module Hasql.Encoders.Array where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Encoding/Params.hs b/library/Hasql/Encoders/Params.hs similarity index 94% rename from library/Hasql/Encoding/Params.hs rename to library/Hasql/Encoders/Params.hs index d9b85b7969..a9cdb9a9c4 100644 --- a/library/Hasql/Encoding/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -1,9 +1,9 @@ -module Hasql.Encoding.Params where +module Hasql.Encoders.Params where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.Encoding.Value as Value +import qualified Hasql.Encoders.Value as Value import qualified Hasql.PTI as PTI diff --git a/library/Hasql/Encoding/Value.hs b/library/Hasql/Encoders/Value.hs similarity index 95% rename from library/Hasql/Encoding/Value.hs rename to library/Hasql/Encoders/Value.hs index 1cd944ce7c..2627deb2f2 100644 --- a/library/Hasql/Encoding/Value.hs +++ b/library/Hasql/Encoders/Value.hs @@ -1,4 +1,4 @@ -module Hasql.Encoding.Value where +module Hasql.Encoders.Value where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index f958da1e81..e3d530b6ca 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -7,9 +7,9 @@ import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Commands as Commands import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Decoding.Result as ResultDecoding -import qualified Hasql.Decoding.Results as ResultsDecoding -import qualified Hasql.Encoding.Params as ParamsEncoding +import qualified Hasql.Decoders.Result as ResultDecoders +import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Encoders.Params as ParamsEncoders import qualified Data.DList as DList @@ -55,19 +55,19 @@ getIntegerDatetimes c = {-# INLINE initConnection #-} initConnection :: LibPQ.Connection -> IO () initConnection c = - void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodingToUTF8 <> Commands.setMinClientMessagesToWarning)) + void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDecoding.Results a -> IO (Either ResultsDecoding.Error a) +getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either ResultsDecoders.Error a) getResults connection integerDatetimes des = {-# SCC "getResults" #-} - ResultsDecoding.run (des <* ResultsDecoding.dropRemainders) (integerDatetimes, connection) + ResultsDecoders.run (des <* ResultsDecoders.dropRemainders) (integerDatetimes, connection) {-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> - IO (Either ResultsDecoding.Error ByteString) + IO (Either ResultsDecoders.Error ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} do @@ -81,8 +81,8 @@ getPreparedStatementKey connection registry template oidList = sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) let resultsDecoder = if sent - then ResultsDecoding.single ResultDecoding.unit - else ResultsDecoding.clientError + then ResultsDecoders.single ResultDecoders.unit + else ResultsDecoders.clientError runEitherT $ do EitherT $ getResults connection undefined resultsDecoder pure key @@ -91,10 +91,10 @@ getPreparedStatementKey connection registry template oidList = map (\(LibPQ.Oid x) -> fromIntegral x) oidList {-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoding.Error ()) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoders.Error ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ResultsDecoding.ClientError) $ LibPQ.errorMessage connection + False -> fmap (Left . ResultsDecoders.ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricQuery #-} @@ -104,7 +104,7 @@ sendPreparedParametricQuery :: ByteString -> [LibPQ.Oid] -> [Maybe (ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoding.Error ()) + IO (Either ResultsDecoders.Error ()) sendPreparedParametricQuery connection registry template oidList valueAndFormatList = runEitherT $ do key <- EitherT $ getPreparedStatementKey connection registry template oidList @@ -115,7 +115,7 @@ sendUnpreparedParametricQuery :: LibPQ.Connection -> ByteString -> [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoding.Error ()) + IO (Either ResultsDecoders.Error ()) sendUnpreparedParametricQuery connection template paramList = checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary @@ -125,27 +125,27 @@ sendParametricQuery :: Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> - ParamsEncoding.Params a -> + ParamsEncoders.Params a -> Bool -> a -> - IO (Either ResultsDecoding.Error ()) + IO (Either ResultsDecoders.Error ()) sendParametricQuery connection integerDatetimes registry template encoder prepared params = {-# SCC "sendParametricQuery" #-} if prepared then let (oidList, valueAndFormatList) = - ParamsEncoding.run' encoder params integerDatetimes + ParamsEncoders.run' encoder params integerDatetimes in sendPreparedParametricQuery connection registry template oidList valueAndFormatList else let paramList = - ParamsEncoding.run'' encoder params integerDatetimes + ParamsEncoders.run'' encoder params integerDatetimes in sendUnpreparedParametricQuery connection template paramList {-# INLINE sendNonparametricQuery #-} -sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoding.Error ()) +sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoders.Error ()) sendNonparametricQuery connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 49eefc2882..c9e07472a7 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -12,10 +12,10 @@ where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Decoding.Results as ResultsDecoding -import qualified Hasql.Decoding as Decoding -import qualified Hasql.Encoding.Params as ParamsEncoding -import qualified Hasql.Encoding as Encoding +import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders.Params as ParamsEncoders +import qualified Hasql.Encoders as Encoders import qualified Hasql.Settings as Settings import qualified Hasql.IO as IO import qualified Hasql.Connection.Impl as Connection @@ -103,7 +103,7 @@ data RowError = -- According to the format, -- parameters must be referred to using the positional notation, as in the following: -- @$1@, @$2@, @$3@ and etc. --- Those references must be used to refer to the values of the 'Encoding.Params' encoder. +-- Those references must be used to refer to the values of the 'Encoders.Params' encoder. -- -- Following is an example of the declaration of a prepared statement with its associated codecs. -- @@ -115,17 +115,17 @@ data RowError = -- sql = -- "select ($1 + $2)" -- encoder = --- 'contramap' 'fst' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') '<>' --- 'contramap' 'snd' (Hasql.Encoding.'Hasql.Encoding.value' Hasql.Encoding.'Hasql.Encoding.int8') +-- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') '<>' +-- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') -- decoder = --- Hasql.Decoding.'Hasql.Decoding.singleRow' (Hasql.Decoding.'Hasql.Decoding.value' Hasql.Decoding.'Hasql.Decoding.int8') +-- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.value' Hasql.Decoders.'Hasql.Decoders.int8') -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' -- and results in a single result of type 'Int64'. -- data Query a b = - Query !ByteString !(Encoding.Params a) !(Decoding.Result b) !Bool + Query !ByteString !(Encoders.Params a) !(Decoders.Result b) !Bool deriving (Functor) instance Profunctor Query where @@ -150,16 +150,16 @@ run (Query template encoder decoder preparable) params (Connection.Connection pq -- | -- WARNING: We need to take special care that the structure of --- the "ResultsDecoding.Error" type in the public API is an exact copy of +-- the "ResultsDecoders.Error" type in the public API is an exact copy of -- "Error", since we're using coercion. -coerceResultsError :: ResultsDecoding.Error -> ResultsError +coerceResultsError :: ResultsDecoders.Error -> ResultsError coerceResultsError = unsafeCoerce -coerceDecoder :: Decoding.Result a -> ResultsDecoding.Results a +coerceDecoder :: Decoders.Result a -> ResultsDecoders.Results a coerceDecoder = unsafeCoerce -coerceEncoder :: Encoding.Params a -> ParamsEncoding.Params a +coerceEncoder :: Encoders.Params a -> ParamsEncoders.Params a coerceEncoder = unsafeCoerce diff --git a/tasty/Main.hs b/tasty/Main.hs index 0ac2cdeadf..3e6a3d3ccc 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -10,8 +10,8 @@ import qualified Test.Tasty.QuickCheck as QuickCheck import qualified Test.QuickCheck as QuickCheck import qualified Main.DSL as DSL import qualified Hasql.Query as Query -import qualified Hasql.Encoding as Encoding -import qualified Hasql.Decoding as Decoding +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Decoders as Decoders main = defaultMain tree @@ -27,14 +27,14 @@ tree = DSL.session $ do let query = - Query.Query sql mempty Decoding.unit True + Query.Query sql mempty Decoders.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - Query.Query sql mempty Decoding.unit True + Query.Query sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" @@ -46,9 +46,9 @@ tree = sql = "select ($1 :: mood)" decoder = - (Decoding.singleRow (Decoding.value (Decoding.enum (Just . id)))) + (Decoders.singleRow (Decoders.value (Decoders.enum (Just . id)))) encoder = - Encoding.value (Encoding.enum id) + Encoders.value (Encoders.enum id) in DSL.query "ok" query in actual , @@ -68,9 +68,9 @@ tree = sql = "select $1" encoder = - Encoding.value Encoding.text + Encoders.value Encoders.text decoder = - (Decoding.singleRow (Decoding.value (Decoding.text))) + (Decoders.singleRow (Decoders.value (Decoders.text))) effect2 = DSL.query 1 query where @@ -80,9 +80,9 @@ tree = sql = "select $1" encoder = - Encoding.value Encoding.int8 + Encoders.value Encoders.int8 decoder = - (Decoding.singleRow (Decoding.value Decoding.int8)) + (Decoders.singleRow (Decoders.value Decoders.int8)) in (,) <$> effect1 <*> effect2 in actual , @@ -112,7 +112,7 @@ tree = sql = "delete from a" decoder = - Decoding.rowsAffected + Decoders.rowsAffected in actual , HUnit.testCase "Result of an auto-incremented column" $ @@ -121,8 +121,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoding.singleRow (Decoding.value Decoding.int4)) False - id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoding.singleRow (Decoding.value Decoding.int4)) False + id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index ceb125f254..9ae5cccae2 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -4,8 +4,8 @@ import Main.Prelude import qualified Hasql.Connection as HC import qualified Hasql.Query as HQ import qualified Hasql.Settings as HS -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Decoders as HD newtype Session a = diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 2b1d628a1c..22d698119d 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -2,8 +2,8 @@ module Main.Queries where import Main.Prelude hiding (def) import qualified Hasql.Query as HQ -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Decoders as HD import qualified Main.Prelude as Prelude From 12494a3a87a6a26555205a023ae8a968e209ff03 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 5 Dec 2015 10:47:57 +0300 Subject: [PATCH 0278/1204] Docs --- hasql.cabal | 2 +- library/Hasql/Query.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 8716838c6d..11ce773d53 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.15 + 0.15.0.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index c9e07472a7..bb59f808ba 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -99,7 +99,7 @@ data RowError = -- * a flag, determining whether it should be prepared. -- -- The SQL template must be formatted according to Postgres' standard, --- with any non-ASCII characters of the template must be encoded using UTF-8. +-- with any non-ASCII characters of the template encoded using UTF-8. -- According to the format, -- parameters must be referred to using the positional notation, as in the following: -- @$1@, @$2@, @$3@ and etc. @@ -122,7 +122,7 @@ data RowError = -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' --- and results in a single result of type 'Int64'. +-- and produces a single result of type 'Int64'. -- data Query a b = Query !ByteString !(Encoders.Params a) !(Decoders.Result b) !Bool From 373bc62a063fb9cee1c1c6e609c3ff1847f71369 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 5 Dec 2015 11:06:40 +0300 Subject: [PATCH 0279/1204] Lighten the deps --- hasql-transaction.cabal | 13 +++---------- library/Hasql/Transaction/Prelude.hs | 4 ---- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 81f8107245..dddfc8d355 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.3 + 0.3.0.1 category: Hasql, Database, PostgreSQL synopsis: @@ -46,23 +46,16 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.13 && < 0.15, - -- parsing: - attoparsec >= 0.10 && < 0.14, + hasql >= 0.14 && < 0.15, -- database: postgresql-error-codes >= 1 && < 2, -- data: - bytestring-tree-builder >= 0.1 && < 0.2, - vector >= 0.10 && < 0.12, - text >= 1 && < 1.3, + bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, -- control: contravariant >= 1.3 && < 2, contravariant-extras >= 0.3 && < 0.4, either >= 4.4.1 && < 5, transformers >= 0.3 && < 0.5, - -- errors: - loch-th == 0.2.*, - placeholders == 0.1.*, -- general: base-prelude >= 0.1.19 && < 0.2 diff --git a/library/Hasql/Transaction/Prelude.hs b/library/Hasql/Transaction/Prelude.hs index 2f8a237f25..dd7a8aa1fc 100644 --- a/library/Hasql/Transaction/Prelude.hs +++ b/library/Hasql/Transaction/Prelude.hs @@ -31,10 +31,6 @@ import Contravariant.Extras as Exports import Control.Monad.Trans.Either as Exports import Data.Either.Combinators as Exports --- text -------------------------- -import Data.Text as Exports (Text) - -- bytestring ------------------------- import Data.ByteString as Exports (ByteString) From cc025f5808cf4b85ab4989e14ddf19f908aac379 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 5 Dec 2015 11:09:17 +0300 Subject: [PATCH 0280/1204] Docs --- hasql-transaction.cabal | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index dddfc8d355..d9c6dc803c 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,10 +1,11 @@ name: hasql-transaction version: - 0.3.0.1 + 0.3.0.2 category: Hasql, Database, PostgreSQL synopsis: + A composable abstraction over the retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction bug-reports: From d5f5c90ed49bc0d7308fdfde003c8ea29d5f980a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 07:06:31 +0300 Subject: [PATCH 0281/1204] Update the tests and reproduce the bug --- hasql.cabal | 2 -- tasty/Main.hs | 45 ++++++++++++++++++++++----------------------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 11ce773d53..62241fe77a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -99,8 +99,6 @@ library base >= 4.6 && < 5 --- Note that this test-suite is supposed to be single-threaded. --- Hence the absense of the appropriate GHC flags. test-suite tasty type: exitcode-stdio-1.0 diff --git a/tasty/Main.hs b/tasty/Main.hs index 3e6a3d3ccc..a7f5159b0f 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -3,11 +3,11 @@ module Main where import Main.Prelude hiding (assert, isRight, isLeft) import Test.QuickCheck.Instances import Test.Tasty -import qualified Main.Queries as Queries -import qualified Test.Tasty.HUnit as HUnit -import qualified Test.Tasty.SmallCheck as SmallCheck -import qualified Test.Tasty.QuickCheck as QuickCheck +import Test.Tasty.Runners +import Test.Tasty.HUnit +import Test.Tasty.QuickCheck import qualified Test.QuickCheck as QuickCheck +import qualified Main.Queries as Queries import qualified Main.DSL as DSL import qualified Hasql.Query as Query import qualified Hasql.Encoders as Encoders @@ -17,13 +17,15 @@ main = defaultMain tree tree = + localOption (NumThreads 1) $ testGroup "All tests" [ - HUnit.testCase "Enum" $ - HUnit.assertEqual "" (Right "ok") $ + testCase "Executing the same query twice" $ + pure () + , + testCase "Enum" $ let - actual = - unsafePerformIO $ + actualIO = DSL.session $ do let query = @@ -50,13 +52,11 @@ tree = encoder = Encoders.value (Encoders.enum id) in DSL.query "ok" query - in actual + in actualIO >>= assertEqual "" (Right "ok") , - HUnit.testCase "The same prepared statement used on different types" $ - HUnit.assertEqual "" (Right ("ok", 1)) $ + testCase "The same prepared statement used on different types" $ let - actual = - unsafePerformIO $ + actualIO = DSL.session $ do let effect1 = @@ -84,13 +84,12 @@ tree = decoder = (Decoders.singleRow (Decoders.value Decoders.int8)) in (,) <$> effect1 <*> effect2 - in actual + in actualIO >>= assertEqual "" (Right ("ok", 1)) , - HUnit.testCase "Affected rows counting" $ - HUnit.assertEqual "" (Right 100) $ + testCase "Affected rows counting" $ + replicateM_ 13 $ let - actual = - unsafePerformIO $ + actualIO = DSL.session $ do dropTable createTable @@ -113,9 +112,9 @@ tree = "delete from a" decoder = Decoders.rowsAffected - in actual + in actualIO >>= assertEqual "" (Right 100) , - HUnit.testCase "Result of an auto-incremented column" $ + testCase "Result of an auto-incremented column" $ let actualIO = DSL.session $ do @@ -125,12 +124,12 @@ tree = id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) - in HUnit.assertEqual "" (Right (1, 2)) =<< actualIO + in assertEqual "" (Right (1, 2)) =<< actualIO , - HUnit.testCase "List decoding" $ + testCase "List decoding" $ let actualIO = DSL.session $ DSL.query () $ Queries.selectList - in HUnit.assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] From 11ea1361939979c276e72d4fd8e50c1c2876ca90 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 08:06:22 +0300 Subject: [PATCH 0282/1204] Drop the unsafe freeing of result --- library/Hasql/Decoders/Results.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 2b415200de..6d03a7025e 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -51,7 +51,6 @@ single resultDec = case resultMaybe of Just result -> mapLeft ResultError <$> Result.run resultDec (integerDatetimes, result) - <* LibPQ.unsafeFreeResult result Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) From e8f5c6a77f0e69ad51f6ea1acb6ac4139de06b87 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 08:17:04 +0300 Subject: [PATCH 0283/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 62241fe77a..51f3df23c1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.15.0.1 + 0.15.0.2 category: Hasql, Database, PostgreSQL synopsis: From 0e12cb03507ccfd6d353280cb718bdc97f1181a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 08:16:13 +0300 Subject: [PATCH 0284/1204] Update the Travis setup --- .travis.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0f532c275b..75a1d33979 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,7 @@ env: - - ghc=7.6.1 cabal=1.18 benchmarks=1 tests=1 lower_bound_dependencies=1 - - ghc=7.6.1 cabal=1.18 benchmarks=1 tests=1 - - ghc=7.8.1 cabal=1.18 benchmarks=1 tests=1 - - ghc=7.10.1 cabal=1.22 + - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 + - ghc=7.8.1 cabal=1.18 - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 - install: # Set up the Shell to treat the semicolon as && @@ -32,9 +29,6 @@ install: then constraint_options=( "--constraint=transformers==0.3.*" - "--constraint=monad-control==0.3.*" - "--constraint=text==1.0.*" - "--constraint=attoparsec==0.10.*" "--constraint=time==1.4.*" ); fi; From fe53852745f596b3362a2d723809143086a25431 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 06:53:26 +0300 Subject: [PATCH 0285/1204] Docs --- hasql-transaction.cabal | 2 +- library/Hasql/Transaction.hs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index d9c6dc803c..b90d33e260 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.3.0.2 + 0.3.0.3 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 652d50c6ad..6d945e9e37 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -17,6 +17,12 @@ import qualified Hasql.Transaction.Queries as Queries import qualified PostgreSQL.ErrorCodes as ErrorCodes +-- | +-- A composable abstraction over the retryable transactions. +-- +-- Executes multiple queries under the specified mode and isolation level, +-- while automatically retrying the transaction in case of conflicts. +-- Thus this abstraction closely reproduces the behaviour of 'STM'. newtype Transaction a = Transaction (ReaderT (Connection.Connection, IORef Int) (EitherT Query.ResultsError IO) a) deriving (Functor, Applicative, Monad) From bc9bf7513e1481fcf42b164390de48688528cda9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 09:00:47 +0300 Subject: [PATCH 0286/1204] Update Hasql --- hasql-transaction.cabal | 4 ++-- library/Hasql/Transaction/Queries.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index b90d33e260..027c193cbc 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.3.0.3 + 0.3.1 category: Hasql, Database, PostgreSQL synopsis: @@ -47,7 +47,7 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.14 && < 0.15, + hasql >= 0.15 && < 0.16, -- database: postgresql-error-codes >= 1 && < 2, -- data: diff --git a/library/Hasql/Transaction/Queries.hs b/library/Hasql/Transaction/Queries.hs index cb825159a0..41845495b0 100644 --- a/library/Hasql/Transaction/Queries.hs +++ b/library/Hasql/Transaction/Queries.hs @@ -3,8 +3,8 @@ where import Hasql.Transaction.Prelude import qualified Hasql.Query as HQ -import qualified Hasql.Encoding as HE -import qualified Hasql.Decoding as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Decoders as HD import qualified ByteString.TreeBuilder as TB From 1b0913a36b51f27af61bd347e29eeac69c5a1ac3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Dec 2015 09:55:16 +0300 Subject: [PATCH 0287/1204] Docs --- library/Hasql/Transaction.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 6d945e9e37..4e7b0ab873 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -56,7 +56,7 @@ data IsolationLevel = deriving (Show, Eq, Ord, Enum, Bounded) -- | --- Execute the transaction using the provided isolation level, mode and a database connection. +-- Execute the transaction using the provided isolation level, mode and database connection. {-# INLINABLE run #-} run :: Transaction a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) run (Transaction tx) isolation mode connection = From e9eaff7725a39fe1fd8f26d20e1d2a7b366d5253 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 7 Dec 2015 16:07:59 +0300 Subject: [PATCH 0288/1204] Init --- .travis.yml | 53 +++++++++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++ hasql-pool.cabal | 56 +++++++++++++++++++++++++++++++++++ library/Hasql/Pool.hs | 48 ++++++++++++++++++++++++++++++ library/Hasql/Pool/Prelude.hs | 14 +++++++++ 5 files changed, 193 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 hasql-pool.cabal create mode 100644 library/Hasql/Pool.hs create mode 100644 library/Hasql/Pool/Prelude.hs diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..633cafc257 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,53 @@ +env: + - ghc=7.6.1 cabal=1.18 + - ghc=7.8.1 cabal=1.18 + - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 + +install: + # Set up the Shell to treat the semicolon as && + - set -o pipefail && set -e + # Install GHC and Cabal + - + ghc=${ghc=7.10.1}; + cabal=${cabal=1.22}; + travis_retry sudo add-apt-repository -y ppa:hvr/ghc; + travis_retry sudo apt-get update; + travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; + # Update the Cabal database + - cabal update + # Switch to the distro: + - + export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; + # Install the lower bound dependencies + - + if [ "$lower_bound_dependencies" = "1" ]; + then + constraint_options=( + ); + fi; + # Install the library dependencies + - cabal install --only-dependencies --reorder-goals --force-reinstalls + ${constraint_options[@]} + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + # Build the library + - cabal build + # Configure and build the remaining stuff + - cabal configure + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + -f doctest + - cabal build + +script: + - | + if [ "$tests" = "1" ]; + then + cabal clean; + cabal test --show-details=always; + fi; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..defe17a5b7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015, Nikita Volkov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/hasql-pool.cabal b/hasql-pool.cabal new file mode 100644 index 0000000000..eaa9bc9e1c --- /dev/null +++ b/hasql-pool.cabal @@ -0,0 +1,56 @@ +name: + hasql-pool +version: + 0.1 +category: + Hasql, Database, PostgreSQL +synopsis: + A pool of connections for Hasql +homepage: + https://github.com/nikita-volkov/hasql-pool +bug-reports: + https://github.com/nikita-volkov/hasql-pool/issues +author: + Nikita Volkov +maintainer: + Nikita Volkov +copyright: + (c) 2015, Nikita Volkov +license: + MIT +license-file: + LICENSE +build-type: + Simple +cabal-version: + >=1.10 + + +source-repository head + type: + git + location: + git://github.com/nikita-volkov/hasql-pool.git + + +library + hs-source-dirs: + library + ghc-options: + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + other-modules: + Hasql.Pool.Prelude + exposed-modules: + Hasql.Pool + build-depends: + -- resources: + resource-pool >= 0.2 && < 0.3, + -- database: + hasql >= 0.15 && < 0.16, + -- data: + time >= 1.4 && < 2, + -- general: + base-prelude >= 0.1.19 && < 0.2 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs new file mode 100644 index 0000000000..5762a49a30 --- /dev/null +++ b/library/Hasql/Pool.hs @@ -0,0 +1,48 @@ +module Hasql.Pool +( + Pool, + acquire, + release, + use, +) +where + +import Hasql.Pool.Prelude +import qualified Hasql.Connection +import qualified Hasql.Settings +import qualified Data.Pool + + +-- | +-- A pool of connections to DB. +newtype Pool = + Pool (Data.Pool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) + +-- | +-- Given the pool-size, timeout and connection settings +-- create a connection-pool. +acquire :: Int -> NominalDiffTime -> Hasql.Settings.Settings -> IO Pool +acquire size timeout connectionSettings = + fmap Pool $ + Data.Pool.createPool acquire release stripes timeout size + where + acquire = + Hasql.Connection.acquire connectionSettings + release = + either (const (pure ())) Hasql.Connection.release + stripes = + 1 + +-- | +-- Release the connection-pool. +release :: Pool -> IO () +release (Pool pool) = + Data.Pool.destroyAllResources pool + +-- | +-- Use a connection from the pool and return it to the pool, when finished. +-- Exception-safe. +use :: Pool -> (Hasql.Connection.Connection -> IO a) -> IO (Either Hasql.Connection.ConnectionError a) +use (Pool pool) handler = + Data.Pool.withResource pool (traverse handler) + diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs new file mode 100644 index 0000000000..a28cf8b738 --- /dev/null +++ b/library/Hasql/Pool/Prelude.hs @@ -0,0 +1,14 @@ +module Hasql.Pool.Prelude +( + module Exports, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) + +-- time +------------------------- +import Data.Time as Exports From 0a2583c8d8a59eadea1d17a70fdfbbfb5fe423e9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 13 Dec 2015 13:43:02 +0300 Subject: [PATCH 0289/1204] Create README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000000..8edf7111f4 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# NOTICE + +With the recent releases and more to come still, the Hasql ecosystem undergoes major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published until the end of 2015. From 838bc8cb8ea6916febf583c3986d3ad90cb84340 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Dec 2015 18:11:14 +0500 Subject: [PATCH 0290/1204] Session and Query Arrow --- benchmark/Main.hs | 8 +- benchmark/Main/Queries.hs | 4 +- hasql.cabal | 12 +- library/Hasql/Connection.hs | 12 - library/Hasql/Connection/Impl.hs | 37 --- library/Hasql/IO.hs | 247 ++++++++---------- library/Hasql/Private/IO.hs | 151 +++++++++++ .../PreparedStatementRegistry.hs | 2 +- library/Hasql/Private/Query.hs | 64 +++++ library/Hasql/Private/Session.hs | 37 +++ library/Hasql/Query.hs | 130 +-------- library/Hasql/Session.hs | 10 + tasty/Main.hs | 16 +- tasty/Main/DSL.hs | 17 +- tasty/Main/Queries.hs | 6 +- 15 files changed, 422 insertions(+), 331 deletions(-) delete mode 100644 library/Hasql/Connection.hs delete mode 100644 library/Hasql/Connection/Impl.hs create mode 100644 library/Hasql/Private/IO.hs rename library/Hasql/{ => Private}/PreparedStatementRegistry.hs (96%) create mode 100644 library/Hasql/Private/Query.hs create mode 100644 library/Hasql/Private/Session.hs create mode 100644 library/Hasql/Session.hs diff --git a/benchmark/Main.hs b/benchmark/Main.hs index 28c7ef64e5..e21bb9f29c 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -2,16 +2,17 @@ module Main where import Main.Prelude import Criterion.Main -import qualified Hasql.Connection as HC +import qualified Hasql.IO as IO import qualified Hasql.Settings as HS import qualified Hasql.Query as HQ import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD +import qualified Hasql.Session import qualified Main.Queries as Q main = - HC.acquire settings >>= either (fail . show) use + IO.acquireConnection settings >>= either (fail . show) use where settings = HS.settings host port user password database @@ -49,4 +50,5 @@ main = query :: a -> HQ.Query a b -> IO b query params query = {-# SCC "query" #-} - HQ.run query params connection >>= either (fail . show) pure + (=<<) (either (fail . show) pure) $ + IO.session connection $ Hasql.Session.query params query diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs index 036d743b89..c2df173783 100644 --- a/benchmark/Main/Queries.hs +++ b/benchmark/Main/Queries.hs @@ -9,7 +9,7 @@ import qualified Hasql.Decoders as HD select1 :: Int -> HQ.Query () (Vector Int64) select1 amount = {-# SCC "select1" #-} - HQ.Query sql mempty decoder True + HQ.statement sql mempty decoder True where !sql = "values " <> @@ -20,7 +20,7 @@ select1 amount = select4 :: Int -> HQ.Query () (Vector (Int64, Int64, Int64, Int64)) select4 amount = {-# SCC "select4" #-} - HQ.Query sql mempty decoder True + HQ.statement sql mempty decoder True where !sql = "values " <> diff --git a/hasql.cabal b/hasql.cabal index 51f3df23c1..b021a0bf66 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.15.0.2 + 0.16 category: Hasql, Database, PostgreSQL synopsis: @@ -48,7 +48,10 @@ library other-modules: Hasql.Prelude Hasql.PTI - Hasql.IO + Hasql.Private.IO + Hasql.Private.Query + Hasql.Private.Session + Hasql.Private.PreparedStatementRegistry Hasql.Commands Hasql.Decoders.Array Hasql.Decoders.Composite @@ -59,14 +62,13 @@ library Hasql.Encoders.Array Hasql.Encoders.Value Hasql.Encoders.Params - Hasql.PreparedStatementRegistry - Hasql.Connection.Impl exposed-modules: Hasql.Decoders Hasql.Encoders Hasql.Settings - Hasql.Connection + Hasql.IO Hasql.Query + Hasql.Session build-depends: -- parsing: attoparsec >= 0.10 && < 0.14, diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs deleted file mode 100644 index 5c1b867590..0000000000 --- a/library/Hasql/Connection.hs +++ /dev/null @@ -1,12 +0,0 @@ --- | --- This module provides a low-level effectful API dealing with the connections to the database. -module Hasql.Connection -( - Connection, - ConnectionError(..), - acquire, - release, -) -where - -import Hasql.Connection.Impl diff --git a/library/Hasql/Connection/Impl.hs b/library/Hasql/Connection/Impl.hs deleted file mode 100644 index fac8c295d8..0000000000 --- a/library/Hasql/Connection/Impl.hs +++ /dev/null @@ -1,37 +0,0 @@ -module Hasql.Connection.Impl -where - -import Hasql.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.IO as IO - - --- | --- A single connection to the database. -data Connection = - Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry - --- | --- Possible details of the connection acquistion error. -type ConnectionError = - Maybe ByteString - --- | --- Acquire a connection using the provided settings encoded according to the PostgreSQL format. -acquire :: ByteString -> IO (Either ConnectionError Connection) -acquire settings = - {-# SCC "acquire" #-} - runEitherT $ do - pqConnection <- lift (IO.acquireConnection settings) - lift (IO.checkConnectionStatus pqConnection) >>= traverse left - lift (IO.initConnection pqConnection) - integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) - registry <- lift (IO.acquirePreparedStatementRegistry) - pure (Connection pqConnection integerDatetimes registry) - --- | --- Release the connection. -release :: Connection -> IO () -release (Connection pqConnection _ _) = - LibPQ.finish pqConnection diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index e3d530b6ca..2710953dd2 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -1,151 +1,132 @@ -- | --- An API of low-level IO operations. +-- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.IO +( + -- * Connection + Connection, + ConnectionError(..), + acquireConnection, + releaseConnection, + -- * Session + SessionError(..), + ResultError(..), + RowError(..), + session, +) where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Commands as Commands -import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Decoders.Result as ResultDecoders -import qualified Hasql.Decoders.Results as ResultsDecoders -import qualified Hasql.Encoders.Params as ParamsEncoders -import qualified Data.DList as DList +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Private.IO as IO +import qualified Hasql.Private.Session as Session +import qualified Hasql.Settings as Settings -{-# INLINE acquireConnection #-} -acquireConnection :: ByteString -> IO LibPQ.Connection -acquireConnection = - LibPQ.connectdb - -{-# INLINE acquirePreparedStatementRegistry #-} -acquirePreparedStatementRegistry :: IO PreparedStatementRegistry.PreparedStatementRegistry -acquirePreparedStatementRegistry = - PreparedStatementRegistry.new - -{-# INLINE releaseConnection #-} -releaseConnection :: LibPQ.Connection -> IO () -releaseConnection connection = - LibPQ.finish connection - -{-# INLINE checkConnectionStatus #-} -checkConnectionStatus :: LibPQ.Connection -> IO (Maybe (Maybe ByteString)) -checkConnectionStatus c = - do - s <- LibPQ.status c - case s of - LibPQ.ConnectionOk -> return Nothing - _ -> fmap Just (LibPQ.errorMessage c) +-- | +-- A single connection to the database. +data Connection = + Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry -{-# INLINE checkServerVersion #-} -checkServerVersion :: LibPQ.Connection -> IO (Maybe Int) -checkServerVersion c = - fmap (mfilter (< 80200) . Just) (LibPQ.serverVersion c) +-- | +-- Possible details of the connection acquistion error. +type ConnectionError = + Maybe ByteString -{-# INLINE getIntegerDatetimes #-} -getIntegerDatetimes :: LibPQ.Connection -> IO Bool -getIntegerDatetimes c = - fmap decodeValue $ LibPQ.parameterStatus c "integer_datetimes" - where - decodeValue = - \case - Just "on" -> True - _ -> False +-- | +-- Acquire a connection using the provided settings encoded according to the PostgreSQL format. +acquireConnection :: Settings.Settings -> IO (Either ConnectionError Connection) +acquireConnection settings = + {-# SCC "acquireConnection" #-} + runEitherT $ do + pqConnection <- lift (IO.acquireConnection settings) + lift (IO.checkConnectionStatus pqConnection) >>= traverse left + lift (IO.initConnection pqConnection) + integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) + registry <- lift (IO.acquirePreparedStatementRegistry) + pure (Connection pqConnection integerDatetimes registry) -{-# INLINE initConnection #-} -initConnection :: LibPQ.Connection -> IO () -initConnection c = - void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) +-- | +-- Release the connection. +releaseConnection :: Connection -> IO () +releaseConnection (Connection pqConnection _ _) = + LibPQ.finish pqConnection -{-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either ResultsDecoders.Error a) -getResults connection integerDatetimes des = - {-# SCC "getResults" #-} - ResultsDecoders.run (des <* ResultsDecoders.dropRemainders) (integerDatetimes, connection) -{-# INLINE getPreparedStatementKey #-} -getPreparedStatementKey :: - LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> - ByteString -> [LibPQ.Oid] -> - IO (Either ResultsDecoders.Error ByteString) -getPreparedStatementKey connection registry template oidList = - {-# SCC "getPreparedStatementKey" #-} - do - keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry - case keyMaybe of - Just key -> - pure (pure key) - Nothing -> - do - key <- PreparedStatementRegistry.register template wordOIDList registry - sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - let resultsDecoder = - if sent - then ResultsDecoders.single ResultDecoders.unit - else ResultsDecoders.clientError - runEitherT $ do - EitherT $ getResults connection undefined resultsDecoder - pure key - where - wordOIDList = - map (\(LibPQ.Oid x) -> fromIntegral x) oidList +-- * Session +------------------------- -{-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoders.Error ()) -checkedSend connection send = - send >>= \case - False -> fmap (Left . ResultsDecoders.ClientError) $ LibPQ.errorMessage connection - True -> pure (Right ()) +-- | +-- An error of some command in the session. +data SessionError = + -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with connection. + ClientError !(Maybe ByteString) | + -- | + -- Some error with a command result. + ResultError !ResultError + deriving (Show, Eq) -{-# INLINE sendPreparedParametricQuery #-} -sendPreparedParametricQuery :: - LibPQ.Connection -> - PreparedStatementRegistry.PreparedStatementRegistry -> - ByteString -> - [LibPQ.Oid] -> - [Maybe (ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoders.Error ()) -sendPreparedParametricQuery connection registry template oidList valueAndFormatList = - runEitherT $ do - key <- EitherT $ getPreparedStatementKey connection registry template oidList - EitherT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary +-- | +-- An error with a command result. +data ResultError = + -- | + -- An error reported by the DB. + -- Consists of the following: Code, message, details, hint. + -- + -- * __Code__. + -- The SQLSTATE code for the error. + -- It's recommended to use + -- + -- to work with those. + -- + -- * __Message__. + -- The primary human-readable error message (typically one line). Always present. + -- + -- * __Details__. + -- An optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * __Hint__. + -- An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. + -- Might run to multiple lines. + ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | + -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult !Text | + -- | + -- An error of the row reader, preceded by the index of the row. + RowError !Int !RowError | + -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows !Int + deriving (Show, Eq) -{-# INLINE sendUnpreparedParametricQuery #-} -sendUnpreparedParametricQuery :: - LibPQ.Connection -> - ByteString -> - [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoders.Error ()) -sendUnpreparedParametricQuery connection template paramList = - checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary +-- | +-- An error during the decoding of a specific row. +data RowError = + -- | + -- Appears on the attempt to parse more columns than there are in the result. + EndOfInput | + -- | + -- Appears on the attempt to parse a @NULL@ as some value. + UnexpectedNull | + -- | + -- Appears when a wrong value parser is used. + -- Comes with the error details. + ValueError !Text + deriving (Show, Eq) -{-# INLINE sendParametricQuery #-} -sendParametricQuery :: - LibPQ.Connection -> - Bool -> - PreparedStatementRegistry.PreparedStatementRegistry -> - ByteString -> - ParamsEncoders.Params a -> - Bool -> - a -> - IO (Either ResultsDecoders.Error ()) -sendParametricQuery connection integerDatetimes registry template encoder prepared params = - {-# SCC "sendParametricQuery" #-} - if prepared - then - let - (oidList, valueAndFormatList) = - ParamsEncoders.run' encoder params integerDatetimes - in - sendPreparedParametricQuery connection registry template oidList valueAndFormatList - else - let - paramList = - ParamsEncoders.run'' encoder params integerDatetimes - in - sendUnpreparedParametricQuery connection template paramList +-- | +-- Executes a bunch of commands on the provided connection. +session :: Connection -> Session.Session a -> IO (Either SessionError a) +session (Connection pqConnection integerDatetimes registry) (Session.Session impl) = + fmap (mapLeft unsafeCoerce) $ + runEitherT $ + runReaderT impl (pqConnection, integerDatetimes, registry) -{-# INLINE sendNonparametricQuery #-} -sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoders.Error ()) -sendNonparametricQuery connection sql = - checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs new file mode 100644 index 0000000000..3ec47cb08e --- /dev/null +++ b/library/Hasql/Private/IO.hs @@ -0,0 +1,151 @@ +-- | +-- An API of low-level IO operations. +module Hasql.Private.IO +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Commands as Commands +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Decoders.Result as ResultDecoders +import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Encoders.Params as ParamsEncoders +import qualified Data.DList as DList + + +{-# INLINE acquireConnection #-} +acquireConnection :: ByteString -> IO LibPQ.Connection +acquireConnection = + LibPQ.connectdb + +{-# INLINE acquirePreparedStatementRegistry #-} +acquirePreparedStatementRegistry :: IO PreparedStatementRegistry.PreparedStatementRegistry +acquirePreparedStatementRegistry = + PreparedStatementRegistry.new + +{-# INLINE releaseConnection #-} +releaseConnection :: LibPQ.Connection -> IO () +releaseConnection connection = + LibPQ.finish connection + +{-# INLINE checkConnectionStatus #-} +checkConnectionStatus :: LibPQ.Connection -> IO (Maybe (Maybe ByteString)) +checkConnectionStatus c = + do + s <- LibPQ.status c + case s of + LibPQ.ConnectionOk -> return Nothing + _ -> fmap Just (LibPQ.errorMessage c) + +{-# INLINE checkServerVersion #-} +checkServerVersion :: LibPQ.Connection -> IO (Maybe Int) +checkServerVersion c = + fmap (mfilter (< 80200) . Just) (LibPQ.serverVersion c) + +{-# INLINE getIntegerDatetimes #-} +getIntegerDatetimes :: LibPQ.Connection -> IO Bool +getIntegerDatetimes c = + fmap decodeValue $ LibPQ.parameterStatus c "integer_datetimes" + where + decodeValue = + \case + Just "on" -> True + _ -> False + +{-# INLINE initConnection #-} +initConnection :: LibPQ.Connection -> IO () +initConnection c = + void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) + +{-# INLINE getResults #-} +getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either ResultsDecoders.Error a) +getResults connection integerDatetimes des = + {-# SCC "getResults" #-} + ResultsDecoders.run (des <* ResultsDecoders.dropRemainders) (integerDatetimes, connection) + +{-# INLINE getPreparedStatementKey #-} +getPreparedStatementKey :: + LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> [LibPQ.Oid] -> + IO (Either ResultsDecoders.Error ByteString) +getPreparedStatementKey connection registry template oidList = + {-# SCC "getPreparedStatementKey" #-} + do + keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry + case keyMaybe of + Just key -> + pure (pure key) + Nothing -> + do + key <- PreparedStatementRegistry.register template wordOIDList registry + sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) + let resultsDecoder = + if sent + then ResultsDecoders.single ResultDecoders.unit + else ResultsDecoders.clientError + runEitherT $ do + EitherT $ getResults connection undefined resultsDecoder + pure key + where + wordOIDList = + map (\(LibPQ.Oid x) -> fromIntegral x) oidList + +{-# INLINE checkedSend #-} +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoders.Error ()) +checkedSend connection send = + send >>= \case + False -> fmap (Left . ResultsDecoders.ClientError) $ LibPQ.errorMessage connection + True -> pure (Right ()) + +{-# INLINE sendPreparedParametricQuery #-} +sendPreparedParametricQuery :: + LibPQ.Connection -> + PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> + [LibPQ.Oid] -> + [Maybe (ByteString, LibPQ.Format)] -> + IO (Either ResultsDecoders.Error ()) +sendPreparedParametricQuery connection registry template oidList valueAndFormatList = + runEitherT $ do + key <- EitherT $ getPreparedStatementKey connection registry template oidList + EitherT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + +{-# INLINE sendUnpreparedParametricQuery #-} +sendUnpreparedParametricQuery :: + LibPQ.Connection -> + ByteString -> + [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> + IO (Either ResultsDecoders.Error ()) +sendUnpreparedParametricQuery connection template paramList = + checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary + +{-# INLINE sendParametricQuery #-} +sendParametricQuery :: + LibPQ.Connection -> + Bool -> + PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> + ParamsEncoders.Params a -> + Bool -> + a -> + IO (Either ResultsDecoders.Error ()) +sendParametricQuery connection integerDatetimes registry template encoder prepared params = + {-# SCC "sendParametricQuery" #-} + if prepared + then + let + (oidList, valueAndFormatList) = + ParamsEncoders.run' encoder params integerDatetimes + in + sendPreparedParametricQuery connection registry template oidList valueAndFormatList + else + let + paramList = + ParamsEncoders.run'' encoder params integerDatetimes + in + sendUnpreparedParametricQuery connection template paramList + +{-# INLINE sendNonparametricQuery #-} +sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoders.Error ()) +sendNonparametricQuery connection sql = + checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/Private/PreparedStatementRegistry.hs similarity index 96% rename from library/Hasql/PreparedStatementRegistry.hs rename to library/Hasql/Private/PreparedStatementRegistry.hs index 2ee1d20cff..e893f69c37 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/Private/PreparedStatementRegistry.hs @@ -1,4 +1,4 @@ -module Hasql.PreparedStatementRegistry +module Hasql.Private.PreparedStatementRegistry ( PreparedStatementRegistry, new, diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs new file mode 100644 index 0000000000..80a54d3125 --- /dev/null +++ b/library/Hasql/Private/Query.hs @@ -0,0 +1,64 @@ +module Hasql.Private.Query +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Private.IO as IO +import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Encoders.Params as Encoders.Params + + +-- | +-- An abstraction over parametric queries. +-- +-- It is composable using +-- the standard interfaces of the category theory, +-- which it has instances of. +-- E.g., here's how you can compose queries +-- using the Arrow notation: +-- +-- @ +-- -- | +-- -- Given an Update query, +-- -- which uses the \@fmap (> 0) 'Decoders.Results.rowsAffected'\@ decoder +-- -- to detect, whether it had any effect, +-- -- and an Insert query, +-- -- produces a query which performs Upsert. +-- composeUpsert :: Query a Bool -> Query a () -> Query a () +-- composeUpsert update insert = +-- proc params -> do +-- updated <- update -< params +-- if updated +-- then 'returnA' -< () +-- else insert -< params +-- @ +newtype Query a b = + Query + (Kleisli + (ReaderT + (LibPQ.Connection, Bool, PreparedStatementRegistry.PreparedStatementRegistry) + (EitherT Decoders.Results.Error IO)) + a + b) + deriving (Category, Arrow, ArrowChoice, ArrowLoop, ArrowApply) + +instance Functor (Query a) where + {-# INLINE fmap #-} + fmap = + (^<<) + +instance Profunctor Query where + {-# INLINE lmap #-} + lmap = + (^>>) + {-# INLINE rmap #-} + rmap = + (^<<) + +statement :: ByteString -> Encoders.Params.Params a -> Decoders.Results.Results b -> Bool -> Query a b +statement template encoder decoder preparable = + Query $ Kleisli $ \params -> ReaderT $ \(pqConnection, integerDatetimes, registry) -> do + EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params + EitherT $ IO.getResults pqConnection integerDatetimes decoder + diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs new file mode 100644 index 0000000000..b84e1e9f13 --- /dev/null +++ b/library/Hasql/Private/Session.hs @@ -0,0 +1,37 @@ +module Hasql.Private.Session +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Settings as Settings +import qualified Hasql.Private.IO as IO +import qualified Hasql.Private.Query as Query +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry + + +-- | +-- A batch of actions to be executed in the context of a database connection. +newtype Session a = + Session + (ReaderT + (LibPQ.Connection, Bool, PreparedStatementRegistry.PreparedStatementRegistry) + (EitherT Decoders.Results.Error IO) + a) + deriving (Functor, Applicative, Monad) + +-- | +-- Possibly a multi-statement query, +-- which however cannot be parameterized or prepared, +-- nor can any results of it be collected. +sql :: ByteString -> Session () +sql sql = + Session $ ReaderT $ \(pqConnection, integerDatetimes, registry) -> + EitherT $ IO.sendNonparametricQuery pqConnection sql + +-- | +-- Parameters and a specification of the parametric query to apply them to. +query :: a -> Query.Query a b -> Session b +query input (Query.Query (Kleisli impl)) = + Session (impl input) + diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index bb59f808ba..02f7cdcdf9 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -1,92 +1,18 @@ module Hasql.Query ( - Query(..), - -- * Execution - ResultsError(..), - ResultError(..), - RowError(..), - run, + Query.Query, + statement, ) where import Hasql.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Private.Query as Query +import qualified Hasql.Decoders.Results as Decoders.Results import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders.Params as ParamsEncoders +import qualified Hasql.Encoders.Params as Encoders.Params import qualified Hasql.Encoders as Encoders -import qualified Hasql.Settings as Settings -import qualified Hasql.IO as IO -import qualified Hasql.Connection.Impl as Connection --- | --- An error of the result-decoder. -data ResultsError = - -- | - -- An error on the client-side, - -- with a message generated by the \"libpq\" library. - -- Usually indicates problems with connection. - ClientError !(Maybe ByteString) | - -- | - -- Decoder error details. - ResultError !ResultError - deriving (Show, Eq) - --- | --- Decoder error details. -data ResultError = - -- | - -- An error reported by the DB. - -- Consists of the following: Code, message, details, hint. - -- - -- * __Code__. - -- The SQLSTATE code for the error. - -- It's recommended to use - -- - -- to work with those. - -- - -- * __Message__. - -- The primary human-readable error message (typically one line). Always present. - -- - -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. - -- Might run to multiple lines. - ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | - -- | - -- The database returned an unexpected result. - -- Indicates an improper statement or a schema mismatch. - UnexpectedResult !Text | - -- | - -- An error of the row reader, preceded by the index of the row. - RowError !Int !RowError | - -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows !Int - deriving (Show, Eq) - --- | --- An error during the decoding of a specific row. -data RowError = - -- | - -- Appears on the attempt to parse more columns than there are in the result. - EndOfInput | - -- | - -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNull | - -- | - -- Appears when a wrong value parser is used. - -- Comes with the error details. - ValueError !Text - deriving (Show, Eq) - -- | -- A specification of a strictly single-statement query, which can be parameterized and prepared. @@ -108,9 +34,9 @@ data RowError = -- Following is an example of the declaration of a prepared statement with its associated codecs. -- -- @ --- selectSum :: Hasql.'Hasql.Query' (Int64, Int64) Int64 +-- selectSum :: Hasql.Query.'Query.Query' (Int64, Int64) Int64 -- selectSum = --- Hasql.'Hasql.Query' sql encoder decoder True +-- Hasql.Query.'statement' sql encoder decoder True -- where -- sql = -- "select ($1 + $2)" @@ -124,42 +50,8 @@ data RowError = -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. -- -data Query a b = - Query !ByteString !(Encoders.Params a) !(Decoders.Result b) !Bool - deriving (Functor) - -instance Profunctor Query where - {-# INLINE lmap #-} - lmap f (Query p1 p2 p3 p4) = - Query p1 (contramap f p2) p3 p4 - {-# INLINE rmap #-} - rmap f (Query p1 p2 p3 p4) = - Query p1 p2 (fmap f p3) p4 - {-# INLINE dimap #-} - dimap f1 f2 (Query p1 p2 p3 p4) = - Query p1 (contramap f1 p2) (fmap f2 p3) p4 - --- | --- Execute the query, producing either a deserialization failure or a successful result. -run :: Query a b -> a -> Connection.Connection -> IO (Either ResultsError b) -run (Query template encoder decoder preparable) params (Connection.Connection pqConnection integerDatetimes registry) = - {-# SCC "query" #-} - fmap (mapLeft coerceResultsError) $ runEitherT $ do - EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params - EitherT $ IO.getResults pqConnection integerDatetimes (coerceDecoder decoder) - --- | --- WARNING: We need to take special care that the structure of --- the "ResultsDecoders.Error" type in the public API is an exact copy of --- "Error", since we're using coercion. -coerceResultsError :: ResultsDecoders.Error -> ResultsError -coerceResultsError = - unsafeCoerce - -coerceDecoder :: Decoders.Result a -> ResultsDecoders.Results a -coerceDecoder = - unsafeCoerce +{-# INLINE statement #-} +statement :: ByteString -> Encoders.Params a -> Decoders.Result b -> Bool -> Query.Query a b +statement = + unsafeCoerce Query.statement -coerceEncoder :: Encoders.Params a -> ParamsEncoders.Params a -coerceEncoder = - unsafeCoerce diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs new file mode 100644 index 0000000000..5ed6734833 --- /dev/null +++ b/library/Hasql/Session.hs @@ -0,0 +1,10 @@ +module Hasql.Session +( + Session.Session, + Session.sql, + Session.query, +) +where + +import qualified Hasql.Private.Session as Session + diff --git a/tasty/Main.hs b/tasty/Main.hs index a7f5159b0f..1033cdb974 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -29,21 +29,21 @@ tree = DSL.session $ do let query = - Query.Query sql mempty Decoders.unit True + Query.statement sql mempty Decoders.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - Query.Query sql mempty Decoders.unit True + Query.statement sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" in DSL.query () query let query = - Query.Query sql encoder decoder True + Query.statement sql encoder decoder True where sql = "select ($1 :: mood)" @@ -63,7 +63,7 @@ tree = DSL.query "ok" query where query = - Query.Query sql encoder decoder True + Query.statement sql encoder decoder True where sql = "select $1" @@ -75,7 +75,7 @@ tree = DSL.query 1 query where query = - Query.Query sql encoder decoder True + Query.statement sql encoder decoder True where sql = "select $1" @@ -106,7 +106,7 @@ tree = DSL.query () $ Queries.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () $ Query.Query sql def decoder False + DSL.query () $ Query.statement sql def decoder False where sql = "delete from a" @@ -120,8 +120,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False - id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id1 <- DSL.query () $ Query.statement "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id2 <- DSL.query () $ Query.statement "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 9ae5cccae2..251983744e 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,20 +1,21 @@ module Main.DSL where import Main.Prelude -import qualified Hasql.Connection as HC +import qualified Hasql.IO as IO import qualified Hasql.Query as HQ import qualified Hasql.Settings as HS import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD +import qualified Hasql.Session newtype Session a = - Session (ReaderT HC.Connection (EitherT HQ.ResultsError IO) a) + Session (ReaderT IO.Connection (EitherT IO.SessionError IO) a) deriving (Functor, Applicative, Monad, MonadIO) data SessionError = - ConnectionError (HC.ConnectionError) | - ResultsError (HQ.ResultsError) + ConnectionError (IO.ConnectionError) | + SessionError (IO.SessionError) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) @@ -22,7 +23,7 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ HC.acquire settings + EitherT $ fmap (mapLeft ConnectionError) $ IO.acquireConnection settings where settings = HS.settings host port user password database @@ -33,11 +34,11 @@ session (Session impl) = password = "" database = "postgres" use connection = - bimapEitherT ResultsError id $ + bimapEitherT SessionError id $ runReaderT impl connection release connection = - lift $ HC.release connection + lift $ IO.releaseConnection connection query :: a -> HQ.Query a b -> Session b query params query = - Session $ ReaderT $ EitherT . HQ.run query params + Session $ ReaderT $ \connection -> EitherT $ IO.session connection $ Hasql.Session.query params query diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 22d698119d..afaa40d9a4 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -9,11 +9,11 @@ import qualified Main.Prelude as Prelude def :: ByteString -> HQ.Query () () def sql = - HQ.Query sql Prelude.def Prelude.def False + HQ.statement sql Prelude.def Prelude.def False plain :: ByteString -> HQ.Query () () plain sql = - HQ.Query sql mempty HD.unit False + HQ.statement sql mempty HD.unit False dropType :: ByteString -> HQ.Query () () dropType name = @@ -28,7 +28,7 @@ createEnum name values = selectList :: HQ.Query () ([] (Int64, Int64)) selectList = - HQ.Query sql mempty decoder True + HQ.statement sql mempty decoder True where sql = "values (1,2), (3,4), (5,6)" From b777ae2e40fc37fa8c05799ab0ef8fe2302f3d22 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Dec 2015 18:45:10 +0500 Subject: [PATCH 0291/1204] Revision --- benchmark/Main.hs | 6 +- hasql.cabal | 6 +- library/Hasql/Connection.hs | 12 +++ library/Hasql/IO.hs | 132 ---------------------------- library/Hasql/Prelude.hs | 4 + library/Hasql/Private/Connection.hs | 41 +++++++++ library/Hasql/Private/Query.hs | 12 +-- library/Hasql/Private/Session.hs | 92 ++++++++++++++++--- library/Hasql/Session.hs | 5 ++ tasty/Main/DSL.hs | 14 +-- 10 files changed, 161 insertions(+), 163 deletions(-) create mode 100644 library/Hasql/Connection.hs delete mode 100644 library/Hasql/IO.hs create mode 100644 library/Hasql/Private/Connection.hs diff --git a/benchmark/Main.hs b/benchmark/Main.hs index e21bb9f29c..f1439f3c36 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -2,7 +2,7 @@ module Main where import Main.Prelude import Criterion.Main -import qualified Hasql.IO as IO +import qualified Hasql.Connection as Connection import qualified Hasql.Settings as HS import qualified Hasql.Query as HQ import qualified Hasql.Encoders as HE @@ -12,7 +12,7 @@ import qualified Main.Queries as Q main = - IO.acquireConnection settings >>= either (fail . show) use + Connection.acquire settings >>= either (fail . show) use where settings = HS.settings host port user password database @@ -51,4 +51,4 @@ main = query params query = {-# SCC "query" #-} (=<<) (either (fail . show) pure) $ - IO.session connection $ Hasql.Session.query params query + flip Hasql.Session.run connection $ Hasql.Session.query params query diff --git a/hasql.cabal b/hasql.cabal index b021a0bf66..7e2b78ea61 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.16 + 0.17 category: Hasql, Database, PostgreSQL synopsis: @@ -51,6 +51,7 @@ library Hasql.Private.IO Hasql.Private.Query Hasql.Private.Session + Hasql.Private.Connection Hasql.Private.PreparedStatementRegistry Hasql.Commands Hasql.Decoders.Array @@ -66,7 +67,7 @@ library Hasql.Decoders Hasql.Encoders Hasql.Settings - Hasql.IO + Hasql.Connection Hasql.Query Hasql.Session build-depends: @@ -92,6 +93,7 @@ library contravariant-extras == 0.3.*, contravariant >= 1.3 && < 2, either >= 4.4.1 && < 5, + mtl >= 2 && < 3, transformers >= 0.3 && < 0.5, -- errors: loch-th == 0.2.*, diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs new file mode 100644 index 0000000000..ad4ef1e030 --- /dev/null +++ b/library/Hasql/Connection.hs @@ -0,0 +1,12 @@ +-- | +-- This module provides a low-level effectful API dealing with the connections to the database. +module Hasql.Connection +( + Connection, + AcquisitionError(..), + acquire, + release, +) +where + +import Hasql.Private.Connection diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs deleted file mode 100644 index 2710953dd2..0000000000 --- a/library/Hasql/IO.hs +++ /dev/null @@ -1,132 +0,0 @@ --- | --- This module provides a low-level effectful API dealing with the connections to the database. -module Hasql.IO -( - -- * Connection - Connection, - ConnectionError(..), - acquireConnection, - releaseConnection, - -- * Session - SessionError(..), - ResultError(..), - RowError(..), - session, -) -where - -import Hasql.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Private.IO as IO -import qualified Hasql.Private.Session as Session -import qualified Hasql.Settings as Settings - - --- | --- A single connection to the database. -data Connection = - Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry - --- | --- Possible details of the connection acquistion error. -type ConnectionError = - Maybe ByteString - --- | --- Acquire a connection using the provided settings encoded according to the PostgreSQL format. -acquireConnection :: Settings.Settings -> IO (Either ConnectionError Connection) -acquireConnection settings = - {-# SCC "acquireConnection" #-} - runEitherT $ do - pqConnection <- lift (IO.acquireConnection settings) - lift (IO.checkConnectionStatus pqConnection) >>= traverse left - lift (IO.initConnection pqConnection) - integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) - registry <- lift (IO.acquirePreparedStatementRegistry) - pure (Connection pqConnection integerDatetimes registry) - --- | --- Release the connection. -releaseConnection :: Connection -> IO () -releaseConnection (Connection pqConnection _ _) = - LibPQ.finish pqConnection - - --- * Session -------------------------- - --- | --- An error of some command in the session. -data SessionError = - -- | - -- An error on the client-side, - -- with a message generated by the \"libpq\" library. - -- Usually indicates problems with connection. - ClientError !(Maybe ByteString) | - -- | - -- Some error with a command result. - ResultError !ResultError - deriving (Show, Eq) - --- | --- An error with a command result. -data ResultError = - -- | - -- An error reported by the DB. - -- Consists of the following: Code, message, details, hint. - -- - -- * __Code__. - -- The SQLSTATE code for the error. - -- It's recommended to use - -- - -- to work with those. - -- - -- * __Message__. - -- The primary human-readable error message (typically one line). Always present. - -- - -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. - -- Might run to multiple lines. - ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | - -- | - -- The database returned an unexpected result. - -- Indicates an improper statement or a schema mismatch. - UnexpectedResult !Text | - -- | - -- An error of the row reader, preceded by the index of the row. - RowError !Int !RowError | - -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows !Int - deriving (Show, Eq) - --- | --- An error during the decoding of a specific row. -data RowError = - -- | - -- Appears on the attempt to parse more columns than there are in the result. - EndOfInput | - -- | - -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNull | - -- | - -- Appears when a wrong value parser is used. - -- Comes with the error details. - ValueError !Text - deriving (Show, Eq) - --- | --- Executes a bunch of commands on the provided connection. -session :: Connection -> Session.Session a -> IO (Either SessionError a) -session (Connection pqConnection integerDatetimes registry) (Session.Session impl) = - fmap (mapLeft unsafeCoerce) $ - runEitherT $ - runReaderT impl (pqConnection, integerDatetimes, registry) - diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index b7e71eb74b..b3f8488d72 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -27,6 +27,10 @@ import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Data.Functor.Identity as Exports +-- mtl +------------------------- +import Control.Monad.Error.Class as Exports (MonadError (..)) + -- data-default-class ------------------------- import Data.Default.Class as Exports diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs new file mode 100644 index 0000000000..1deeff10dc --- /dev/null +++ b/library/Hasql/Private/Connection.hs @@ -0,0 +1,41 @@ +-- | +-- This module provides a low-level effectful API dealing with the connections to the database. +module Hasql.Private.Connection +where + +import Hasql.Prelude +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Private.IO as IO +import qualified Hasql.Settings as Settings + + +-- | +-- A single connection to the database. +data Connection = + Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry + +-- | +-- Possible details of the connection acquistion error. +type AcquisitionError = + Maybe ByteString + +-- | +-- Acquire a connection using the provided settings encoded according to the PostgreSQL format. +acquire :: Settings.Settings -> IO (Either AcquisitionError Connection) +acquire settings = + {-# SCC "acquire" #-} + runEitherT $ do + pqConnection <- lift (IO.acquireConnection settings) + lift (IO.checkConnectionStatus pqConnection) >>= traverse left + lift (IO.initConnection pqConnection) + integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) + registry <- lift (IO.acquirePreparedStatementRegistry) + pure (Connection pqConnection integerDatetimes registry) + +-- | +-- Release the connection. +release :: Connection -> IO () +release (Connection pqConnection _ _) = + LibPQ.finish pqConnection + diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs index 80a54d3125..6d413e4646 100644 --- a/library/Hasql/Private/Query.hs +++ b/library/Hasql/Private/Query.hs @@ -3,8 +3,8 @@ where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Private.IO as IO +import qualified Hasql.Private.Connection as Connection import qualified Hasql.Decoders.Results as Decoders.Results import qualified Hasql.Encoders.Params as Encoders.Params @@ -34,13 +34,7 @@ import qualified Hasql.Encoders.Params as Encoders.Params -- else insert -< params -- @ newtype Query a b = - Query - (Kleisli - (ReaderT - (LibPQ.Connection, Bool, PreparedStatementRegistry.PreparedStatementRegistry) - (EitherT Decoders.Results.Error IO)) - a - b) + Query (Kleisli (ReaderT Connection.Connection (EitherT Decoders.Results.Error IO)) a b) deriving (Category, Arrow, ArrowChoice, ArrowLoop, ArrowApply) instance Functor (Query a) where @@ -58,7 +52,7 @@ instance Profunctor Query where statement :: ByteString -> Encoders.Params.Params a -> Decoders.Results.Results b -> Bool -> Query a b statement template encoder decoder preparable = - Query $ Kleisli $ \params -> ReaderT $ \(pqConnection, integerDatetimes, registry) -> do + Query $ Kleisli $ \params -> ReaderT $ \(Connection.Connection pqConnection integerDatetimes registry) -> do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params EitherT $ IO.getResults pqConnection integerDatetimes decoder diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index b84e1e9f13..09d0ac8aea 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -7,18 +7,21 @@ import qualified Hasql.Decoders.Results as Decoders.Results import qualified Hasql.Settings as Settings import qualified Hasql.Private.IO as IO import qualified Hasql.Private.Query as Query -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Private.Connection as Connection -- | -- A batch of actions to be executed in the context of a database connection. newtype Session a = - Session - (ReaderT - (LibPQ.Connection, Bool, PreparedStatementRegistry.PreparedStatementRegistry) - (EitherT Decoders.Results.Error IO) - a) - deriving (Functor, Applicative, Monad) + Session (ReaderT Connection.Connection (EitherT Error IO) a) + deriving (Functor, Applicative, Monad, MonadError Error) + +-- | +-- Executes a bunch of commands on the provided connection. +run :: Session a -> Connection.Connection -> IO (Either Error a) +run (Session impl) connection = + runEitherT $ + runReaderT impl connection -- | -- Possibly a multi-statement query, @@ -26,12 +29,81 @@ newtype Session a = -- nor can any results of it be collected. sql :: ByteString -> Session () sql sql = - Session $ ReaderT $ \(pqConnection, integerDatetimes, registry) -> - EitherT $ IO.sendNonparametricQuery pqConnection sql + Session $ ReaderT $ \(Connection.Connection pqConnection integerDatetimes registry) -> + EitherT $ fmap (mapLeft unsafeCoerce) $ IO.sendNonparametricQuery pqConnection sql -- | -- Parameters and a specification of the parametric query to apply them to. query :: a -> Query.Query a b -> Session b query input (Query.Query (Kleisli impl)) = - Session (impl input) + Session $ unsafeCoerce $ impl input + +-- * Error +------------------------- + +-- | +-- An error of some command in the session. +data Error = + -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with connection. + ClientError !(Maybe ByteString) | + -- | + -- Some error with a command result. + ResultError !ResultError + deriving (Show, Eq) + +-- | +-- An error with a command result. +data ResultError = + -- | + -- An error reported by the DB. + -- Consists of the following: Code, message, details, hint. + -- + -- * __Code__. + -- The SQLSTATE code for the error. + -- It's recommended to use + -- + -- to work with those. + -- + -- * __Message__. + -- The primary human-readable error message (typically one line). Always present. + -- + -- * __Details__. + -- An optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * __Hint__. + -- An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. + -- Might run to multiple lines. + ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | + -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult !Text | + -- | + -- An error of the row reader, preceded by the index of the row. + RowError !Int !RowError | + -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows !Int + deriving (Show, Eq) + +-- | +-- An error during the decoding of a specific row. +data RowError = + -- | + -- Appears on the attempt to parse more columns than there are in the result. + EndOfInput | + -- | + -- Appears on the attempt to parse a @NULL@ as some value. + UnexpectedNull | + -- | + -- Appears when a wrong value parser is used. + -- Comes with the error details. + ValueError !Text + deriving (Show, Eq) diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 5ed6734833..29aa2b90d8 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -3,6 +3,11 @@ module Hasql.Session Session.Session, Session.sql, Session.query, + -- * Execution + Session.Error(..), + Session.ResultError(..), + Session.RowError(..), + Session.run, ) where diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 251983744e..e6df51b04a 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,7 +1,7 @@ module Main.DSL where import Main.Prelude -import qualified Hasql.IO as IO +import qualified Hasql.Connection as Connection import qualified Hasql.Query as HQ import qualified Hasql.Settings as HS import qualified Hasql.Encoders as HE @@ -10,12 +10,12 @@ import qualified Hasql.Session newtype Session a = - Session (ReaderT IO.Connection (EitherT IO.SessionError IO) a) + Session (ReaderT Connection.Connection (EitherT Hasql.Session.Error IO) a) deriving (Functor, Applicative, Monad, MonadIO) data SessionError = - ConnectionError (IO.ConnectionError) | - SessionError (IO.SessionError) + ConnectionError (Maybe ByteString) | + SessionError (Hasql.Session.Error) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) @@ -23,7 +23,7 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ IO.acquireConnection settings + EitherT $ fmap (mapLeft ConnectionError) $ Connection.acquire settings where settings = HS.settings host port user password database @@ -37,8 +37,8 @@ session (Session impl) = bimapEitherT SessionError id $ runReaderT impl connection release connection = - lift $ IO.releaseConnection connection + lift $ Connection.release connection query :: a -> HQ.Query a b -> Session b query params query = - Session $ ReaderT $ \connection -> EitherT $ IO.session connection $ Hasql.Session.query params query + Session $ ReaderT $ \connection -> EitherT $ flip Hasql.Session.run connection $ Hasql.Session.query params query From a5d87241149572be3dcf165ac02707c11c1c09f9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Dec 2015 19:05:23 +0500 Subject: [PATCH 0292/1204] Updates --- hasql-transaction.cabal | 5 +-- library/Hasql/Transaction.hs | 52 +++++++++++++++------------- library/Hasql/Transaction/Prelude.hs | 9 +++++ library/Hasql/Transaction/Queries.hs | 12 +++---- 4 files changed, 46 insertions(+), 32 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 027c193cbc..3f930277e0 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.3.1 + 0.4 category: Hasql, Database, PostgreSQL synopsis: @@ -47,7 +47,7 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.15 && < 0.16, + hasql >= 0.17 && < 0.18, -- database: postgresql-error-codes >= 1 && < 2, -- data: @@ -57,6 +57,7 @@ library contravariant >= 1.3 && < 2, contravariant-extras >= 0.3 && < 0.4, either >= 4.4.1 && < 5, + mtl >= 2 && < 3, transformers >= 0.3 && < 0.5, -- general: base-prelude >= 0.1.19 && < 0.2 diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 4e7b0ab873..b347b0643c 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -6,13 +6,14 @@ module Hasql.Transaction -- * Transaction monad Transaction, run, + sql, query, ) where import Hasql.Transaction.Prelude -import qualified Hasql.Connection as Connection import qualified Hasql.Query as Query +import qualified Hasql.Session as Session import qualified Hasql.Transaction.Queries as Queries import qualified PostgreSQL.ErrorCodes as ErrorCodes @@ -24,7 +25,7 @@ import qualified PostgreSQL.ErrorCodes as ErrorCodes -- while automatically retrying the transaction in case of conflicts. -- Thus this abstraction closely reproduces the behaviour of 'STM'. newtype Transaction a = - Transaction (ReaderT (Connection.Connection, IORef Int) (EitherT Query.ResultsError IO) a) + Transaction (Session.Session a) deriving (Functor, Applicative, Monad) -- | @@ -58,25 +59,20 @@ data IsolationLevel = -- | -- Execute the transaction using the provided isolation level, mode and database connection. {-# INLINABLE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> Connection.Connection -> IO (Either Query.ResultsError a) -run (Transaction tx) isolation mode connection = - runEitherT $ do - EitherT $ Query.run (Queries.beginTransaction mode') () connection - counterRef <- lift $ newIORef 0 - resultEither <- lift $ runEitherT $ runReaderT tx (connection, counterRef) +run :: Transaction a -> IsolationLevel -> Mode -> Session.Session a +run (Transaction session) isolation mode = + do + Session.query () (Queries.beginTransaction mode') + resultEither <- tryError session case resultEither of - Left (Query.ResultError (Query.ServerError code _ _ _)) - | code == ErrorCodes.serialization_failure -> - EitherT $ run (Transaction tx) isolation mode connection - _ -> do - result <- EitherT $ pure resultEither - let - query = - if commit - then Queries.commitTransaction - else Queries.abortTransaction - in - EitherT $ Query.run query () connection + Left error -> + case error of + Session.ResultError (Session.ServerError code _ _ _) | code == ErrorCodes.serialization_failure -> + run (Transaction session) isolation mode + _ -> + throwError error + Right result -> do + Session.query () $ bool Queries.abortTransaction Queries.commitTransaction commit pure result where mode' = @@ -88,9 +84,17 @@ run (Transaction tx) isolation mode connection = WriteWithoutCommitting -> (True, False) -- | --- Execute a query in the context of a transaction. -{-# INLINABLE query #-} +-- Possibly a multi-statement query, +-- which however cannot be parameterized or prepared, +-- nor can any results of it be collected. +{-# INLINE sql #-} +sql :: ByteString -> Transaction () +sql sql = + Transaction $ Session.sql sql + +-- | +-- Parameters and a specification of the parametric query to apply them to. +{-# INLINE query #-} query :: a -> Query.Query a b -> Transaction b query params query = - Transaction $ ReaderT $ \(connection, _) -> EitherT $ - Query.run query params connection + Transaction $ Session.query params query diff --git a/library/Hasql/Transaction/Prelude.hs b/library/Hasql/Transaction/Prelude.hs index dd7a8aa1fc..543ca22524 100644 --- a/library/Hasql/Transaction/Prelude.hs +++ b/library/Hasql/Transaction/Prelude.hs @@ -1,6 +1,7 @@ module Hasql.Transaction.Prelude ( module Exports, + tryError, ) where @@ -17,6 +18,10 @@ import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +-- mtl +------------------------- +import Control.Monad.Error.Class as Exports (MonadError (..)) + -- contravariant ------------------------- import Data.Functor.Contravariant as Exports @@ -34,3 +39,7 @@ import Data.Either.Combinators as Exports -- bytestring ------------------------- import Data.ByteString as Exports (ByteString) + +tryError :: MonadError e m => m a -> m (Either e a) +tryError m = + catchError (liftM Right m) (return . Left) diff --git a/library/Hasql/Transaction/Queries.hs b/library/Hasql/Transaction/Queries.hs index 41845495b0..024499bb56 100644 --- a/library/Hasql/Transaction/Queries.hs +++ b/library/Hasql/Transaction/Queries.hs @@ -21,7 +21,7 @@ type TransactionMode = beginTransaction :: TransactionMode -> HQ.Query () () beginTransaction (isolation, write) = - HQ.Query sql HE.unit HD.unit True + HQ.statement sql HE.unit HD.unit True where sql = TB.toByteString $ @@ -43,11 +43,11 @@ beginTransaction (isolation, write) = commitTransaction :: HQ.Query () () commitTransaction = - HQ.Query "commit" HE.unit HD.unit True + HQ.statement "commit" HE.unit HD.unit True abortTransaction :: HQ.Query () () abortTransaction = - HQ.Query "abort" HE.unit HD.unit True + HQ.statement "abort" HE.unit HD.unit True -- * Streaming @@ -55,7 +55,7 @@ abortTransaction = declareCursor :: ByteString -> ByteString -> HE.Params a -> HQ.Query a () declareCursor name sql encoder = - HQ.Query sql' encoder HD.unit False + HQ.statement sql' encoder HD.unit False where sql' = TB.toByteString $ @@ -63,11 +63,11 @@ declareCursor name sql encoder = closeCursor :: HQ.Query ByteString () closeCursor = - HQ.Query "CLOSE $1" (HE.value HE.bytea) HD.unit True + HQ.statement "CLOSE $1" (HE.value HE.bytea) HD.unit True fetchFromCursor :: (b -> a -> b) -> b -> HD.Row a -> HQ.Query (Int64, ByteString) b fetchFromCursor step init rowDec = - HQ.Query sql encoder decoder True + HQ.statement sql encoder decoder True where sql = "FETCH FORWARD $1 FROM $2" From 032f3be9f5d3fc9d6b472554fc4f0dc643cfd7fc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 16:23:39 +0500 Subject: [PATCH 0293/1204] Return ConnectionError --- hasql.cabal | 2 +- library/Hasql/Connection.hs | 2 +- library/Hasql/Private/Connection.hs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7e2b78ea61..f76c0b4171 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.17 + 0.18 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index ad4ef1e030..faea21ef04 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -3,7 +3,7 @@ module Hasql.Connection ( Connection, - AcquisitionError(..), + ConnectionError(..), acquire, release, ) diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 1deeff10dc..546edef34d 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -17,12 +17,12 @@ data Connection = -- | -- Possible details of the connection acquistion error. -type AcquisitionError = +type ConnectionError = Maybe ByteString -- | -- Acquire a connection using the provided settings encoded according to the PostgreSQL format. -acquire :: Settings.Settings -> IO (Either AcquisitionError Connection) +acquire :: Settings.Settings -> IO (Either ConnectionError Connection) acquire settings = {-# SCC "acquire" #-} runEitherT $ do From 26133462fd967a4bf328b6a82d54a96cf441045a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 16:26:52 +0500 Subject: [PATCH 0294/1204] Update Hasql --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index eaa9bc9e1c..457f87c61b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.1 + 0.1.1 category: Hasql, Database, PostgreSQL synopsis: @@ -49,7 +49,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.15 && < 0.16, + hasql >= 0.18 && < 0.19, -- data: time >= 1.4 && < 2, -- general: From 8d5db98a580a750830de69af12c3daa4e3efbf12 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 16:31:34 +0500 Subject: [PATCH 0295/1204] Relax the Hasql dep --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 3f930277e0..edf2a3f8d1 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4 + 0.4.1 category: Hasql, Database, PostgreSQL synopsis: @@ -47,7 +47,7 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.17 && < 0.18, + hasql >= 0.17 && < 0.19, -- database: postgresql-error-codes >= 1 && < 2, -- data: From 08427ba6b9dac070160fe23dbf47f44b35dfd64d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 16:56:26 +0500 Subject: [PATCH 0296/1204] Add the Handle pattern implementation. --- hasql-pool.cabal | 3 +- library/Hasql/Pool/Handle.hs | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 library/Hasql/Pool/Handle.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 457f87c61b..0eed26789e 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.1.1 + 0.1.2 category: Hasql, Database, PostgreSQL synopsis: @@ -45,6 +45,7 @@ library Hasql.Pool.Prelude exposed-modules: Hasql.Pool + Hasql.Pool.Handle build-depends: -- resources: resource-pool >= 0.2 && < 0.3, diff --git a/library/Hasql/Pool/Handle.hs b/library/Hasql/Pool/Handle.hs new file mode 100644 index 0000000000..18b03d5aff --- /dev/null +++ b/library/Hasql/Pool/Handle.hs @@ -0,0 +1,57 @@ +-- | +-- Handle-pattern API. +module Hasql.Pool.Handle +( + Handle, + with, + -- * Usage + Error(..), + session, +) +where + +import Hasql.Pool.Prelude hiding (Handle) +import qualified Hasql.Pool +import qualified Hasql.Connection +import qualified Hasql.Session +import qualified Hasql.Settings + + +-- | +-- A temporary handle to the pool. +newtype Handle s = + Handle (forall a. Hasql.Session.Session a -> IO (Either Error a)) + +-- | +-- Given the pool-size, timeout and connection settings +-- executes an IO function on a temporary handle, +-- releasing it automatically afterwards. +with :: Int -> NominalDiffTime -> Hasql.Settings.Settings -> (forall s. Handle s -> IO a) -> IO a +with size timeout settings handler = + acquire >>= \pool -> use pool <* release pool + where + acquire = + Hasql.Pool.acquire size timeout settings + use pool = + handler $ Handle $ \session -> + fmap (either (Left . Left) (either (Left . Right) Right)) $ + Hasql.Pool.use pool $ + Hasql.Session.run session + release pool = + Hasql.Pool.release pool + + +-- * Usage +------------------------- + +-- | +-- Error of executing a session on a connection from the pool. +type Error = + Either Hasql.Connection.ConnectionError Hasql.Session.Error + +-- | +-- Executes a session on a connection from the pool, +-- using the provided temporary handle to it. +session :: Handle s -> Hasql.Session.Session a -> IO (Either Error a) +session (Handle runSession) session = + runSession session From 15be208dd55c158dae27baec4b0edf7dae4044cc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 17:07:14 +0500 Subject: [PATCH 0297/1204] Move Settings to Connection --- benchmark/Main.hs | 7 +++---- hasql.cabal | 4 ++-- library/Hasql/Connection.hs | 3 +++ tasty/Main/DSL.hs | 11 +++++------ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/benchmark/Main.hs b/benchmark/Main.hs index f1439f3c36..9ae6cedb9a 100644 --- a/benchmark/Main.hs +++ b/benchmark/Main.hs @@ -2,8 +2,7 @@ module Main where import Main.Prelude import Criterion.Main -import qualified Hasql.Connection as Connection -import qualified Hasql.Settings as HS +import qualified Hasql.Connection as HC import qualified Hasql.Query as HQ import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD @@ -12,10 +11,10 @@ import qualified Main.Queries as Q main = - Connection.acquire settings >>= either (fail . show) use + HC.acquire settings >>= either (fail . show) use where settings = - HS.settings host port user password database + HC.settings host port user password database where host = "localhost" port = 5432 diff --git a/hasql.cabal b/hasql.cabal index f76c0b4171..902c4f991c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.18 + 0.19 category: Hasql, Database, PostgreSQL synopsis: @@ -53,6 +53,7 @@ library Hasql.Private.Session Hasql.Private.Connection Hasql.Private.PreparedStatementRegistry + Hasql.Settings Hasql.Commands Hasql.Decoders.Array Hasql.Decoders.Composite @@ -66,7 +67,6 @@ library exposed-modules: Hasql.Decoders Hasql.Encoders - Hasql.Settings Hasql.Connection Hasql.Query Hasql.Session diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index faea21ef04..a689bc9442 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -6,7 +6,10 @@ module Hasql.Connection ConnectionError(..), acquire, release, + Settings, + settings, ) where import Hasql.Private.Connection +import Hasql.Settings diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index e6df51b04a..03c3636e6b 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,16 +1,15 @@ module Main.DSL where import Main.Prelude -import qualified Hasql.Connection as Connection +import qualified Hasql.Connection as HC import qualified Hasql.Query as HQ -import qualified Hasql.Settings as HS import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD import qualified Hasql.Session newtype Session a = - Session (ReaderT Connection.Connection (EitherT Hasql.Session.Error IO) a) + Session (ReaderT HC.Connection (EitherT Hasql.Session.Error IO) a) deriving (Functor, Applicative, Monad, MonadIO) data SessionError = @@ -23,10 +22,10 @@ session (Session impl) = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ Connection.acquire settings + EitherT $ fmap (mapLeft ConnectionError) $ HC.acquire settings where settings = - HS.settings host port user password database + HC.settings host port user password database where host = "localhost" port = 5432 @@ -37,7 +36,7 @@ session (Session impl) = bimapEitherT SessionError id $ runReaderT impl connection release connection = - lift $ Connection.release connection + lift $ HC.release connection query :: a -> HQ.Query a b -> Session b query params query = From d4757f3bbcf0aeabdac8163872f5380f3530efbe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 20:35:21 +0500 Subject: [PATCH 0298/1204] MonadIO for Session --- hasql.cabal | 2 +- library/Hasql/Private/Session.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 902c4f991c..2d6eaf8380 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19 + 0.19.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 09d0ac8aea..a87a17f8d3 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -14,7 +14,7 @@ import qualified Hasql.Private.Connection as Connection -- A batch of actions to be executed in the context of a database connection. newtype Session a = Session (ReaderT Connection.Connection (EitherT Error IO) a) - deriving (Functor, Applicative, Monad, MonadError Error) + deriving (Functor, Applicative, Monad, MonadError Error, MonadIO) -- | -- Executes a bunch of commands on the provided connection. From 2dcea34610926f8916ff0649c11dfae5715c9566 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 20:41:23 +0500 Subject: [PATCH 0299/1204] Update Hasql --- hasql-pool.cabal | 4 ++-- library/Hasql/Pool.hs | 3 +-- library/Hasql/Pool/Handle.hs | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 0eed26789e..e432ed780a 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.1.2 + 0.3 category: Hasql, Database, PostgreSQL synopsis: @@ -50,7 +50,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.18 && < 0.19, + hasql >= 0.19 && < 0.20, -- data: time >= 1.4 && < 2, -- general: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 5762a49a30..9f5f5f5105 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -9,7 +9,6 @@ where import Hasql.Pool.Prelude import qualified Hasql.Connection -import qualified Hasql.Settings import qualified Data.Pool @@ -21,7 +20,7 @@ newtype Pool = -- | -- Given the pool-size, timeout and connection settings -- create a connection-pool. -acquire :: Int -> NominalDiffTime -> Hasql.Settings.Settings -> IO Pool +acquire :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> IO Pool acquire size timeout connectionSettings = fmap Pool $ Data.Pool.createPool acquire release stripes timeout size diff --git a/library/Hasql/Pool/Handle.hs b/library/Hasql/Pool/Handle.hs index 18b03d5aff..16a865bcad 100644 --- a/library/Hasql/Pool/Handle.hs +++ b/library/Hasql/Pool/Handle.hs @@ -14,7 +14,6 @@ import Hasql.Pool.Prelude hiding (Handle) import qualified Hasql.Pool import qualified Hasql.Connection import qualified Hasql.Session -import qualified Hasql.Settings -- | @@ -26,7 +25,7 @@ newtype Handle s = -- Given the pool-size, timeout and connection settings -- executes an IO function on a temporary handle, -- releasing it automatically afterwards. -with :: Int -> NominalDiffTime -> Hasql.Settings.Settings -> (forall s. Handle s -> IO a) -> IO a +with :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> (forall s. Handle s -> IO a) -> IO a with size timeout settings handler = acquire >>= \pool -> use pool <* release pool where From 0e34946378aca607f2ce1a913cfcd0b61a0af34d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Dec 2015 20:48:31 +0500 Subject: [PATCH 0300/1204] Update Hasql --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index edf2a3f8d1..0a619a0742 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.1 + 0.4.2 category: Hasql, Database, PostgreSQL synopsis: @@ -47,7 +47,7 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.17 && < 0.19, + hasql >= 0.17 && < 0.20, -- database: postgresql-error-codes >= 1 && < 2, -- data: From eeff72e2f6f7e0742c8b931288223719c9ced338 Mon Sep 17 00:00:00 2001 From: Leon P Smith Date: Sat, 26 Dec 2015 01:32:03 -0500 Subject: [PATCH 0301/1204] Add rudimentary tracking of explicit disconnects No guarantee that using a connection after it has been closed will result in a sensible operation, but at least it won't result in a use-after-free memory fault now. Also, this should make this interface relatively safe to use concurrently. --- library/Hasql/Commands.hs | 2 -- library/Hasql/Connection/Impl.hs | 22 +++++++++++++---- library/Hasql/Query.hs | 41 ++++++++++++++++---------------- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs index f736114290..b7469f7f8d 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Commands.hs @@ -29,5 +29,3 @@ setEncodersToUTF8 = setMinClientMessagesToWarning :: Commands setMinClientMessagesToWarning = Commands (pure "SET client_min_messages TO WARNING") - - diff --git a/library/Hasql/Connection/Impl.hs b/library/Hasql/Connection/Impl.hs index fac8c295d8..7fc19aecea 100644 --- a/library/Hasql/Connection/Impl.hs +++ b/library/Hasql/Connection/Impl.hs @@ -1,7 +1,10 @@ +{-# OPTIONS_GHC -funbox-strict-fields #-} + module Hasql.Connection.Impl where import Hasql.Prelude +import Control.Concurrent.MVar (newMVar, swapMVar) import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.IO as IO @@ -10,7 +13,7 @@ import qualified Hasql.IO as IO -- | -- A single connection to the database. data Connection = - Connection !LibPQ.Connection !Bool !PreparedStatementRegistry.PreparedStatementRegistry + Connection !(MVar LibPQ.Connection) !Bool !PreparedStatementRegistry.PreparedStatementRegistry -- | -- Possible details of the connection acquistion error. @@ -21,17 +24,26 @@ type ConnectionError = -- Acquire a connection using the provided settings encoded according to the PostgreSQL format. acquire :: ByteString -> IO (Either ConnectionError Connection) acquire settings = - {-# SCC "acquire" #-} + {-# SCC "acquire" #-} runEitherT $ do pqConnection <- lift (IO.acquireConnection settings) lift (IO.checkConnectionStatus pqConnection) >>= traverse left lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) registry <- lift (IO.acquirePreparedStatementRegistry) - pure (Connection pqConnection integerDatetimes registry) + pqConnectionRef <- lift (newMVar pqConnection) + pure (Connection pqConnectionRef integerDatetimes registry) -- | -- Release the connection. release :: Connection -> IO () -release (Connection pqConnection _ _) = - LibPQ.finish pqConnection +release (Connection pqConnectionRef _ _) = + mask_ $ do + nullConnection <- LibPQ.newNullConnection + pqConnection <- swapMVar pqConnectionRef nullConnection + IO.releaseConnection pqConnection + +{-# INLINE withConnectionRef #-} +withConnectionRef :: MVar LibPQ.Connection -> (LibPQ.Connection -> IO a) -> IO a +withConnectionRef = + withMVar diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index bb59f808ba..7fbd2bd4f6 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -37,26 +37,26 @@ data ResultsError = -- | -- Decoder error details. data ResultError = - -- | + -- | -- An error reported by the DB. -- Consists of the following: Code, message, details, hint. - -- + -- -- * __Code__. -- The SQLSTATE code for the error. -- It's recommended to use -- -- to work with those. - -- + -- -- * __Message__. -- The primary human-readable error message (typically one line). Always present. - -- + -- -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. + -- An optional secondary error message carrying more detail about the problem. -- Might run to multiple lines. - -- + -- -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) -- rather than hard facts. -- Might run to multiple lines. ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | @@ -90,23 +90,23 @@ data RowError = -- | -- A specification of a strictly single-statement query, which can be parameterized and prepared. --- +-- -- Consists of the following: --- +-- -- * SQL template, -- * params encoder, -- * result decoder, -- * a flag, determining whether it should be prepared. --- +-- -- The SQL template must be formatted according to Postgres' standard, -- with any non-ASCII characters of the template encoded using UTF-8. -- According to the format, -- parameters must be referred to using the positional notation, as in the following: -- @$1@, @$2@, @$3@ and etc. -- Those references must be used to refer to the values of the 'Encoders.Params' encoder. --- +-- -- Following is an example of the declaration of a prepared statement with its associated codecs. --- +-- -- @ -- selectSum :: Hasql.'Hasql.Query' (Int64, Int64) Int64 -- selectSum = @@ -120,10 +120,10 @@ data RowError = -- decoder = -- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.value' Hasql.Decoders.'Hasql.Decoders.int8') -- @ --- +-- -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. --- +-- data Query a b = Query !ByteString !(Encoders.Params a) !(Decoders.Result b) !Bool deriving (Functor) @@ -142,11 +142,12 @@ instance Profunctor Query where -- | -- Execute the query, producing either a deserialization failure or a successful result. run :: Query a b -> a -> Connection.Connection -> IO (Either ResultsError b) -run (Query template encoder decoder preparable) params (Connection.Connection pqConnection integerDatetimes registry) = - {-# SCC "query" #-} - fmap (mapLeft coerceResultsError) $ runEitherT $ do - EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params - EitherT $ IO.getResults pqConnection integerDatetimes (coerceDecoder decoder) +run (Query template encoder decoder preparable) params (Connection.Connection pqConnectionRef integerDatetimes registry) = + {-# SCC "query" #-} + Connection.withConnectionRef pqConnectionRef $ \pqConnection -> + fmap (mapLeft coerceResultsError) $ runEitherT $ do + EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params + EitherT $ IO.getResults pqConnection integerDatetimes (coerceDecoder decoder) -- | -- WARNING: We need to take special care that the structure of From 013506a690e092c3cd7cbc6f8de337da4aeefd78 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 28 Dec 2015 12:14:42 +0500 Subject: [PATCH 0302/1204] Minor corrections --- library/Hasql/Connection/Impl.hs | 8 -------- library/Hasql/Query.hs | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/library/Hasql/Connection/Impl.hs b/library/Hasql/Connection/Impl.hs index 7fc19aecea..31808c6ee1 100644 --- a/library/Hasql/Connection/Impl.hs +++ b/library/Hasql/Connection/Impl.hs @@ -1,10 +1,7 @@ -{-# OPTIONS_GHC -funbox-strict-fields #-} - module Hasql.Connection.Impl where import Hasql.Prelude -import Control.Concurrent.MVar (newMVar, swapMVar) import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.IO as IO @@ -42,8 +39,3 @@ release (Connection pqConnectionRef _ _) = nullConnection <- LibPQ.newNullConnection pqConnection <- swapMVar pqConnectionRef nullConnection IO.releaseConnection pqConnection - -{-# INLINE withConnectionRef #-} -withConnectionRef :: MVar LibPQ.Connection -> (LibPQ.Connection -> IO a) -> IO a -withConnectionRef = - withMVar diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 7fbd2bd4f6..dfef7fdcc3 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -144,7 +144,7 @@ instance Profunctor Query where run :: Query a b -> a -> Connection.Connection -> IO (Either ResultsError b) run (Query template encoder decoder preparable) params (Connection.Connection pqConnectionRef integerDatetimes registry) = {-# SCC "query" #-} - Connection.withConnectionRef pqConnectionRef $ \pqConnection -> + withMVar pqConnectionRef $ \pqConnection -> fmap (mapLeft coerceResultsError) $ runEitherT $ do EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template (coerceEncoder encoder) preparable params EitherT $ IO.getResults pqConnection integerDatetimes (coerceDecoder decoder) From 81f78acf0d90913360ec2d991b246daed948ca81 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 28 Dec 2015 12:16:44 +0500 Subject: [PATCH 0303/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 51f3df23c1..d2f4b19ccf 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.15.0.2 + 0.15.1 category: Hasql, Database, PostgreSQL synopsis: From 5016527f0f121d57e2eef9d405a1ac3c3df99473 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 2 Jan 2016 19:00:28 +0500 Subject: [PATCH 0304/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8edf7111f4..98e2dbd677 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # NOTICE -With the recent releases and more to come still, the Hasql ecosystem undergoes major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published until the end of 2015. +With the recent releases and more to come still, the Hasql ecosystem undergoes some major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published during the January of 2016. From b72351902bb258e57f656b23ec76dcf7badae4d5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Jan 2016 09:43:40 +0300 Subject: [PATCH 0305/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 2d6eaf8380..e496af849d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.1 + 0.19.2 category: Hasql, Database, PostgreSQL synopsis: From 1871bde72d95ddb28a6d26e0091d8421c2ae0383 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 12 Jan 2016 10:55:36 +0300 Subject: [PATCH 0306/1204] Add the "unknown" encoder --- hasql.cabal | 2 +- library/Hasql/Encoders.hs | 18 ++++++++++++++++++ library/Hasql/PTI.hs | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index e496af849d..939e469c6c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.2 + 0.19.3 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index a609d319b7..d2036c12ec 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -29,6 +29,7 @@ module Hasql.Encoders json, array, enum, + unknown, -- * Array Array, arrayValue, @@ -321,6 +322,23 @@ enum :: (a -> Text) -> Value a enum mapping = Value (Value.unsafePTI PTI.text (const (Encoder.enum mapping))) +-- | +-- Identifies the value with the PostgreSQL's \"unknown\" type, +-- thus leaving it up to Postgres to infer the actual type of the value. +-- +-- The bytestring needs to be encoded according to the Postgres\' binary format +-- of the type it expects. +-- +-- Essentially this is a low-level hook for encoding of values with custom codecs. +-- The +-- +-- library will provide you with the toolchain. +-- +{-# INLINABLE unknown #-} +unknown :: Value ByteString +unknown = + Value (Value.unsafePTI PTI.unknown (const Encoder.bytea_strict)) + -- ** Instances ------------------------- diff --git a/library/Hasql/PTI.hs b/library/Hasql/PTI.hs index 61cb0a998e..d152e3821a 100644 --- a/library/Hasql/PTI.hs +++ b/library/Hasql/PTI.hs @@ -83,7 +83,7 @@ tsrange = mkPTI 3908 (Just 3909) tstzrange = mkPTI 3910 (Just 3911) tsvector = mkPTI 3614 (Just 3643) txid_snapshot = mkPTI 2970 (Just 2949) -unknown = mkPTI 705 Nothing +unknown = mkPTI 705 (Just 705) uuid = mkPTI 2950 (Just 2951) varbit = mkPTI 1562 (Just 1563) varchar = mkPTI 1043 (Just 1015) From 25a66b2443ba0e67c2eece3ee280e06551b893f7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 12 Jan 2016 17:25:01 +0300 Subject: [PATCH 0307/1204] A hotfix of the inverted integer-datetimes detection bug in encoders --- library/Hasql/Encoders.hs | 10 ++++---- tasty/Main.hs | 51 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index d2036c12ec..457079175c 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -261,35 +261,35 @@ date = {-# INLINABLE timestamp #-} timestamp :: Value LocalTime timestamp = - Value (Value.unsafePTI PTI.timestamp (Prelude.bool Encoder.timestamp_int Encoder.timestamp_float)) + Value (Value.unsafePTI PTI.timestamp (Prelude.bool Encoder.timestamp_float Encoder.timestamp_int)) -- | -- Encoder of @TIMESTAMPTZ@ values. {-# INLINABLE timestamptz #-} timestamptz :: Value UTCTime timestamptz = - Value (Value.unsafePTI PTI.timestamptz (Prelude.bool Encoder.timestamptz_int Encoder.timestamptz_float)) + Value (Value.unsafePTI PTI.timestamptz (Prelude.bool Encoder.timestamptz_float Encoder.timestamptz_int)) -- | -- Encoder of @TIME@ values. {-# INLINABLE time #-} time :: Value TimeOfDay time = - Value (Value.unsafePTI PTI.time (Prelude.bool Encoder.time_int Encoder.time_float)) + Value (Value.unsafePTI PTI.time (Prelude.bool Encoder.time_float Encoder.time_int)) -- | -- Encoder of @TIMETZ@ values. {-# INLINABLE timetz #-} timetz :: Value (TimeOfDay, TimeZone) timetz = - Value (Value.unsafePTI PTI.timetz (Prelude.bool Encoder.timetz_int Encoder.timetz_float)) + Value (Value.unsafePTI PTI.timetz (Prelude.bool Encoder.timetz_float Encoder.timetz_int)) -- | -- Encoder of @INTERVAL@ values. {-# INLINABLE interval #-} interval :: Value DiffTime interval = - Value (Value.unsafePTI PTI.interval (Prelude.bool Encoder.interval_int Encoder.interval_float)) + Value (Value.unsafePTI PTI.interval (Prelude.bool Encoder.interval_float Encoder.interval_int)) -- | -- Encoder of @UUID@ values. diff --git a/tasty/Main.hs b/tasty/Main.hs index 1033cdb974..b6d166b291 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -23,6 +23,57 @@ tree = testCase "Executing the same query twice" $ pure () , + testCase "Interval Encoding" $ + let + actualIO = + DSL.session $ do + let + query = + Query.statement sql encoder decoder True + where + sql = + "select $1 = interval '10 seconds'" + decoder = + (Decoders.singleRow (Decoders.value (Decoders.bool))) + encoder = + Encoders.value (Encoders.interval) + in DSL.query (10 :: DiffTime) query + in actualIO >>= \x -> assertEqual (show x) (Right True) x + , + testCase "Interval Decoding" $ + let + actualIO = + DSL.session $ do + let + query = + Query.statement sql encoder decoder True + where + sql = + "select interval '10 seconds'" + decoder = + (Decoders.singleRow (Decoders.value (Decoders.interval))) + encoder = + Encoders.unit + in DSL.query () query + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x + , + testCase "Interval Encoding/Decoding" $ + let + actualIO = + DSL.session $ do + let + query = + Query.statement sql encoder decoder True + where + sql = + "select $1" + decoder = + (Decoders.singleRow (Decoders.value (Decoders.interval))) + encoder = + Encoders.value (Encoders.interval) + in DSL.query (10 :: DiffTime) query + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x + , testCase "Enum" $ let actualIO = From 239b2b4b92c2c7eb538458bb68ce7d59eb9872da Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 12 Jan 2016 17:25:10 +0300 Subject: [PATCH 0308/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 939e469c6c..51c43e8584 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.3 + 0.19.3.1 category: Hasql, Database, PostgreSQL synopsis: From 4e596bd8f40bd693fe26a34de483ea0dd15e365e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 13 Jan 2016 16:15:35 +0300 Subject: [PATCH 0309/1204] Test Unknown --- tasty/Main.hs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index b6d166b291..c863bce953 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -74,6 +74,37 @@ tree = in DSL.query (10 :: DiffTime) query in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , + testCase "Unknown" $ + let + actualIO = + DSL.session $ do + let + query = + Query.statement sql mempty Decoders.unit True + where + sql = + "drop type if exists mood" + in DSL.query () query + let + query = + Query.statement sql mempty Decoders.unit True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.query () query + let + query = + Query.statement sql encoder decoder True + where + sql = + "select $1 = ('ok' :: mood)" + decoder = + (Decoders.singleRow (Decoders.value (Decoders.bool))) + encoder = + Encoders.value (Encoders.unknown) + in DSL.query "ok" query + in actualIO >>= assertEqual "" (Right True) + , testCase "Enum" $ let actualIO = From 9d3bc1c0d87cebeaf56f2d39e839f535e13d00be Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Jan 2016 18:38:34 +0300 Subject: [PATCH 0310/1204] Update the test DSL --- tasty/Main/DSL.hs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 03c3636e6b..32c19b0aee 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,4 +1,12 @@ -module Main.DSL where +module Main.DSL +( + Session, + SessionError(..), + session, + Hasql.Session.query, + Hasql.Session.sql, +) +where import Main.Prelude import qualified Hasql.Connection as HC @@ -8,17 +16,16 @@ import qualified Hasql.Decoders as HD import qualified Hasql.Session -newtype Session a = - Session (ReaderT HC.Connection (EitherT Hasql.Session.Error IO) a) - deriving (Functor, Applicative, Monad, MonadIO) +type Session = + Hasql.Session.Session data SessionError = - ConnectionError (Maybe ByteString) | + ConnectionError (HC.ConnectionError) | SessionError (Hasql.Session.Error) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) -session (Session impl) = +session session = runEitherT $ acquire >>= \connection -> use connection <* release connection where acquire = @@ -33,11 +40,8 @@ session (Session impl) = password = "" database = "postgres" use connection = - bimapEitherT SessionError id $ - runReaderT impl connection + EitherT $ + fmap (mapLeft SessionError) $ + Hasql.Session.run session connection release connection = lift $ HC.release connection - -query :: a -> HQ.Query a b -> Session b -query params query = - Session $ ReaderT $ \connection -> EitherT $ flip Hasql.Session.run connection $ Hasql.Session.query params query From 129775fe40fcf51437aac374b5cf53f95790b5b8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Jan 2016 18:43:15 +0300 Subject: [PATCH 0311/1204] Reproduce the bug --- tasty/Main.hs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tasty/Main.hs b/tasty/Main.hs index c863bce953..9216a17c46 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -1,6 +1,6 @@ module Main where -import Main.Prelude hiding (assert, isRight, isLeft) +import Main.Prelude hiding (assert) import Test.QuickCheck.Instances import Test.Tasty import Test.Tasty.Runners @@ -12,6 +12,7 @@ import qualified Main.DSL as DSL import qualified Hasql.Query as Query import qualified Hasql.Encoders as Encoders import qualified Hasql.Decoders as Decoders +import qualified Hasql.Session as Session main = defaultMain tree @@ -20,6 +21,28 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "\"another command is already in progress\" bugfix" $ + let + sumQuery :: Query.Query (Int64, Int64) Int64 + sumQuery = + Query.statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.value Encoders.int8) <> + contramap snd (Encoders.value Encoders.int8) + decoder = + Decoders.singleRow (Decoders.value Decoders.int8) + session :: Session.Session Int64 + session = + do + Session.sql "begin;" + s <- Session.query (1,1) sumQuery + Session.sql "end;" + return s + in DSL.session session >>= \x -> assertBool (show x) (isRight x) + , testCase "Executing the same query twice" $ pure () , From 67576ac343214c14e70f2595255d7ff777d36f6b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Jan 2016 18:50:13 +0300 Subject: [PATCH 0312/1204] Fix the bug --- library/Hasql/Private/Session.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index f270e33950..cd812c508d 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -4,6 +4,7 @@ where import Hasql.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Decoders.Result as Decoders.Result import qualified Hasql.Settings as Settings import qualified Hasql.Private.IO as IO import qualified Hasql.Private.Query as Query @@ -30,8 +31,13 @@ run (Session impl) connection = sql :: ByteString -> Session () sql sql = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - EitherT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> - IO.sendNonparametricQuery pqConnection sql + EitherT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> runEitherT $ do + EitherT $ IO.sendNonparametricQuery pqConnection sql + EitherT $ IO.getResults pqConnection integerDatetimes decoder + where + decoder = + Decoders.Results.single $ + Decoders.Result.unit -- | -- Parameters and a specification of the parametric query to apply them to. From 2bdfd1cc1f6ee5ecb191569ce2045da20c1bbb85 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Jan 2016 18:50:29 +0300 Subject: [PATCH 0313/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 51c43e8584..eb47529dde 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.3.1 + 0.19.3.2 category: Hasql, Database, PostgreSQL synopsis: From b38a881b505c34b3db02c0fc4f10dff139899710 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 24 Jan 2016 19:15:11 +0300 Subject: [PATCH 0314/1204] Reproduce a bug --- hasql.cabal | 1 + tasty/Main.hs | 28 +++++++++++++++++++++++++++- tasty/Main/Connection.hs | 28 ++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tasty/Main/Connection.hs diff --git a/hasql.cabal b/hasql.cabal index eb47529dde..1a22d58d92 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -112,6 +112,7 @@ test-suite tasty Main.hs other-modules: Main.DSL + Main.Connection Main.Queries Main.Prelude default-extensions: diff --git a/tasty/Main.hs b/tasty/Main.hs index 9216a17c46..f7ab46cba0 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -9,6 +9,7 @@ import Test.Tasty.QuickCheck import qualified Test.QuickCheck as QuickCheck import qualified Main.Queries as Queries import qualified Main.DSL as DSL +import qualified Main.Connection as Connection import qualified Hasql.Query as Query import qualified Hasql.Encoders as Encoders import qualified Hasql.Decoders as Decoders @@ -21,6 +22,31 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "\"in progress after error\" bugfix" $ + let + sumQuery :: Query.Query (Int64, Int64) Int64 + sumQuery = + Query.statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.value Encoders.int8) <> + contramap snd (Encoders.value Encoders.int8) + decoder = + Decoders.singleRow (Decoders.value Decoders.int8) + sumSession :: Session.Session Int64 + sumSession = + Session.sql "begin" *> Session.query (1, 1) sumQuery <* Session.sql "end" + errorSession :: Session.Session () + errorSession = + Session.sql "asldfjsldk" + io = + Connection.with $ \c -> do + Session.run errorSession c + Session.run sumSession c + in io >>= \x -> assertBool (show x) (either (const False) isRight x) + , testCase "\"another command is already in progress\" bugfix" $ let sumQuery :: Query.Query (Int64, Int64) Int64 @@ -41,7 +67,7 @@ tree = s <- Session.query (1,1) sumQuery Session.sql "end;" return s - in DSL.session session >>= \x -> assertBool (show x) (isRight x) + in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x , testCase "Executing the same query twice" $ pure () diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs new file mode 100644 index 0000000000..f0ee39a728 --- /dev/null +++ b/tasty/Main/Connection.hs @@ -0,0 +1,28 @@ +module Main.Connection +where + +import Main.Prelude +import qualified Hasql.Connection as HC +import qualified Hasql.Query as HQ +import qualified Hasql.Session + + +with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) +with handler = + runEitherT $ acquire >>= \connection -> use connection <* release connection + where + acquire = + EitherT $ HC.acquire settings + where + settings = + HC.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + use connection = + lift $ handler connection + release connection = + lift $ HC.release connection From 24e31161c7cda317c3c929291d613cef18f726a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 24 Jan 2016 19:52:33 +0300 Subject: [PATCH 0315/1204] Fix the bug --- library/Hasql/Private/IO.hs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index 3ec47cb08e..af2ff6cd2f 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -59,9 +59,14 @@ initConnection c = {-# INLINE getResults #-} getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either ResultsDecoders.Error a) -getResults connection integerDatetimes des = +getResults connection integerDatetimes decoder = {-# SCC "getResults" #-} - ResultsDecoders.run (des <* ResultsDecoders.dropRemainders) (integerDatetimes, connection) + (<*) <$> get <*> dropRemainders + where + get = + ResultsDecoders.run decoder (integerDatetimes, connection) + dropRemainders = + ResultsDecoders.run ResultsDecoders.dropRemainders (integerDatetimes, connection) {-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: From 9f8fc65ff2103ac2877252c91e5b9abdcd898cf1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 24 Jan 2016 19:52:53 +0300 Subject: [PATCH 0316/1204] Fix some potential bugs --- library/Hasql/Decoders/Results.hs | 1 + library/Hasql/Private/Query.hs | 8 ++++---- library/Hasql/Private/Session.hs | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 6d03a7025e..fdcb29111b 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -29,6 +29,7 @@ data Error = -- Usually indicates problems with the connection. ClientError !(Maybe ByteString) | ResultError !Result.Error + deriving (Show) {-# INLINE run #-} run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either Error a) diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs index be16c772f5..f056563cd9 100644 --- a/library/Hasql/Private/Query.hs +++ b/library/Hasql/Private/Query.hs @@ -54,8 +54,8 @@ statement :: ByteString -> Encoders.Params.Params a -> Decoders.Results.Results statement template encoder decoder preparable = Query $ Kleisli $ \params -> ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - EitherT $ withMVar pqConnectionRef $ \pqConnection -> - runEitherT $ do - EitherT $ IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params - EitherT $ IO.getResults pqConnection integerDatetimes decoder + EitherT $ withMVar pqConnectionRef $ \pqConnection -> do + r1 <- IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params + r2 <- IO.getResults pqConnection integerDatetimes decoder + return $ r1 *> r2 diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index cd812c508d..fafe4187f0 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -31,9 +31,10 @@ run (Session impl) connection = sql :: ByteString -> Session () sql sql = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - EitherT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> runEitherT $ do - EitherT $ IO.sendNonparametricQuery pqConnection sql - EitherT $ IO.getResults pqConnection integerDatetimes decoder + EitherT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> do + r1 <- IO.sendNonparametricQuery pqConnection sql + r2 <- IO.getResults pqConnection integerDatetimes decoder + return $ r1 *> r2 where decoder = Decoders.Results.single $ From 5130f253bd0ff87a41f3b542d0a6b16de5a3db38 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 24 Jan 2016 19:53:52 +0300 Subject: [PATCH 0317/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 1a22d58d92..08cffd25d9 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.3.2 + 0.19.3.3 category: Hasql, Database, PostgreSQL synopsis: From e89208e7826e6ec46ca6564cc9586d64ec5b7cbf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jan 2016 10:14:04 +0300 Subject: [PATCH 0318/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98e2dbd677..f27045dd2c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # NOTICE -With the recent releases and more to come still, the Hasql ecosystem undergoes some major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published during the January of 2016. +With the recent releases and more to come still, the Hasql ecosystem undergoes some major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published in the beginning of 2016. From 85275809b94434ba4fabc5378295a9542034a0cf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jan 2016 14:13:09 +0300 Subject: [PATCH 0319/1204] "custom" decoder --- hasql.cabal | 4 ++-- library/Hasql/Decoders.hs | 9 +++++++++ library/Hasql/Decoders/Value.hs | 5 +++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 08cffd25d9..e82c9e4a71 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.3.3 + 0.19.4 category: Hasql, Database, PostgreSQL synopsis: @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.7.3 && < 0.8, + postgresql-binary >= 0.7.4 && < 0.8, postgresql-libpq == 0.9.*, -- data: dlist >= 0.7 && < 0.8, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index f4fdb84d5b..7907f1faf6 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -42,6 +42,7 @@ module Hasql.Decoders composite, hstore, enum, + custom, -- * Array Array, arrayDimension, @@ -419,6 +420,14 @@ json :: Value Aeson.Value json = Value (Value.decoder (const Decoder.json)) +-- | +-- Lifts a custom value decoder function to a 'Value' decoder. +-- +{-# INLINABLE custom #-} +custom :: (Bool -> ByteString -> Either Text a) -> Value a +custom fn = + Value (Value.decoderFn fn) + -- ** Composite value decoders ------------------------- diff --git a/library/Hasql/Decoders/Value.hs b/library/Hasql/Decoders/Value.hs index d8bfc3366c..1842310126 100644 --- a/library/Hasql/Decoders/Value.hs +++ b/library/Hasql/Decoders/Value.hs @@ -21,3 +21,8 @@ decoder = {-# SCC "decoder" #-} Value . ReaderT +{-# INLINE decoderFn #-} +decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a +decoderFn fn = + Value $ ReaderT $ \integerDatetimes -> Decoder.fn $ fn integerDatetimes + From 6135f5f980b21007f1a180b0c6b491d7531fe4e2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 29 Jan 2016 11:46:18 +0300 Subject: [PATCH 0320/1204] JSONB --- hasql.cabal | 4 ++-- library/Hasql/Decoders.hs | 9 +++++++++ library/Hasql/Encoders.hs | 8 ++++++++ library/Hasql/PTI.hs | 1 + 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index e82c9e4a71..1a3aed72b7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.4 + 0.19.5 category: Hasql, Database, PostgreSQL synopsis: @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.7.4 && < 0.8, + postgresql-binary >= 0.7.7 && < 0.8, postgresql-libpq == 0.9.*, -- data: dlist >= 0.7 && < 0.8, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 7907f1faf6..567e46cdda 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -38,6 +38,7 @@ module Hasql.Decoders interval, uuid, json, + jsonb, array, composite, hstore, @@ -420,6 +421,14 @@ json :: Value Aeson.Value json = Value (Value.decoder (const Decoder.json)) +-- | +-- Decoder of the @JSONB@ values. +-- +{-# INLINABLE jsonb #-} +jsonb :: Value Aeson.Value +jsonb = + Value (Value.decoder (const Decoder.jsonb)) + -- | -- Lifts a custom value decoder function to a 'Value' decoder. -- diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 457079175c..4fb35dd63a 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -27,6 +27,7 @@ module Hasql.Encoders interval, uuid, json, + jsonb, array, enum, unknown, @@ -305,6 +306,13 @@ json :: Value Aeson.Value json = Value (Value.unsafePTI PTI.json (const Encoder.json)) +-- | +-- Encoder of @JSONB@ values. +{-# INLINABLE jsonb #-} +jsonb :: Value Aeson.Value +jsonb = + Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb)) + -- | -- Unlifts the 'Array' encoder to the plain 'Value' encoder. {-# INLINABLE array #-} diff --git a/library/Hasql/PTI.hs b/library/Hasql/PTI.hs index d152e3821a..c1959f9831 100644 --- a/library/Hasql/PTI.hs +++ b/library/Hasql/PTI.hs @@ -48,6 +48,7 @@ int8 = mkPTI 20 (Just 1016) int8range = mkPTI 3926 (Just 3927) interval = mkPTI 1186 (Just 1187) json = mkPTI 114 (Just 199) +jsonb = mkPTI 3802 (Just 3807) line = mkPTI 628 (Just 629) lseg = mkPTI 601 (Just 1018) macaddr = mkPTI 829 (Just 1040) From 80026b8bafc5ab6f99300f28dc233e6ee873a113 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 29 Jan 2016 14:28:50 +0300 Subject: [PATCH 0321/1204] Relax deps --- hasql.cabal | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 1a3aed72b7..515ba9617d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.5 + 0.19.6 category: Hasql, Database, PostgreSQL synopsis: @@ -78,10 +78,10 @@ library postgresql-libpq == 0.9.*, -- data: dlist >= 0.7 && < 0.8, - aeson >= 0.7 && < 0.11, + aeson >= 0.7 && < 0.12, uuid == 1.3.*, vector >= 0.10 && < 0.12, - time >= 1.4 && < 1.6, + time >= 1.4 && < 2, hashtables >= 1.1 && < 1.3, scientific >= 0.2 && < 0.4, text >= 1 && < 1.3, @@ -94,7 +94,7 @@ library contravariant >= 1.3 && < 2, either >= 4.4.1 && < 5, mtl >= 2 && < 3, - transformers >= 0.3 && < 0.5, + transformers >= 0.3 && < 0.6, -- errors: loch-th == 0.2.*, placeholders == 0.1.*, From d1671c619edbdb6f1bf154b3bcf1723d6c8c2bee Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 4 Feb 2016 12:29:20 +0300 Subject: [PATCH 0322/1204] Update the extensions --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index e432ed780a..9088aebc81 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -38,7 +38,7 @@ library library ghc-options: default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: From 5cfc3e51e4d123a86e87e0f75c3e118fdcc017e0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 12:13:11 +0300 Subject: [PATCH 0323/1204] Update deps --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 9088aebc81..368c4e072d 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -52,6 +52,6 @@ library -- database: hasql >= 0.19 && < 0.20, -- data: - time >= 1.4 && < 2, + time >= 1.5 && < 2, -- general: - base-prelude >= 0.1.19 && < 0.2 + base-prelude >= 0.1.21 && < 0.2 From 18497c9434d6e719fbca5a766c5d6873aa6a6614 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 12:13:33 +0300 Subject: [PATCH 0324/1204] Settings --- library/Hasql/Pool.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 9f5f5f5105..184d48492e 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -17,11 +17,14 @@ import qualified Data.Pool newtype Pool = Pool (Data.Pool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) +type Settings = + (Int, NominalDiffTime, Hasql.Connection.Settings) + -- | -- Given the pool-size, timeout and connection settings -- create a connection-pool. -acquire :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> IO Pool -acquire size timeout connectionSettings = +acquire :: Settings -> IO Pool +acquire (size, timeout, connectionSettings) = fmap Pool $ Data.Pool.createPool acquire release stripes timeout size where From cf38c0cb5d6d642df21462b77a9037b90f0e7093 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 12:19:22 +0300 Subject: [PATCH 0325/1204] Drop Handle --- hasql-pool.cabal | 1 - library/Hasql/Pool/Handle.hs | 56 ------------------------------------ 2 files changed, 57 deletions(-) delete mode 100644 library/Hasql/Pool/Handle.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 368c4e072d..13657740af 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -45,7 +45,6 @@ library Hasql.Pool.Prelude exposed-modules: Hasql.Pool - Hasql.Pool.Handle build-depends: -- resources: resource-pool >= 0.2 && < 0.3, diff --git a/library/Hasql/Pool/Handle.hs b/library/Hasql/Pool/Handle.hs deleted file mode 100644 index 16a865bcad..0000000000 --- a/library/Hasql/Pool/Handle.hs +++ /dev/null @@ -1,56 +0,0 @@ --- | --- Handle-pattern API. -module Hasql.Pool.Handle -( - Handle, - with, - -- * Usage - Error(..), - session, -) -where - -import Hasql.Pool.Prelude hiding (Handle) -import qualified Hasql.Pool -import qualified Hasql.Connection -import qualified Hasql.Session - - --- | --- A temporary handle to the pool. -newtype Handle s = - Handle (forall a. Hasql.Session.Session a -> IO (Either Error a)) - --- | --- Given the pool-size, timeout and connection settings --- executes an IO function on a temporary handle, --- releasing it automatically afterwards. -with :: Int -> NominalDiffTime -> Hasql.Connection.Settings -> (forall s. Handle s -> IO a) -> IO a -with size timeout settings handler = - acquire >>= \pool -> use pool <* release pool - where - acquire = - Hasql.Pool.acquire size timeout settings - use pool = - handler $ Handle $ \session -> - fmap (either (Left . Left) (either (Left . Right) Right)) $ - Hasql.Pool.use pool $ - Hasql.Session.run session - release pool = - Hasql.Pool.release pool - - --- * Usage -------------------------- - --- | --- Error of executing a session on a connection from the pool. -type Error = - Either Hasql.Connection.ConnectionError Hasql.Session.Error - --- | --- Executes a session on a connection from the pool, --- using the provided temporary handle to it. -session :: Handle s -> Hasql.Session.Session a -> IO (Either Error a) -session (Handle runSession) session = - runSession session From 571b2ff5e06821440cd1fed0259aa04d61f4921e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 13:59:26 +0300 Subject: [PATCH 0326/1204] Use Session --- library/Hasql/Pool.hs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 184d48492e..1713f55f47 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -9,6 +9,7 @@ where import Hasql.Pool.Prelude import qualified Hasql.Connection +import qualified Hasql.Session import qualified Data.Pool @@ -42,9 +43,12 @@ release (Pool pool) = Data.Pool.destroyAllResources pool -- | --- Use a connection from the pool and return it to the pool, when finished. +-- Use a connection from the pool to run a session and +-- and return the connection to the pool, when finished. -- Exception-safe. -use :: Pool -> (Hasql.Connection.Connection -> IO a) -> IO (Either Hasql.Connection.ConnectionError a) -use (Pool pool) handler = - Data.Pool.withResource pool (traverse handler) - +use :: Pool -> Hasql.Session.Session a -> IO (Either (Either Hasql.Connection.ConnectionError Hasql.Session.Error) a) +use (Pool pool) session = + fmap (either (Left . Left) (either (Left . Right) Right)) $ + Data.Pool.withResource pool $ + traverse $ + Hasql.Session.run session From c6c7b1d2735deab4b8b48b8a02c008ac47bc2658 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 14:06:25 +0300 Subject: [PATCH 0327/1204] Export Settings --- library/Hasql/Pool.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 1713f55f47..59a75af26b 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,6 +1,7 @@ module Hasql.Pool ( Pool, + Settings(..), acquire, release, use, From 5f9c2793850f5977c26ac37a1c07d89468e37c79 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 14:11:05 +0300 Subject: [PATCH 0328/1204] UsageError --- library/Hasql/Pool.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 59a75af26b..6c76a62943 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -4,6 +4,7 @@ module Hasql.Pool Settings(..), acquire, release, + UsageError(..), use, ) where @@ -43,13 +44,18 @@ release :: Pool -> IO () release (Pool pool) = Data.Pool.destroyAllResources pool +data UsageError = + ConnectionError !Hasql.Connection.ConnectionError | + SessionError !Hasql.Session.Error + deriving (Show, Eq, Ord) + -- | -- Use a connection from the pool to run a session and -- and return the connection to the pool, when finished. -- Exception-safe. -use :: Pool -> Hasql.Session.Session a -> IO (Either (Either Hasql.Connection.ConnectionError Hasql.Session.Error) a) +use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) use (Pool pool) session = - fmap (either (Left . Left) (either (Left . Right) Right)) $ + fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ Data.Pool.withResource pool $ traverse $ Hasql.Session.run session From 6ea53554f5124752dfb26c08c72c4a12bb1edf5d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 5 Feb 2016 14:11:16 +0300 Subject: [PATCH 0329/1204] Update the version --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 13657740af..fb9c31871a 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.3 + 0.4 category: Hasql, Database, PostgreSQL synopsis: From b3113eedba4a1363f14c6ac3624ed343b8b2c061 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Feb 2016 08:19:39 +0300 Subject: [PATCH 0330/1204] Fix UsageError --- library/Hasql/Pool.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 6c76a62943..a60ca822d8 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -47,7 +47,7 @@ release (Pool pool) = data UsageError = ConnectionError !Hasql.Connection.ConnectionError | SessionError !Hasql.Session.Error - deriving (Show, Eq, Ord) + deriving (Show, Eq) -- | -- Use a connection from the pool to run a session and From 2e0643f70d05b2bbb40a236ea2fabd19f392f366 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Feb 2016 08:22:53 +0300 Subject: [PATCH 0331/1204] Docs --- library/Hasql/Pool.hs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index a60ca822d8..4488234514 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -20,6 +20,17 @@ import qualified Data.Pool newtype Pool = Pool (Data.Pool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) +-- | +-- Settings of the connection pool. Consist of: +-- +-- * Pool-size. +-- +-- * Timeout. +-- An amount of time for which an unused resource is kept open. +-- The smallest acceptable value is 0.5 seconds. +-- +-- * Connection settings. +-- type Settings = (Int, NominalDiffTime, Hasql.Connection.Settings) @@ -44,6 +55,8 @@ release :: Pool -> IO () release (Pool pool) = Data.Pool.destroyAllResources pool +-- | +-- A union over the connection establishment error and the session error. data UsageError = ConnectionError !Hasql.Connection.ConnectionError | SessionError !Hasql.Session.Error @@ -51,8 +64,7 @@ data UsageError = -- | -- Use a connection from the pool to run a session and --- and return the connection to the pool, when finished. --- Exception-safe. +-- return the connection to the pool, when finished. use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) use (Pool pool) session = fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ From 62bc811fa1c22ba277d12c22dbd43f75d002dc55 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Feb 2016 09:55:17 +0300 Subject: [PATCH 0332/1204] Update the extensions --- hasql.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 515ba9617d..7b4a0fe776 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -42,7 +42,7 @@ library library ghc-options: default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: @@ -116,7 +116,7 @@ test-suite tasty Main.Queries Main.Prelude default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: @@ -169,7 +169,7 @@ benchmark benchmark -fprof-auto "-with-rtsopts=-N -p -s -h -i0.1" default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: From 7618ae1ff2860e5b4dd7a96c8c0ab543eef58dd3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Feb 2016 09:56:10 +0300 Subject: [PATCH 0333/1204] Add at least a minor introduction --- README.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f27045dd2c..5c59874b21 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,37 @@ +# What Hasql is + +Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, which need the low level of abstraction, and the users, which face the typical tasks of DB-oriented applications, providing them with higher-level APIs. + +## Ecosystem + +Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task, do that well and stay simple. + +* ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything revolves around that library. + +* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - an extension library, which provides a Hasql-specialized abstraction over the connection pool. + +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an extension library, which provides a **composable** abstraction over database transactions with an **automated conflict resolution**. + +* "hasql-stream" - an extension library, which provides an abstraction over cursors. *Yet to be released.* + +* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - an extension library, which provides Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. + +* "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* + +### Benefits of being an ecosystem + +* **Simplicity.** Each library in isolation provides a simple API, which is trivial to comprehend. + +* **Flexibility and composability.** The user picks and chooses the features, thus precisely reaching the level of abstraction, which he needs for his task. + +* **Much more stable and more descriptive semantic versioning.** E.g., a change in the API of the "hasql-transaction" library won't affect any of the other libraries and it gives the user a much more precise information about which part of his application he needs to update to conform. + +* **Interchangeability and competition of the ecosystem components.** E.g., [not everyone will agree](https://github.com/nikita-volkov/hasql/issues/41) with the restrictive design decisions made in the "hasql-transaction" library. However those decisions are not imposed on the user, and instead of having endless debates about how to abstract over transactions, another extension library can simply be released, which will provide a different interpretation of what the abstraction over transactions should be. + +* **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical unscalable one, where some core-team is responsible for everything. + +--- + # NOTICE -With the recent releases and more to come still, the Hasql ecosystem undergoes some major changes. It is expected that the users will need a thorough introduction. Hence this notice is to inform you that a thorough documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon and are slated to be published in the beginning of 2016. +With the recent releases and more to come still, the Hasql ecosystem has undergone a major revision. It is now expected that the users will need a thorough introduction. Hence this notice is to inform you that the documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon. From f321528631aa4fc9e489407cb4f2a06341dfbcf2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Feb 2016 11:59:51 +0300 Subject: [PATCH 0334/1204] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5c59874b21..94f42f5db7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # What Hasql is -Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, which need the low level of abstraction, and the users, which face the typical tasks of DB-oriented applications, providing them with higher-level APIs. +Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need the low level of abstraction, and the users, which face the typical tasks of DB-oriented applications, providing them with higher-level APIs. ## Ecosystem @@ -8,13 +8,13 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything revolves around that library. -* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - an extension library, which provides a Hasql-specialized abstraction over the connection pool. +* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an extension library, which provides a **composable** abstraction over database transactions with an **automated conflict resolution**. +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a **composable** abstraction over the database transactions with an **automated conflict resolution**. -* "hasql-stream" - an extension library, which provides an abstraction over cursors. *Yet to be released.* +* "hasql-stream" - an abstraction over cursors. *Yet to be released.* -* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - an extension library, which provides Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. +* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. * "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* @@ -22,9 +22,9 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * **Simplicity.** Each library in isolation provides a simple API, which is trivial to comprehend. -* **Flexibility and composability.** The user picks and chooses the features, thus precisely reaching the level of abstraction, which he needs for his task. +* **Flexibility and composability.** The user picks and chooses the features, thus precisely matching the level of abstraction that he needs for his task. -* **Much more stable and more descriptive semantic versioning.** E.g., a change in the API of the "hasql-transaction" library won't affect any of the other libraries and it gives the user a much more precise information about which part of his application he needs to update to conform. +* **Much more stable and more descriptive semantic versioning.** E.g., a change in the API of the "hasql-transaction" library won't affect any of the other libraries and it gives the user a more precise information about which part of his application he needs to update to conform. * **Interchangeability and competition of the ecosystem components.** E.g., [not everyone will agree](https://github.com/nikita-volkov/hasql/issues/41) with the restrictive design decisions made in the "hasql-transaction" library. However those decisions are not imposed on the user, and instead of having endless debates about how to abstract over transactions, another extension library can simply be released, which will provide a different interpretation of what the abstraction over transactions should be. From 5ec981f552a2a835e91d7013415bc17b8b822484 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Feb 2016 10:37:30 +0300 Subject: [PATCH 0335/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94f42f5db7..f3f6a802aa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # What Hasql is -Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need the low level of abstraction, and the users, which face the typical tasks of DB-oriented applications, providing them with higher-level APIs. +Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-oriented applications, providing them with higher-level APIs. ## Ecosystem From ff3dd818df8f9e0211efab5631c6b5a45bdd4f6c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Feb 2016 13:14:19 +0300 Subject: [PATCH 0336/1204] Raw JSON support --- hasql.cabal | 4 ++-- library/Hasql/Decoders.hs | 26 ++++++++++++++++++++++---- library/Hasql/Encoders.hs | 24 ++++++++++++++++++++---- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7b4a0fe776..1673b35a7f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.6 + 0.19.7 category: Hasql, Database, PostgreSQL synopsis: @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.7.7 && < 0.8, + postgresql-binary >= 0.8 && < 0.9, postgresql-libpq == 0.9.*, -- data: dlist >= 0.7 && < 0.8, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 567e46cdda..cf7ccd65ce 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -38,7 +38,9 @@ module Hasql.Decoders interval, uuid, json, + jsonBytes, jsonb, + jsonbBytes, array, composite, hstore, @@ -414,20 +416,36 @@ uuid = Value (Value.decoder (const Decoder.uuid)) -- | --- Decoder of the @JSON@ values. +-- Decoder of the @JSON@ values into a JSON AST. -- {-# INLINABLE json #-} json :: Value Aeson.Value json = - Value (Value.decoder (const Decoder.json)) + Value (Value.decoder (const Decoder.json_ast)) -- | --- Decoder of the @JSONB@ values. +-- Decoder of the @JSON@ values into a raw JSON 'ByteString'. +-- +{-# INLINABLE jsonBytes #-} +jsonBytes :: (ByteString -> Either Text a) -> Value a +jsonBytes fn = + Value (Value.decoder (const (Decoder.json_bytes fn))) + +-- | +-- Decoder of the @JSONB@ values into a JSON AST. -- {-# INLINABLE jsonb #-} jsonb :: Value Aeson.Value jsonb = - Value (Value.decoder (const Decoder.jsonb)) + Value (Value.decoder (const Decoder.jsonb_ast)) + +-- | +-- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. +-- +{-# INLINABLE jsonbBytes #-} +jsonbBytes :: (ByteString -> Either Text a) -> Value a +jsonbBytes fn = + Value (Value.decoder (const (Decoder.jsonb_bytes fn))) -- | -- Lifts a custom value decoder function to a 'Value' decoder. diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 4fb35dd63a..853472d0fd 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -27,7 +27,9 @@ module Hasql.Encoders interval, uuid, json, + jsonBytes, jsonb, + jsonbBytes, array, enum, unknown, @@ -300,18 +302,32 @@ uuid = Value (Value.unsafePTI PTI.uuid (const Encoder.uuid)) -- | --- Encoder of @JSON@ values. +-- Encoder of @JSON@ values from JSON AST. {-# INLINABLE json #-} json :: Value Aeson.Value json = - Value (Value.unsafePTI PTI.json (const Encoder.json)) + Value (Value.unsafePTI PTI.json (const Encoder.json_ast)) -- | --- Encoder of @JSONB@ values. +-- Encoder of @JSON@ values from raw JSON. +{-# INLINABLE jsonBytes #-} +jsonBytes :: Value ByteString +jsonBytes = + Value (Value.unsafePTI PTI.json (const Encoder.json_bytes)) + +-- | +-- Encoder of @JSONB@ values from JSON AST. {-# INLINABLE jsonb #-} jsonb :: Value Aeson.Value jsonb = - Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb)) + Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb_ast)) + +-- | +-- Encoder of @JSONB@ values from raw JSON. +{-# INLINABLE jsonbBytes #-} +jsonbBytes :: Value ByteString +jsonbBytes = + Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb_bytes)) -- | -- Unlifts the 'Array' encoder to the plain 'Value' encoder. From 6f7886f867752fcbf63a682f4831cfc0fc18a03c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 11 Feb 2016 10:37:28 +0300 Subject: [PATCH 0337/1204] Update the docs --- library/Hasql/Transaction.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index b347b0643c..c37ac7f953 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -57,7 +57,7 @@ data IsolationLevel = deriving (Show, Eq, Ord, Enum, Bounded) -- | --- Execute the transaction using the provided isolation level, mode and database connection. +-- Execute the transaction using the provided isolation level and mode. {-# INLINABLE run #-} run :: Transaction a -> IsolationLevel -> Mode -> Session.Session a run (Transaction session) isolation mode = From dba2c00223739cfe4e69eb7cc0164f6192304599 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 12 Feb 2016 15:34:54 +0300 Subject: [PATCH 0338/1204] Update the deps --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 1673b35a7f..0de2dd11c0 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.7 + 0.19.8 category: Hasql, Database, PostgreSQL synopsis: @@ -99,7 +99,7 @@ library loch-th == 0.2.*, placeholders == 0.1.*, -- general: - base-prelude >= 0.1.19 && < 0.2, + base-prelude >= 0.1.19 && < 2, base >= 4.6 && < 5 From 1389b08a62f16bdb2e12f9aa598fa12337c79307 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 17 Feb 2016 07:39:46 +0100 Subject: [PATCH 0339/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f3f6a802aa..219d42b5ca 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # What Hasql is -Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-oriented applications, providing them with higher-level APIs. +Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-powered applications, providing them with higher-level APIs. ## Ecosystem From ca1d0cd7e43eef0f51a72533b571dfef0129c1b5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Feb 2016 08:15:15 +0300 Subject: [PATCH 0340/1204] Explicitly rollback in case of failures --- hasql-transaction.cabal | 2 +- library/Hasql/Transaction.hs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 0a619a0742..18da65d1ea 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.2 + 0.4.3 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index c37ac7f953..4d8c18bbc7 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -65,7 +65,8 @@ run (Transaction session) isolation mode = Session.query () (Queries.beginTransaction mode') resultEither <- tryError session case resultEither of - Left error -> + Left error -> do + Session.query () Queries.abortTransaction case error of Session.ResultError (Session.ServerError code _ _ _) | code == ErrorCodes.serialization_failure -> run (Transaction session) isolation mode From 7954c8d734463620c9196c03d61e9e12bbb7e467 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Feb 2016 09:39:57 +0300 Subject: [PATCH 0341/1204] Semigroup --- hasql.cabal | 1 + library/Hasql/Commands.hs | 2 ++ library/Hasql/Encoders.hs | 2 +- library/Hasql/Encoders/Params.hs | 2 ++ library/Hasql/Prelude.hs | 6 +++++- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 0de2dd11c0..7c030e4ce5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -88,6 +88,7 @@ library bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: + semigroups >= 0.18 && < 0.20, data-default-class >= 0.0.1 && < 0.1, profunctors >= 5.1 && < 6, contravariant-extras == 0.3.*, diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs index b7469f7f8d..2eee535a3c 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Commands.hs @@ -18,6 +18,8 @@ newtype Commands = Commands (DList BB.Builder) deriving (Monoid) +instance Semigroup Commands + asBytes :: Commands -> ByteString asBytes (Commands list) = BL.toStrict $ BB.toLazyByteString $ foldMap (<> BB.char7 ';') $ list diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 853472d0fd..8f277d8838 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -106,7 +106,7 @@ import qualified Hasql.Prelude as Prelude -- newtype Params a = Params (Params.Params a) - deriving (Contravariant, Divisible, Monoid) + deriving (Contravariant, Divisible, Monoid, Semigroup) -- | -- Encode no parameters. diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index a9cdb9a9c4..c421ee3360 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -13,6 +13,8 @@ newtype Params a = Params (Op (DList (LibPQ.Oid, Bool -> Maybe ByteString)) a) deriving (Contravariant, Divisible, Monoid) +instance Semigroup (Params a) + run :: Params a -> a -> DList (LibPQ.Oid, Bool -> Maybe ByteString) run (Params (Op op)) params = {-# SCC "run" #-} diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index b3f8488d72..3dc0c7cc85 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -16,7 +16,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error, (<>), First(..), Last(..)) -- transformers ------------------------- @@ -53,6 +53,10 @@ import Contravariant.Extras as Exports import Control.Monad.Trans.Either as Exports import Data.Either.Combinators as Exports +-- semigroups +------------------------- +import Data.Semigroup as Exports + -- hashable ------------------------- import Data.Hashable as Exports (Hashable(..)) From 6cb86412cabab2bf0d19ea7fbfc4a6c82a036187 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Feb 2016 09:41:23 +0300 Subject: [PATCH 0342/1204] Test prepared statements and errors --- hasql.cabal | 18 ++----------- tasty/Main.hs | 25 ++++++++++++++++++ tasty/Main/Prelude.hs | 61 +------------------------------------------ 3 files changed, 28 insertions(+), 76 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 7c030e4ce5..4eba5710c2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -130,24 +130,10 @@ test-suite tasty tasty-hunit == 0.9.*, quickcheck-instances >= 0.3.11 && < 0.4, QuickCheck >= 2.8.1 && < 2.9, - -- data: - uuid, - time, - scientific, - bytestring, - text, - vector, - hashable, - dlist, -- general: data-default-class, - profunctors, - contravariant, - contravariant-extras, - either, - transformers, - base-prelude, - base + -- base, + rebase benchmark benchmark diff --git a/tasty/Main.hs b/tasty/Main.hs index f7ab46cba0..7880282def 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,31 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "Prepared statements after error" $ + let + io = + Connection.with (Session.run session) >>= + \x -> assertBool (show x) (either (const False) isRight x) + where + session = + try *> fail *> try + where + try = + Session.query 1 query + where + query = + Query.statement sql encoder decoder True + where + sql = + "select $1 :: int8" + encoder = + Encoders.value Encoders.int8 + decoder = + Decoders.singleRow $ Decoders.value Decoders.int8 + fail = + catchError (Session.sql "absurd") (const (pure ())) + in io + , testCase "\"in progress after error\" bugfix" $ let sumQuery :: Query.Query (Int64, Int64) Int64 diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index 06a5e4a9f7..6bec4adef6 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -7,67 +7,8 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) - --- transformers -------------------------- -import Control.Monad.IO.Class as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Data.Functor.Identity as Exports +import Rebase.Prelude as Exports -- data-default-class ------------------------- import Data.Default.Class as Exports - --- profunctors -------------------------- -import Data.Profunctor.Unsafe as Exports - --- contravariant -------------------------- -import Data.Functor.Contravariant as Exports -import Data.Functor.Contravariant.Divisible as Exports - --- contravariant-extras -------------------------- -import Contravariant.Extras as Exports - --- either -------------------------- -import Control.Monad.Trans.Either as Exports -import Data.Either.Combinators as Exports - --- hashable -------------------------- -import Data.Hashable as Exports (Hashable(..)) - --- text -------------------------- -import Data.Text as Exports (Text) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) - --- scientific -------------------------- -import Data.Scientific as Exports (Scientific) - --- uuid -------------------------- -import Data.UUID as Exports (UUID) - --- time -------------------------- -import Data.Time as Exports - --- vector -------------------------- -import Data.Vector as Exports (Vector) - --- dlist -------------------------- -import Data.DList as Exports (DList) From 12a5e538fd738de2f181be269ead3f5c83aca10b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 26 Feb 2016 14:11:30 +0300 Subject: [PATCH 0343/1204] Failing prepared statements test --- tasty/Main.hs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 7880282def..23fc64e877 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,33 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "Failing prepared statements" $ + let + io = + Connection.with (Session.run session) >>= + (assertBool <$> show <*> resultTest) + where + resultTest = + \case + Right (Left (Session.ResultError (Session.ServerError "26000" _ _ _))) -> False + _ -> True + session = + catchError session (const (pure ())) *> session + where + session = + Session.query () query + where + query = + Query.statement sql encoder decoder True + where + sql = + "absurd" + encoder = + Encoders.unit + decoder = + Decoders.unit + in io + , testCase "Prepared statements after error" $ let io = From b03ab41a7706fafa6f3b1a488199890fa9ea16d4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 26 Feb 2016 15:26:55 +0300 Subject: [PATCH 0344/1204] Update PreparedStatementRegistry and fix the bug --- hasql.cabal | 2 + library/Hasql/Private/IO.hs | 39 ++++++++------- .../Private/PreparedStatementRegistry.hs | 50 +++++++++++-------- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 4eba5710c2..595dc9edf3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -76,6 +76,8 @@ library -- database: postgresql-binary >= 0.8 && < 0.9, postgresql-libpq == 0.9.*, + -- builders: + bytestring-tree-builder >= 0.2.5 && < 0.3, -- data: dlist >= 0.7 && < 0.8, aeson >= 0.7 && < 0.12, diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index af2ff6cd2f..64e12cc5db 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -75,25 +75,28 @@ getPreparedStatementKey :: IO (Either ResultsDecoders.Error ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} - do - keyMaybe <- PreparedStatementRegistry.lookup template wordOIDList registry - case keyMaybe of - Just key -> - pure (pure key) - Nothing -> - do - key <- PreparedStatementRegistry.register template wordOIDList registry - sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - let resultsDecoder = - if sent - then ResultsDecoders.single ResultDecoders.unit - else ResultsDecoders.clientError - runEitherT $ do - EitherT $ getResults connection undefined resultsDecoder - pure key + PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry where - wordOIDList = - map (\(LibPQ.Oid x) -> fromIntegral x) oidList + localKey = + PreparedStatementRegistry.LocalKey template wordOIDList + where + wordOIDList = + map (\(LibPQ.Oid x) -> fromIntegral x) oidList + onNewRemoteKey key = + do + sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) + let resultsDecoder = + if sent + then ResultsDecoders.single ResultDecoders.unit + else ResultsDecoders.clientError + fmap resultsMapping $ getResults connection undefined resultsDecoder + where + resultsMapping = + \case + Left x -> (False, Left x) + Right _ -> (True, Right key) + onOldRemoteKey key = + pure (pure key) {-# INLINE checkedSend #-} checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoders.Error ()) diff --git a/library/Hasql/Private/PreparedStatementRegistry.hs b/library/Hasql/Private/PreparedStatementRegistry.hs index e893f69c37..0006b5ad33 100644 --- a/library/Hasql/Private/PreparedStatementRegistry.hs +++ b/library/Hasql/Private/PreparedStatementRegistry.hs @@ -2,37 +2,47 @@ module Hasql.Private.PreparedStatementRegistry ( PreparedStatementRegistry, new, - lookup, - register, + update, + LocalKey(..), ) where import Hasql.Prelude hiding (lookup) -import qualified Data.HashTable.IO as Hashtables +import qualified Data.HashTable.IO as A +import qualified ByteString.TreeBuilder as B data PreparedStatementRegistry = - PreparedStatementRegistry !(Hashtables.BasicHashTable LocalKey ByteString) !(IORef Word) + PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) {-# INLINABLE new #-} new :: IO PreparedStatementRegistry new = - PreparedStatementRegistry <$> Hashtables.new <*> newIORef 0 - -{-# INLINABLE lookup #-} -lookup :: ByteString -> [Word32] -> PreparedStatementRegistry -> IO (Maybe ByteString) -lookup template oids (PreparedStatementRegistry table counter) = - Hashtables.lookup table (LocalKey template oids) - -{-# INLINABLE register #-} -register :: ByteString -> [Word32] -> PreparedStatementRegistry -> IO ByteString -register template oids (PreparedStatementRegistry table counter) = - do - n <- readIORef counter - writeIORef counter (succ n) - let remoteKey = fromString (show n) - Hashtables.insert table (LocalKey template oids) remoteKey - return remoteKey + PreparedStatementRegistry <$> A.new <*> newIORef 0 + +{-# INLINABLE update #-} +update :: LocalKey -> (ByteString -> IO (Bool, a)) -> (ByteString -> IO a) -> PreparedStatementRegistry -> IO a +update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table counter) = + lookup >>= maybe new old + where + lookup = + A.lookup table localKey + new = + readIORef counter >>= onN + where + onN n = + do + (save, result) <- onNewRemoteKey remoteKey + when save $ do + A.insert table localKey remoteKey + writeIORef counter (succ n) + return result + where + remoteKey = + B.toByteString . B.asciiIntegral $ n + old = + onOldRemoteKey + -- | -- Local statement key. From 508e09597619d019f681ea7f9c03ab0e9abc84bb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 26 Feb 2016 15:27:20 +0300 Subject: [PATCH 0345/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 595dc9edf3..c2c34d94b7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.8 + 0.19.9 category: Hasql, Database, PostgreSQL synopsis: From c0d96eb5b24fc4fa785a3fa61787578f2b6f61f7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Feb 2016 08:26:25 +0300 Subject: [PATCH 0346/1204] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 219d42b5ca..9c9d6da8a1 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* +* ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. + ### Benefits of being an ecosystem * **Simplicity.** Each library in isolation provides a simple API, which is trivial to comprehend. From 4f23fe590885e1af5f5c7e6b97bf73365bf96b82 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 6 Mar 2016 13:44:56 +0300 Subject: [PATCH 0347/1204] Add threads test --- hasql.cabal | 24 +++++++++++++++++++ threads-test/Main.hs | 45 ++++++++++++++++++++++++++++++++++++ threads-test/Main/Queries.hs | 20 ++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 threads-test/Main.hs create mode 100644 threads-test/Main/Queries.hs diff --git a/hasql.cabal b/hasql.cabal index c2c34d94b7..4ee6f4636a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -138,6 +138,30 @@ test-suite tasty rebase +test-suite threads-test + type: + exitcode-stdio-1.0 + hs-source-dirs: + threads-test + main-is: + Main.hs + other-modules: + Main.Queries + ghc-options: + -O2 + -threaded + "-with-rtsopts=-N" + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + -- database: + hasql, + -- base, + rebase + + benchmark benchmark type: exitcode-stdio-1.0 diff --git a/threads-test/Main.hs b/threads-test/Main.hs new file mode 100644 index 0000000000..93ca7f5d12 --- /dev/null +++ b/threads-test/Main.hs @@ -0,0 +1,45 @@ +module Main where + +import Rebase.Prelude +import qualified Hasql.Connection +import qualified Hasql.Query +import qualified Hasql.Encoders +import qualified Hasql.Decoders +import qualified Hasql.Session +import qualified Main.Queries as Queries + + +main = + acquire >>= use + where + acquire = + (,) <$> acquire <*> acquire + where + acquire = + join $ + fmap (either (fail . show) return) $ + Hasql.Connection.acquire connectionSettings + where + connectionSettings = + Hasql.Connection.settings "localhost" 5432 "postgres" "" "postgres" + use (connection1, connection2) = + do + beginVar <- newEmptyMVar + finishVar <- newEmptyMVar + forkIO $ do + traceM "1: in" + putMVar beginVar () + session connection1 (Hasql.Session.query 0.2 Queries.selectSleep) + traceM "1: out" + void (tryPutMVar finishVar False) + forkIO $ do + takeMVar beginVar + traceM "2: in" + session connection2 (Hasql.Session.query 0.1 Queries.selectSleep) + traceM "2: out" + void (tryPutMVar finishVar True) + bool exitFailure exitSuccess . traceShowId =<< takeMVar finishVar + where + session connection session = + Hasql.Session.run session connection >>= + either (fail . show) return diff --git a/threads-test/Main/Queries.hs b/threads-test/Main/Queries.hs new file mode 100644 index 0000000000..1ca2bba924 --- /dev/null +++ b/threads-test/Main/Queries.hs @@ -0,0 +1,20 @@ +module Main.Queries where + +import Rebase.Prelude +import Hasql.Query +import qualified Hasql.Encoders as E +import qualified Hasql.Decoders as D + + +selectSleep :: Query Double () +selectSleep = + statement sql encoder decoder True + where + sql = + "select pg_sleep($1)" + encoder = + E.value E.float8 + decoder = + D.unit + + From c822022056011dfd206bc0202d2c4900c676a6fb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Apr 2016 15:58:17 +0300 Subject: [PATCH 0348/1204] Update the "base-prelude" dependency --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 18da65d1ea..8e4fc28c11 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.3 + 0.4.4 category: Hasql, Database, PostgreSQL synopsis: @@ -60,4 +60,4 @@ library mtl >= 2 && < 3, transformers >= 0.3 && < 0.5, -- general: - base-prelude >= 0.1.19 && < 0.2 + base-prelude >= 0.1.19 && < 2 From fec5f4eb98d0b6276dee69720f3d0f3cf88f335a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Apr 2016 16:00:46 +0300 Subject: [PATCH 0349/1204] Update the "base-prelude" dependency --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index fb9c31871a..d74d5db93c 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4 + 0.4.1 category: Hasql, Database, PostgreSQL synopsis: @@ -53,4 +53,4 @@ library -- data: time >= 1.5 && < 2, -- general: - base-prelude >= 0.1.21 && < 0.2 + base-prelude >= 0.1.21 && < 2 From b214065b3d3249f9442181c268caab8b747c63ad Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 8 Apr 2016 12:20:48 +0300 Subject: [PATCH 0350/1204] Possibly a fix for the 40001 "Canceled on identification as a pivot, during commit attempt." error --- hasql-transaction.cabal | 2 +- library/Hasql/Transaction.hs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 8e4fc28c11..4fe50529e4 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.4 + 0.4.4.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 4d8c18bbc7..d3ca765f48 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -62,8 +62,9 @@ data IsolationLevel = run :: Transaction a -> IsolationLevel -> Mode -> Session.Session a run (Transaction session) isolation mode = do - Session.query () (Queries.beginTransaction mode') - resultEither <- tryError session + resultEither <- do + Session.query () (Queries.beginTransaction mode') + tryError session case resultEither of Left error -> do Session.query () Queries.abortTransaction From c883289be38890d9c5b53307772af9872169b0f4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 12 Apr 2016 22:16:57 +0300 Subject: [PATCH 0351/1204] Reproduce the empty array issue (#46) --- tasty/Main.hs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 23fc64e877..35d96d9bcc 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,27 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "Empty array" $ + let + io = + do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right [])) x + where + session = + Session.query () query + where + query = + Query.statement sql encoder decoder True + where + sql = + "select array[]::int8[]" + encoder = + Encoders.unit + decoder = + Decoders.singleRow (Decoders.value (Decoders.array (Decoders.arrayDimension replicateM (Decoders.arrayValue Decoders.int8)))) + in io + , testCase "Failing prepared statements" $ let io = From 09dafef4d2bff123f43dab08a5629e94f10d78e9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 12 Apr 2016 22:33:50 +0300 Subject: [PATCH 0352/1204] Fix #46 by updating the "postgresql-binary" dependency --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 4ee6f4636a..239b34f762 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.9 + 0.19.10 category: Hasql, Database, PostgreSQL synopsis: @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.8 && < 0.9, + postgresql-binary >= 0.9 && < 0.10, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, From 00231954dfd644423f4279734d2e43161bcef1fa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 25 Apr 2016 17:26:25 +0300 Subject: [PATCH 0353/1204] Provide an instance of Decidable to the Params encoder --- hasql.cabal | 2 +- library/Hasql/Encoders.hs | 2 +- library/Hasql/Encoders/Params.hs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 239b34f762..5e5fb8934e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.10 + 0.19.11 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 8f277d8838..e0c543f199 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -106,7 +106,7 @@ import qualified Hasql.Prelude as Prelude -- newtype Params a = Params (Params.Params a) - deriving (Contravariant, Divisible, Monoid, Semigroup) + deriving (Contravariant, Divisible, Decidable, Monoid, Semigroup) -- | -- Encode no parameters. diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index c421ee3360..6578c507b4 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -11,7 +11,7 @@ import qualified Hasql.PTI as PTI -- Encoder of some representation of a parameters product. newtype Params a = Params (Op (DList (LibPQ.Oid, Bool -> Maybe ByteString)) a) - deriving (Contravariant, Divisible, Monoid) + deriving (Contravariant, Divisible, Decidable, Monoid) instance Semigroup (Params a) From d72ad544b70205660d03e338f22d06a0514868a4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 22 May 2016 10:02:15 +0300 Subject: [PATCH 0354/1204] Relax the "data-default-class" dependency --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 5e5fb8934e..38564b59b7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.11 + 0.19.12 category: Hasql, Database, PostgreSQL synopsis: @@ -91,7 +91,7 @@ library hashable >= 1.2 && < 1.3, -- control: semigroups >= 0.18 && < 0.20, - data-default-class >= 0.0.1 && < 0.1, + data-default-class >= 0.0.1 && < 0.2, profunctors >= 5.1 && < 6, contravariant-extras == 0.3.*, contravariant >= 1.3 && < 2, From 398fb71d113a99e098115caa0355849af65392a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 29 May 2016 12:32:20 +0300 Subject: [PATCH 0355/1204] Add the GHC 8 target to the Travis configuration --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 75a1d33979..1c1f990cad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ env: - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 - ghc=7.8.1 cabal=1.18 - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 + - ghc=8.0.1 cabal=1.24 install: # Set up the Shell to treat the semicolon as && From bf72073bb5ff7bf447ad2408736f48357b269ce7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 29 May 2016 17:01:51 +0300 Subject: [PATCH 0356/1204] Fix the compatibility with GHC 8 --- .travis.yml | 1 + hasql-transaction.cabal | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 633cafc257..1984eeaf21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ env: - ghc=7.6.1 cabal=1.18 - ghc=7.8.1 cabal=1.18 - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 + - ghc=8.0.1 cabal=1.24 install: # Set up the Shell to treat the semicolon as && diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 4fe50529e4..17ccf8c016 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.4.1 + 0.4.5 category: Hasql, Database, PostgreSQL synopsis: @@ -38,7 +38,7 @@ library library ghc-options: default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: @@ -58,6 +58,7 @@ library contravariant-extras >= 0.3 && < 0.4, either >= 4.4.1 && < 5, mtl >= 2 && < 3, - transformers >= 0.3 && < 0.5, + transformers >= 0.3 && < 0.6, -- general: - base-prelude >= 0.1.19 && < 2 + base-prelude >= 0.1.19 && < 2, + base >= 4.6 && < 5 From d30e1454f2160fe78fd56b524705613479335981 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 9 Jun 2016 15:44:40 +0300 Subject: [PATCH 0357/1204] Drop the "either" dependency --- hasql-transaction.cabal | 1 - library/Hasql/Transaction/Prelude.hs | 5 ----- 2 files changed, 6 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 17ccf8c016..bed4eaf395 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -56,7 +56,6 @@ library -- control: contravariant >= 1.3 && < 2, contravariant-extras >= 0.3 && < 0.4, - either >= 4.4.1 && < 5, mtl >= 2 && < 3, transformers >= 0.3 && < 0.6, -- general: diff --git a/library/Hasql/Transaction/Prelude.hs b/library/Hasql/Transaction/Prelude.hs index 543ca22524..40984c1419 100644 --- a/library/Hasql/Transaction/Prelude.hs +++ b/library/Hasql/Transaction/Prelude.hs @@ -31,11 +31,6 @@ import Data.Functor.Contravariant.Divisible as Exports ------------------------- import Contravariant.Extras as Exports --- either -------------------------- -import Control.Monad.Trans.Either as Exports -import Data.Either.Combinators as Exports - -- bytestring ------------------------- import Data.ByteString as Exports (ByteString) From 0e159f92dc5308c9aa0468e0ef18d367396d7e43 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 09:59:53 +0300 Subject: [PATCH 0358/1204] Add "conflicts-test" --- conflicts-test/Main.hs | 53 +++++++++++++++++++++++++++++ conflicts-test/Main/Queries.hs | 47 +++++++++++++++++++++++++ conflicts-test/Main/Transactions.hs | 27 +++++++++++++++ hasql-transaction.cabal | 25 ++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 conflicts-test/Main.hs create mode 100644 conflicts-test/Main/Queries.hs create mode 100644 conflicts-test/Main/Transactions.hs diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs new file mode 100644 index 0000000000..1b16fb524c --- /dev/null +++ b/conflicts-test/Main.hs @@ -0,0 +1,53 @@ +module Main where + +import Rebase.Prelude +import qualified Hasql.Connection as Connection +import qualified Hasql.Session as Session +import qualified Hasql.Transaction as Transaction +import qualified Main.Queries as Queries +import qualified Main.Transactions as Transactions +import qualified Control.Concurrent.Async as Async + + +main = + bracket acquire release use + where + acquire = + (,) <$> acquire <*> acquire + where + acquire = + join $ + fmap (either (fail . show) return) $ + Connection.acquire connectionSettings + where + connectionSettings = + Connection.settings "localhost" 5432 "postgres" "" "postgres" + release (connection1, connection2) = + do + transaction connection1 Transactions.dropSchema + Connection.release connection1 + Connection.release connection2 + use (connection1, connection2) = + do + try (transaction connection1 Transactions.dropSchema) :: IO (Either SomeException ()) + transaction connection1 Transactions.createSchema + id1 <- session connection1 (Session.query 0 Queries.createAccount) + id2 <- session connection1 (Session.query 0 Queries.createAccount) + async1 <- Async.async (transaction connection1 (Transactions.transferTimes 200 id1 id2 1)) + async2 <- Async.async (transaction connection2 (Transactions.transferTimes 200 id1 id2 1)) + Async.wait async1 + Async.wait async2 + balance1 <- session connection1 (Session.query id1 Queries.getBalance) + balance2 <- session connection1 (Session.query id2 Queries.getBalance) + traceShowM balance1 + traceShowM balance2 + if balance1 == Just 400 && balance2 == Just (-400) + then exitSuccess + else exitFailure + +session connection session = + Session.run session connection >>= + either (fail . show) return + +transaction connection transaction = + session connection (Transaction.run transaction Transaction.RepeatableRead Transaction.Write) diff --git a/conflicts-test/Main/Queries.hs b/conflicts-test/Main/Queries.hs new file mode 100644 index 0000000000..2650efaefc --- /dev/null +++ b/conflicts-test/Main/Queries.hs @@ -0,0 +1,47 @@ +module Main.Queries where + +import Rebase.Prelude +import Hasql.Query +import qualified Hasql.Encoders as E +import qualified Hasql.Decoders as D + + +createAccountTable :: Query () () +createAccountTable = + statement sql E.unit D.unit False + where + sql = + "create table account (id serial not null, balance numeric not null, primary key (id))" + +dropAccountTable :: Query () () +dropAccountTable = + statement + "drop table account" + E.unit + D.unit + False + +createAccount :: Query Scientific Int64 +createAccount = + statement + "insert into account (balance) values ($1) returning id" + (E.value E.numeric) + (D.singleRow (D.value D.int8)) + True + +modifyBalance :: Query (Int64, Scientific) Bool +modifyBalance = + statement + "update account set balance = balance + $2 where id = $1" + (contrazip2 (E.value E.int8) (E.value E.numeric)) + (fmap (> 0) D.rowsAffected) + True + +getBalance :: Query Int64 (Maybe Scientific) +getBalance = + statement + "select balance from account where id = $1" + (E.value E.int8) + (D.maybeRow (D.value D.numeric)) + True + diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs new file mode 100644 index 0000000000..c8bd7e44f2 --- /dev/null +++ b/conflicts-test/Main/Transactions.hs @@ -0,0 +1,27 @@ +module Main.Transactions where + +import Rebase.Prelude +import Hasql.Transaction +import qualified Main.Queries as Queries + + +createSchema :: Transaction () +createSchema = + do + query () Queries.createAccountTable + +dropSchema :: Transaction () +dropSchema = + do + query () Queries.dropAccountTable + +transfer :: Int64 -> Int64 -> Scientific -> Transaction () +transfer id1 id2 amount = + do + query (id1, amount) Queries.modifyBalance + query (id2, negate amount) Queries.modifyBalance + return () + +transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction () +transferTimes times id1 id2 amount = + replicateM_ times (transfer id1 id2 amount) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index bed4eaf395..3e428f0e80 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -61,3 +61,28 @@ library -- general: base-prelude >= 0.1.19 && < 2, base >= 4.6 && < 5 + + +test-suite conflicts-test + type: + exitcode-stdio-1.0 + hs-source-dirs: + conflicts-test + main-is: + Main.hs + other-modules: + Main.Queries + Main.Transactions + ghc-options: + -O2 + -threaded + "-with-rtsopts=-N" + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + hasql-transaction, + hasql, + async >= 2.1 && < 3, + rebase < 2 From 5e7231f1bdb3622fe9097cfa2e97efd414fd24f3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 10:23:13 +0300 Subject: [PATCH 0359/1204] Refactor a bit --- hasql-transaction.cabal | 3 +-- library/Hasql/Transaction.hs | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 3e428f0e80..c62cdccedb 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -47,9 +47,8 @@ library exposed-modules: Hasql.Transaction build-depends: - hasql >= 0.17 && < 0.20, -- database: - postgresql-error-codes >= 1 && < 2, + hasql >= 0.17 && < 0.20, -- data: bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index d3ca765f48..ed5c8716a1 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -15,7 +15,6 @@ import Hasql.Transaction.Prelude import qualified Hasql.Query as Query import qualified Hasql.Session as Session import qualified Hasql.Transaction.Queries as Queries -import qualified PostgreSQL.ErrorCodes as ErrorCodes -- | @@ -61,21 +60,23 @@ data IsolationLevel = {-# INLINABLE run #-} run :: Transaction a -> IsolationLevel -> Mode -> Session.Session a run (Transaction session) isolation mode = - do - resultEither <- do - Session.query () (Queries.beginTransaction mode') - tryError session - case resultEither of - Left error -> do - Session.query () Queries.abortTransaction - case error of - Session.ResultError (Session.ServerError code _ _ _) | code == ErrorCodes.serialization_failure -> - run (Transaction session) isolation mode - _ -> - throwError error - Right result -> do - Session.query () $ bool Queries.abortTransaction Queries.commitTransaction commit - pure result + fix $ + \ recur -> + do + resultEither <- do + Session.query () (Queries.beginTransaction mode') + tryError session + case resultEither of + Left error -> do + Session.query () Queries.abortTransaction + case error of + Session.ResultError (Session.ServerError "40001" _ _ _) -> + recur + _ -> + throwError error + Right result -> do + Session.query () $ bool Queries.abortTransaction Queries.commitTransaction commit + pure result where mode' = (unsafeCoerce isolation, write) From bc01ccbe43334bf7a1dbb321b14bb378a9731b3c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 10:32:15 +0300 Subject: [PATCH 0360/1204] Fix the issue #3 --- library/Hasql/Transaction.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index ed5c8716a1..0217148b9b 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -65,7 +65,10 @@ run (Transaction session) isolation mode = do resultEither <- do Session.query () (Queries.beginTransaction mode') - tryError session + tryError $ do + result <- session + Session.query () (bool Queries.abortTransaction Queries.commitTransaction commit) + return result case resultEither of Left error -> do Session.query () Queries.abortTransaction @@ -75,7 +78,6 @@ run (Transaction session) isolation mode = _ -> throwError error Right result -> do - Session.query () $ bool Queries.abortTransaction Queries.commitTransaction commit pure result where mode' = From 60a17c09dd35e887d3f30e7f377674cbd0463053 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 10:38:33 +0300 Subject: [PATCH 0361/1204] Update the tests --- conflicts-test/Main.hs | 53 +++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 1b16fb524c..c09ac179db 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -31,19 +31,16 @@ main = do try (transaction connection1 Transactions.dropSchema) :: IO (Either SomeException ()) transaction connection1 Transactions.createSchema - id1 <- session connection1 (Session.query 0 Queries.createAccount) - id2 <- session connection1 (Session.query 0 Queries.createAccount) - async1 <- Async.async (transaction connection1 (Transactions.transferTimes 200 id1 id2 1)) - async2 <- Async.async (transaction connection2 (Transactions.transferTimes 200 id1 id2 1)) - Async.wait async1 - Async.wait async2 - balance1 <- session connection1 (Session.query id1 Queries.getBalance) - balance2 <- session connection1 (Session.query id2 Queries.getBalance) - traceShowM balance1 - traceShowM balance2 - if balance1 == Just 400 && balance2 == Just (-400) + success <- fmap and (traverse runTest tests) + if success then exitSuccess else exitFailure + where + runTest test = + test connection1 connection2 + tests = + [transactionsTest, transactionAndQueryTest] + session connection session = Session.run session connection >>= @@ -51,3 +48,37 @@ session connection session = transaction connection transaction = session connection (Transaction.run transaction Transaction.RepeatableRead Transaction.Write) + + +type Test = + Connection.Connection -> Connection.Connection -> IO Bool + +transactionsTest :: Test +transactionsTest connection1 connection2 = + do + id1 <- session connection1 (Session.query 0 Queries.createAccount) + id2 <- session connection1 (Session.query 0 Queries.createAccount) + async1 <- Async.async (replicateM_ 1000 (transaction connection1 (Transactions.transfer id1 id2 1))) + async2 <- Async.async (replicateM_ 1000 (transaction connection2 (Transactions.transfer id1 id2 1))) + Async.wait async1 + Async.wait async2 + balance1 <- session connection1 (Session.query id1 Queries.getBalance) + balance2 <- session connection1 (Session.query id2 Queries.getBalance) + traceShowM balance1 + traceShowM balance2 + return (balance1 == Just 2000 && balance2 == Just (-2000)) + +transactionAndQueryTest :: Test +transactionAndQueryTest connection1 connection2 = + do + id1 <- session connection1 (Session.query 0 Queries.createAccount) + id2 <- session connection1 (Session.query 0 Queries.createAccount) + async1 <- Async.async (transaction connection1 (Transactions.transferTimes 200 id1 id2 1)) + async2 <- Async.async (session connection2 (replicateM_ 200 (Session.query (id1, 1) Queries.modifyBalance))) + Async.wait async1 + Async.wait async2 + balance1 <- session connection1 (Session.query id1 Queries.getBalance) + balance2 <- session connection1 (Session.query id2 Queries.getBalance) + traceShowM balance1 + traceShowM balance2 + return (balance1 == Just 400 && balance2 == Just (-200)) From 1ab92464c45dbf48565119de6b27090286969eda Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 10:39:01 +0300 Subject: [PATCH 0362/1204] Update the version --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index c62cdccedb..583c300367 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.5 + 0.4.5.1 category: Hasql, Database, PostgreSQL synopsis: From eb070157d4e038a4f3bb5e6f63aefa3844ce2b54 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Jun 2016 10:46:07 +0300 Subject: [PATCH 0363/1204] Update the tests --- conflicts-test/Main.hs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index c09ac179db..048424a8cd 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -39,7 +39,7 @@ main = runTest test = test connection1 connection2 tests = - [transactionsTest, transactionAndQueryTest] + [readAndWriteTransactionsTest, transactionsTest, transactionAndQueryTest] session connection session = @@ -68,6 +68,21 @@ transactionsTest connection1 connection2 = traceShowM balance2 return (balance1 == Just 2000 && balance2 == Just (-2000)) +readAndWriteTransactionsTest :: Test +readAndWriteTransactionsTest connection1 connection2 = + do + id1 <- session connection1 (Session.query 0 Queries.createAccount) + id2 <- session connection1 (Session.query 0 Queries.createAccount) + async1 <- Async.async (replicateM_ 1000 (transaction connection1 (Transactions.transfer id1 id2 1))) + async2 <- Async.async (replicateM_ 1000 (transaction connection2 (Transaction.query id1 Queries.getBalance))) + Async.wait async1 + Async.wait async2 + balance1 <- session connection1 (Session.query id1 Queries.getBalance) + balance2 <- session connection1 (Session.query id2 Queries.getBalance) + traceShowM balance1 + traceShowM balance2 + return (balance1 == Just 1000 && balance2 == Just (-1000)) + transactionAndQueryTest :: Test transactionAndQueryTest connection1 connection2 = do From cf455f87e07a51b94f5be1cd1d6b46e3f5c0a905 Mon Sep 17 00:00:00 2001 From: Sean Leather Date: Mon, 18 Jul 2016 08:46:49 +0200 Subject: [PATCH 0364/1204] Bump dlist upper bound to 0.9 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 38564b59b7..e1bec1a99c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -79,7 +79,7 @@ library -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, -- data: - dlist >= 0.7 && < 0.8, + dlist >= 0.7 && < 0.9, aeson >= 0.7 && < 0.12, uuid == 1.3.*, vector >= 0.10 && < 0.12, From 32e74061a0ced820da5753d6fd130c882359f869 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 18 Jul 2016 12:02:38 +0300 Subject: [PATCH 0365/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index e1bec1a99c..463a668b94 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.12 + 0.19.13 category: Hasql, Database, PostgreSQL synopsis: From 5450369bb35987acfc757afb169e4d25a6c06c7e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Jul 2016 10:49:20 +0300 Subject: [PATCH 0366/1204] Update the Travis setup --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1c1f990cad..f5628c815e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ env: - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 - ghc=7.8.1 cabal=1.18 - - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 - - ghc=8.0.1 cabal=1.24 + - ghc=7.10.1 cabal=1.22 + - ghc=8.0.1 cabal=1.24 benchmarks=1 tests=1 install: # Set up the Shell to treat the semicolon as && From 5fb07162a8547659dcaff8cf9722839b11cfaf6d Mon Sep 17 00:00:00 2001 From: Moritz Kiefer Date: Sat, 23 Jul 2016 12:20:50 +0200 Subject: [PATCH 0367/1204] Expose access to raw libpq connection Needed for #43. --- library/Hasql/Connection.hs | 1 + library/Hasql/Private/Connection.hs | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index a689bc9442..7018dcb9ba 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -8,6 +8,7 @@ module Hasql.Connection release, Settings, settings, + withLibPQConnection ) where diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 45aff6df2c..50c5391568 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -42,3 +42,9 @@ release (Connection pqConnectionRef _ _) = nullConnection <- LibPQ.newNullConnection pqConnection <- swapMVar pqConnectionRef nullConnection IO.releaseConnection pqConnection + +-- | Execute an operation on the raw @libpq@ 'LibPQ.Connection'. +-- +-- The access to the connection is exclusive. +withLibPQConnection :: Connection -> (LibPQ.Connection -> IO a) -> IO a +withLibPQConnection (Connection pqConnectionRef _ _) = withMVar pqConnectionRef From fe23060c753d91b477e2bae0070d2151234e39c1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Jul 2016 15:44:55 +0300 Subject: [PATCH 0368/1204] Style corrections --- library/Hasql/Private/Connection.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 50c5391568..39af167df9 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -43,8 +43,10 @@ release (Connection pqConnectionRef _ _) = pqConnection <- swapMVar pqConnectionRef nullConnection IO.releaseConnection pqConnection --- | Execute an operation on the raw @libpq@ 'LibPQ.Connection'. +-- | +-- Execute an operation on the raw @libpq@ 'LibPQ.Connection'. -- -- The access to the connection is exclusive. withLibPQConnection :: Connection -> (LibPQ.Connection -> IO a) -> IO a -withLibPQConnection (Connection pqConnectionRef _ _) = withMVar pqConnectionRef +withLibPQConnection (Connection pqConnectionRef _ _) = + withMVar pqConnectionRef From a80697d489c7f12764a18a27c8cbb9ea5f16943a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Jul 2016 15:45:50 +0300 Subject: [PATCH 0369/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 463a668b94..59a017885d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.13 + 0.19.14 category: Hasql, Database, PostgreSQL synopsis: From 39b6bae5c22d6ef40bcc6740d086feef4a10573a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Jul 2016 15:48:00 +0300 Subject: [PATCH 0370/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c9d6da8a1..934836a8c2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a **composable** abstraction over the database transactions with an **automated conflict resolution**. -* "hasql-stream" - an abstraction over cursors. *Yet to be released.* +* ["hasql-cursor"](https://github.com/nikita-volkov/hasql-cursor) - an abstraction over cursors. *Yet to be released.* * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. From 464a1eb687acf12c24705b5449527d684d47f22a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 25 Jul 2016 16:36:00 +0300 Subject: [PATCH 0371/1204] Add references to the Cursor libraries --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 934836a8c2..2e1ea40a1f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,9 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a **composable** abstraction over the database transactions with an **automated conflict resolution**. -* ["hasql-cursor"](https://github.com/nikita-volkov/hasql-cursor) - an abstraction over cursors. *Yet to be released.* +* ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. + +* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-query) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. From d0bc025271f09380d5d152328b1ba2bdaccaffd6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 25 Jul 2016 16:37:17 +0300 Subject: [PATCH 0372/1204] Correct README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e1ea40a1f..d05e08fa13 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a **composable** abstraction over the database transactions with an **automated conflict resolution**. +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a composable abstraction over the database transactions with the automated conflict resolution. * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. From f01b00612f1ab0bc8b268e669819b7d1372a60b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jul 2016 12:30:45 +0300 Subject: [PATCH 0373/1204] Conform to the "ABC" import qualification policy --- conflicts-test/Main.hs | 80 ++++++++++++++-------------- conflicts-test/Main/Transactions.hs | 10 ++-- library/Hasql/Transaction.hs | 24 ++++----- library/Hasql/Transaction/Queries.hs | 44 +++++++-------- 4 files changed, 79 insertions(+), 79 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 048424a8cd..bc78a6e4c3 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -1,12 +1,12 @@ module Main where import Rebase.Prelude -import qualified Hasql.Connection as Connection -import qualified Hasql.Session as Session -import qualified Hasql.Transaction as Transaction -import qualified Main.Queries as Queries -import qualified Main.Transactions as Transactions -import qualified Control.Concurrent.Async as Async +import qualified Hasql.Connection as A +import qualified Hasql.Session as B +import qualified Hasql.Transaction as C +import qualified Main.Queries as D +import qualified Main.Transactions as E +import qualified Control.Concurrent.Async as F main = @@ -18,19 +18,19 @@ main = acquire = join $ fmap (either (fail . show) return) $ - Connection.acquire connectionSettings + A.acquire connectionSettings where connectionSettings = - Connection.settings "localhost" 5432 "postgres" "" "postgres" + A.settings "localhost" 5432 "postgres" "" "postgres" release (connection1, connection2) = do - transaction connection1 Transactions.dropSchema - Connection.release connection1 - Connection.release connection2 + transaction connection1 E.dropSchema + A.release connection1 + A.release connection2 use (connection1, connection2) = do - try (transaction connection1 Transactions.dropSchema) :: IO (Either SomeException ()) - transaction connection1 Transactions.createSchema + try (transaction connection1 E.dropSchema) :: IO (Either SomeException ()) + transaction connection1 E.createSchema success <- fmap and (traverse runTest tests) if success then exitSuccess @@ -43,27 +43,27 @@ main = session connection session = - Session.run session connection >>= + B.run session connection >>= either (fail . show) return transaction connection transaction = - session connection (Transaction.run transaction Transaction.RepeatableRead Transaction.Write) + session connection (C.run transaction C.RepeatableRead C.Write) type Test = - Connection.Connection -> Connection.Connection -> IO Bool + A.Connection -> A.Connection -> IO Bool transactionsTest :: Test transactionsTest connection1 connection2 = do - id1 <- session connection1 (Session.query 0 Queries.createAccount) - id2 <- session connection1 (Session.query 0 Queries.createAccount) - async1 <- Async.async (replicateM_ 1000 (transaction connection1 (Transactions.transfer id1 id2 1))) - async2 <- Async.async (replicateM_ 1000 (transaction connection2 (Transactions.transfer id1 id2 1))) - Async.wait async1 - Async.wait async2 - balance1 <- session connection1 (Session.query id1 Queries.getBalance) - balance2 <- session connection1 (Session.query id2 Queries.getBalance) + id1 <- session connection1 (B.query 0 D.createAccount) + id2 <- session connection1 (B.query 0 D.createAccount) + async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1))) + async2 <- F.async (replicateM_ 1000 (transaction connection2 (E.transfer id1 id2 1))) + F.wait async1 + F.wait async2 + balance1 <- session connection1 (B.query id1 D.getBalance) + balance2 <- session connection1 (B.query id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 2000 && balance2 == Just (-2000)) @@ -71,14 +71,14 @@ transactionsTest connection1 connection2 = readAndWriteTransactionsTest :: Test readAndWriteTransactionsTest connection1 connection2 = do - id1 <- session connection1 (Session.query 0 Queries.createAccount) - id2 <- session connection1 (Session.query 0 Queries.createAccount) - async1 <- Async.async (replicateM_ 1000 (transaction connection1 (Transactions.transfer id1 id2 1))) - async2 <- Async.async (replicateM_ 1000 (transaction connection2 (Transaction.query id1 Queries.getBalance))) - Async.wait async1 - Async.wait async2 - balance1 <- session connection1 (Session.query id1 Queries.getBalance) - balance2 <- session connection1 (Session.query id2 Queries.getBalance) + id1 <- session connection1 (B.query 0 D.createAccount) + id2 <- session connection1 (B.query 0 D.createAccount) + async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1))) + async2 <- F.async (replicateM_ 1000 (transaction connection2 (C.query id1 D.getBalance))) + F.wait async1 + F.wait async2 + balance1 <- session connection1 (B.query id1 D.getBalance) + balance2 <- session connection1 (B.query id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 1000 && balance2 == Just (-1000)) @@ -86,14 +86,14 @@ readAndWriteTransactionsTest connection1 connection2 = transactionAndQueryTest :: Test transactionAndQueryTest connection1 connection2 = do - id1 <- session connection1 (Session.query 0 Queries.createAccount) - id2 <- session connection1 (Session.query 0 Queries.createAccount) - async1 <- Async.async (transaction connection1 (Transactions.transferTimes 200 id1 id2 1)) - async2 <- Async.async (session connection2 (replicateM_ 200 (Session.query (id1, 1) Queries.modifyBalance))) - Async.wait async1 - Async.wait async2 - balance1 <- session connection1 (Session.query id1 Queries.getBalance) - balance2 <- session connection1 (Session.query id2 Queries.getBalance) + id1 <- session connection1 (B.query 0 D.createAccount) + id2 <- session connection1 (B.query 0 D.createAccount) + async1 <- F.async (transaction connection1 (E.transferTimes 200 id1 id2 1)) + async2 <- F.async (session connection2 (replicateM_ 200 (B.query (id1, 1) D.modifyBalance))) + F.wait async1 + F.wait async2 + balance1 <- session connection1 (B.query id1 D.getBalance) + balance2 <- session connection1 (B.query id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 400 && balance2 == Just (-200)) diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index c8bd7e44f2..135e3a6646 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -2,24 +2,24 @@ module Main.Transactions where import Rebase.Prelude import Hasql.Transaction -import qualified Main.Queries as Queries +import qualified Main.Queries as A createSchema :: Transaction () createSchema = do - query () Queries.createAccountTable + query () A.createAccountTable dropSchema :: Transaction () dropSchema = do - query () Queries.dropAccountTable + query () A.dropAccountTable transfer :: Int64 -> Int64 -> Scientific -> Transaction () transfer id1 id2 amount = do - query (id1, amount) Queries.modifyBalance - query (id2, negate amount) Queries.modifyBalance + query (id1, amount) A.modifyBalance + query (id2, negate amount) A.modifyBalance return () transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction () diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 0217148b9b..ad8672c098 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -12,9 +12,9 @@ module Hasql.Transaction where import Hasql.Transaction.Prelude -import qualified Hasql.Query as Query -import qualified Hasql.Session as Session -import qualified Hasql.Transaction.Queries as Queries +import qualified Hasql.Query as A +import qualified Hasql.Session as B +import qualified Hasql.Transaction.Queries as C -- | @@ -24,7 +24,7 @@ import qualified Hasql.Transaction.Queries as Queries -- while automatically retrying the transaction in case of conflicts. -- Thus this abstraction closely reproduces the behaviour of 'STM'. newtype Transaction a = - Transaction (Session.Session a) + Transaction (B.Session a) deriving (Functor, Applicative, Monad) -- | @@ -58,22 +58,22 @@ data IsolationLevel = -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINABLE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> Session.Session a +run :: Transaction a -> IsolationLevel -> Mode -> B.Session a run (Transaction session) isolation mode = fix $ \ recur -> do resultEither <- do - Session.query () (Queries.beginTransaction mode') + B.query () (C.beginTransaction mode') tryError $ do result <- session - Session.query () (bool Queries.abortTransaction Queries.commitTransaction commit) + B.query () (bool C.abortTransaction C.commitTransaction commit) return result case resultEither of Left error -> do - Session.query () Queries.abortTransaction + B.query () C.abortTransaction case error of - Session.ResultError (Session.ServerError "40001" _ _ _) -> + B.ResultError (B.ServerError "40001" _ _ _) -> recur _ -> throwError error @@ -95,11 +95,11 @@ run (Transaction session) isolation mode = {-# INLINE sql #-} sql :: ByteString -> Transaction () sql sql = - Transaction $ Session.sql sql + Transaction $ B.sql sql -- | -- Parameters and a specification of the parametric query to apply them to. {-# INLINE query #-} -query :: a -> Query.Query a b -> Transaction b +query :: a -> A.Query a b -> Transaction b query params query = - Transaction $ Session.query params query + Transaction $ B.query params query diff --git a/library/Hasql/Transaction/Queries.hs b/library/Hasql/Transaction/Queries.hs index 024499bb56..95c14bb11b 100644 --- a/library/Hasql/Transaction/Queries.hs +++ b/library/Hasql/Transaction/Queries.hs @@ -2,10 +2,10 @@ module Hasql.Transaction.Queries where import Hasql.Transaction.Prelude -import qualified Hasql.Query as HQ -import qualified Hasql.Encoders as HE -import qualified Hasql.Decoders as HD -import qualified ByteString.TreeBuilder as TB +import qualified Hasql.Query as A +import qualified Hasql.Encoders as B +import qualified Hasql.Decoders as C +import qualified ByteString.TreeBuilder as D -- * Transactions @@ -19,12 +19,12 @@ data Isolation = type TransactionMode = (Isolation, Bool) -beginTransaction :: TransactionMode -> HQ.Query () () +beginTransaction :: TransactionMode -> A.Query () () beginTransaction (isolation, write) = - HQ.statement sql HE.unit HD.unit True + A.statement sql B.unit C.unit True where sql = - TB.toByteString $ + D.toByteString $ mconcat $ [ "BEGIN " @@ -41,39 +41,39 @@ beginTransaction (isolation, write) = False -> "READ ONLY" ] -commitTransaction :: HQ.Query () () +commitTransaction :: A.Query () () commitTransaction = - HQ.statement "commit" HE.unit HD.unit True + A.statement "commit" B.unit C.unit True -abortTransaction :: HQ.Query () () +abortTransaction :: A.Query () () abortTransaction = - HQ.statement "abort" HE.unit HD.unit True + A.statement "abort" B.unit C.unit True -- * Streaming ------------------------- -declareCursor :: ByteString -> ByteString -> HE.Params a -> HQ.Query a () +declareCursor :: ByteString -> ByteString -> B.Params a -> A.Query a () declareCursor name sql encoder = - HQ.statement sql' encoder HD.unit False + A.statement sql' encoder C.unit False where sql' = - TB.toByteString $ - "DECLARE " <> TB.byteString name <> " NO SCROLL CURSOR FOR " <> TB.byteString sql + D.toByteString $ + "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql -closeCursor :: HQ.Query ByteString () +closeCursor :: A.Query ByteString () closeCursor = - HQ.statement "CLOSE $1" (HE.value HE.bytea) HD.unit True + A.statement "CLOSE $1" (B.value B.bytea) C.unit True -fetchFromCursor :: (b -> a -> b) -> b -> HD.Row a -> HQ.Query (Int64, ByteString) b +fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Query (Int64, ByteString) b fetchFromCursor step init rowDec = - HQ.statement sql encoder decoder True + A.statement sql encoder decoder True where sql = "FETCH FORWARD $1 FROM $2" encoder = contrazip2 - (HE.value HE.int8) - (HE.value HE.bytea) + (B.value B.int8) + (B.value B.bytea) decoder = - HD.foldlRows step init rowDec + C.foldlRows step init rowDec From 7a474999965a502707544a0d0bc6c4fdb733a339 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jul 2016 12:37:54 +0300 Subject: [PATCH 0374/1204] Inc the major version --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 583c300367..d32a99c02e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.4.5.1 + 0.5 category: Hasql, Database, PostgreSQL synopsis: From 6f555643e3dda1314b053335d31d98d4a4388a06 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jul 2016 12:44:56 +0300 Subject: [PATCH 0375/1204] Rearrange the package according to the standard from "hasql-cursor-query" --- conflicts-test/Main.hs | 3 +- hasql-transaction.cabal | 6 +- library/Hasql/Transaction.hs | 96 +------------------ .../Transaction/{ => Private}/Prelude.hs | 2 +- .../Transaction/{ => Private}/Queries.hs | 4 +- .../Hasql/Transaction/Private/Transaction.hs | 95 ++++++++++++++++++ library/Hasql/Transaction/Sessions.hs | 16 ++++ 7 files changed, 123 insertions(+), 99 deletions(-) rename library/Hasql/Transaction/{ => Private}/Prelude.hs (96%) rename library/Hasql/Transaction/{ => Private}/Queries.hs (95%) create mode 100644 library/Hasql/Transaction/Private/Transaction.hs create mode 100644 library/Hasql/Transaction/Sessions.hs diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index bc78a6e4c3..00c16c4a38 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -4,6 +4,7 @@ import Rebase.Prelude import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Transaction as C +import qualified Hasql.Transaction.Sessions as G import qualified Main.Queries as D import qualified Main.Transactions as E import qualified Control.Concurrent.Async as F @@ -47,7 +48,7 @@ session connection session = either (fail . show) return transaction connection transaction = - session connection (C.run transaction C.RepeatableRead C.Write) + session connection (G.transaction C.RepeatableRead C.Write transaction) type Test = diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index d32a99c02e..264e617ced 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -42,10 +42,12 @@ library default-language: Haskell2010 other-modules: - Hasql.Transaction.Prelude - Hasql.Transaction.Queries + Hasql.Transaction.Private.Prelude + Hasql.Transaction.Private.Queries + Hasql.Transaction.Private.Transaction exposed-modules: Hasql.Transaction + Hasql.Transaction.Sessions build-depends: -- database: hasql >= 0.17 && < 0.20, diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index ad8672c098..e8314642cd 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -1,3 +1,5 @@ +-- | +-- An API for declaration of transactions. module Hasql.Transaction ( -- * Transaction settings @@ -5,101 +7,9 @@ module Hasql.Transaction IsolationLevel(..), -- * Transaction monad Transaction, - run, sql, query, ) where -import Hasql.Transaction.Prelude -import qualified Hasql.Query as A -import qualified Hasql.Session as B -import qualified Hasql.Transaction.Queries as C - - --- | --- A composable abstraction over the retryable transactions. --- --- Executes multiple queries under the specified mode and isolation level, --- while automatically retrying the transaction in case of conflicts. --- Thus this abstraction closely reproduces the behaviour of 'STM'. -newtype Transaction a = - Transaction (B.Session a) - deriving (Functor, Applicative, Monad) - --- | --- -data Mode = - -- | - -- Read-only. No writes possible. - Read | - -- | - -- Write and commit. - Write | - -- | - -- Write without committing. - -- Useful for testing, - -- allowing you to modify your database, - -- producing some result based on your changes, - -- and letting Hasql roll all the changes back on the exit from the transaction. - WriteWithoutCommitting - deriving (Show, Eq, Ord, Enum, Bounded) - --- | --- For reference see --- . --- -data IsolationLevel = - ReadCommitted | - RepeatableRead | - Serializable - deriving (Show, Eq, Ord, Enum, Bounded) - --- | --- Execute the transaction using the provided isolation level and mode. -{-# INLINABLE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> B.Session a -run (Transaction session) isolation mode = - fix $ - \ recur -> - do - resultEither <- do - B.query () (C.beginTransaction mode') - tryError $ do - result <- session - B.query () (bool C.abortTransaction C.commitTransaction commit) - return result - case resultEither of - Left error -> do - B.query () C.abortTransaction - case error of - B.ResultError (B.ServerError "40001" _ _ _) -> - recur - _ -> - throwError error - Right result -> do - pure result - where - mode' = - (unsafeCoerce isolation, write) - (write, commit) = - case mode of - Read -> (False, True) - Write -> (True, True) - WriteWithoutCommitting -> (True, False) - --- | --- Possibly a multi-statement query, --- which however cannot be parameterized or prepared, --- nor can any results of it be collected. -{-# INLINE sql #-} -sql :: ByteString -> Transaction () -sql sql = - Transaction $ B.sql sql - --- | --- Parameters and a specification of the parametric query to apply them to. -{-# INLINE query #-} -query :: a -> A.Query a b -> Transaction b -query params query = - Transaction $ B.query params query +import Hasql.Transaction.Private.Transaction diff --git a/library/Hasql/Transaction/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs similarity index 96% rename from library/Hasql/Transaction/Prelude.hs rename to library/Hasql/Transaction/Private/Prelude.hs index 40984c1419..40d009d2a3 100644 --- a/library/Hasql/Transaction/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -1,4 +1,4 @@ -module Hasql.Transaction.Prelude +module Hasql.Transaction.Private.Prelude ( module Exports, tryError, diff --git a/library/Hasql/Transaction/Queries.hs b/library/Hasql/Transaction/Private/Queries.hs similarity index 95% rename from library/Hasql/Transaction/Queries.hs rename to library/Hasql/Transaction/Private/Queries.hs index 95c14bb11b..e5cff712c6 100644 --- a/library/Hasql/Transaction/Queries.hs +++ b/library/Hasql/Transaction/Private/Queries.hs @@ -1,7 +1,7 @@ -module Hasql.Transaction.Queries +module Hasql.Transaction.Private.Queries where -import Hasql.Transaction.Prelude +import Hasql.Transaction.Private.Prelude import qualified Hasql.Query as A import qualified Hasql.Encoders as B import qualified Hasql.Decoders as C diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs new file mode 100644 index 0000000000..4d4129f6d8 --- /dev/null +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -0,0 +1,95 @@ +module Hasql.Transaction.Private.Transaction +where + +import Hasql.Transaction.Private.Prelude +import qualified Hasql.Query as A +import qualified Hasql.Session as B +import qualified Hasql.Transaction.Private.Queries as C + + +-- | +-- A composable abstraction over the retryable transactions. +-- +-- Executes multiple queries under the specified mode and isolation level, +-- while automatically retrying the transaction in case of conflicts. +-- Thus this abstraction closely reproduces the behaviour of 'STM'. +newtype Transaction a = + Transaction (B.Session a) + deriving (Functor, Applicative, Monad) + +-- | +-- +data Mode = + -- | + -- Read-only. No writes possible. + Read | + -- | + -- Write and commit. + Write | + -- | + -- Write without committing. + -- Useful for testing, + -- allowing you to modify your database, + -- producing some result based on your changes, + -- and letting Hasql roll all the changes back on the exit from the transaction. + WriteWithoutCommitting + deriving (Show, Eq, Ord, Enum, Bounded) + +-- | +-- For reference see +-- . +-- +data IsolationLevel = + ReadCommitted | + RepeatableRead | + Serializable + deriving (Show, Eq, Ord, Enum, Bounded) + +-- | +-- Execute the transaction using the provided isolation level and mode. +{-# INLINABLE run #-} +run :: Transaction a -> IsolationLevel -> Mode -> B.Session a +run (Transaction session) isolation mode = + fix $ + \ recur -> + do + resultEither <- do + B.query () (C.beginTransaction mode') + tryError $ do + result <- session + B.query () (bool C.abortTransaction C.commitTransaction commit) + return result + case resultEither of + Left error -> do + B.query () C.abortTransaction + case error of + B.ResultError (B.ServerError "40001" _ _ _) -> + recur + _ -> + throwError error + Right result -> do + pure result + where + mode' = + (unsafeCoerce isolation, write) + (write, commit) = + case mode of + Read -> (False, True) + Write -> (True, True) + WriteWithoutCommitting -> (True, False) + +-- | +-- Possibly a multi-statement query, +-- which however cannot be parameterized or prepared, +-- nor can any results of it be collected. +{-# INLINE sql #-} +sql :: ByteString -> Transaction () +sql sql = + Transaction $ B.sql sql + +-- | +-- Parameters and a specification of the parametric query to apply them to. +{-# INLINE query #-} +query :: a -> A.Query a b -> Transaction b +query params query = + Transaction $ B.query params query diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs new file mode 100644 index 0000000000..1326753e55 --- /dev/null +++ b/library/Hasql/Transaction/Sessions.hs @@ -0,0 +1,16 @@ +module Hasql.Transaction.Sessions +( + transaction, +) +where + +import qualified Hasql.Transaction.Private.Transaction as A +import qualified Hasql.Session as B + + +-- | +-- Execute the transaction using the provided isolation level and mode. +{-# INLINE transaction #-} +transaction :: A.IsolationLevel -> A.Mode -> A.Transaction a -> B.Session a +transaction isolation mode transaction = + A.run transaction isolation mode From 0ca17e59cfdd72e35526f41264bbf86ac3f27a57 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jul 2016 13:06:05 +0300 Subject: [PATCH 0376/1204] Make the "transfer" implementation safer --- conflicts-test/Main/Transactions.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index 135e3a6646..e206855ef3 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -15,12 +15,15 @@ dropSchema = do query () A.dropAccountTable -transfer :: Int64 -> Int64 -> Scientific -> Transaction () +transfer :: Int64 -> Int64 -> Scientific -> Transaction Bool transfer id1 id2 amount = do - query (id1, amount) A.modifyBalance - query (id2, negate amount) A.modifyBalance - return () + success <- query (id1, amount) A.modifyBalance + if success + then + query (id2, negate amount) A.modifyBalance + else + return False transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction () transferTimes times id1 id2 amount = From 9badb723f67ffee183b603367ab6e53de9ce1f8d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 28 Jul 2016 13:08:21 +0300 Subject: [PATCH 0377/1204] Update the Travis setup --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1984eeaf21..a78d157fad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ env: - ghc=7.6.1 cabal=1.18 - ghc=7.8.1 cabal=1.18 - - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 - - ghc=8.0.1 cabal=1.24 + - ghc=7.10.1 cabal=1.22 + - ghc=8.0.1 cabal=1.24 benchmarks=1 tests=1 install: # Set up the Shell to treat the semicolon as && From af4583f403ba2c725b6b4a22567c9035dae5ef34 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 6 Aug 2016 12:22:11 +0300 Subject: [PATCH 0378/1204] Move all the private modules into the according namespace --- hasql.cabal | 26 +++++++++---------- library/Hasql/Connection.hs | 2 +- library/Hasql/Decoders.hs | 16 ++++++------ library/Hasql/Encoders.hs | 12 ++++----- library/Hasql/{ => Private}/Commands.hs | 4 +-- library/Hasql/Private/Connection.hs | 4 +-- library/Hasql/{ => Private}/Decoders/Array.hs | 4 +-- .../Hasql/{ => Private}/Decoders/Composite.hs | 4 +-- .../Hasql/{ => Private}/Decoders/Result.hs | 8 +++--- .../Hasql/{ => Private}/Decoders/Results.hs | 10 +++---- library/Hasql/{ => Private}/Decoders/Row.hs | 6 ++--- library/Hasql/{ => Private}/Decoders/Value.hs | 4 +-- library/Hasql/{ => Private}/Encoders/Array.hs | 6 ++--- .../Hasql/{ => Private}/Encoders/Params.hs | 8 +++--- library/Hasql/{ => Private}/Encoders/Value.hs | 6 ++--- library/Hasql/Private/IO.hs | 10 +++---- library/Hasql/{ => Private}/PTI.hs | 4 +-- library/Hasql/{ => Private}/Prelude.hs | 2 +- .../Private/PreparedStatementRegistry.hs | 2 +- library/Hasql/Private/Query.hs | 6 ++--- library/Hasql/Private/Session.hs | 8 +++--- library/Hasql/{ => Private}/Settings.hs | 4 +-- library/Hasql/Query.hs | 12 ++++----- 23 files changed, 84 insertions(+), 84 deletions(-) rename library/Hasql/{ => Private}/Commands.hs (92%) rename library/Hasql/{ => Private}/Decoders/Array.hs (92%) rename library/Hasql/{ => Private}/Decoders/Composite.hs (90%) rename library/Hasql/{ => Private}/Decoders/Result.hs (97%) rename library/Hasql/{ => Private}/Decoders/Results.hs (91%) rename library/Hasql/{ => Private}/Decoders/Row.hs (93%) rename library/Hasql/{ => Private}/Decoders/Value.hs (89%) rename library/Hasql/{ => Private}/Encoders/Array.hs (89%) rename library/Hasql/{ => Private}/Encoders/Params.hs (89%) rename library/Hasql/{ => Private}/Encoders/Value.hs (86%) rename library/Hasql/{ => Private}/PTI.hs (97%) rename library/Hasql/{ => Private}/Prelude.hs (99%) rename library/Hasql/{ => Private}/Settings.hs (95%) diff --git a/hasql.cabal b/hasql.cabal index 59a017885d..72ceedf5ca 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -46,24 +46,24 @@ library default-language: Haskell2010 other-modules: - Hasql.Prelude - Hasql.PTI + Hasql.Private.Prelude + Hasql.Private.PTI Hasql.Private.IO Hasql.Private.Query Hasql.Private.Session Hasql.Private.Connection Hasql.Private.PreparedStatementRegistry - Hasql.Settings - Hasql.Commands - Hasql.Decoders.Array - Hasql.Decoders.Composite - Hasql.Decoders.Value - Hasql.Decoders.Row - Hasql.Decoders.Result - Hasql.Decoders.Results - Hasql.Encoders.Array - Hasql.Encoders.Value - Hasql.Encoders.Params + Hasql.Private.Settings + Hasql.Private.Commands + Hasql.Private.Decoders.Array + Hasql.Private.Decoders.Composite + Hasql.Private.Decoders.Value + Hasql.Private.Decoders.Row + Hasql.Private.Decoders.Result + Hasql.Private.Decoders.Results + Hasql.Private.Encoders.Array + Hasql.Private.Encoders.Value + Hasql.Private.Encoders.Params exposed-modules: Hasql.Decoders Hasql.Encoders diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 7018dcb9ba..1e70b6a257 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -13,4 +13,4 @@ module Hasql.Connection where import Hasql.Private.Connection -import Hasql.Settings +import Hasql.Private.Settings diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index cf7ccd65ce..dfd724ddd9 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -58,17 +58,17 @@ module Hasql.Decoders ) where -import Hasql.Prelude hiding (maybe, bool) +import Hasql.Private.Prelude hiding (maybe, bool) import qualified Data.Aeson as Aeson import qualified Data.Vector as Vector import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Decoders.Results as Results -import qualified Hasql.Decoders.Result as Result -import qualified Hasql.Decoders.Row as Row -import qualified Hasql.Decoders.Value as Value -import qualified Hasql.Decoders.Array as Array -import qualified Hasql.Decoders.Composite as Composite -import qualified Hasql.Prelude as Prelude +import qualified Hasql.Private.Decoders.Results as Results +import qualified Hasql.Private.Decoders.Result as Result +import qualified Hasql.Private.Decoders.Row as Row +import qualified Hasql.Private.Decoders.Value as Value +import qualified Hasql.Private.Decoders.Array as Array +import qualified Hasql.Private.Decoders.Composite as Composite +import qualified Hasql.Private.Prelude as Prelude -- * Result diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index e0c543f199..ea39b5ed7f 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -41,14 +41,14 @@ module Hasql.Encoders ) where -import Hasql.Prelude hiding (bool) +import Hasql.Private.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoder as Encoder import qualified Data.Aeson as Aeson -import qualified Hasql.Encoders.Params as Params -import qualified Hasql.Encoders.Value as Value -import qualified Hasql.Encoders.Array as Array -import qualified Hasql.PTI as PTI -import qualified Hasql.Prelude as Prelude +import qualified Hasql.Private.Encoders.Params as Params +import qualified Hasql.Private.Encoders.Value as Value +import qualified Hasql.Private.Encoders.Array as Array +import qualified Hasql.Private.PTI as PTI +import qualified Hasql.Private.Prelude as Prelude -- * Parameters Product Encoder diff --git a/library/Hasql/Commands.hs b/library/Hasql/Private/Commands.hs similarity index 92% rename from library/Hasql/Commands.hs rename to library/Hasql/Private/Commands.hs index 2eee535a3c..602fbd4e42 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Private/Commands.hs @@ -1,4 +1,4 @@ -module Hasql.Commands +module Hasql.Private.Commands ( Commands, asBytes, @@ -7,7 +7,7 @@ module Hasql.Commands ) where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Data.ByteString as B import qualified Data.ByteString.Lazy.Builder as BB import qualified Data.ByteString.Lazy.Builder.ASCII as BB diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 39af167df9..86d2e5abe7 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -3,11 +3,11 @@ module Hasql.Private.Connection where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Private.IO as IO -import qualified Hasql.Settings as Settings +import qualified Hasql.Private.Settings as Settings -- | diff --git a/library/Hasql/Decoders/Array.hs b/library/Hasql/Private/Decoders/Array.hs similarity index 92% rename from library/Hasql/Decoders/Array.hs rename to library/Hasql/Private/Decoders/Array.hs index 4038e44f1c..6c13eb8bbb 100644 --- a/library/Hasql/Decoders/Array.hs +++ b/library/Hasql/Private/Decoders/Array.hs @@ -1,6 +1,6 @@ -module Hasql.Decoders.Array where +module Hasql.Private.Decoders.Array where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder diff --git a/library/Hasql/Decoders/Composite.hs b/library/Hasql/Private/Decoders/Composite.hs similarity index 90% rename from library/Hasql/Decoders/Composite.hs rename to library/Hasql/Private/Decoders/Composite.hs index a304aef4d8..d2cf7b9e10 100644 --- a/library/Hasql/Decoders/Composite.hs +++ b/library/Hasql/Private/Decoders/Composite.hs @@ -1,6 +1,6 @@ -module Hasql.Decoders.Composite where +module Hasql.Private.Decoders.Composite where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs similarity index 97% rename from library/Hasql/Decoders/Result.hs rename to library/Hasql/Private/Decoders/Result.hs index 53015644a2..f4ae9c6515 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -1,11 +1,11 @@ -module Hasql.Decoders.Result where +module Hasql.Private.Decoders.Result where -import Hasql.Prelude hiding (maybe, many) +import Hasql.Private.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoders.Row as Row +import qualified Hasql.Private.Decoders.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString -import qualified Hasql.Prelude as Prelude +import qualified Hasql.Private.Prelude as Prelude import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MutableVector diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs similarity index 91% rename from library/Hasql/Decoders/Results.hs rename to library/Hasql/Private/Decoders/Results.hs index fdcb29111b..1636aa2757 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -9,13 +9,13 @@ -- -- * Row-by-row fetching. -- -module Hasql.Decoders.Results where +module Hasql.Private.Decoders.Results where -import Hasql.Prelude hiding (maybe, many) +import Hasql.Private.Prelude hiding (maybe, many) import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Prelude as Prelude -import qualified Hasql.Decoders.Result as Result -import qualified Hasql.Decoders.Row as Row +import qualified Hasql.Private.Prelude as Prelude +import qualified Hasql.Private.Decoders.Result as Result +import qualified Hasql.Private.Decoders.Row as Row newtype Results a = diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs similarity index 93% rename from library/Hasql/Decoders/Row.hs rename to library/Hasql/Private/Decoders/Row.hs index 83024160b6..2c5e20358f 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -1,9 +1,9 @@ -module Hasql.Decoders.Row where +module Hasql.Private.Decoders.Row where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder -import qualified Hasql.Decoders.Value as Value +import qualified Hasql.Private.Decoders.Value as Value newtype Row a = diff --git a/library/Hasql/Decoders/Value.hs b/library/Hasql/Private/Decoders/Value.hs similarity index 89% rename from library/Hasql/Decoders/Value.hs rename to library/Hasql/Private/Decoders/Value.hs index 1842310126..4583110607 100644 --- a/library/Hasql/Decoders/Value.hs +++ b/library/Hasql/Private/Decoders/Value.hs @@ -1,6 +1,6 @@ -module Hasql.Decoders.Value where +module Hasql.Private.Decoders.Value where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoder as Decoder diff --git a/library/Hasql/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs similarity index 89% rename from library/Hasql/Encoders/Array.hs rename to library/Hasql/Private/Encoders/Array.hs index ea1e6691b7..86fa0ab801 100644 --- a/library/Hasql/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -1,9 +1,9 @@ -module Hasql.Encoders.Array where +module Hasql.Private.Encoders.Array where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.PTI as PTI +import qualified Hasql.Private.PTI as PTI data Array a = diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs similarity index 89% rename from library/Hasql/Encoders/Params.hs rename to library/Hasql/Private/Encoders/Params.hs index 6578c507b4..f2f5d48a07 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -1,10 +1,10 @@ -module Hasql.Encoders.Params where +module Hasql.Private.Encoders.Params where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.Encoders.Value as Value -import qualified Hasql.PTI as PTI +import qualified Hasql.Private.Encoders.Value as Value +import qualified Hasql.Private.PTI as PTI -- | diff --git a/library/Hasql/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs similarity index 86% rename from library/Hasql/Encoders/Value.hs rename to library/Hasql/Private/Encoders/Value.hs index 2627deb2f2..fbcce625fc 100644 --- a/library/Hasql/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -1,9 +1,9 @@ -module Hasql.Encoders.Value where +module Hasql.Private.Encoders.Value where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.PTI as PTI +import qualified Hasql.Private.PTI as PTI data Value a = diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index 64e12cc5db..a268a5b53a 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -3,13 +3,13 @@ module Hasql.Private.IO where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Commands as Commands +import qualified Hasql.Private.Commands as Commands import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Decoders.Result as ResultDecoders -import qualified Hasql.Decoders.Results as ResultsDecoders -import qualified Hasql.Encoders.Params as ParamsEncoders +import qualified Hasql.Private.Decoders.Result as ResultDecoders +import qualified Hasql.Private.Decoders.Results as ResultsDecoders +import qualified Hasql.Private.Encoders.Params as ParamsEncoders import qualified Data.DList as DList diff --git a/library/Hasql/PTI.hs b/library/Hasql/Private/PTI.hs similarity index 97% rename from library/Hasql/PTI.hs rename to library/Hasql/Private/PTI.hs index c1959f9831..5c34214fd2 100644 --- a/library/Hasql/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -1,6 +1,6 @@ -module Hasql.PTI where +module Hasql.Private.PTI where -import Hasql.Prelude hiding (bool) +import Hasql.Private.Prelude hiding (bool) import qualified Database.PostgreSQL.LibPQ as LibPQ diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Private/Prelude.hs similarity index 99% rename from library/Hasql/Prelude.hs rename to library/Hasql/Private/Prelude.hs index 3dc0c7cc85..533a0ae287 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -1,4 +1,4 @@ -module Hasql.Prelude +module Hasql.Private.Prelude ( module Exports, LazyByteString, diff --git a/library/Hasql/Private/PreparedStatementRegistry.hs b/library/Hasql/Private/PreparedStatementRegistry.hs index 0006b5ad33..e04c2354b7 100644 --- a/library/Hasql/Private/PreparedStatementRegistry.hs +++ b/library/Hasql/Private/PreparedStatementRegistry.hs @@ -7,7 +7,7 @@ module Hasql.Private.PreparedStatementRegistry ) where -import Hasql.Prelude hiding (lookup) +import Hasql.Private.Prelude hiding (lookup) import qualified Data.HashTable.IO as A import qualified ByteString.TreeBuilder as B diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs index f056563cd9..ff45cb0f5c 100644 --- a/library/Hasql/Private/Query.hs +++ b/library/Hasql/Private/Query.hs @@ -1,12 +1,12 @@ module Hasql.Private.Query where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.IO as IO import qualified Hasql.Private.Connection as Connection -import qualified Hasql.Decoders.Results as Decoders.Results -import qualified Hasql.Encoders.Params as Encoders.Params +import qualified Hasql.Private.Decoders.Results as Decoders.Results +import qualified Hasql.Private.Encoders.Params as Encoders.Params -- | diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index fafe4187f0..d09845f08d 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -1,11 +1,11 @@ module Hasql.Private.Session where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoders.Results as Decoders.Results -import qualified Hasql.Decoders.Result as Decoders.Result -import qualified Hasql.Settings as Settings +import qualified Hasql.Private.Decoders.Results as Decoders.Results +import qualified Hasql.Private.Decoders.Result as Decoders.Result +import qualified Hasql.Private.Settings as Settings import qualified Hasql.Private.IO as IO import qualified Hasql.Private.Query as Query import qualified Hasql.Private.Connection as Connection diff --git a/library/Hasql/Settings.hs b/library/Hasql/Private/Settings.hs similarity index 95% rename from library/Hasql/Settings.hs rename to library/Hasql/Private/Settings.hs index 0d87a4b12b..80c1cf620d 100644 --- a/library/Hasql/Settings.hs +++ b/library/Hasql/Private/Settings.hs @@ -1,6 +1,6 @@ -module Hasql.Settings where +module Hasql.Private.Settings where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Data.ByteString as B import qualified Data.ByteString.Lazy.Builder as BB import qualified Data.ByteString.Lazy.Builder.ASCII as BB diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 02f7cdcdf9..2e1c4b762d 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -5,11 +5,11 @@ module Hasql.Query ) where -import Hasql.Prelude +import Hasql.Private.Prelude import qualified Hasql.Private.Query as Query -import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Private.Decoders.Results as Decoders.Results import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders.Params as Encoders.Params +import qualified Hasql.Private.Encoders.Params as Encoders.Params import qualified Hasql.Encoders as Encoders @@ -41,10 +41,10 @@ import qualified Hasql.Encoders as Encoders -- sql = -- "select ($1 + $2)" -- encoder = --- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') '<>' --- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') +-- 'contramap' 'fst' (Hasql.Private.Encoders.'Hasql.Private.Encoders.value' Hasql.Private.Encoders.'Hasql.Private.Encoders.int8') '<>' +-- 'contramap' 'snd' (Hasql.Private.Encoders.'Hasql.Private.Encoders.value' Hasql.Private.Encoders.'Hasql.Private.Encoders.int8') -- decoder = --- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.value' Hasql.Decoders.'Hasql.Decoders.int8') +-- Hasql.Private.Decoders.'Hasql.Private.Decoders.singleRow' (Hasql.Private.Decoders.'Hasql.Private.Decoders.value' Hasql.Private.Decoders.'Hasql.Private.Decoders.int8') -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' From 5b7cf619a545ad4afc9b04666920e3b313d359b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Aug 2016 23:56:44 +0300 Subject: [PATCH 0379/1204] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d05e08fa13..e9bfad7f94 100644 --- a/README.md +++ b/README.md @@ -4,19 +4,19 @@ Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both ## Ecosystem -Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task, do that well and stay simple. +Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. * ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything revolves around that library. * ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - a composable abstraction over the database transactions with the automated conflict resolution. +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with the automated conflict resolution. * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. * ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-query) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. -* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting the SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. +* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. * "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* From 9276a11843b338173bf9265fe1399e092e420ea9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 11 Aug 2016 23:20:07 +0300 Subject: [PATCH 0380/1204] Update the "aeson" bounds --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 72ceedf5ca..6b9b6969cc 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -80,7 +80,7 @@ library bytestring-tree-builder >= 0.2.5 && < 0.3, -- data: dlist >= 0.7 && < 0.9, - aeson >= 0.7 && < 0.12, + aeson >= 0.7 && < 2, uuid == 1.3.*, vector >= 0.10 && < 0.12, time >= 1.4 && < 2, From d98da8b5cb0f1afbbff306c3694d28d5242f457c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 11 Aug 2016 23:20:31 +0300 Subject: [PATCH 0381/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 6b9b6969cc..ecafa48fe4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.14 + 0.19.15 category: Hasql, Database, PostgreSQL synopsis: From 16e88cc3bbfab53f60c4e1319c6ba38235863b6f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 11 Aug 2016 23:52:59 +0300 Subject: [PATCH 0382/1204] Let's be modest --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index ecafa48fe4..132c156b9f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -5,7 +5,7 @@ version: category: Hasql, Database, PostgreSQL synopsis: - A very efficient PostgreSQL driver and a flexible mapping API + An efficient PostgreSQL driver and a flexible mapping API description: This package is the root of the \"hasql\" ecosystem. . From 5c56677764bdf674171b25548ff6c55676400578 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Aug 2016 08:03:26 +0300 Subject: [PATCH 0383/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9bfad7f94..03d369f481 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * **Interchangeability and competition of the ecosystem components.** E.g., [not everyone will agree](https://github.com/nikita-volkov/hasql/issues/41) with the restrictive design decisions made in the "hasql-transaction" library. However those decisions are not imposed on the user, and instead of having endless debates about how to abstract over transactions, another extension library can simply be released, which will provide a different interpretation of what the abstraction over transactions should be. -* **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical unscalable one, where some core-team is responsible for everything. +* **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical one, where some core-team is responsible for everything. One is scalable, the other is not. --- From a802f907a4fedd3328aea26a79ee4b387da61a87 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 20 Sep 2016 06:07:51 +0300 Subject: [PATCH 0384/1204] Fix the docs --- hasql.cabal | 2 +- library/Hasql/Query.hs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 132c156b9f..e8224c8e64 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.15 + 0.19.15.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 2e1c4b762d..491cd5e13f 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -41,10 +41,10 @@ import qualified Hasql.Encoders as Encoders -- sql = -- "select ($1 + $2)" -- encoder = --- 'contramap' 'fst' (Hasql.Private.Encoders.'Hasql.Private.Encoders.value' Hasql.Private.Encoders.'Hasql.Private.Encoders.int8') '<>' --- 'contramap' 'snd' (Hasql.Private.Encoders.'Hasql.Private.Encoders.value' Hasql.Private.Encoders.'Hasql.Private.Encoders.int8') +-- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') '<>' +-- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') -- decoder = --- Hasql.Private.Decoders.'Hasql.Private.Decoders.singleRow' (Hasql.Private.Decoders.'Hasql.Private.Decoders.value' Hasql.Private.Decoders.'Hasql.Private.Decoders.int8') +-- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.value' Hasql.Decoders.'Hasql.Decoders.int8') -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' From 08564ab360b80b473dbd4999ce7259f4b421ba1e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 1 Oct 2016 15:34:44 +0300 Subject: [PATCH 0385/1204] Fix the Composite decoder --- hasql.cabal | 4 ++-- tasty/Main.hs | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index e8224c8e64..00ebf06a2b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.15.1 + 0.19.15.2 category: Hasql, Database, PostgreSQL synopsis: @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.9 && < 0.10, + postgresql-binary >= 0.9.1.1 && < 0.10, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, diff --git a/tasty/Main.hs b/tasty/Main.hs index 35d96d9bcc..491d49d3e0 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,23 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "Composite decoding" $ + let + query = + Query.statement sql encoder decoder True + where + sql = + "select (1, true)" + encoder = + Encoders.unit + decoder = + Decoders.singleRow (Decoders.value (Decoders.composite ((,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool))) + session = + Session.query () query + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (1, True))) x + , testCase "Empty array" $ let io = @@ -334,6 +351,6 @@ tree = let actualIO = DSL.session $ DSL.query () $ Queries.selectList - in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] From a1a5e15da828617ca25104e702c03a95e04ecfc8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 18 Nov 2016 20:11:13 +0300 Subject: [PATCH 0386/1204] Add tests for "IN" and "NOT IN" simulations --- tasty/Main.hs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 491d49d3e0..ac5e9fb39e 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,42 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "IN simulation" $ + let + query = + Query.statement "select true where 1 = any ($1)" encoder decoder True + where + encoder = + Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) + decoder = + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + session = + do + result1 <- Session.query [1, 2] query + result2 <- Session.query [2, 3] query + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x + , + testCase "NOT IN simulation" $ + let + query = + Query.statement "select true where 3 <> all ($1)" encoder decoder True + where + encoder = + Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) + decoder = + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + session = + do + result1 <- Session.query [1, 2] query + result2 <- Session.query [2, 3] query + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x + , testCase "Composite decoding" $ let query = From 47cbfe27313db046df4718eba3dfe4b3fc29eca1 Mon Sep 17 00:00:00 2001 From: Alexander Thiemann Date: Thu, 24 Nov 2016 13:12:39 +0100 Subject: [PATCH 0387/1204] Comment about "IN" queries. As discussed in #61 --- library/Hasql/Encoders.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index ea39b5ed7f..456f4482ac 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -488,6 +488,9 @@ instance Default (Value Aeson.Value) where -- >x = -- > array (arrayDimension foldl' (arrayDimension foldl' (arrayValue int8))) -- +-- Please note that the PostgreSQL __IN__ keyword does not "accept" an array, but rather a syntactical list of +-- values, thus this encoder is not suited for that. Use a **field** = ANY($1) query instead. +-- newtype Array a = Array (Array.Array a) From cbe38bb4595aac46862daa7c0f388825202d8dc0 Mon Sep 17 00:00:00 2001 From: Karl Sutt Date: Thu, 8 Dec 2016 18:46:24 +0000 Subject: [PATCH 0388/1204] Failing composite test. --- tasty/Main.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index ac5e9fb39e..5fd25341f4 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -75,6 +75,28 @@ tree = x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right (1, True))) x , + testCase "Complex composite decoding" $ + let + query = + Query.statement sql encoder decoder True + where + sql = + "select (1, true) as entity1, ('hello', 3) as entity2" + encoder = + Encoders.unit + entity1Decoder = + (,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool + entity2Decoder = + (,) <$> Decoders.compositeValue Decoders.text <*> Decoders.compositeValue Decoders.int8 + decoder = + Decoders.singleRow $ Decoders.value $ Decoders.composite + ((,) <$> entity1Decoder <*> entity2Decoder) + session = + Session.query () query + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x + , testCase "Empty array" $ let io = From 98de66fc22a2e140e69c0943c9049ba758df5563 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Dec 2016 11:33:02 +0300 Subject: [PATCH 0389/1204] Update the deps --- hasql.cabal | 12 ++++++------ tasty/Main/Prelude.hs | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 00ebf06a2b..846cdb6669 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -84,9 +84,9 @@ library uuid == 1.3.*, vector >= 0.10 && < 0.12, time >= 1.4 && < 2, - hashtables >= 1.1 && < 1.3, + hashtables >= 1.1 && < 2, scientific >= 0.2 && < 0.4, - text >= 1 && < 1.3, + text >= 1 && < 2, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: @@ -131,11 +131,11 @@ test-suite tasty tasty-smallcheck == 0.8.*, tasty-hunit == 0.9.*, quickcheck-instances >= 0.3.11 && < 0.4, - QuickCheck >= 2.8.1 && < 2.9, + QuickCheck >= 2.8.1 && < 2.10, -- general: data-default-class, - -- base, - rebase + -- + rerebase < 2 test-suite threads-test @@ -158,7 +158,7 @@ test-suite threads-test build-depends: -- database: hasql, - -- base, + -- rebase diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index 6bec4adef6..c7f8dfba12 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -5,9 +5,9 @@ module Main.Prelude where --- base-prelude +-- rerebase ------------------------- -import Rebase.Prelude as Exports +import Prelude as Exports -- data-default-class ------------------------- From 3244140243dcde33b74c5eaf8cefff6a53f3a099 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Dec 2016 11:34:26 +0300 Subject: [PATCH 0390/1204] Fix the test --- tasty/Main.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tasty/Main.hs b/tasty/Main.hs index 5fd25341f4..0b4aab5ef4 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -84,13 +84,16 @@ tree = "select (1, true) as entity1, ('hello', 3) as entity2" encoder = Encoders.unit - entity1Decoder = - (,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool - entity2Decoder = - (,) <$> Decoders.compositeValue Decoders.text <*> Decoders.compositeValue Decoders.int8 decoder = - Decoders.singleRow $ Decoders.value $ Decoders.composite - ((,) <$> entity1Decoder <*> entity2Decoder) + Decoders.singleRow $ + (,) <$> Decoders.value entity1 <*> Decoders.value entity2 + where + entity1 = + Decoders.composite $ + (,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool + entity2 = + Decoders.composite $ + (,) <$> Decoders.compositeValue Decoders.text <*> Decoders.compositeValue Decoders.int8 session = Session.query () query in do From 7c07f9b0d8a80db56fa6d69f0b2aec919db7f8fd Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sun, 15 Jan 2017 20:12:52 -0800 Subject: [PATCH 0391/1204] Little whitespace fix --- library/Hasql/Transaction/Private/Transaction.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 4d4129f6d8..2bb6a2a823 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -9,7 +9,7 @@ import qualified Hasql.Transaction.Private.Queries as C -- | -- A composable abstraction over the retryable transactions. --- +-- -- Executes multiple queries under the specified mode and isolation level, -- while automatically retrying the transaction in case of conflicts. -- Thus this abstraction closely reproduces the behaviour of 'STM'. @@ -18,7 +18,7 @@ newtype Transaction a = deriving (Functor, Applicative, Monad) -- | --- +-- data Mode = -- | -- Read-only. No writes possible. @@ -28,8 +28,8 @@ data Mode = Write | -- | -- Write without committing. - -- Useful for testing, - -- allowing you to modify your database, + -- Useful for testing, + -- allowing you to modify your database, -- producing some result based on your changes, -- and letting Hasql roll all the changes back on the exit from the transaction. WriteWithoutCommitting @@ -38,7 +38,7 @@ data Mode = -- | -- For reference see -- . --- +-- data IsolationLevel = ReadCommitted | RepeatableRead | @@ -65,7 +65,7 @@ run (Transaction session) isolation mode = case error of B.ResultError (B.ServerError "40001" _ _ _) -> recur - _ -> + _ -> throwError error Right result -> do pure result From 72db91a2bbb3dd578c714f3ddb8abb72034397aa Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sun, 15 Jan 2017 20:13:18 -0800 Subject: [PATCH 0392/1204] Add state but do not yet act on it --- library/Hasql/Transaction/Private/Transaction.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 2bb6a2a823..a7df0895d3 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -14,7 +14,7 @@ import qualified Hasql.Transaction.Private.Queries as C -- while automatically retrying the transaction in case of conflicts. -- Thus this abstraction closely reproduces the behaviour of 'STM'. newtype Transaction a = - Transaction (B.Session a) + Transaction (StateT Bool B.Session a) deriving (Functor, Applicative, Monad) -- | @@ -56,7 +56,7 @@ run (Transaction session) isolation mode = resultEither <- do B.query () (C.beginTransaction mode') tryError $ do - result <- session + (result, _condemned) <- runStateT session False B.query () (bool C.abortTransaction C.commitTransaction commit) return result case resultEither of @@ -85,11 +85,11 @@ run (Transaction session) isolation mode = {-# INLINE sql #-} sql :: ByteString -> Transaction () sql sql = - Transaction $ B.sql sql + Transaction . lift $ B.sql sql -- | -- Parameters and a specification of the parametric query to apply them to. {-# INLINE query #-} query :: a -> A.Query a b -> Transaction b query params query = - Transaction $ B.query params query + Transaction . lift $ B.query params query From b7054315dba5f185d73c7d3a9189703ed0be9f80 Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sun, 15 Jan 2017 20:44:14 -0800 Subject: [PATCH 0393/1204] Rollback when condemned --- library/Hasql/Transaction.hs | 1 + library/Hasql/Transaction/Private/Transaction.hs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index e8314642cd..e640cd5f31 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -7,6 +7,7 @@ module Hasql.Transaction IsolationLevel(..), -- * Transaction monad Transaction, + condemn, sql, query, ) diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index a7df0895d3..17bb342226 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -56,8 +56,11 @@ run (Transaction session) isolation mode = resultEither <- do B.query () (C.beginTransaction mode') tryError $ do - (result, _condemned) <- runStateT session False - B.query () (bool C.abortTransaction C.commitTransaction commit) + (result, condemned) <- runStateT session False + B.query () $ + if commit && not condemned + then C.commitTransaction + else C.abortTransaction return result case resultEither of Left error -> do @@ -84,8 +87,7 @@ run (Transaction session) isolation mode = -- nor can any results of it be collected. {-# INLINE sql #-} sql :: ByteString -> Transaction () -sql sql = - Transaction . lift $ B.sql sql +sql = Transaction . lift . B.sql -- | -- Parameters and a specification of the parametric query to apply them to. @@ -93,3 +95,9 @@ sql sql = query :: a -> A.Query a b -> Transaction b query params query = Transaction . lift $ B.query params query + +-- | +-- Cause transaction to eventually roll back +{-# INLINE condemn #-} +condemn :: Transaction () +condemn = Transaction $ put True From 0e548f8a6be0e8d980b701d05fee08204bbf7e1c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Jan 2017 11:39:40 +0300 Subject: [PATCH 0394/1204] Refactor --- hasql-transaction.cabal | 3 + library/Hasql/Transaction.hs | 1 + library/Hasql/Transaction/Private/Model.hs | 25 +++++++ library/Hasql/Transaction/Private/Queries.hs | 45 +++--------- library/Hasql/Transaction/Private/SQL.hs | 29 ++++++++ library/Hasql/Transaction/Private/Sessions.hs | 29 ++++++++ .../Hasql/Transaction/Private/Transaction.hs | 71 +++---------------- library/Hasql/Transaction/Sessions.hs | 3 +- 8 files changed, 106 insertions(+), 100 deletions(-) create mode 100644 library/Hasql/Transaction/Private/Model.hs create mode 100644 library/Hasql/Transaction/Private/SQL.hs create mode 100644 library/Hasql/Transaction/Private/Sessions.hs diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 264e617ced..5f1ac1c89b 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -43,7 +43,10 @@ library Haskell2010 other-modules: Hasql.Transaction.Private.Prelude + Hasql.Transaction.Private.Model + Hasql.Transaction.Private.SQL Hasql.Transaction.Private.Queries + Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Transaction exposed-modules: Hasql.Transaction diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index e640cd5f31..ee32c94131 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -14,3 +14,4 @@ module Hasql.Transaction where import Hasql.Transaction.Private.Transaction +import Hasql.Transaction.Private.Model diff --git a/library/Hasql/Transaction/Private/Model.hs b/library/Hasql/Transaction/Private/Model.hs new file mode 100644 index 0000000000..484ea205b3 --- /dev/null +++ b/library/Hasql/Transaction/Private/Model.hs @@ -0,0 +1,25 @@ +module Hasql.Transaction.Private.Model +where + +import Hasql.Transaction.Private.Prelude + +-- | +-- +data Mode = + -- | + -- Read-only. No writes possible. + Read | + -- | + -- Write and commit. + Write + deriving (Show, Eq, Ord, Enum, Bounded) + +-- | +-- For reference see +-- . +-- +data IsolationLevel = + ReadCommitted | + RepeatableRead | + Serializable + deriving (Show, Eq, Ord, Enum, Bounded) diff --git a/library/Hasql/Transaction/Private/Queries.hs b/library/Hasql/Transaction/Private/Queries.hs index e5cff712c6..c453dbe7ed 100644 --- a/library/Hasql/Transaction/Private/Queries.hs +++ b/library/Hasql/Transaction/Private/Queries.hs @@ -2,52 +2,27 @@ module Hasql.Transaction.Private.Queries where import Hasql.Transaction.Private.Prelude +import Hasql.Transaction.Private.Model import qualified Hasql.Query as A import qualified Hasql.Encoders as B import qualified Hasql.Decoders as C -import qualified ByteString.TreeBuilder as D +import qualified Hasql.Transaction.Private.SQL as D -- * Transactions ------------------------- -data Isolation = - ReadCommitted | - RepeatableRead | - Serializable - -type TransactionMode = - (Isolation, Bool) - -beginTransaction :: TransactionMode -> A.Query () () -beginTransaction (isolation, write) = - A.statement sql B.unit C.unit True - where - sql = - D.toByteString $ - mconcat $ - [ - "BEGIN " - , - case isolation of - ReadCommitted -> "ISOLATION LEVEL READ COMMITTED" - RepeatableRead -> "ISOLATION LEVEL REPEATABLE READ" - Serializable -> "ISOLATION LEVEL SERIALIZABLE" - , - " " - , - case write of - True -> "READ WRITE" - False -> "READ ONLY" - ] +beginTransaction :: IsolationLevel -> Mode -> A.Query () () +beginTransaction isolation mode = + A.statement (D.beginTransaction isolation mode) B.unit C.unit True commitTransaction :: A.Query () () commitTransaction = - A.statement "commit" B.unit C.unit True + A.statement "COMMIT" B.unit C.unit True abortTransaction :: A.Query () () abortTransaction = - A.statement "abort" B.unit C.unit True + A.statement "ABORT" B.unit C.unit True -- * Streaming @@ -55,11 +30,7 @@ abortTransaction = declareCursor :: ByteString -> ByteString -> B.Params a -> A.Query a () declareCursor name sql encoder = - A.statement sql' encoder C.unit False - where - sql' = - D.toByteString $ - "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql + A.statement (D.declareCursor name sql) encoder C.unit False closeCursor :: A.Query ByteString () closeCursor = diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs new file mode 100644 index 0000000000..5ac490220d --- /dev/null +++ b/library/Hasql/Transaction/Private/SQL.hs @@ -0,0 +1,29 @@ +module Hasql.Transaction.Private.SQL +where + +import Hasql.Transaction.Private.Prelude +import Hasql.Transaction.Private.Model +import qualified ByteString.TreeBuilder as D + + +beginTransaction :: IsolationLevel -> Mode -> ByteString +beginTransaction isolation mode = + D.toByteString builder + where + builder = + "BEGIN " <> isolationBuilder <> " " <> modeBuilder + where + isolationBuilder = + case isolation of + ReadCommitted -> "ISOLATION LEVEL READ COMMITTED" + RepeatableRead -> "ISOLATION LEVEL REPEATABLE READ" + Serializable -> "ISOLATION LEVEL SERIALIZABLE" + modeBuilder = + case mode of + Write -> "READ WRITE" + Read -> "READ ONLY" + +declareCursor :: ByteString -> ByteString -> ByteString +declareCursor name sql = + D.toByteString $ + "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs new file mode 100644 index 0000000000..799a45f5e6 --- /dev/null +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -0,0 +1,29 @@ +module Hasql.Transaction.Private.Sessions +where + +import Hasql.Transaction.Private.Prelude +import Hasql.Transaction.Private.Model +import qualified Hasql.Session as A +import qualified Hasql.Transaction.Private.Queries as B + + +inRetryingTransaction :: IsolationLevel -> Mode -> A.Session (a, Bool) -> A.Session a +inRetryingTransaction isolation mode session = + fix $ \recur -> catchError normal (onError recur) + where + normal = + do + A.query () (B.beginTransaction isolation mode) + (result, commit) <- session + if commit + then A.query () B.commitTransaction + else A.query () B.abortTransaction + return result + onError continue error = + do + A.query () B.abortTransaction + case error of + A.ResultError (A.ServerError "40001" _ _ _) -> + continue + _ -> + throwError error diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 17bb342226..b535cbb0d4 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -2,9 +2,11 @@ module Hasql.Transaction.Private.Transaction where import Hasql.Transaction.Private.Prelude +import Hasql.Transaction.Private.Model import qualified Hasql.Query as A import qualified Hasql.Session as B import qualified Hasql.Transaction.Private.Queries as C +import qualified Hasql.Transaction.Private.Sessions as D -- | @@ -17,69 +19,12 @@ newtype Transaction a = Transaction (StateT Bool B.Session a) deriving (Functor, Applicative, Monad) --- | --- -data Mode = - -- | - -- Read-only. No writes possible. - Read | - -- | - -- Write and commit. - Write | - -- | - -- Write without committing. - -- Useful for testing, - -- allowing you to modify your database, - -- producing some result based on your changes, - -- and letting Hasql roll all the changes back on the exit from the transaction. - WriteWithoutCommitting - deriving (Show, Eq, Ord, Enum, Bounded) - --- | --- For reference see --- . --- -data IsolationLevel = - ReadCommitted | - RepeatableRead | - Serializable - deriving (Show, Eq, Ord, Enum, Bounded) - -- | -- Execute the transaction using the provided isolation level and mode. -{-# INLINABLE run #-} +{-# INLINE run #-} run :: Transaction a -> IsolationLevel -> Mode -> B.Session a run (Transaction session) isolation mode = - fix $ - \ recur -> - do - resultEither <- do - B.query () (C.beginTransaction mode') - tryError $ do - (result, condemned) <- runStateT session False - B.query () $ - if commit && not condemned - then C.commitTransaction - else C.abortTransaction - return result - case resultEither of - Left error -> do - B.query () C.abortTransaction - case error of - B.ResultError (B.ServerError "40001" _ _ _) -> - recur - _ -> - throwError error - Right result -> do - pure result - where - mode' = - (unsafeCoerce isolation, write) - (write, commit) = - case mode of - Read -> (False, True) - Write -> (True, True) - WriteWithoutCommitting -> (True, False) + D.inRetryingTransaction isolation mode (runStateT session True) -- | -- Possibly a multi-statement query, @@ -87,7 +32,8 @@ run (Transaction session) isolation mode = -- nor can any results of it be collected. {-# INLINE sql #-} sql :: ByteString -> Transaction () -sql = Transaction . lift . B.sql +sql = + Transaction . lift . B.sql -- | -- Parameters and a specification of the parametric query to apply them to. @@ -97,7 +43,8 @@ query params query = Transaction . lift $ B.query params query -- | --- Cause transaction to eventually roll back +-- Cause transaction to eventually roll back. {-# INLINE condemn #-} condemn :: Transaction () -condemn = Transaction $ put True +condemn = + Transaction $ put False diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 1326753e55..e1e2761baf 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -6,11 +6,12 @@ where import qualified Hasql.Transaction.Private.Transaction as A import qualified Hasql.Session as B +import qualified Hasql.Transaction.Private.Model as C -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINE transaction #-} -transaction :: A.IsolationLevel -> A.Mode -> A.Transaction a -> B.Session a +transaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a transaction isolation mode transaction = A.run transaction isolation mode From b258dfe13ec1f86741b7dd766bff8efcac00fd84 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 31 Jan 2017 19:36:02 +0300 Subject: [PATCH 0395/1204] Relax the "vector" dependency --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 846cdb6669..c915e7abbc 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.15.2 + 0.19.16 category: Hasql, Database, PostgreSQL synopsis: @@ -82,7 +82,7 @@ library dlist >= 0.7 && < 0.9, aeson >= 0.7 && < 2, uuid == 1.3.*, - vector >= 0.10 && < 0.12, + vector >= 0.10 && < 0.13, time >= 1.4 && < 2, hashtables >= 1.1 && < 2, scientific >= 0.2 && < 0.4, From 85e4c7a686c1549ff67e535e3210b02ef3269a16 Mon Sep 17 00:00:00 2001 From: Rik van der Kleij Date: Tue, 14 Mar 2017 16:11:42 +0100 Subject: [PATCH 0396/1204] Support for `inet` data type. --- hasql.cabal | 3 ++- library/Hasql/Decoders.hs | 11 ++++++++++- library/Hasql/Encoders.hs | 10 +++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index c915e7abbc..23c760c782 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.9.1.1 && < 0.10, + postgresql-binary >= 0.9.1.1 && < 1, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, @@ -89,6 +89,7 @@ library text >= 1 && < 2, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, + network-ip >= 0.2 && < 1, -- control: semigroups >= 0.18 && < 0.20, data-default-class >= 0.0.1 && < 0.2, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index dfd724ddd9..d6e3d9d1b3 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -37,6 +37,7 @@ module Hasql.Decoders timetz, interval, uuid, + inet, json, jsonBytes, jsonb, @@ -69,7 +70,7 @@ import qualified Hasql.Private.Decoders.Value as Value import qualified Hasql.Private.Decoders.Array as Array import qualified Hasql.Private.Decoders.Composite as Composite import qualified Hasql.Private.Prelude as Prelude - +import qualified Network.IP.Addr as IPAddr -- * Result ------------------------- @@ -415,6 +416,14 @@ uuid :: Value UUID uuid = Value (Value.decoder (const Decoder.uuid)) +-- | +-- Decoder of the @INET@ values. +-- +{-# INLINABLE inet #-} +inet :: Value (IPAddr.NetAddr IPAddr.IP) +inet = + Value (Value.decoder (const Decoder.inet)) + -- | -- Decoder of the @JSON@ values into a JSON AST. -- diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 456f4482ac..31222d2082 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -26,6 +26,7 @@ module Hasql.Encoders timetz, interval, uuid, + inet, json, jsonBytes, jsonb, @@ -49,7 +50,7 @@ import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.PTI as PTI import qualified Hasql.Private.Prelude as Prelude - +import qualified Network.IP.Addr as IPAddr -- * Parameters Product Encoder ------------------------- @@ -301,6 +302,13 @@ uuid :: Value UUID uuid = Value (Value.unsafePTI PTI.uuid (const Encoder.uuid)) +-- | +-- Encoder of @INET@ values. +{-# INLINABLE inet #-} +inet :: Value (IPAddr.NetAddr IPAddr.IP) +inet = + Value (Value.unsafePTI PTI.inet (const Encoder.inet)) + -- | -- Encoder of @JSON@ values from JSON AST. {-# INLINABLE json #-} From 7d07722d1876ea444a42054fdf5a03e5fbeffd37 Mon Sep 17 00:00:00 2001 From: Rik van der Kleij Date: Tue, 14 Mar 2017 16:21:31 +0100 Subject: [PATCH 0397/1204] Support for `inet` data type. Changed lower bound version of postgresql-binary. --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 23c760c782..a324897bcc 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.9.1.1 && < 1, + postgresql-binary >= 0.10 && < 1, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, From 19df81bd79eab5f9a0ff7a7a81ce9432a1374ef6 Mon Sep 17 00:00:00 2001 From: Rik van der Kleij Date: Tue, 14 Mar 2017 16:42:02 +0100 Subject: [PATCH 0398/1204] Support for `inet` data type. Changed upper bound version of postgresql-binary and network-ip. --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index a324897bcc..125ca867da 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -74,7 +74,7 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.10 && < 1, + postgresql-binary >= 0.10 && < 0.11, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, @@ -89,7 +89,7 @@ library text >= 1 && < 2, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, - network-ip >= 0.2 && < 1, + network-ip >= 0.2 && < 0.4, -- control: semigroups >= 0.18 && < 0.20, data-default-class >= 0.0.1 && < 0.2, From 3e4c7c01c88d16f45f37e18ab57ce1ff4a6dad6f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 14 Mar 2017 18:56:58 +0300 Subject: [PATCH 0399/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 125ca867da..84042e59a7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.16 + 0.19.17 category: Hasql, Database, PostgreSQL synopsis: From 2801829ff7c553c8e7123b1c11e32cd6b0ffaf7b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 16 Mar 2017 15:16:41 +0300 Subject: [PATCH 0400/1204] Fix the compatibility with the newer "base-prelude" --- hasql.cabal | 2 +- library/Hasql/Private/Prelude.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 84042e59a7..648fd55b5c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.17 + 0.19.17.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 533a0ae287..0872d9264a 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -16,7 +16,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error, (<>), First(..), Last(..)) +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error, (<>), First(..), Last(..), new) -- transformers ------------------------- From 7cba5bd1f04614df84d9d3f09b95738ad7df19b8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Mar 2017 23:13:21 +0300 Subject: [PATCH 0401/1204] Migrate to "postgresql-binary-0.12.1" --- benchmark/Main/Prelude.hs | 12 --- hasql.cabal | 9 +- library/Hasql/Decoders.hs | 93 ++++++++++----------- library/Hasql/Encoders.hs | 93 ++++++++++----------- library/Hasql/Private/Decoders/Array.hs | 19 ++--- library/Hasql/Private/Decoders/Composite.hs | 17 ++-- library/Hasql/Private/Decoders/Row.hs | 4 +- library/Hasql/Private/Decoders/Value.hs | 11 ++- library/Hasql/Private/Encoders/Array.hs | 29 ++++--- library/Hasql/Private/Encoders/Params.hs | 28 +++---- library/Hasql/Private/Encoders/Value.hs | 9 +- library/Hasql/Private/Prelude.hs | 12 --- 12 files changed, 150 insertions(+), 186 deletions(-) diff --git a/benchmark/Main/Prelude.hs b/benchmark/Main/Prelude.hs index a293bc62c8..16e2dd1760 100644 --- a/benchmark/Main/Prelude.hs +++ b/benchmark/Main/Prelude.hs @@ -52,18 +52,6 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) --- scientific -------------------------- -import Data.Scientific as Exports (Scientific) - --- uuid -------------------------- -import Data.UUID as Exports (UUID) - --- time -------------------------- -import Data.Time as Exports - -- vector ------------------------- import Data.Vector as Exports (Vector) diff --git a/hasql.cabal b/hasql.cabal index 648fd55b5c..4f87128930 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.17.1 + 0.19.18 category: Hasql, Database, PostgreSQL synopsis: @@ -74,22 +74,17 @@ library -- parsing: attoparsec >= 0.10 && < 0.14, -- database: - postgresql-binary >= 0.10 && < 0.11, + postgresql-binary >= 0.12.1 && < 0.13, postgresql-libpq == 0.9.*, -- builders: bytestring-tree-builder >= 0.2.5 && < 0.3, -- data: dlist >= 0.7 && < 0.9, - aeson >= 0.7 && < 2, - uuid == 1.3.*, vector >= 0.10 && < 0.13, - time >= 1.4 && < 2, hashtables >= 1.1 && < 2, - scientific >= 0.2 && < 0.4, text >= 1 && < 2, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, - network-ip >= 0.2 && < 0.4, -- control: semigroups >= 0.18 && < 0.20, data-default-class >= 0.0.1 && < 0.2, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index d6e3d9d1b3..48294ea4d2 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -60,9 +60,9 @@ module Hasql.Decoders where import Hasql.Private.Prelude hiding (maybe, bool) -import qualified Data.Aeson as Aeson import qualified Data.Vector as Vector -import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified PostgreSQL.Binary.Decoding as A +import qualified PostgreSQL.Binary.Data as B import qualified Hasql.Private.Decoders.Results as Results import qualified Hasql.Private.Decoders.Result as Result import qualified Hasql.Private.Decoders.Row as Row @@ -70,7 +70,6 @@ import qualified Hasql.Private.Decoders.Value as Value import qualified Hasql.Private.Decoders.Array as Array import qualified Hasql.Private.Decoders.Composite as Composite import qualified Hasql.Private.Prelude as Prelude -import qualified Network.IP.Addr as IPAddr -- * Result ------------------------- @@ -273,7 +272,7 @@ newtype Value a = {-# INLINABLE bool #-} bool :: Value Bool bool = - Value (Value.decoder (const Decoder.bool)) + Value (Value.decoder (const A.bool)) -- | -- Decoder of the @INT2@ values. @@ -281,7 +280,7 @@ bool = {-# INLINABLE int2 #-} int2 :: Value Int16 int2 = - Value (Value.decoder (const Decoder.int)) + Value (Value.decoder (const A.int)) -- | -- Decoder of the @INT4@ values. @@ -289,7 +288,7 @@ int2 = {-# INLINABLE int4 #-} int4 :: Value Int32 int4 = - Value (Value.decoder (const Decoder.int)) + Value (Value.decoder (const A.int)) -- | -- Decoder of the @INT8@ values. @@ -298,7 +297,7 @@ int4 = int8 :: Value Int64 int8 = {-# SCC "int8" #-} - Value (Value.decoder (const ({-# SCC "int8.int" #-} Decoder.int))) + Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) -- | -- Decoder of the @FLOAT4@ values. @@ -306,7 +305,7 @@ int8 = {-# INLINABLE float4 #-} float4 :: Value Float float4 = - Value (Value.decoder (const Decoder.float4)) + Value (Value.decoder (const A.float4)) -- | -- Decoder of the @FLOAT8@ values. @@ -314,15 +313,15 @@ float4 = {-# INLINABLE float8 #-} float8 :: Value Double float8 = - Value (Value.decoder (const Decoder.float8)) + Value (Value.decoder (const A.float8)) -- | -- Decoder of the @NUMERIC@ values. -- {-# INLINABLE numeric #-} -numeric :: Value Scientific +numeric :: Value B.Scientific numeric = - Value (Value.decoder (const Decoder.numeric)) + Value (Value.decoder (const A.numeric)) -- | -- Decoder of the @CHAR@ values. @@ -330,7 +329,7 @@ numeric = {-# INLINABLE char #-} char :: Value Char char = - Value (Value.decoder (const Decoder.char)) + Value (Value.decoder (const A.char)) -- | -- Decoder of the @TEXT@ values. @@ -338,7 +337,7 @@ char = {-# INLINABLE text #-} text :: Value Text text = - Value (Value.decoder (const Decoder.text_strict)) + Value (Value.decoder (const A.text_strict)) -- | -- Decoder of the @BYTEA@ values. @@ -346,23 +345,23 @@ text = {-# INLINABLE bytea #-} bytea :: Value ByteString bytea = - Value (Value.decoder (const Decoder.bytea_strict)) + Value (Value.decoder (const A.bytea_strict)) -- | -- Decoder of the @DATE@ values. -- {-# INLINABLE date #-} -date :: Value Day +date :: Value B.Day date = - Value (Value.decoder (const Decoder.date)) + Value (Value.decoder (const A.date)) -- | -- Decoder of the @TIMESTAMP@ values. -- {-# INLINABLE timestamp #-} -timestamp :: Value LocalTime +timestamp :: Value B.LocalTime timestamp = - Value (Value.decoder (Prelude.bool Decoder.timestamp_float Decoder.timestamp_int)) + Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) -- | -- Decoder of the @TIMESTAMPTZ@ values. @@ -375,17 +374,17 @@ timestamp = -- However this library bypasses the silent conversions -- and communicates with Postgres using the UTC values directly. {-# INLINABLE timestamptz #-} -timestamptz :: Value UTCTime +timestamptz :: Value B.UTCTime timestamptz = - Value (Value.decoder (Prelude.bool Decoder.timestamptz_float Decoder.timestamptz_int)) + Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | -- Decoder of the @TIME@ values. -- {-# INLINABLE time #-} -time :: Value TimeOfDay +time :: Value B.TimeOfDay time = - Value (Value.decoder (Prelude.bool Decoder.time_float Decoder.time_int)) + Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -- | -- Decoder of the @TIMETZ@ values. @@ -396,41 +395,41 @@ time = -- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' -- to represent a value on the Haskell's side. {-# INLINABLE timetz #-} -timetz :: Value (TimeOfDay, TimeZone) +timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = - Value (Value.decoder (Prelude.bool Decoder.timetz_float Decoder.timetz_int)) + Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) -- | -- Decoder of the @INTERVAL@ values. -- {-# INLINABLE interval #-} -interval :: Value DiffTime +interval :: Value B.DiffTime interval = - Value (Value.decoder (Prelude.bool Decoder.interval_float Decoder.interval_int)) + Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) -- | -- Decoder of the @UUID@ values. -- {-# INLINABLE uuid #-} -uuid :: Value UUID +uuid :: Value B.UUID uuid = - Value (Value.decoder (const Decoder.uuid)) + Value (Value.decoder (const A.uuid)) -- | -- Decoder of the @INET@ values. -- {-# INLINABLE inet #-} -inet :: Value (IPAddr.NetAddr IPAddr.IP) +inet :: Value (B.NetAddr B.IP) inet = - Value (Value.decoder (const Decoder.inet)) + Value (Value.decoder (const A.inet)) -- | -- Decoder of the @JSON@ values into a JSON AST. -- {-# INLINABLE json #-} -json :: Value Aeson.Value +json :: Value B.Value json = - Value (Value.decoder (const Decoder.json_ast)) + Value (Value.decoder (const A.json_ast)) -- | -- Decoder of the @JSON@ values into a raw JSON 'ByteString'. @@ -438,15 +437,15 @@ json = {-# INLINABLE jsonBytes #-} jsonBytes :: (ByteString -> Either Text a) -> Value a jsonBytes fn = - Value (Value.decoder (const (Decoder.json_bytes fn))) + Value (Value.decoder (const (A.json_bytes fn))) -- | -- Decoder of the @JSONB@ values into a JSON AST. -- {-# INLINABLE jsonb #-} -jsonb :: Value Aeson.Value +jsonb :: Value B.Value jsonb = - Value (Value.decoder (const Decoder.jsonb_ast)) + Value (Value.decoder (const A.jsonb_ast)) -- | -- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. @@ -454,7 +453,7 @@ jsonb = {-# INLINABLE jsonbBytes #-} jsonbBytes :: (ByteString -> Either Text a) -> Value a jsonbBytes fn = - Value (Value.decoder (const (Decoder.jsonb_bytes fn))) + Value (Value.decoder (const (A.jsonb_bytes fn))) -- | -- Lifts a custom value decoder function to a 'Value' decoder. @@ -498,14 +497,14 @@ composite (Composite imp) = {-# INLINABLE hstore #-} hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a hstore replicateM = - Value (Value.decoder (const (Decoder.hstore replicateM Decoder.text_strict Decoder.text_strict))) + Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) -- | -- Given a partial mapping from text to value, -- produces a decoder of that value. enum :: (Text -> Maybe a) -> Value a enum mapping = - Value (Value.decoder (const (Decoder.enum mapping))) + Value (Value.decoder (const (A.enum mapping))) -- ** Instances @@ -555,7 +554,7 @@ instance Default (Value Double) where -- | -- Maps to 'numeric'. -instance Default (Value Scientific) where +instance Default (Value B.Scientific) where {-# INLINE def #-} def = numeric @@ -583,56 +582,56 @@ instance Default (Value ByteString) where -- | -- Maps to 'date'. -instance Default (Value Day) where +instance Default (Value B.Day) where {-# INLINE def #-} def = date -- | -- Maps to 'timestamp'. -instance Default (Value LocalTime) where +instance Default (Value B.LocalTime) where {-# INLINE def #-} def = timestamp -- | -- Maps to 'timestamptz'. -instance Default (Value UTCTime) where +instance Default (Value B.UTCTime) where {-# INLINE def #-} def = timestamptz -- | -- Maps to 'time'. -instance Default (Value TimeOfDay) where +instance Default (Value B.TimeOfDay) where {-# INLINE def #-} def = time -- | -- Maps to 'timetz'. -instance Default (Value (TimeOfDay, TimeZone)) where +instance Default (Value (B.TimeOfDay, B.TimeZone)) where {-# INLINE def #-} def = timetz -- | -- Maps to 'interval'. -instance Default (Value DiffTime) where +instance Default (Value B.DiffTime) where {-# INLINE def #-} def = interval -- | -- Maps to 'uuid'. -instance Default (Value UUID) where +instance Default (Value B.UUID) where {-# INLINE def #-} def = uuid -- | -- Maps to 'json'. -instance Default (Value Aeson.Value) where +instance Default (Value B.Value) where {-# INLINE def #-} def = json diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 31222d2082..b9dc6c9c8e 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -43,14 +43,13 @@ module Hasql.Encoders where import Hasql.Private.Prelude hiding (bool) -import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Data.Aeson as Aeson +import qualified PostgreSQL.Binary.Encoding as A +import qualified PostgreSQL.Binary.Data as B import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.PTI as PTI import qualified Hasql.Private.Prelude as Prelude -import qualified Network.IP.Addr as IPAddr -- * Parameters Product Encoder ------------------------- @@ -186,49 +185,49 @@ newtype Value a = {-# INLINABLE bool #-} bool :: Value Bool bool = - Value (Value.unsafePTI PTI.bool (const Encoder.bool)) + Value (Value.unsafePTI PTI.bool (const A.bool)) -- | -- Encoder of @INT2@ values. {-# INLINABLE int2 #-} int2 :: Value Int16 int2 = - Value (Value.unsafePTI PTI.int2 (const Encoder.int2_int16)) + Value (Value.unsafePTI PTI.int2 (const A.int2_int16)) -- | -- Encoder of @INT4@ values. {-# INLINABLE int4 #-} int4 :: Value Int32 int4 = - Value (Value.unsafePTI PTI.int4 (const Encoder.int4_int32)) + Value (Value.unsafePTI PTI.int4 (const A.int4_int32)) -- | -- Encoder of @INT8@ values. {-# INLINABLE int8 #-} int8 :: Value Int64 int8 = - Value (Value.unsafePTI PTI.int8 (const Encoder.int8_int64)) + Value (Value.unsafePTI PTI.int8 (const A.int8_int64)) -- | -- Encoder of @FLOAT4@ values. {-# INLINABLE float4 #-} float4 :: Value Float float4 = - Value (Value.unsafePTI PTI.float4 (const Encoder.float4)) + Value (Value.unsafePTI PTI.float4 (const A.float4)) -- | -- Encoder of @FLOAT8@ values. {-# INLINABLE float8 #-} float8 :: Value Double float8 = - Value (Value.unsafePTI PTI.float8 (const Encoder.float8)) + Value (Value.unsafePTI PTI.float8 (const A.float8)) -- | -- Encoder of @NUMERIC@ values. {-# INLINABLE numeric #-} -numeric :: Value Scientific +numeric :: Value B.Scientific numeric = - Value (Value.unsafePTI PTI.numeric (const Encoder.numeric)) + Value (Value.unsafePTI PTI.numeric (const A.numeric)) -- | -- Encoder of @CHAR@ values. @@ -237,105 +236,105 @@ numeric = {-# INLINABLE char #-} char :: Value Char char = - Value (Value.unsafePTI PTI.text (const Encoder.char)) + Value (Value.unsafePTI PTI.text (const A.char_utf8)) -- | -- Encoder of @TEXT@ values. {-# INLINABLE text #-} text :: Value Text text = - Value (Value.unsafePTI PTI.text (const Encoder.text_strict)) + Value (Value.unsafePTI PTI.text (const A.text_strict)) -- | -- Encoder of @BYTEA@ values. {-# INLINABLE bytea #-} bytea :: Value ByteString bytea = - Value (Value.unsafePTI PTI.bytea (const Encoder.bytea_strict)) + Value (Value.unsafePTI PTI.bytea (const A.bytea_strict)) -- | -- Encoder of @DATE@ values. {-# INLINABLE date #-} -date :: Value Day +date :: Value B.Day date = - Value (Value.unsafePTI PTI.date (const Encoder.date)) + Value (Value.unsafePTI PTI.date (const A.date)) -- | -- Encoder of @TIMESTAMP@ values. {-# INLINABLE timestamp #-} -timestamp :: Value LocalTime +timestamp :: Value B.LocalTime timestamp = - Value (Value.unsafePTI PTI.timestamp (Prelude.bool Encoder.timestamp_float Encoder.timestamp_int)) + Value (Value.unsafePTI PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) -- | -- Encoder of @TIMESTAMPTZ@ values. {-# INLINABLE timestamptz #-} -timestamptz :: Value UTCTime +timestamptz :: Value B.UTCTime timestamptz = - Value (Value.unsafePTI PTI.timestamptz (Prelude.bool Encoder.timestamptz_float Encoder.timestamptz_int)) + Value (Value.unsafePTI PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | -- Encoder of @TIME@ values. {-# INLINABLE time #-} -time :: Value TimeOfDay +time :: Value B.TimeOfDay time = - Value (Value.unsafePTI PTI.time (Prelude.bool Encoder.time_float Encoder.time_int)) + Value (Value.unsafePTI PTI.time (Prelude.bool A.time_float A.time_int)) -- | -- Encoder of @TIMETZ@ values. {-# INLINABLE timetz #-} -timetz :: Value (TimeOfDay, TimeZone) +timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = - Value (Value.unsafePTI PTI.timetz (Prelude.bool Encoder.timetz_float Encoder.timetz_int)) + Value (Value.unsafePTI PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) -- | -- Encoder of @INTERVAL@ values. {-# INLINABLE interval #-} -interval :: Value DiffTime +interval :: Value B.DiffTime interval = - Value (Value.unsafePTI PTI.interval (Prelude.bool Encoder.interval_float Encoder.interval_int)) + Value (Value.unsafePTI PTI.interval (Prelude.bool A.interval_float A.interval_int)) -- | -- Encoder of @UUID@ values. {-# INLINABLE uuid #-} -uuid :: Value UUID +uuid :: Value B.UUID uuid = - Value (Value.unsafePTI PTI.uuid (const Encoder.uuid)) + Value (Value.unsafePTI PTI.uuid (const A.uuid)) -- | -- Encoder of @INET@ values. {-# INLINABLE inet #-} -inet :: Value (IPAddr.NetAddr IPAddr.IP) +inet :: Value (B.NetAddr B.IP) inet = - Value (Value.unsafePTI PTI.inet (const Encoder.inet)) + Value (Value.unsafePTI PTI.inet (const A.inet)) -- | -- Encoder of @JSON@ values from JSON AST. {-# INLINABLE json #-} -json :: Value Aeson.Value +json :: Value B.Value json = - Value (Value.unsafePTI PTI.json (const Encoder.json_ast)) + Value (Value.unsafePTI PTI.json (const A.json_ast)) -- | -- Encoder of @JSON@ values from raw JSON. {-# INLINABLE jsonBytes #-} jsonBytes :: Value ByteString jsonBytes = - Value (Value.unsafePTI PTI.json (const Encoder.json_bytes)) + Value (Value.unsafePTI PTI.json (const A.json_bytes)) -- | -- Encoder of @JSONB@ values from JSON AST. {-# INLINABLE jsonb #-} -jsonb :: Value Aeson.Value +jsonb :: Value B.Value jsonb = - Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb_ast)) + Value (Value.unsafePTI PTI.jsonb (const A.jsonb_ast)) -- | -- Encoder of @JSONB@ values from raw JSON. {-# INLINABLE jsonbBytes #-} jsonbBytes :: Value ByteString jsonbBytes = - Value (Value.unsafePTI PTI.jsonb (const Encoder.jsonb_bytes)) + Value (Value.unsafePTI PTI.jsonb (const A.jsonb_bytes)) -- | -- Unlifts the 'Array' encoder to the plain 'Value' encoder. @@ -352,7 +351,7 @@ array (Array imp) = {-# INLINABLE enum #-} enum :: (a -> Text) -> Value a enum mapping = - Value (Value.unsafePTI PTI.text (const (Encoder.enum mapping))) + Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping))) -- | -- Identifies the value with the PostgreSQL's \"unknown\" type, @@ -369,7 +368,7 @@ enum mapping = {-# INLINABLE unknown #-} unknown :: Value ByteString unknown = - Value (Value.unsafePTI PTI.unknown (const Encoder.bytea_strict)) + Value (Value.unsafePTI PTI.unknown (const A.bytea_strict)) -- ** Instances @@ -412,7 +411,7 @@ instance Default (Value Double) where float8 -- | Maps to 'numeric'. -instance Default (Value Scientific) where +instance Default (Value B.Scientific) where {-# INLINE def #-} def = numeric @@ -436,49 +435,49 @@ instance Default (Value ByteString) where bytea -- | Maps to 'date'. -instance Default (Value Day) where +instance Default (Value B.Day) where {-# INLINE def #-} def = date -- | Maps to 'timestamp'. -instance Default (Value LocalTime) where +instance Default (Value B.LocalTime) where {-# INLINE def #-} def = timestamp -- | Maps to 'timestamptz'. -instance Default (Value UTCTime) where +instance Default (Value B.UTCTime) where {-# INLINE def #-} def = timestamptz -- | Maps to 'time'. -instance Default (Value TimeOfDay) where +instance Default (Value B.TimeOfDay) where {-# INLINE def #-} def = time -- | Maps to 'timetz'. -instance Default (Value (TimeOfDay, TimeZone)) where +instance Default (Value (B.TimeOfDay, B.TimeZone)) where {-# INLINE def #-} def = timetz -- | Maps to 'interval'. -instance Default (Value DiffTime) where +instance Default (Value B.DiffTime) where {-# INLINE def #-} def = interval -- | Maps to 'uuid'. -instance Default (Value UUID) where +instance Default (Value B.UUID) where {-# INLINE def #-} def = uuid -- | Maps to 'json'. -instance Default (Value Aeson.Value) where +instance Default (Value B.Value) where {-# INLINE def #-} def = json diff --git a/library/Hasql/Private/Decoders/Array.hs b/library/Hasql/Private/Decoders/Array.hs index 6c13eb8bbb..01c5b3218f 100644 --- a/library/Hasql/Private/Decoders/Array.hs +++ b/library/Hasql/Private/Decoders/Array.hs @@ -1,31 +1,30 @@ module Hasql.Private.Decoders.Array where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified PostgreSQL.Binary.Decoding as A newtype Array a = - Array (ReaderT Bool Decoder.ArrayDecoder a) + Array (ReaderT Bool A.Array a) deriving (Functor) {-# INLINE run #-} -run :: Array a -> Bool -> Decoder.Decoder a +run :: Array a -> Bool -> A.Value a run (Array imp) env = - Decoder.array (runReaderT imp env) + A.array (runReaderT imp env) {-# INLINE dimension #-} dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b dimension replicateM (Array imp) = - Array $ ReaderT $ \env -> Decoder.arrayDimension replicateM (runReaderT imp env) + Array $ ReaderT $ \env -> A.dimensionArray replicateM (runReaderT imp env) {-# INLINE value #-} -value :: (Bool -> Decoder.Decoder a) -> Array (Maybe a) +value :: (Bool -> A.Value a) -> Array (Maybe a) value decoder' = - Array $ ReaderT $ Decoder.arrayValue . decoder' + Array $ ReaderT $ A.nullableValueArray . decoder' {-# INLINE nonNullValue #-} -nonNullValue :: (Bool -> Decoder.Decoder a) -> Array a +nonNullValue :: (Bool -> A.Value a) -> Array a nonNullValue decoder' = - Array $ ReaderT $ Decoder.arrayNonNullValue . decoder' + Array $ ReaderT $ A.valueArray . decoder' diff --git a/library/Hasql/Private/Decoders/Composite.hs b/library/Hasql/Private/Decoders/Composite.hs index d2cf7b9e10..3bebc9078e 100644 --- a/library/Hasql/Private/Decoders/Composite.hs +++ b/library/Hasql/Private/Decoders/Composite.hs @@ -1,26 +1,25 @@ module Hasql.Private.Decoders.Composite where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified PostgreSQL.Binary.Decoding as A newtype Composite a = - Composite (ReaderT Bool Decoder.CompositeDecoder a) + Composite (ReaderT Bool A.Composite a) deriving (Functor, Applicative, Monad) {-# INLINE run #-} -run :: Composite a -> Bool -> Decoder.Decoder a +run :: Composite a -> Bool -> A.Value a run (Composite imp) env = - Decoder.composite (runReaderT imp env) + A.composite (runReaderT imp env) {-# INLINE value #-} -value :: (Bool -> Decoder.Decoder a) -> Composite (Maybe a) +value :: (Bool -> A.Value a) -> Composite (Maybe a) value decoder' = - Composite $ ReaderT $ Decoder.compositeValue . decoder' + Composite $ ReaderT $ A.nullableValueComposite . decoder' {-# INLINE nonNullValue #-} -nonNullValue :: (Bool -> Decoder.Decoder a) -> Composite a +nonNullValue :: (Bool -> A.Value a) -> Composite a nonNullValue decoder' = - Composite $ ReaderT $ Decoder.compositeNonNullValue . decoder' + Composite $ ReaderT $ A.valueComposite . decoder' diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 2c5e20358f..e88997b669 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -2,7 +2,7 @@ module Hasql.Private.Decoders.Row where import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified PostgreSQL.Binary.Decoding as A import qualified Hasql.Private.Decoders.Value as Value @@ -53,7 +53,7 @@ value valueDec = Right Nothing Just value -> fmap Just $ mapLeft ValueError $ - {-# SCC "decode" #-} Decoder.run (Value.run valueDec integerDatetimes) value + {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value else pure (Left EndOfInput) -- | diff --git a/library/Hasql/Private/Decoders/Value.hs b/library/Hasql/Private/Decoders/Value.hs index 4583110607..351d0804f1 100644 --- a/library/Hasql/Private/Decoders/Value.hs +++ b/library/Hasql/Private/Decoders/Value.hs @@ -1,22 +1,21 @@ module Hasql.Private.Decoders.Value where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Decoder as Decoder +import qualified PostgreSQL.Binary.Decoding as A newtype Value a = - Value (ReaderT Bool Decoder.Decoder a) + Value (ReaderT Bool A.Value a) deriving (Functor) {-# INLINE run #-} -run :: Value a -> Bool -> Decoder.Decoder a +run :: Value a -> Bool -> A.Value a run (Value imp) integerDatetimes = runReaderT imp integerDatetimes {-# INLINE decoder #-} -decoder :: (Bool -> Decoder.Decoder a) -> Value a +decoder :: (Bool -> A.Value a) -> Value a decoder = {-# SCC "decoder" #-} Value . ReaderT @@ -24,5 +23,5 @@ decoder = {-# INLINE decoderFn #-} decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a decoderFn fn = - Value $ ReaderT $ \integerDatetimes -> Decoder.fn $ fn integerDatetimes + Value $ ReaderT $ \integerDatetimes -> A.fn $ fn integerDatetimes diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index 86fa0ab801..ddc9efd458 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -1,31 +1,30 @@ module Hasql.Private.Encoders.Array where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.Private.PTI as PTI +import qualified PostgreSQL.Binary.Encoding as A +import qualified Hasql.Private.PTI as B data Array a = - Array PTI.OID PTI.OID (Bool -> Encoder.ArrayEncoder a) + Array B.OID B.OID (Bool -> a -> A.Array) {-# INLINE run #-} -run :: Array a -> (PTI.OID, Bool -> Encoder.Encoder a) -run (Array valueOID arrayOID encoder') = - (arrayOID, \env -> Encoder.array (PTI.oidWord32 valueOID) (encoder' env)) +run :: Array a -> (B.OID, Bool -> a -> A.Encoding) +run (Array valueOID arrayOID encoder) = + (arrayOID, \env input -> A.array (B.oidWord32 valueOID) (encoder env input)) {-# INLINE value #-} -value :: PTI.OID -> PTI.OID -> (Bool -> Encoder.Encoder a) -> Array a -value valueOID arrayOID encoder' = - Array valueOID arrayOID (Encoder.arrayValue . encoder') +value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array a +value valueOID arrayOID encoder = + Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} -nullableValue :: PTI.OID -> PTI.OID -> (Bool -> Encoder.Encoder a) -> Array (Maybe a) -nullableValue valueOID arrayOID encoder' = - Array valueOID arrayOID (Encoder.arrayNullableValue . encoder') +nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array (Maybe a) +nullableValue valueOID arrayOID encoder = + Array valueOID arrayOID (\params -> maybe A.nullArray (A.encodingArray . encoder params)) {-# INLINE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c -dimension foldl (Array valueOID arrayOID encoder') = - Array valueOID arrayOID (Encoder.arrayDimension foldl . encoder') +dimension fold (Array valueOID arrayOID encoder) = + Array valueOID arrayOID (\params -> A.dimensionArray fold (encoder params)) diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index f2f5d48a07..121c907e52 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -1,26 +1,26 @@ module Hasql.Private.Encoders.Params where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Encoder as Encoder -import qualified Hasql.Private.Encoders.Value as Value -import qualified Hasql.Private.PTI as PTI +import qualified Database.PostgreSQL.LibPQ as A +import qualified PostgreSQL.Binary.Encoding as B +import qualified Hasql.Private.Encoders.Value as C +import qualified Hasql.Private.PTI as D -- | -- Encoder of some representation of a parameters product. newtype Params a = - Params (Op (DList (LibPQ.Oid, Bool -> Maybe ByteString)) a) + Params (Op (DList (A.Oid, Bool -> Maybe ByteString)) a) deriving (Contravariant, Divisible, Decidable, Monoid) instance Semigroup (Params a) -run :: Params a -> a -> DList (LibPQ.Oid, Bool -> Maybe ByteString) +run :: Params a -> a -> DList (A.Oid, Bool -> Maybe ByteString) run (Params (Op op)) params = {-# SCC "run" #-} op params -run' :: Params a -> a -> Bool -> ([LibPQ.Oid], [Maybe (ByteString, LibPQ.Format)]) +run' :: Params a -> a -> Bool -> ([A.Oid], [Maybe (ByteString, A.Format)]) run' (Params (Op op)) params integerDatetimes = {-# SCC "run'" #-} foldr step ([], []) (op params) @@ -28,9 +28,9 @@ run' (Params (Op op)) params integerDatetimes = step (oid, bytesGetter) ~(oidList, bytesAndFormatList) = (,) (oid : oidList) - (fmap (\bytes -> (bytes, LibPQ.Binary)) (bytesGetter integerDatetimes) : bytesAndFormatList) + (fmap (\bytes -> (bytes, A.Binary)) (bytesGetter integerDatetimes) : bytesAndFormatList) -run'' :: Params a -> a -> Bool -> [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] +run'' :: Params a -> a -> Bool -> [Maybe (A.Oid, ByteString, A.Format)] run'' (Params (Op op)) params integerDatetimes = {-# SCC "run''" #-} foldr step [] (op params) @@ -39,13 +39,13 @@ run'' (Params (Op op)) params integerDatetimes = mapping a : b where mapping (oid, bytesGetter) = - (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure LibPQ.Binary + (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure A.Binary -value :: Value.Value a -> Params a +value :: C.Value a -> Params a value = contramap Just . nullableValue -nullableValue :: Value.Value a -> Params (Maybe a) -nullableValue (Value.Value valueOID arrayOID encoder') = +nullableValue :: C.Value a -> Params (Maybe a) +nullableValue (C.Value valueOID arrayOID encoder) = Params $ Op $ \input -> - pure (PTI.oidPQ valueOID, \env -> fmap (Encoder.run (encoder' env)) input) + pure (D.oidPQ valueOID, \env -> fmap (B.encodingBytes . encoder env) input) diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index fbcce625fc..e255a27634 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -1,13 +1,12 @@ module Hasql.Private.Encoders.Value where import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Encoder as Encoder +import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.PTI as PTI data Value a = - Value PTI.OID PTI.OID (Bool -> Encoder.Encoder a) + Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) instance Contravariant Value where {-# INLINE contramap #-} @@ -15,12 +14,12 @@ instance Contravariant Value where Value valueOID arrayOID (\integerDatetimes input -> encoder integerDatetimes (f input)) {-# INLINE run #-} -run :: Value a -> (PTI.OID, PTI.OID, Bool -> Encoder.Encoder a) +run :: Value a -> (PTI.OID, PTI.OID, Bool -> a -> B.Encoding) run (Value valueOID arrayOID encoder') = (valueOID, arrayOID, encoder') {-# INLINE unsafePTI #-} -unsafePTI :: PTI.PTI -> (Bool -> Encoder.Encoder a) -> Value a +unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a unsafePTI pti encoder' = Value (PTI.ptiOID pti) (fromMaybe ($bug "No array OID") (PTI.ptiArrayOID pti)) encoder' diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 0872d9264a..809e9617ed 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -69,18 +69,6 @@ import Data.Text as Exports (Text) ------------------------- import Data.ByteString as Exports (ByteString) --- scientific -------------------------- -import Data.Scientific as Exports (Scientific) - --- uuid -------------------------- -import Data.UUID as Exports (UUID) - --- time -------------------------- -import Data.Time as Exports - -- vector ------------------------- import Data.Vector as Exports (Vector) From 1a2e7ee3ec8a29192877c2efd79733b9006fe3bc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 Mar 2017 00:29:27 +0300 Subject: [PATCH 0402/1204] Update a builder dep --- hasql.cabal | 2 +- library/Hasql/Private/PreparedStatementRegistry.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 4f87128930..5384cd6384 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -77,7 +77,7 @@ library postgresql-binary >= 0.12.1 && < 0.13, postgresql-libpq == 0.9.*, -- builders: - bytestring-tree-builder >= 0.2.5 && < 0.3, + bytestring-strict-builder >= 0.4 && < 0.5, -- data: dlist >= 0.7 && < 0.9, vector >= 0.10 && < 0.13, diff --git a/library/Hasql/Private/PreparedStatementRegistry.hs b/library/Hasql/Private/PreparedStatementRegistry.hs index e04c2354b7..ce672ffb20 100644 --- a/library/Hasql/Private/PreparedStatementRegistry.hs +++ b/library/Hasql/Private/PreparedStatementRegistry.hs @@ -9,7 +9,7 @@ where import Hasql.Private.Prelude hiding (lookup) import qualified Data.HashTable.IO as A -import qualified ByteString.TreeBuilder as B +import qualified ByteString.StrictBuilder as B data PreparedStatementRegistry = @@ -39,7 +39,7 @@ update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table c return result where remoteKey = - B.toByteString . B.asciiIntegral $ n + B.builderBytes . B.asciiIntegral $ n old = onOldRemoteKey From e9cf07fb30547cd2786c2d928d8dd4c04fd747da Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 10 Apr 2017 17:55:58 +0300 Subject: [PATCH 0403/1204] New benchmarks --- benchmark/Main.hs | 53 ------------------ benchmark/Main/Prelude.hs | 65 ---------------------- benchmark/Main/Queries.hs | 29 ---------- benchmarks/Main.hs | 110 ++++++++++++++++++++++++++++++++++++++ hasql.cabal | 36 +++---------- 5 files changed, 116 insertions(+), 177 deletions(-) delete mode 100644 benchmark/Main.hs delete mode 100644 benchmark/Main/Prelude.hs delete mode 100644 benchmark/Main/Queries.hs create mode 100644 benchmarks/Main.hs diff --git a/benchmark/Main.hs b/benchmark/Main.hs deleted file mode 100644 index 9ae6cedb9a..0000000000 --- a/benchmark/Main.hs +++ /dev/null @@ -1,53 +0,0 @@ -module Main where - -import Main.Prelude -import Criterion.Main -import qualified Hasql.Connection as HC -import qualified Hasql.Query as HQ -import qualified Hasql.Encoders as HE -import qualified Hasql.Decoders as HD -import qualified Hasql.Session -import qualified Main.Queries as Q - - -main = - HC.acquire settings >>= either (fail . show) use - where - settings = - HC.settings host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "" - database = "postgres" - use connection = - defaultMain - [ - bgroup "decoding" - [ - bgroup "1 column" - [ - bench "1 row" $ nfIO $! query () $! Q.select1 1 - , - bench "100 rows" $ nfIO $! query () $! Q.select1 100 - , - bench "10000 rows" $ nfIO $! query () $! Q.select1 10000 - ] - , - bgroup "4 columns" - [ - bench "1 row" $ nfIO $! query () $! Q.select4 1 - , - bench "100 rows" $ nfIO $! query () $! Q.select4 100 - , - bench "10000 rows" $ nfIO $! query () $! Q.select4 10000 - ] - ] - ] - where - query :: a -> HQ.Query a b -> IO b - query params query = - {-# SCC "query" #-} - (=<<) (either (fail . show) pure) $ - flip Hasql.Session.run connection $ Hasql.Session.query params query diff --git a/benchmark/Main/Prelude.hs b/benchmark/Main/Prelude.hs deleted file mode 100644 index 16e2dd1760..0000000000 --- a/benchmark/Main/Prelude.hs +++ /dev/null @@ -1,65 +0,0 @@ -module Main.Prelude -( - module Exports, -) -where - - --- base-prelude -------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) - --- transformers -------------------------- -import Control.Monad.IO.Class as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Data.Functor.Identity as Exports - --- data-default-class -------------------------- -import Data.Default.Class as Exports - --- profunctors -------------------------- -import Data.Profunctor.Unsafe as Exports - --- contravariant -------------------------- -import Data.Functor.Contravariant as Exports -import Data.Functor.Contravariant.Divisible as Exports - --- contravariant-extras -------------------------- -import Contravariant.Extras as Exports - --- either -------------------------- -import Control.Monad.Trans.Either as Exports -import Data.Either.Combinators as Exports - --- hashable -------------------------- -import Data.Hashable as Exports (Hashable(..)) - --- text -------------------------- -import Data.Text as Exports (Text) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) - --- vector -------------------------- -import Data.Vector as Exports (Vector) - --- dlist -------------------------- -import Data.DList as Exports (DList) - --- deepseq -------------------------- -import Control.DeepSeq as Exports (NFData(..), force, deepseq, ($!!)) diff --git a/benchmark/Main/Queries.hs b/benchmark/Main/Queries.hs deleted file mode 100644 index c2df173783..0000000000 --- a/benchmark/Main/Queries.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Main.Queries where - -import Main.Prelude -import qualified Hasql.Query as HQ -import qualified Hasql.Encoders as HE -import qualified Hasql.Decoders as HD - - -select1 :: Int -> HQ.Query () (Vector Int64) -select1 amount = - {-# SCC "select1" #-} - HQ.statement sql mempty decoder True - where - !sql = - "values " <> - mconcat (intersperse ", " (replicate amount "(1)")) - decoder = - HD.rowsVector (HD.value HD.int8) - -select4 :: Int -> HQ.Query () (Vector (Int64, Int64, Int64, Int64)) -select4 amount = - {-# SCC "select4" #-} - HQ.statement sql mempty decoder True - where - !sql = - "values " <> - mconcat (intersperse ", " (replicate amount "(1, 2, 3, 4)")) - decoder = - HD.rowsVector ((,,,) <$> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8 <*> HD.value HD.int8) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs new file mode 100644 index 0000000000..9e3b1d9c09 --- /dev/null +++ b/benchmarks/Main.hs @@ -0,0 +1,110 @@ +module Main where + +import Prelude +import Bug +import Criterion +import Criterion.Main +import qualified Hasql.Connection as A +import qualified Hasql.Session as B +import qualified Hasql.Query as C +import qualified Hasql.Decoders as D +import qualified Hasql.Encoders as E +import qualified Data.Vector as F + + +main = + do + Right connection <- acquireConnection + useConnection connection + where + acquireConnection = + A.acquire settings + where + settings = + A.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + useConnection connection = + defaultMain + [ + sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector + , + sessionBench "largeResultInList" sessionWithSingleLargeResultInList + , + sessionBench "manySmallResults" sessionWithManySmallResults + ] + where + sessionBench :: NFData a => String -> B.Session a -> Benchmark + sessionBench name session = + bench name (nfIO (fmap (either ($bug "") id) (B.run session connection))) + + +-- * Sessions +------------------------- + +sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () +sessionWithManySmallParameters = + $(todo "sessionWithManySmallParameters") + +sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) +sessionWithSingleLargeResultInVector = + B.query () queryWithManyRowsInVector + +sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) +sessionWithSingleLargeResultInList = + B.query () queryWithManyRowsInList + +sessionWithManySmallResults :: B.Session (Vector (Int64, Int64)) +sessionWithManySmallResults = + F.replicateM 1000 (B.query () queryWithSingleRow) + + +-- * Statements +------------------------- + +queryWithManyParameters :: C.Query (Vector (Int64, Int64)) () +queryWithManyParameters = + $(todo "statementWithManyParameters") + +queryWithSingleRow :: C.Query () (Int64, Int64) +queryWithSingleRow = + C.statement template encoder decoder True + where + template = + "SELECT 1, 2" + encoder = + conquer + decoder = + D.singleRow row + where + row = + tuple <$> D.value D.int8 <*> D.value D.int8 + where + tuple !a !b = + (a, b) + +queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result +queryWithManyRows decoder = + C.statement template encoder (decoder rowDecoder) True + where + template = + "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" + encoder = + conquer + rowDecoder = + tuple <$> D.value D.int8 <*> D.value D.int8 + where + tuple !a !b = + (a, b) + +queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) +queryWithManyRowsInVector = + queryWithManyRows D.rowsVector + +queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) +queryWithManyRowsInList = + queryWithManyRows D.rowsList diff --git a/hasql.cabal b/hasql.cabal index 5384cd6384..115c0d28c9 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -158,25 +158,18 @@ test-suite threads-test rebase -benchmark benchmark +benchmark benchmarks type: exitcode-stdio-1.0 hs-source-dirs: - benchmark + benchmarks main-is: Main.hs - other-modules: - Main.Queries - Main.Prelude ghc-options: -O2 -threaded "-with-rtsopts=-N" - ghc-prof-options: - -O2 - -threaded - -fprof-auto - "-with-rtsopts=-N -p -s -h -i0.1" + -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: @@ -184,24 +177,7 @@ benchmark benchmark build-depends: hasql, -- benchmarking: - criterion == 1.1.*, - -- data: - uuid, - time, - scientific, - bytestring, - text, - vector, - hashable, - dlist, + criterion >= 1.1 && < 2, -- general: - deepseq >= 1 && < 2, - data-default-class, - profunctors, - contravariant, - contravariant-extras, - either, - transformers, - base-prelude, - base - + bug == 1.*, + rerebase < 2 From e41f83fbfef25cc7af46a7db47c711e96a32d0bf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 13 Apr 2017 15:38:56 +0300 Subject: [PATCH 0404/1204] Enlarge the benchmark samples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Results: benchmarking largeResultInVector time 7.644 ms (7.531 ms .. 7.805 ms) 0.999 R² (0.998 R² .. 1.000 R²) mean 7.590 ms (7.552 ms .. 7.633 ms) std dev 114.4 μs (84.40 μs .. 168.9 μs) benchmarking largeResultInList time 9.688 ms (9.597 ms .. 9.762 ms) 0.999 R² (0.999 R² .. 1.000 R²) mean 9.686 ms (9.631 ms .. 9.763 ms) std dev 181.3 μs (120.3 μs .. 291.4 μs) benchmarking manySmallResults time 53.05 ms (52.51 ms .. 53.65 ms) 1.000 R² (0.999 R² .. 1.000 R²) mean 52.71 ms (52.46 ms .. 52.98 ms) std dev 468.0 μs (315.9 μs .. 607.8 μs) --- benchmarks/Main.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 9e3b1d9c09..41de0bc299 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -92,7 +92,7 @@ queryWithManyRows decoder = C.statement template encoder (decoder rowDecoder) True where template = - "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" + "SELECT generate_series(0,10000) as a, generate_series(10000,20000) as b" encoder = conquer rowDecoder = From 22b5f8bb33f1c572cf0da3d7dc3d165ff0460d77 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 14 Apr 2017 00:43:39 +0300 Subject: [PATCH 0405/1204] Revert "Enlarge the benchmark samples" This reverts commit e41f83fbfef25cc7af46a7db47c711e96a32d0bf. --- benchmarks/Main.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 41de0bc299..9e3b1d9c09 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -92,7 +92,7 @@ queryWithManyRows decoder = C.statement template encoder (decoder rowDecoder) True where template = - "SELECT generate_series(0,10000) as a, generate_series(10000,20000) as b" + "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" encoder = conquer rowDecoder = From 52adc799071f146ff6b0e8120ddb7f094c64f0e3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 14 Apr 2017 00:46:59 +0300 Subject: [PATCH 0406/1204] Add profiling --- hasql.cabal | 21 ++++++++++ profile-events | 9 +++++ profiling/Main.hs | 98 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100755 profile-events create mode 100644 profiling/Main.hs diff --git a/hasql.cabal b/hasql.cabal index 115c0d28c9..b86047e327 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -181,3 +181,24 @@ benchmark benchmarks -- general: bug == 1.*, rerebase < 2 + + +test-suite profiling + type: + exitcode-stdio-1.0 + hs-source-dirs: + profiling + main-is: + Main.hs + ghc-options: + -O2 + -threaded + -rtsopts + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + hasql, + bug == 1.*, + rerebase == 1.* diff --git a/profile-events b/profile-events new file mode 100755 index 0000000000..d29393f9df --- /dev/null +++ b/profile-events @@ -0,0 +1,9 @@ +#!/bin/bash +set -eo pipefail + +cabal build profiling --ghc-options="-eventlog" +cd dist +build/profiling/profiling simple +RTS -N2 -ls -RTS +ghc-events-analyze --timed --bucket-width 2 --bucket-height 14 --ms --tick-every 10 --buckets 500 --window Session profiling.eventlog +open profiling.0.timed.svg +threadscope profiling.eventlog diff --git a/profiling/Main.hs b/profiling/Main.hs new file mode 100644 index 0000000000..b8b725cb73 --- /dev/null +++ b/profiling/Main.hs @@ -0,0 +1,98 @@ +module Main where + +import Prelude +import Bug +import qualified Hasql.Connection as A +import qualified Hasql.Session as B +import qualified Hasql.Query as C +import qualified Hasql.Decoders as D +import qualified Hasql.Encoders as E +import qualified Data.Vector as F + + +main = + do + Right connection <- acquireConnection + traceEventIO "START Session" + Right result <- B.run sessionWithManySmallResults connection + traceEventIO "STOP Session" + return () + where + acquireConnection = + A.acquire settings + where + settings = + A.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + + +-- * Sessions +------------------------- + +sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () +sessionWithManySmallParameters = + $(todo "sessionWithManySmallParameters") + +sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) +sessionWithSingleLargeResultInVector = + B.query () queryWithManyRowsInVector + +sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) +sessionWithSingleLargeResultInList = + B.query () queryWithManyRowsInList + +sessionWithManySmallResults :: B.Session (Vector (Int64, Int64)) +sessionWithManySmallResults = + F.replicateM 1000 (B.query () queryWithSingleRow) + + +-- * Statements +------------------------- + +queryWithManyParameters :: C.Query (Vector (Int64, Int64)) () +queryWithManyParameters = + $(todo "statementWithManyParameters") + +queryWithSingleRow :: C.Query () (Int64, Int64) +queryWithSingleRow = + C.statement template encoder decoder True + where + template = + "SELECT 1, 2" + encoder = + conquer + decoder = + D.singleRow row + where + row = + tuple <$> D.value D.int8 <*> D.value D.int8 + where + tuple !a !b = + (a, b) + +queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result +queryWithManyRows decoder = + C.statement template encoder (decoder rowDecoder) True + where + template = + "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" + encoder = + conquer + rowDecoder = + tuple <$> D.value D.int8 <*> D.value D.int8 + where + tuple !a !b = + (a, b) + +queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) +queryWithManyRowsInVector = + queryWithManyRows D.rowsVector + +queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) +queryWithManyRowsInList = + queryWithManyRows D.rowsList From 1127e753648348565d42d35aea864d6ae9bb4f4f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 14 Apr 2017 01:41:36 +0300 Subject: [PATCH 0407/1204] Add rtsopts to benchmark --- hasql.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/hasql.cabal b/hasql.cabal index b86047e327..974b785bd3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -169,6 +169,7 @@ benchmark benchmarks -O2 -threaded "-with-rtsopts=-N" + -rtsopts -funbox-strict-fields default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples From c819d6b5f39c9d6b31fcf91d47204e2466d5300d Mon Sep 17 00:00:00 2001 From: Alex Mason Date: Mon, 24 Apr 2017 19:21:15 +1000 Subject: [PATCH 0408/1204] Add documentation on how to perform an insert or multiple values. --- library/Hasql/Encoders.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index b9dc6c9c8e..95a19cf78e 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -39,6 +39,8 @@ module Hasql.Encoders arrayValue, arrayNullableValue, arrayDimension, + -- ** Insert Many + -- $insertMany ) where @@ -533,3 +535,26 @@ arrayDimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c arrayDimension foldl (Array imp) = Array (Array.dimension foldl imp) +-- $insertMany +-- It is not currently possible to pass in an array of encodable values +-- to use in an 'insert many' query using Hasql. Instead, PostgreSQL's +-- (9.4 or later) `unnest` function can be used to in an analogous way +-- to haskell's `zip` function by passing in multiple arrays of values +-- to be zipped into the rows we want to insert: +-- +-- @ +-- insertMultipleLocations :: Query (Vector (UUID, Double, Double)) () +-- insertMultipleLocations = +-- statement sql encoder decoder True +-- where +-- sql = +-- "insert into location (id, x, y) select * from unnest ($1, $2, $3)" +-- encoder = +-- contramap Vector.unzip3 $ +-- contrazip3 (vector Encoders.uuid) (vector Encoders.float8) (vector Encoders.float8) +-- where +-- vector value = +-- Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue value))) +-- decoder = +-- Decoders.unit +-- @ \ No newline at end of file From 2d5a248f3f87726461448d1ab31a71bde1332ea3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 6 Jun 2017 09:38:02 +0300 Subject: [PATCH 0409/1204] Connect through socket in benchmarks --- benchmarks/Main.hs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 9e3b1d9c09..968e04d6da 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -18,16 +18,7 @@ main = useConnection connection where acquireConnection = - A.acquire settings - where - settings = - A.settings host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "" - database = "postgres" + A.acquire "" useConnection connection = defaultMain [ From b9e74c18c6e1e1f1c7037f08e4ddc4eccfc9f156 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 22 Jun 2017 09:56:08 +0300 Subject: [PATCH 0410/1204] Note to self --- library/Hasql/Transaction/Private/Sessions.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 799a45f5e6..edf322e2d9 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -7,6 +7,11 @@ import qualified Hasql.Session as A import qualified Hasql.Transaction.Private.Queries as B +{- +We may want to +do one transaction retry in case of the 23505 error, and fail if an identical +error is seen. +-} inRetryingTransaction :: IsolationLevel -> Mode -> A.Session (a, Bool) -> A.Session a inRetryingTransaction isolation mode session = fix $ \recur -> catchError normal (onError recur) From f0a8b16f488dcdfbf2d0d7b30ca2744389e3c2de Mon Sep 17 00:00:00 2001 From: Michael Karg Date: Wed, 26 Jul 2017 16:00:36 +0200 Subject: [PATCH 0411/1204] fixes nikita-volkov/hasql#76 --- library/Hasql/Private/Prelude.hs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 809e9617ed..936cc70a23 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE CPP #-} + module Hasql.Private.Prelude ( module Exports, @@ -51,7 +53,12 @@ import Contravariant.Extras as Exports -- either ------------------------- import Control.Monad.Trans.Either as Exports +-- prefer implementations in base (via base-prelude) over the ones in either +#if MIN_VERSION_base(4,10,0) +import Data.Either.Combinators as Exports hiding (fromLeft, fromRight) +#else import Data.Either.Combinators as Exports +#endif -- semigroups ------------------------- From 7a1156ac1575446699076a6eba2b86d54a33aac9 Mon Sep 17 00:00:00 2001 From: Michael Karg Date: Sun, 30 Jul 2017 22:49:21 +0200 Subject: [PATCH 0412/1204] discard CPP and hide fromLeft/fromRight altogether --- library/Hasql/Private/Prelude.hs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 936cc70a23..cdfec7f8ce 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module Hasql.Private.Prelude ( module Exports, @@ -53,12 +51,7 @@ import Contravariant.Extras as Exports -- either ------------------------- import Control.Monad.Trans.Either as Exports --- prefer implementations in base (via base-prelude) over the ones in either -#if MIN_VERSION_base(4,10,0) import Data.Either.Combinators as Exports hiding (fromLeft, fromRight) -#else -import Data.Either.Combinators as Exports -#endif -- semigroups ------------------------- From a3c4521de7620d05e63cc37c7e5b6254b47fca03 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2017 09:22:21 +0300 Subject: [PATCH 0413/1204] Hide fromLeft and fromRight from "base-prelude" --- library/Hasql/Private/Prelude.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index cdfec7f8ce..164d1c8082 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -16,7 +16,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error, (<>), First(..), Last(..), new) +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, fromLeft, fromRight, error, (<>), First(..), Last(..), new) -- transformers ------------------------- @@ -51,7 +51,7 @@ import Contravariant.Extras as Exports -- either ------------------------- import Control.Monad.Trans.Either as Exports -import Data.Either.Combinators as Exports hiding (fromLeft, fromRight) +import Data.Either.Combinators as Exports -- semigroups ------------------------- From 771cc1c2e08c73c01bdfd23980e8191bab598aee Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2017 09:24:26 +0300 Subject: [PATCH 0414/1204] Add GHC 8.2.1 to the Travis configuration --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f5628c815e..35b725d987 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,8 @@ env: - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 - ghc=7.8.1 cabal=1.18 - ghc=7.10.1 cabal=1.22 - - ghc=8.0.1 cabal=1.24 benchmarks=1 tests=1 + - ghc=8.0.2 cabal=1.24 + - ghc=8.2.1 cabal=1.24 benchmarks=1 tests=1 install: # Set up the Shell to treat the semicolon as && From e650bc52721798fbcdafbcd1a6a7f70532269bc2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2017 09:25:08 +0300 Subject: [PATCH 0415/1204] Update the package version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 974b785bd3..449d6d3219 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.18 + 0.19.18.1 category: Hasql, Database, PostgreSQL synopsis: From 2f15f06f08cdee45e8bed90c922827c856642487 Mon Sep 17 00:00:00 2001 From: AndrewRademacher Date: Fri, 22 Sep 2017 16:04:15 -0500 Subject: [PATCH 0416/1204] Reversed evaulation order when executing dropRemaining. --- library/Hasql/Private/Decoders/Results.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index 1636aa2757..03f4e36c59 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -85,7 +85,7 @@ dropRemainders = getResultMaybe = lift $ LibPQ.getResult connection onResult result = - checkErrors *> loop integerDatetimes connection + loop integerDatetimes connection <* checkErrors where checkErrors = EitherT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) From d7796398425cdac7fc5d3b6091db45ab5d94c4bf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Sep 2017 09:12:22 +0300 Subject: [PATCH 0417/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 449d6d3219..8301fcef98 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.18.1 + 0.19.18.2 category: Hasql, Database, PostgreSQL synopsis: From 5dac2106e49c22e1a32e49e7bedaf8927abebb41 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Sep 2017 09:14:28 +0300 Subject: [PATCH 0418/1204] Update Travis --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 35b725d987..f679f72aa5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ env: - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 - - ghc=7.8.1 cabal=1.18 + - ghc=7.8.1 cabal=1.18 lower_bound_dependencies=1 - ghc=7.10.1 cabal=1.22 - ghc=8.0.2 cabal=1.24 - ghc=8.2.1 cabal=1.24 benchmarks=1 tests=1 @@ -10,8 +10,6 @@ install: - set -o pipefail && set -e # Install GHC and Cabal - - ghc=${ghc=7.10.1}; - cabal=${cabal=1.22}; travis_retry sudo add-apt-repository -y ppa:hvr/ghc; travis_retry sudo apt-get update; travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; @@ -32,6 +30,7 @@ install: constraint_options=( "--constraint=transformers==0.3.*" "--constraint=time==1.4.*" + "--constraint=hashtables==1.1.0.0" ); fi; # Install the "haskell-src-exts" implicit dependency From 39a54c7ceff1bb49c288982ee129b37b24f75904 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Sep 2017 09:19:07 +0300 Subject: [PATCH 0419/1204] Update Travis --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index f679f72aa5..235fcc2473 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ env: - - ghc=7.6.1 cabal=1.18 lower_bound_dependencies=1 - - ghc=7.8.1 cabal=1.18 lower_bound_dependencies=1 - - ghc=7.10.1 cabal=1.22 + - ghc=7.10.1 cabal=1.22 lower_bound_dependencies=1 - ghc=8.0.2 cabal=1.24 - ghc=8.2.1 cabal=1.24 benchmarks=1 tests=1 @@ -30,7 +28,6 @@ install: constraint_options=( "--constraint=transformers==0.3.*" "--constraint=time==1.4.*" - "--constraint=hashtables==1.1.0.0" ); fi; # Install the "haskell-src-exts" implicit dependency From 3e6ce84d1ec1d08ac2a8b5369ae907340d7b3288 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 9 Oct 2017 18:42:22 +0300 Subject: [PATCH 0420/1204] Update the benchmark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Results: benchmarking largeResultInVector time 652.5 μs (647.1 μs .. 660.1 μs) 0.999 R² (0.998 R² .. 1.000 R²) mean 659.8 μs (654.2 μs .. 673.0 μs) std dev 28.95 μs (14.60 μs .. 52.43 μs) variance introduced by outliers: 36% (moderately inflated) benchmarking largeResultInList time 692.7 μs (686.9 μs .. 700.0 μs) 0.999 R² (0.998 R² .. 0.999 R²) mean 708.7 μs (701.4 μs .. 721.6 μs) std dev 31.04 μs (22.26 μs .. 49.84 μs) variance introduced by outliers: 36% (moderately inflated) benchmarking manyLargeResults time 794.9 ms (778.6 ms .. 817.3 ms) 1.000 R² (1.000 R² .. 1.000 R²) mean 810.9 ms (803.9 ms .. 816.7 ms) std dev 9.339 ms (0.0 s .. 10.14 ms) variance introduced by outliers: 19% (moderately inflated) benchmarking manySmallResults time 35.02 ms (34.67 ms .. 35.26 ms) 0.999 R² (0.999 R² .. 1.000 R²) mean 34.93 ms (34.60 ms .. 35.22 ms) std dev 609.2 μs (433.5 μs .. 924.9 μs) --- benchmarks/Main.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 968e04d6da..0fd3d10cc0 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -26,6 +26,8 @@ main = , sessionBench "largeResultInList" sessionWithSingleLargeResultInList , + sessionBench "manyLargeResults" sessionWithManyLargeResults + , sessionBench "manySmallResults" sessionWithManySmallResults ] where @@ -45,13 +47,17 @@ sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = B.query () queryWithManyRowsInVector +sessionWithManyLargeResults :: B.Session [Vector (Int64, Int64)] +sessionWithManyLargeResults = + replicateM 1000 (B.query () queryWithManyRowsInVector) + sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) sessionWithSingleLargeResultInList = B.query () queryWithManyRowsInList -sessionWithManySmallResults :: B.Session (Vector (Int64, Int64)) +sessionWithManySmallResults :: B.Session [(Int64, Int64)] sessionWithManySmallResults = - F.replicateM 1000 (B.query () queryWithSingleRow) + replicateM 1000 (B.query () queryWithSingleRow) -- * Statements From 7b8b21769ec7c7d9b39b7bcc56f0438fcf634cc3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 12 Oct 2017 13:03:11 +0100 Subject: [PATCH 0421/1204] Update the version --- hasql.cabal | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8301fcef98..629eda6eea 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 0.19.18.2 + 1 category: Hasql, Database, PostgreSQL synopsis: @@ -10,6 +10,8 @@ description: This package is the root of the \"hasql\" ecosystem. . The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. + . + The version 1 is completely backward-compatible with 0.19. homepage: https://github.com/nikita-volkov/hasql bug-reports: From 732e0d7caa6a9e4aee357e5f7a25054107dc33db Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 14 Oct 2017 17:01:04 +0100 Subject: [PATCH 0422/1204] Update the dependencies --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 5f1ac1c89b..ec37649039 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.5 + 0.5.1 category: Hasql, Database, PostgreSQL synopsis: @@ -53,7 +53,7 @@ library Hasql.Transaction.Sessions build-depends: -- database: - hasql >= 0.17 && < 0.20, + hasql >= 0.17 && < 0.20 || >= 1 && < 1.1, -- data: bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, From 331956ca085dde522a937e682541797961f945f1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Oct 2017 00:21:29 +0100 Subject: [PATCH 0423/1204] Update the deps --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index d74d5db93c..15f32e01af 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4.1 + 0.4.2 category: Hasql, Database, PostgreSQL synopsis: @@ -49,7 +49,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.19 && < 0.20, + hasql >= 0.19 && < 0.20 && >= 1 && < 1.1, -- data: time >= 1.5 && < 2, -- general: From 3be99ebf5c2b1fb99bd7e760ab7f4abd8344be9f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2017 17:33:04 +0200 Subject: [PATCH 0424/1204] Fix the deps --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 15f32e01af..736187bb45 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4.2 + 0.4.2.1 category: Hasql, Database, PostgreSQL synopsis: @@ -49,7 +49,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.19 && < 0.20 && >= 1 && < 1.1, + hasql >= 0.19 && < 0.20 || >= 1 && < 1.1, -- data: time >= 1.5 && < 2, -- general: From 26fc28d922cc5500779f5af274fa5f5fe606e185 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Sat, 28 Oct 2017 18:11:47 -0500 Subject: [PATCH 0425/1204] Fix #80, better behavior for unknown encoder --- library/Hasql/Private/Encoders/Params.hs | 9 +++++++-- tasty/Main.hs | 14 +++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index 121c907e52..3657ef79a4 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -28,7 +28,7 @@ run' (Params (Op op)) params integerDatetimes = step (oid, bytesGetter) ~(oidList, bytesAndFormatList) = (,) (oid : oidList) - (fmap (\bytes -> (bytes, A.Binary)) (bytesGetter integerDatetimes) : bytesAndFormatList) + (fmap (\bytes -> (bytes, format oid)) (bytesGetter integerDatetimes) : bytesAndFormatList) run'' :: Params a -> a -> Bool -> [Maybe (A.Oid, ByteString, A.Format)] run'' (Params (Op op)) params integerDatetimes = @@ -39,7 +39,12 @@ run'' (Params (Op op)) params integerDatetimes = mapping a : b where mapping (oid, bytesGetter) = - (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure A.Binary + (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure (format oid) + +format :: A.Oid -> A.Format +format oid = case oid of + A.Oid 705 -> A.Text -- is unknown + _ -> A.Binary value :: C.Value a -> Params a value = diff --git a/tasty/Main.hs b/tasty/Main.hs index 0b4aab5ef4..22972629eb 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -283,27 +283,27 @@ tree = Query.statement sql mempty Decoders.unit True where sql = - "drop type if exists mood" + "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" in DSL.query () query let query = Query.statement sql mempty Decoders.unit True where sql = - "create type mood as enum ('sad', 'ok', 'happy')" + "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" in DSL.query () query let query = Query.statement sql encoder decoder True where sql = - "select $1 = ('ok' :: mood)" + "select overloaded($1, $2) || overloaded($3, $4, $5)" decoder = - (Decoders.singleRow (Decoders.value (Decoders.bool))) + (Decoders.singleRow (Decoders.value (Decoders.text))) encoder = - Encoders.value (Encoders.unknown) - in DSL.query "ok" query - in actualIO >>= assertEqual "" (Right True) + contramany (Encoders.value Encoders.unknown) + in DSL.query ["1", "2", "4", "5", "6"] query + in actualIO >>= assertEqual "" (Right "3456") , testCase "Enum" $ let From 04cefc7b471b9ac09c41f2074aba11b09f898242 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Sat, 28 Oct 2017 18:38:01 -0500 Subject: [PATCH 0426/1204] Update unknown decoder doc --- library/Hasql/Encoders.hs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 95a19cf78e..66d62c0172 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -358,15 +358,6 @@ enum mapping = -- | -- Identifies the value with the PostgreSQL's \"unknown\" type, -- thus leaving it up to Postgres to infer the actual type of the value. --- --- The bytestring needs to be encoded according to the Postgres\' binary format --- of the type it expects. --- --- Essentially this is a low-level hook for encoding of values with custom codecs. --- The --- --- library will provide you with the toolchain. --- {-# INLINABLE unknown #-} unknown :: Value ByteString unknown = From aa7b373c57a0331d066ceb3f9583ca1998e76d7a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:24:57 +0300 Subject: [PATCH 0427/1204] Fix the Travis config --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 235fcc2473..d811d2a47d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,8 +26,6 @@ install: if [ "$lower_bound_dependencies" = "1" ]; then constraint_options=( - "--constraint=transformers==0.3.*" - "--constraint=time==1.4.*" ); fi; # Install the "haskell-src-exts" implicit dependency From f76d67ed1f7ded17c041839b7956050558ad418b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:37:01 +0300 Subject: [PATCH 0428/1204] Restore the older test --- tasty/Main.hs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 22972629eb..5ef5d62c06 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -275,6 +275,37 @@ tree = in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , testCase "Unknown" $ + let + actualIO = + DSL.session $ do + let + query = + Query.statement sql mempty Decoders.unit True + where + sql = + "drop type if exists mood" + in DSL.query () query + let + query = + Query.statement sql mempty Decoders.unit True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.query () query + let + query = + Query.statement sql encoder decoder True + where + sql = + "select $1 = ('ok' :: mood)" + decoder = + (Decoders.singleRow (Decoders.value (Decoders.bool))) + encoder = + Encoders.value (Encoders.unknown) + in DSL.query "ok" query + in actualIO >>= assertEqual "" (Right True) + , + testCase "Textual Unknown" $ let actualIO = DSL.session $ do From 9ba0612f682c0448035862dd00bb5cf405ae117a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:47:05 +0300 Subject: [PATCH 0429/1204] Extend the docs --- library/Hasql/Encoders.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 66d62c0172..307f607a33 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -358,6 +358,11 @@ enum mapping = -- | -- Identifies the value with the PostgreSQL's \"unknown\" type, -- thus leaving it up to Postgres to infer the actual type of the value. +-- +-- The value transimitted is any value encoded in the Postgres' Text data format. +-- For reference, see the +-- +-- section of the Postgres' documentation. {-# INLINABLE unknown #-} unknown :: Value ByteString unknown = From 4622f29fc46957962bbdaec05fd7c0d47608998d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:47:39 +0300 Subject: [PATCH 0430/1204] Update the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 629eda6eea..da489ac9e4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1 + 1.1 category: Hasql, Database, PostgreSQL synopsis: From 57230b9df76c3340c15c270293bbe5fa372cd86f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:53:28 +0300 Subject: [PATCH 0431/1204] Update the deps --- hasql-pool.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 736187bb45..d9ddd6433e 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4.2.1 + 0.4.3 category: Hasql, Database, PostgreSQL synopsis: @@ -49,8 +49,8 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.19 && < 0.20 || >= 1 && < 1.1, + hasql >= 0.19 && < 0.20 || >= 1 && < 2, -- data: time >= 1.5 && < 2, -- general: - base-prelude >= 0.1.21 && < 2 + base-prelude >= 1 && < 2 From d5c3c5dd408c605102a937252920b1de4a2dc2f0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Nov 2017 20:55:00 +0300 Subject: [PATCH 0432/1204] Update the deps --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ec37649039..3b88fa295a 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.5.1 + 0.5.2 category: Hasql, Database, PostgreSQL synopsis: @@ -53,7 +53,7 @@ library Hasql.Transaction.Sessions build-depends: -- database: - hasql >= 0.17 && < 0.20 || >= 1 && < 1.1, + hasql >= 0.19 && < 0.20 || >= 1 && < 2, -- data: bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, From 3dddd9465c7a0c0aa06478718f78cbf5a1ac2a6d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 Nov 2017 11:23:48 +0300 Subject: [PATCH 0433/1204] Set the version to 1.1.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index da489ac9e4..03b673b87a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.1 + 1.1.1 category: Hasql, Database, PostgreSQL synopsis: From 32018a64811dea95d174a62f8dd936e051537f7f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 Nov 2017 11:24:17 +0300 Subject: [PATCH 0434/1204] Update the test deps --- hasql.cabal | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 03b673b87a..be3a7d681c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -124,12 +124,11 @@ test-suite tasty -- database: hasql, -- testing: - tasty == 0.11.*, - tasty-quickcheck == 0.8.*, - tasty-smallcheck == 0.8.*, - tasty-hunit == 0.9.*, + tasty >= 0.12 && < 0.13, + tasty-quickcheck >= 0.9 && < 0.10, + tasty-hunit >= 0.9 && < 0.10, quickcheck-instances >= 0.3.11 && < 0.4, - QuickCheck >= 2.8.1 && < 2.10, + QuickCheck >= 2.8.1 && < 3, -- general: data-default-class, -- From b806c6ef1c04300031ee79bdabf11923008b2977 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 Nov 2017 11:24:40 +0300 Subject: [PATCH 0435/1204] Migrate from EitherT to ExceptT --- hasql.cabal | 1 - library/Hasql/Private/Connection.hs | 4 ++-- library/Hasql/Private/Decoders/Result.hs | 20 ++++++++++---------- library/Hasql/Private/Decoders/Results.hs | 12 ++++++------ library/Hasql/Private/Decoders/Row.hs | 8 ++++---- library/Hasql/Private/IO.hs | 6 +++--- library/Hasql/Private/Prelude.hs | 21 +++++++++++++-------- library/Hasql/Private/Query.hs | 4 ++-- library/Hasql/Private/Session.hs | 6 +++--- tasty/Main/Connection.hs | 4 ++-- tasty/Main/DSL.hs | 6 +++--- 11 files changed, 48 insertions(+), 44 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index be3a7d681c..7e9a6405a3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -93,7 +93,6 @@ library profunctors >= 5.1 && < 6, contravariant-extras == 0.3.*, contravariant >= 1.3 && < 2, - either >= 4.4.1 && < 5, mtl >= 2 && < 3, transformers >= 0.3 && < 0.6, -- errors: diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 86d2e5abe7..5207dca056 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -25,9 +25,9 @@ type ConnectionError = acquire :: Settings.Settings -> IO (Either ConnectionError Connection) acquire settings = {-# SCC "acquire" #-} - runEitherT $ do + runExceptT $ do pqConnection <- lift (IO.acquireConnection settings) - lift (IO.checkConnectionStatus pqConnection) >>= traverse left + lift (IO.checkConnectionStatus pqConnection) >>= traverse throwError lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) registry <- lift (IO.acquirePreparedStatementRegistry) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index f4ae9c6515..3264a94fc4 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -11,7 +11,7 @@ import qualified Data.Vector.Mutable as MutableVector newtype Result a = - Result (ReaderT (Bool, LibPQ.Result) (EitherT Error IO) a) + Result (ReaderT (Bool, LibPQ.Result) (ExceptT Error IO) a) deriving (Functor, Applicative, Monad) data Error = @@ -48,7 +48,7 @@ data Error = {-# INLINE run #-} run :: Result a -> (Bool, LibPQ.Result) -> IO (Either Error a) run (Result reader) env = - runEitherT (runReaderT reader env) + runExceptT (runReaderT reader env) {-# INLINE unit #-} unit :: Result () @@ -65,7 +65,7 @@ rowsAffected = checkExecStatus $ \case LibPQ.CommandOk -> True _ -> False - Result $ ReaderT $ \(_, result) -> EitherT $ + Result $ ReaderT $ \(_, result) -> ExceptT $ LibPQ.cmdTuples result & fmap cmdTuplesReader where cmdTuplesReader = @@ -92,12 +92,12 @@ checkExecStatus predicate = LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError LibPQ.FatalError -> serverError - _ -> Result $ lift $ EitherT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) + _ -> Result $ lift $ ExceptT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) {-# INLINE serverError #-} serverError :: Result () serverError = - Result $ ReaderT $ \(_, result) -> EitherT $ do + Result $ ReaderT $ \(_, result) -> ExceptT $ do code <- fmap (fromMaybe ($bug "No code")) $ LibPQ.resultErrorField result LibPQ.DiagSqlstate @@ -117,7 +117,7 @@ maybe rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result case maxRows of 0 -> return (Right Nothing) @@ -138,7 +138,7 @@ single rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result case maxRows of 1 -> do @@ -158,7 +158,7 @@ vector rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result mvector <- MutableVector.unsafeNew (rowToInt maxRows) @@ -185,7 +185,7 @@ foldl step init rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ {-# SCC "traversal" #-} do + Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ {-# SCC "traversal" #-} do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result accRef <- newIORef init @@ -212,7 +212,7 @@ foldr step init rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> EitherT $ do + Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result accRef <- newIORef init diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index 03f4e36c59..3c42246db3 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -19,7 +19,7 @@ import qualified Hasql.Private.Decoders.Row as Row newtype Results a = - Results (ReaderT (Bool, LibPQ.Connection) (EitherT Error IO) a) + Results (ReaderT (Bool, LibPQ.Connection) (ExceptT Error IO) a) deriving (Functor, Applicative, Monad) data Error = @@ -34,12 +34,12 @@ data Error = {-# INLINE run #-} run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either Error a) run (Results stack) env = - runEitherT (runReaderT stack env) + runExceptT (runReaderT stack env) {-# INLINE clientError #-} clientError :: Results a clientError = - Results $ ReaderT $ \(_, connection) -> EitherT $ + Results $ ReaderT $ \(_, connection) -> ExceptT $ fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | @@ -47,7 +47,7 @@ clientError = {-# INLINE single #-} single :: Result.Result a -> Results a single resultDec = - Results $ ReaderT $ \(integerDatetimes, connection) -> EitherT $ do + Results $ ReaderT $ \(integerDatetimes, connection) -> ExceptT $ do resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> @@ -60,7 +60,7 @@ single resultDec = {-# INLINE getResult #-} getResult :: Results LibPQ.Result getResult = - Results $ ReaderT $ \(_, connection) -> EitherT $ do + Results $ ReaderT $ \(_, connection) -> ExceptT $ do resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> pure (Right result) @@ -88,4 +88,4 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - EitherT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) + ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index e88997b669..aebf046c76 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -7,7 +7,7 @@ import qualified Hasql.Private.Decoders.Value as Value newtype Row a = - Row (ReaderT Env (EitherT Error IO) a) + Row (ReaderT Env (ExceptT Error IO) a) deriving (Functor, Applicative, Monad) data Env = @@ -28,12 +28,12 @@ run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Erro run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 - runEitherT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) + runExceptT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) {-# INLINE error #-} error :: Error -> Row a error x = - Row (ReaderT (const (EitherT (pure (Left x))))) + Row (ReaderT (const (ExceptT (pure (Left x))))) -- | -- Next value, decoded using the provided value decoder. @@ -41,7 +41,7 @@ error x = value :: Value.Value a -> Row (Maybe a) value valueDec = {-# SCC "value" #-} - Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> EitherT $ do + Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do col <- readIORef columnRef writeIORef columnRef (succ col) if col < columnsAmount diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index a268a5b53a..6dc1382d5f 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -114,9 +114,9 @@ sendPreparedParametricQuery :: [Maybe (ByteString, LibPQ.Format)] -> IO (Either ResultsDecoders.Error ()) sendPreparedParametricQuery connection registry template oidList valueAndFormatList = - runEitherT $ do - key <- EitherT $ getPreparedStatementKey connection registry template oidList - EitherT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + runExceptT $ do + key <- ExceptT $ getPreparedStatementKey connection registry template oidList + ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary {-# INLINE sendUnpreparedParametricQuery #-} sendUnpreparedParametricQuery :: diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 164d1c8082..b069065624 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -10,6 +10,7 @@ module Hasql.Private.Prelude forMToZero_, forMFromZero_, strictCons, + mapLeft, ) where @@ -22,9 +23,13 @@ import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, from ------------------------- import Control.Monad.IO.Class as Exports import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) +import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) +import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT, throwE, catchE) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) +import Data.Functor.Compose as Exports import Data.Functor.Identity as Exports -- mtl @@ -48,11 +53,6 @@ import Data.Functor.Contravariant.Divisible as Exports ------------------------- import Contravariant.Extras as Exports --- either -------------------------- -import Control.Monad.Trans.Either as Exports -import Data.Either.Combinators as Exports - -- semigroups ------------------------- import Data.Semigroup as Exports @@ -128,3 +128,8 @@ forMFromZero_ !endN f = strictCons :: a -> [a] -> [a] strictCons !a b = let !c = a : b in c + +{-# INLINE mapLeft #-} +mapLeft :: (a -> c) -> Either a b -> Either c b +mapLeft f = + either (Left . f) Right diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs index ff45cb0f5c..2c6943220b 100644 --- a/library/Hasql/Private/Query.hs +++ b/library/Hasql/Private/Query.hs @@ -34,7 +34,7 @@ import qualified Hasql.Private.Encoders.Params as Encoders.Params -- else insert -< params -- @ newtype Query a b = - Query (Kleisli (ReaderT Connection.Connection (EitherT Decoders.Results.Error IO)) a b) + Query (Kleisli (ReaderT Connection.Connection (ExceptT Decoders.Results.Error IO)) a b) deriving (Category, Arrow, ArrowChoice, ArrowLoop, ArrowApply) instance Functor (Query a) where @@ -54,7 +54,7 @@ statement :: ByteString -> Encoders.Params.Params a -> Decoders.Results.Results statement template encoder decoder preparable = Query $ Kleisli $ \params -> ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - EitherT $ withMVar pqConnectionRef $ \pqConnection -> do + ExceptT $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index d09845f08d..749b9d471f 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -14,14 +14,14 @@ import qualified Hasql.Private.Connection as Connection -- | -- A batch of actions to be executed in the context of a database connection. newtype Session a = - Session (ReaderT Connection.Connection (EitherT Error IO) a) + Session (ReaderT Connection.Connection (ExceptT Error IO) a) deriving (Functor, Applicative, Monad, MonadError Error, MonadIO) -- | -- Executes a bunch of commands on the provided connection. run :: Session a -> Connection.Connection -> IO (Either Error a) run (Session impl) connection = - runEitherT $ + runExceptT $ runReaderT impl connection -- | @@ -31,7 +31,7 @@ run (Session impl) connection = sql :: ByteString -> Session () sql sql = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - EitherT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> do + ExceptT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendNonparametricQuery pqConnection sql r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index f0ee39a728..58e2eb8c81 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -9,10 +9,10 @@ import qualified Hasql.Session with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) with handler = - runEitherT $ acquire >>= \connection -> use connection <* release connection + runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ HC.acquire settings + ExceptT $ HC.acquire settings where settings = HC.settings host port user password database diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 32c19b0aee..7add19bb7f 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -26,10 +26,10 @@ data SessionError = session :: Session a -> IO (Either SessionError a) session session = - runEitherT $ acquire >>= \connection -> use connection <* release connection + runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - EitherT $ fmap (mapLeft ConnectionError) $ HC.acquire settings + ExceptT $ fmap (mapLeft ConnectionError) $ HC.acquire settings where settings = HC.settings host port user password database @@ -40,7 +40,7 @@ session session = password = "" database = "postgres" use connection = - EitherT $ + ExceptT $ fmap (mapLeft SessionError) $ Hasql.Session.run session connection release connection = From df2093999dbfd4bd5721b5806ab4feb111b49da4 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Wed, 6 Dec 2017 13:24:46 +0800 Subject: [PATCH 0436/1204] Allow tasty-hunit 0.10 Tests pass here. --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7e9a6405a3..7b837eb3e1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -125,7 +125,7 @@ test-suite tasty -- testing: tasty >= 0.12 && < 0.13, tasty-quickcheck >= 0.9 && < 0.10, - tasty-hunit >= 0.9 && < 0.10, + tasty-hunit >= 0.9 && < 0.11, quickcheck-instances >= 0.3.11 && < 0.4, QuickCheck >= 2.8.1 && < 3, -- general: From 046e0d2ac8429374ca75d5a67f0efefffe882f8b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Feb 2018 19:36:48 +0300 Subject: [PATCH 0437/1204] Set the version 0.6 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 3b88fa295a..00d7e6455d 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.5.2 + 0.6 category: Hasql, Database, PostgreSQL synopsis: From 61de141b095aa3e73920b30f64ea48f0abb17a03 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Feb 2018 19:37:22 +0300 Subject: [PATCH 0438/1204] Relocate things with more sense --- conflicts-test/Main.hs | 2 +- library/Hasql/Transaction.hs | 3 --- library/Hasql/Transaction/Sessions.hs | 3 +++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 00c16c4a38..056dcb320e 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -48,7 +48,7 @@ session connection session = either (fail . show) return transaction connection transaction = - session connection (G.transaction C.RepeatableRead C.Write transaction) + session connection (G.transaction G.RepeatableRead G.Write transaction) type Test = diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index ee32c94131..842b232c5a 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -2,9 +2,6 @@ -- An API for declaration of transactions. module Hasql.Transaction ( - -- * Transaction settings - Mode(..), - IsolationLevel(..), -- * Transaction monad Transaction, condemn, diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index e1e2761baf..2f96f572a8 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,6 +1,9 @@ module Hasql.Transaction.Sessions ( transaction, + -- * Transaction settings + C.Mode(..), + C.IsolationLevel(..), ) where From d4ffd71e74c5eec148cb773402fc4b587a0d4b43 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Sat, 17 Feb 2018 02:53:35 +0800 Subject: [PATCH 0439/1204] Allow tasty 1.0 Tests pass here. --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7b837eb3e1..88aa8244e8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -123,7 +123,7 @@ test-suite tasty -- database: hasql, -- testing: - tasty >= 0.12 && < 0.13, + tasty >= 0.12 && < 1.1, tasty-quickcheck >= 0.9 && < 0.10, tasty-hunit >= 0.9 && < 0.11, quickcheck-instances >= 0.3.11 && < 0.4, From 2d37fd0950bc4db0b58716e7cf18b0d31f03ca3d Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Mon, 5 Mar 2018 21:05:06 +0800 Subject: [PATCH 0440/1204] Allow tasty-quickcheck 0.10 Tests pass with the new test tool. --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 88aa8244e8..aeb4fdc219 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -124,7 +124,7 @@ test-suite tasty hasql, -- testing: tasty >= 0.12 && < 1.1, - tasty-quickcheck >= 0.9 && < 0.10, + tasty-quickcheck >= 0.9 && < 0.11, tasty-hunit >= 0.9 && < 0.11, quickcheck-instances >= 0.3.11 && < 0.4, QuickCheck >= 2.8.1 && < 3, From 45b4b113b6d690572389f8e0f0b9758b2004ac2e Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Fri, 16 Mar 2018 01:13:45 +0000 Subject: [PATCH 0441/1204] Fix whitespace --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 03d369f481..253d9b7173 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both ## Ecosystem -Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. +Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. * ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything revolves around that library. From 37b752306a788d42e35324f8c1ec67dad0b5fc9c Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Fri, 16 Mar 2018 01:13:56 +0000 Subject: [PATCH 0442/1204] Fix link to hasql-cursor-transactions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 253d9b7173..07c8136e40 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. -* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-query) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. +* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transactions) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. From 75c0d37ca8976a6b8548c3f388df94d8ced2d823 Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Fri, 23 Mar 2018 05:16:47 +0000 Subject: [PATCH 0443/1204] Fix readme link for real (#91) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 07c8136e40..47b0f618b7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. -* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transactions) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. +* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transaction) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. From 3b4d713f481f9e843cb84fe14fd804eb6cd1f3b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 20 May 2018 19:52:47 +0800 Subject: [PATCH 0444/1204] Update the Tasty dep --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index aeb4fdc219..d2365ff806 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -123,7 +123,7 @@ test-suite tasty -- database: hasql, -- testing: - tasty >= 0.12 && < 1.1, + tasty >= 0.12 && < 2, tasty-quickcheck >= 0.9 && < 0.11, tasty-hunit >= 0.9 && < 0.11, quickcheck-instances >= 0.3.11 && < 0.4, From 151e91451f94266a84f05c8cffa01ea0239b488b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 20 May 2018 19:52:55 +0800 Subject: [PATCH 0445/1204] Set the version to 1.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index d2365ff806..659e45cde1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.1.1 + 1.2 category: Hasql, Database, PostgreSQL synopsis: From ea4874ca7e178eaa762f14c8ec80c293630e9fb8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 17:15:34 +0800 Subject: [PATCH 0446/1204] Reimplement to add support for query param printing in failed queries --- benchmarks/Main.hs | 4 +- hasql.cabal | 15 ++- library/Hasql/Encoders.hs | 65 ++++----- library/Hasql/Private/Decoders/Result.hs | 36 +---- library/Hasql/Private/Decoders/Results.hs | 13 +- library/Hasql/Private/Decoders/Row.hs | 13 +- library/Hasql/Private/Encoders/Array.hs | 41 ++++-- library/Hasql/Private/Encoders/Params.hs | 47 ++----- library/Hasql/Private/Encoders/Value.hs | 25 ++-- library/Hasql/Private/Errors.hs | 88 +++++++++++++ library/Hasql/Private/IO.hs | 66 +++++----- library/Hasql/Private/PTI.hs | 152 +++++++++++----------- library/Hasql/Private/Query.hs | 61 --------- library/Hasql/Private/Session.hs | 102 ++++----------- library/Hasql/Query.hs | 26 ++-- library/Hasql/Session.hs | 17 ++- profiling/Main.hs | 4 +- tasty/Main.hs | 73 +++++++---- tasty/Main/DSL.hs | 2 +- tasty/Main/Queries.hs | 6 +- threads-test/Main/Queries.hs | 2 +- 21 files changed, 402 insertions(+), 456 deletions(-) create mode 100644 library/Hasql/Private/Errors.hs delete mode 100644 library/Hasql/Private/Query.hs diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 0fd3d10cc0..38e6a7ea31 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -69,7 +69,7 @@ queryWithManyParameters = queryWithSingleRow :: C.Query () (Int64, Int64) queryWithSingleRow = - C.statement template encoder decoder True + C.Query template encoder decoder True where template = "SELECT 1, 2" @@ -86,7 +86,7 @@ queryWithSingleRow = queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result queryWithManyRows decoder = - C.statement template encoder (decoder rowDecoder) True + C.Query template encoder (decoder rowDecoder) True where template = "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" diff --git a/hasql.cabal b/hasql.cabal index 659e45cde1..3f1608aee4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -47,11 +47,17 @@ library Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 + exposed-modules: + Hasql.Decoders + Hasql.Encoders + Hasql.Connection + Hasql.Query + Hasql.Session other-modules: Hasql.Private.Prelude + Hasql.Private.Errors Hasql.Private.PTI Hasql.Private.IO - Hasql.Private.Query Hasql.Private.Session Hasql.Private.Connection Hasql.Private.PreparedStatementRegistry @@ -66,12 +72,6 @@ library Hasql.Private.Encoders.Array Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params - exposed-modules: - Hasql.Decoders - Hasql.Encoders - Hasql.Connection - Hasql.Query - Hasql.Session build-depends: -- parsing: attoparsec >= 0.10 && < 0.14, @@ -85,6 +85,7 @@ library vector >= 0.10 && < 0.13, hashtables >= 1.1 && < 2, text >= 1 && < 2, + text-builder >= 0.5.1 && < 0.6, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 307f607a33..46a6fd62fd 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -47,6 +47,7 @@ where import Hasql.Private.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoding as A import qualified PostgreSQL.Binary.Data as B +import qualified Text.Builder as C import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.Encoders.Array as Array @@ -187,49 +188,49 @@ newtype Value a = {-# INLINABLE bool #-} bool :: Value Bool bool = - Value (Value.unsafePTI PTI.bool (const A.bool)) + Value (Value.unsafePTIWithShow PTI.bool (const A.bool)) -- | -- Encoder of @INT2@ values. {-# INLINABLE int2 #-} int2 :: Value Int16 int2 = - Value (Value.unsafePTI PTI.int2 (const A.int2_int16)) + Value (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) -- | -- Encoder of @INT4@ values. {-# INLINABLE int4 #-} int4 :: Value Int32 int4 = - Value (Value.unsafePTI PTI.int4 (const A.int4_int32)) + Value (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) -- | -- Encoder of @INT8@ values. {-# INLINABLE int8 #-} int8 :: Value Int64 int8 = - Value (Value.unsafePTI PTI.int8 (const A.int8_int64)) + Value (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) -- | -- Encoder of @FLOAT4@ values. {-# INLINABLE float4 #-} float4 :: Value Float float4 = - Value (Value.unsafePTI PTI.float4 (const A.float4)) + Value (Value.unsafePTIWithShow PTI.float4 (const A.float4)) -- | -- Encoder of @FLOAT8@ values. {-# INLINABLE float8 #-} float8 :: Value Double float8 = - Value (Value.unsafePTI PTI.float8 (const A.float8)) + Value (Value.unsafePTIWithShow PTI.float8 (const A.float8)) -- | -- Encoder of @NUMERIC@ values. {-# INLINABLE numeric #-} numeric :: Value B.Scientific numeric = - Value (Value.unsafePTI PTI.numeric (const A.numeric)) + Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) -- | -- Encoder of @CHAR@ values. @@ -238,113 +239,115 @@ numeric = {-# INLINABLE char #-} char :: Value Char char = - Value (Value.unsafePTI PTI.text (const A.char_utf8)) + Value (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) -- | -- Encoder of @TEXT@ values. {-# INLINABLE text #-} text :: Value Text text = - Value (Value.unsafePTI PTI.text (const A.text_strict)) + Value (Value.unsafePTIWithShow PTI.text (const A.text_strict)) -- | -- Encoder of @BYTEA@ values. {-# INLINABLE bytea #-} bytea :: Value ByteString bytea = - Value (Value.unsafePTI PTI.bytea (const A.bytea_strict)) + Value (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) -- | -- Encoder of @DATE@ values. {-# INLINABLE date #-} date :: Value B.Day date = - Value (Value.unsafePTI PTI.date (const A.date)) + Value (Value.unsafePTIWithShow PTI.date (const A.date)) -- | -- Encoder of @TIMESTAMP@ values. {-# INLINABLE timestamp #-} timestamp :: Value B.LocalTime timestamp = - Value (Value.unsafePTI PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) + Value (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) -- | -- Encoder of @TIMESTAMPTZ@ values. {-# INLINABLE timestamptz #-} timestamptz :: Value B.UTCTime timestamptz = - Value (Value.unsafePTI PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) + Value (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | -- Encoder of @TIME@ values. {-# INLINABLE time #-} time :: Value B.TimeOfDay time = - Value (Value.unsafePTI PTI.time (Prelude.bool A.time_float A.time_int)) + Value (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) -- | -- Encoder of @TIMETZ@ values. {-# INLINABLE timetz #-} timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = - Value (Value.unsafePTI PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) + Value (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) -- | -- Encoder of @INTERVAL@ values. {-# INLINABLE interval #-} interval :: Value B.DiffTime interval = - Value (Value.unsafePTI PTI.interval (Prelude.bool A.interval_float A.interval_int)) + Value (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) -- | -- Encoder of @UUID@ values. {-# INLINABLE uuid #-} uuid :: Value B.UUID uuid = - Value (Value.unsafePTI PTI.uuid (const A.uuid)) + Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) -- | -- Encoder of @INET@ values. {-# INLINABLE inet #-} inet :: Value (B.NetAddr B.IP) inet = - Value (Value.unsafePTI PTI.inet (const A.inet)) + Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) -- | -- Encoder of @JSON@ values from JSON AST. {-# INLINABLE json #-} json :: Value B.Value json = - Value (Value.unsafePTI PTI.json (const A.json_ast)) + Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) -- | -- Encoder of @JSON@ values from raw JSON. {-# INLINABLE jsonBytes #-} jsonBytes :: Value ByteString jsonBytes = - Value (Value.unsafePTI PTI.json (const A.json_bytes)) + Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) -- | -- Encoder of @JSONB@ values from JSON AST. {-# INLINABLE jsonb #-} jsonb :: Value B.Value jsonb = - Value (Value.unsafePTI PTI.jsonb (const A.jsonb_ast)) + Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) -- | -- Encoder of @JSONB@ values from raw JSON. {-# INLINABLE jsonbBytes #-} jsonbBytes :: Value ByteString jsonbBytes = - Value (Value.unsafePTI PTI.jsonb (const A.jsonb_bytes)) + Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) -- | -- Unlifts the 'Array' encoder to the plain 'Value' encoder. {-# INLINABLE array #-} array :: Array a -> Value a -array (Array imp) = - Array.run imp & \(arrayOID, encoder') -> - Value (Value.Value arrayOID arrayOID encoder') +array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = + let + encoder env input = + A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) + in Value (Value.Value arrayOID arrayOID encoder renderer) -- | -- Given a function, @@ -353,7 +356,7 @@ array (Array imp) = {-# INLINABLE enum #-} enum :: (a -> Text) -> Value a enum mapping = - Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping))) + Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) -- | -- Identifies the value with the PostgreSQL's \"unknown\" type, @@ -366,7 +369,7 @@ enum mapping = {-# INLINABLE unknown #-} unknown :: Value ByteString unknown = - Value (Value.unsafePTI PTI.unknown (const A.bytea_strict)) + Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) -- ** Instances @@ -503,15 +506,15 @@ newtype Array a = -- Lifts the 'Value' encoder into the 'Array' encoder of a non-nullable value. {-# INLINABLE arrayValue #-} arrayValue :: Value a -> Array a -arrayValue (Value (Value.Value elementOID arrayOID encoder')) = - Array (Array.value elementOID arrayOID encoder') +arrayValue (Value (Value.Value elementOID arrayOID encoder renderer)) = + Array (Array.value elementOID arrayOID encoder renderer) -- | -- Lifts the 'Value' encoder into the 'Array' encoder of a nullable value. {-# INLINABLE arrayNullableValue #-} arrayNullableValue :: Value a -> Array (Maybe a) -arrayNullableValue (Value (Value.Value elementOID arrayOID encoder')) = - Array (Array.nullableValue elementOID arrayOID encoder') +arrayNullableValue (Value (Value.Value elementOID arrayOID encoder renderer)) = + Array (Array.nullableValue elementOID arrayOID encoder renderer) -- | -- An encoder of an array dimension, diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 3264a94fc4..519a1b91db 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -1,6 +1,7 @@ module Hasql.Private.Decoders.Result where import Hasql.Private.Prelude hiding (maybe, many) +import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Decoders.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec @@ -11,42 +12,11 @@ import qualified Data.Vector.Mutable as MutableVector newtype Result a = - Result (ReaderT (Bool, LibPQ.Result) (ExceptT Error IO) a) + Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) deriving (Functor, Applicative, Monad) -data Error = - -- | - -- An error reported by the DB. Code, message, details, hint. - -- - -- * The SQLSTATE code for the error. The SQLSTATE code identifies the type of error that has occurred; - -- it can be used by front-end applications to perform specific operations (such as error handling) - -- in response to a particular database error. - -- For a list of the possible SQLSTATE codes, see Appendix A. - -- This field is not localizable, and is always present. - -- - -- * The primary human-readable error message (typically one line). Always present. - -- - -- * Detail: an optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * Hint: an optional suggestion what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. Might run to multiple lines. - ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | - -- | - -- The database returned an unexpected result. - -- Indicates an improper statement or a schema mismatch. - UnexpectedResult !Text | - -- | - -- An error of the row reader, preceded by the index of the row. - RowError !Int !Row.Error | - -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows !Int - deriving (Show) - {-# INLINE run #-} -run :: Result a -> (Bool, LibPQ.Result) -> IO (Either Error a) +run :: Result a -> (Bool, LibPQ.Result) -> IO (Either ResultError a) run (Result reader) env = runExceptT (runReaderT reader env) diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index 3c42246db3..34e82570e1 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -12,6 +12,7 @@ module Hasql.Private.Decoders.Results where import Hasql.Private.Prelude hiding (maybe, many) +import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Prelude as Prelude import qualified Hasql.Private.Decoders.Result as Result @@ -19,20 +20,12 @@ import qualified Hasql.Private.Decoders.Row as Row newtype Results a = - Results (ReaderT (Bool, LibPQ.Connection) (ExceptT Error IO) a) + Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) deriving (Functor, Applicative, Monad) -data Error = - -- | - -- An error on the client-side, - -- with a message generated by the \"libpq\" library. - -- Usually indicates problems with the connection. - ClientError !(Maybe ByteString) | - ResultError !Result.Error - deriving (Show) {-# INLINE run #-} -run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either Error a) +run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either CommandError a) run (Results stack) env = runExceptT (runReaderT stack env) diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index aebf046c76..9584a77b3b 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -1,37 +1,32 @@ module Hasql.Private.Decoders.Row where import Hasql.Private.Prelude +import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoding as A import qualified Hasql.Private.Decoders.Value as Value newtype Row a = - Row (ReaderT Env (ExceptT Error IO) a) + Row (ReaderT Env (ExceptT RowError IO) a) deriving (Functor, Applicative, Monad) data Env = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) -data Error = - EndOfInput | - UnexpectedNull | - ValueError !Text - deriving (Show) - -- * Functions ------------------------- {-# INLINE run #-} -run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either Error a) +run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either RowError a) run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 runExceptT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) {-# INLINE error #-} -error :: Error -> Row a +error :: RowError -> Row a error x = Row (ReaderT (const (ExceptT (pure (Left x))))) diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index ddc9efd458..536178b91a 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -3,28 +3,43 @@ module Hasql.Private.Encoders.Array where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Hasql.Private.PTI as B +import qualified Text.Builder as C data Array a = - Array B.OID B.OID (Bool -> a -> A.Array) - -{-# INLINE run #-} -run :: Array a -> (B.OID, Bool -> a -> A.Encoding) -run (Array valueOID arrayOID encoder) = - (arrayOID, \env input -> A.array (B.oidWord32 valueOID) (encoder env input)) + Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) {-# INLINE value #-} -value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array a +value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a value valueOID arrayOID encoder = Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} -nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array (Maybe a) -nullableValue valueOID arrayOID encoder = - Array valueOID arrayOID (\params -> maybe A.nullArray (A.encodingArray . encoder params)) +nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array (Maybe a) +nullableValue valueOID arrayOID encoder renderer = + let + maybeEncoder params = + maybe A.nullArray (A.encodingArray . encoder params) + maybeRenderer = + maybe (C.string "null") renderer + in Array valueOID arrayOID maybeEncoder maybeRenderer {-# INLINE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c -dimension fold (Array valueOID arrayOID encoder) = - Array valueOID arrayOID (\params -> A.dimensionArray fold (encoder params)) - +dimension fold (Array valueOID arrayOID elEncoder elRenderer) = + let + encoder el = + A.dimensionArray fold (elEncoder el) + renderer els = + let + folded = + let + step builder el = + if C.null builder + then C.char '[' <> elRenderer el + else builder <> C.string ", " <> elRenderer el + in fold step mempty els + in if C.null folded + then C.string "[]" + else folded <> C.char ']' + in Array valueOID arrayOID encoder renderer diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index 3657ef79a4..a59f65d74b 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -5,52 +5,29 @@ import qualified Database.PostgreSQL.LibPQ as A import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.Encoders.Value as C import qualified Hasql.Private.PTI as D +import qualified Text.Builder as E -- | -- Encoder of some representation of a parameters product. newtype Params a = - Params (Op (DList (A.Oid, Bool -> Maybe ByteString)) a) + Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a) deriving (Contravariant, Divisible, Decidable, Monoid) instance Semigroup (Params a) -run :: Params a -> a -> DList (A.Oid, Bool -> Maybe ByteString) -run (Params (Op op)) params = - {-# SCC "run" #-} - op params - -run' :: Params a -> a -> Bool -> ([A.Oid], [Maybe (ByteString, A.Format)]) -run' (Params (Op op)) params integerDatetimes = - {-# SCC "run'" #-} - foldr step ([], []) (op params) - where - step (oid, bytesGetter) ~(oidList, bytesAndFormatList) = - (,) - (oid : oidList) - (fmap (\bytes -> (bytes, format oid)) (bytesGetter integerDatetimes) : bytesAndFormatList) - -run'' :: Params a -> a -> Bool -> [Maybe (A.Oid, ByteString, A.Format)] -run'' (Params (Op op)) params integerDatetimes = - {-# SCC "run''" #-} - foldr step [] (op params) - where - step a b = - mapping a : b - where - mapping (oid, bytesGetter) = - (,,) <$> pure oid <*> bytesGetter integerDatetimes <*> pure (format oid) - -format :: A.Oid -> A.Format -format oid = case oid of - A.Oid 705 -> A.Text -- is unknown - _ -> A.Binary - value :: C.Value a -> Params a value = contramap Just . nullableValue nullableValue :: C.Value a -> Params (Maybe a) -nullableValue (C.Value valueOID arrayOID encoder) = - Params $ Op $ \input -> - pure (D.oidPQ valueOID, \env -> fmap (B.encodingBytes . encoder env) input) +nullableValue (C.Value valueOID arrayOID encode render) = + Params $ Op $ \ input -> + let + D.OID _ pqOid format = + valueOID + encoder env = + fmap (B.encodingBytes . encode env) input + rendering = + maybe "null" (E.run . render) input + in pure (pqOid, format, encoder, rendering) diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index e255a27634..586779468b 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -3,24 +3,23 @@ module Hasql.Private.Encoders.Value where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.PTI as PTI +import qualified Text.Builder as C data Value a = - Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) + Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) instance Contravariant Value where {-# INLINE contramap #-} - contramap f (Value valueOID arrayOID encoder) = - Value valueOID arrayOID (\integerDatetimes input -> encoder integerDatetimes (f input)) - -{-# INLINE run #-} -run :: Value a -> (PTI.OID, PTI.OID, Bool -> a -> B.Encoding) -run (Value valueOID arrayOID encoder') = - (valueOID, arrayOID, encoder') + contramap f (Value valueOID arrayOID encode render) = + Value valueOID arrayOID (\integerDatetimes input -> encode integerDatetimes (f input)) (render . f) {-# INLINE unsafePTI #-} -unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a -unsafePTI pti encoder' = - Value (PTI.ptiOID pti) (fromMaybe ($bug "No array OID") (PTI.ptiArrayOID pti)) encoder' - - +unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.Builder) -> Value a +unsafePTI pti = + Value (PTI.ptiOID pti) (fromMaybe ($bug "No array OID") (PTI.ptiArrayOID pti)) + +{-# INLINE unsafePTIWithShow #-} +unsafePTIWithShow :: Show a => PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a +unsafePTIWithShow pti encode = + unsafePTI pti encode (C.string . show) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs new file mode 100644 index 0000000000..70811e42a4 --- /dev/null +++ b/library/Hasql/Private/Errors.hs @@ -0,0 +1,88 @@ +-- | +-- An API for retrieval of multiple results. +-- Can be used to handle: +-- +-- * A single result, +-- +-- * Individual results of a multi-statement query +-- with the help of "Applicative" and "Monad", +-- +-- * Row-by-row fetching. +-- +module Hasql.Private.Errors where + +import Hasql.Private.Prelude + + +-- | +-- An error during the execution of a query. +-- Comes packed with the query template and a textual representation of the provided params. +data QueryError = + QueryError ByteString [Text] CommandError + deriving (Show, Eq) + +-- | +-- An error of some command in the session. +data CommandError = + -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with connection. + ClientError (Maybe ByteString) | + -- | + -- Some error with a command result. + ResultError ResultError + deriving (Show, Eq) + +-- | +-- An error with a command result. +data ResultError = + -- | + -- An error reported by the DB. + -- Consists of the following: Code, message, details, hint. + -- + -- * __Code__. + -- The SQLSTATE code for the error. + -- It's recommended to use + -- + -- to work with those. + -- + -- * __Message__. + -- The primary human-readable error message (typically one line). Always present. + -- + -- * __Details__. + -- An optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * __Hint__. + -- An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. + -- Might run to multiple lines. + ServerError ByteString ByteString (Maybe ByteString) (Maybe ByteString) | + -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult Text | + -- | + -- An error of the row reader, preceded by the index of the row. + RowError Int RowError | + -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows Int + deriving (Show, Eq) + +-- | +-- An error during the decoding of a specific row. +data RowError = + -- | + -- Appears on the attempt to parse more columns than there are in the result. + EndOfInput | + -- | + -- Appears on the attempt to parse a @NULL@ as some value. + UnexpectedNull | + -- | + -- Appears when a wrong value parser is used. + -- Comes with the error details. + ValueError Text + deriving (Show, Eq) diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index 6dc1382d5f..75c312224e 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -4,6 +4,7 @@ module Hasql.Private.IO where import Hasql.Private.Prelude +import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Commands as Commands import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry @@ -58,7 +59,7 @@ initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either ResultsDecoders.Error a) +getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either CommandError a) getResults connection integerDatetimes decoder = {-# SCC "getResults" #-} (<*) <$> get <*> dropRemainders @@ -72,7 +73,7 @@ getResults connection integerDatetimes decoder = getPreparedStatementKey :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> - IO (Either ResultsDecoders.Error ByteString) + IO (Either CommandError ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry @@ -99,33 +100,50 @@ getPreparedStatementKey connection registry template oidList = pure (pure key) {-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either ResultsDecoders.Error ()) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either CommandError ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ResultsDecoders.ClientError) $ LibPQ.errorMessage connection + False -> fmap (Left . ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricQuery #-} sendPreparedParametricQuery :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> + Bool -> ByteString -> - [LibPQ.Oid] -> - [Maybe (ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoders.Error ()) -sendPreparedParametricQuery connection registry template oidList valueAndFormatList = - runExceptT $ do - key <- ExceptT $ getPreparedStatementKey connection registry template oidList - ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + ParamsEncoders.Params a -> + a -> + IO (Either CommandError ()) +sendPreparedParametricQuery connection registry integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = + let + (oidList, valueAndFormatList) = + let + step (oid, format, encoder, _) ~(oidList, bytesAndFormatList) = + (,) + (oid : oidList) + (fmap (\bytes -> (bytes, format)) (encoder integerDatetimes) : bytesAndFormatList) + in foldr step ([], []) (encoderOp input) + in runExceptT $ do + key <- ExceptT $ getPreparedStatementKey connection registry template oidList + ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary {-# INLINE sendUnpreparedParametricQuery #-} sendUnpreparedParametricQuery :: LibPQ.Connection -> + Bool -> ByteString -> - [Maybe (LibPQ.Oid, ByteString, LibPQ.Format)] -> - IO (Either ResultsDecoders.Error ()) -sendUnpreparedParametricQuery connection template paramList = - checkedSend connection $ LibPQ.sendQueryParams connection template paramList LibPQ.Binary + ParamsEncoders.Params a -> + a -> + IO (Either CommandError ()) +sendUnpreparedParametricQuery connection integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = + let + params = + let + step (oid, format, encoder, _) acc = + ((,,) <$> pure oid <*> encoder integerDatetimes <*> pure format) : acc + in foldr step [] (encoderOp input) + in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary {-# INLINE sendParametricQuery #-} sendParametricQuery :: @@ -136,24 +154,14 @@ sendParametricQuery :: ParamsEncoders.Params a -> Bool -> a -> - IO (Either ResultsDecoders.Error ()) + IO (Either CommandError ()) sendParametricQuery connection integerDatetimes registry template encoder prepared params = {-# SCC "sendParametricQuery" #-} if prepared - then - let - (oidList, valueAndFormatList) = - ParamsEncoders.run' encoder params integerDatetimes - in - sendPreparedParametricQuery connection registry template oidList valueAndFormatList - else - let - paramList = - ParamsEncoders.run'' encoder params integerDatetimes - in - sendUnpreparedParametricQuery connection template paramList + then sendPreparedParametricQuery connection registry integerDatetimes template encoder params + else sendUnpreparedParametricQuery connection integerDatetimes template encoder params {-# INLINE sendNonparametricQuery #-} -sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either ResultsDecoders.Error ()) +sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either CommandError ()) sendNonparametricQuery connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/Private/PTI.hs index 5c34214fd2..2124035ad3 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -8,87 +8,87 @@ import qualified Database.PostgreSQL.LibPQ as LibPQ data PTI = PTI { ptiOID :: !OID, ptiArrayOID :: !(Maybe OID) } -- | A Word32 and a LibPQ representation of an OID -data OID = OID { oidWord32 :: !Word32, oidPQ :: !LibPQ.Oid } +data OID = OID { oidWord32 :: !Word32, oidPQ :: !LibPQ.Oid, oidFormat :: !LibPQ.Format } -mkOID :: Word32 -> OID -mkOID x = - OID x ((LibPQ.Oid . fromIntegral) x) +mkOID :: LibPQ.Format -> Word32 -> OID +mkOID format x = + OID x ((LibPQ.Oid . fromIntegral) x) format -mkPTI :: Word32 -> Maybe Word32 -> PTI -mkPTI oid arrayOID = - PTI (mkOID oid) (fmap mkOID arrayOID) +mkPTI :: LibPQ.Format -> Word32 -> Maybe Word32 -> PTI +mkPTI format oid arrayOID = + PTI (mkOID format oid) (fmap (mkOID format) arrayOID) -- * Constants ------------------------- -abstime = mkPTI 702 (Just 1023) -aclitem = mkPTI 1033 (Just 1034) -bit = mkPTI 1560 (Just 1561) -bool = mkPTI 16 (Just 1000) -box = mkPTI 603 (Just 1020) -bpchar = mkPTI 1042 (Just 1014) -bytea = mkPTI 17 (Just 1001) -char = mkPTI 18 (Just 1002) -cid = mkPTI 29 (Just 1012) -cidr = mkPTI 650 (Just 651) -circle = mkPTI 718 (Just 719) -cstring = mkPTI 2275 (Just 1263) -date = mkPTI 1082 (Just 1182) -daterange = mkPTI 3912 (Just 3913) -float4 = mkPTI 700 (Just 1021) -float8 = mkPTI 701 (Just 1022) -gtsvector = mkPTI 3642 (Just 3644) -inet = mkPTI 869 (Just 1041) -int2 = mkPTI 21 (Just 1005) -int2vector = mkPTI 22 (Just 1006) -int4 = mkPTI 23 (Just 1007) -int4range = mkPTI 3904 (Just 3905) -int8 = mkPTI 20 (Just 1016) -int8range = mkPTI 3926 (Just 3927) -interval = mkPTI 1186 (Just 1187) -json = mkPTI 114 (Just 199) -jsonb = mkPTI 3802 (Just 3807) -line = mkPTI 628 (Just 629) -lseg = mkPTI 601 (Just 1018) -macaddr = mkPTI 829 (Just 1040) -money = mkPTI 790 (Just 791) -name = mkPTI 19 (Just 1003) -numeric = mkPTI 1700 (Just 1231) -numrange = mkPTI 3906 (Just 3907) -oid = mkPTI 26 (Just 1028) -oidvector = mkPTI 30 (Just 1013) -path = mkPTI 602 (Just 1019) -point = mkPTI 600 (Just 1017) -polygon = mkPTI 604 (Just 1027) -record = mkPTI 2249 (Just 2287) -refcursor = mkPTI 1790 (Just 2201) -regclass = mkPTI 2205 (Just 2210) -regconfig = mkPTI 3734 (Just 3735) -regdictionary = mkPTI 3769 (Just 3770) -regoper = mkPTI 2203 (Just 2208) -regoperator = mkPTI 2204 (Just 2209) -regproc = mkPTI 24 (Just 1008) -regprocedure = mkPTI 2202 (Just 2207) -regtype = mkPTI 2206 (Just 2211) -reltime = mkPTI 703 (Just 1024) -text = mkPTI 25 (Just 1009) -tid = mkPTI 27 (Just 1010) -time = mkPTI 1083 (Just 1183) -timestamp = mkPTI 1114 (Just 1115) -timestamptz = mkPTI 1184 (Just 1185) -timetz = mkPTI 1266 (Just 1270) -tinterval = mkPTI 704 (Just 1025) -tsquery = mkPTI 3615 (Just 3645) -tsrange = mkPTI 3908 (Just 3909) -tstzrange = mkPTI 3910 (Just 3911) -tsvector = mkPTI 3614 (Just 3643) -txid_snapshot = mkPTI 2970 (Just 2949) -unknown = mkPTI 705 (Just 705) -uuid = mkPTI 2950 (Just 2951) -varbit = mkPTI 1562 (Just 1563) -varchar = mkPTI 1043 (Just 1015) -void = mkPTI 2278 Nothing -xid = mkPTI 28 (Just 1011) -xml = mkPTI 142 (Just 143) +abstime = mkPTI LibPQ.Binary 702 (Just 1023) +aclitem = mkPTI LibPQ.Binary 1033 (Just 1034) +bit = mkPTI LibPQ.Binary 1560 (Just 1561) +bool = mkPTI LibPQ.Binary 16 (Just 1000) +box = mkPTI LibPQ.Binary 603 (Just 1020) +bpchar = mkPTI LibPQ.Binary 1042 (Just 1014) +bytea = mkPTI LibPQ.Binary 17 (Just 1001) +char = mkPTI LibPQ.Binary 18 (Just 1002) +cid = mkPTI LibPQ.Binary 29 (Just 1012) +cidr = mkPTI LibPQ.Binary 650 (Just 651) +circle = mkPTI LibPQ.Binary 718 (Just 719) +cstring = mkPTI LibPQ.Binary 2275 (Just 1263) +date = mkPTI LibPQ.Binary 1082 (Just 1182) +daterange = mkPTI LibPQ.Binary 3912 (Just 3913) +float4 = mkPTI LibPQ.Binary 700 (Just 1021) +float8 = mkPTI LibPQ.Binary 701 (Just 1022) +gtsvector = mkPTI LibPQ.Binary 3642 (Just 3644) +inet = mkPTI LibPQ.Binary 869 (Just 1041) +int2 = mkPTI LibPQ.Binary 21 (Just 1005) +int2vector = mkPTI LibPQ.Binary 22 (Just 1006) +int4 = mkPTI LibPQ.Binary 23 (Just 1007) +int4range = mkPTI LibPQ.Binary 3904 (Just 3905) +int8 = mkPTI LibPQ.Binary 20 (Just 1016) +int8range = mkPTI LibPQ.Binary 3926 (Just 3927) +interval = mkPTI LibPQ.Binary 1186 (Just 1187) +json = mkPTI LibPQ.Binary 114 (Just 199) +jsonb = mkPTI LibPQ.Binary 3802 (Just 3807) +line = mkPTI LibPQ.Binary 628 (Just 629) +lseg = mkPTI LibPQ.Binary 601 (Just 1018) +macaddr = mkPTI LibPQ.Binary 829 (Just 1040) +money = mkPTI LibPQ.Binary 790 (Just 791) +name = mkPTI LibPQ.Binary 19 (Just 1003) +numeric = mkPTI LibPQ.Binary 1700 (Just 1231) +numrange = mkPTI LibPQ.Binary 3906 (Just 3907) +oid = mkPTI LibPQ.Binary 26 (Just 1028) +oidvector = mkPTI LibPQ.Binary 30 (Just 1013) +path = mkPTI LibPQ.Binary 602 (Just 1019) +point = mkPTI LibPQ.Binary 600 (Just 1017) +polygon = mkPTI LibPQ.Binary 604 (Just 1027) +record = mkPTI LibPQ.Binary 2249 (Just 2287) +refcursor = mkPTI LibPQ.Binary 1790 (Just 2201) +regclass = mkPTI LibPQ.Binary 2205 (Just 2210) +regconfig = mkPTI LibPQ.Binary 3734 (Just 3735) +regdictionary = mkPTI LibPQ.Binary 3769 (Just 3770) +regoper = mkPTI LibPQ.Binary 2203 (Just 2208) +regoperator = mkPTI LibPQ.Binary 2204 (Just 2209) +regproc = mkPTI LibPQ.Binary 24 (Just 1008) +regprocedure = mkPTI LibPQ.Binary 2202 (Just 2207) +regtype = mkPTI LibPQ.Binary 2206 (Just 2211) +reltime = mkPTI LibPQ.Binary 703 (Just 1024) +text = mkPTI LibPQ.Binary 25 (Just 1009) +tid = mkPTI LibPQ.Binary 27 (Just 1010) +time = mkPTI LibPQ.Binary 1083 (Just 1183) +timestamp = mkPTI LibPQ.Binary 1114 (Just 1115) +timestamptz = mkPTI LibPQ.Binary 1184 (Just 1185) +timetz = mkPTI LibPQ.Binary 1266 (Just 1270) +tinterval = mkPTI LibPQ.Binary 704 (Just 1025) +tsquery = mkPTI LibPQ.Binary 3615 (Just 3645) +tsrange = mkPTI LibPQ.Binary 3908 (Just 3909) +tstzrange = mkPTI LibPQ.Binary 3910 (Just 3911) +tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) +txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) +unknown = mkPTI LibPQ.Text 705 (Just 705) +uuid = mkPTI LibPQ.Binary 2950 (Just 2951) +varbit = mkPTI LibPQ.Binary 1562 (Just 1563) +varchar = mkPTI LibPQ.Binary 1043 (Just 1015) +void = mkPTI LibPQ.Binary 2278 Nothing +xid = mkPTI LibPQ.Binary 28 (Just 1011) +xml = mkPTI LibPQ.Binary 142 (Just 143) diff --git a/library/Hasql/Private/Query.hs b/library/Hasql/Private/Query.hs deleted file mode 100644 index 2c6943220b..0000000000 --- a/library/Hasql/Private/Query.hs +++ /dev/null @@ -1,61 +0,0 @@ -module Hasql.Private.Query -where - -import Hasql.Private.Prelude -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.IO as IO -import qualified Hasql.Private.Connection as Connection -import qualified Hasql.Private.Decoders.Results as Decoders.Results -import qualified Hasql.Private.Encoders.Params as Encoders.Params - - --- | --- An abstraction over parametric queries. --- --- It is composable using --- the standard interfaces of the category theory, --- which it has instances of. --- E.g., here's how you can compose queries --- using the Arrow notation: --- --- @ --- -- | --- -- Given an Update query, --- -- which uses the \@fmap (> 0) 'Decoders.Results.rowsAffected'\@ decoder --- -- to detect, whether it had any effect, --- -- and an Insert query, --- -- produces a query which performs Upsert. --- composeUpsert :: Query a Bool -> Query a () -> Query a () --- composeUpsert update insert = --- proc params -> do --- updated <- update -< params --- if updated --- then 'returnA' -< () --- else insert -< params --- @ -newtype Query a b = - Query (Kleisli (ReaderT Connection.Connection (ExceptT Decoders.Results.Error IO)) a b) - deriving (Category, Arrow, ArrowChoice, ArrowLoop, ArrowApply) - -instance Functor (Query a) where - {-# INLINE fmap #-} - fmap = - (^<<) - -instance Profunctor Query where - {-# INLINE lmap #-} - lmap = - (^>>) - {-# INLINE rmap #-} - rmap = - (^<<) - -statement :: ByteString -> Encoders.Params.Params a -> Decoders.Results.Results b -> Bool -> Query a b -statement template encoder decoder preparable = - Query $ Kleisli $ \params -> - ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricQuery pqConnection integerDatetimes registry template encoder preparable params - r2 <- IO.getResults pqConnection integerDatetimes decoder - return $ r1 *> r2 - diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 749b9d471f..67c9ab9c3f 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -2,24 +2,26 @@ module Hasql.Private.Session where import Hasql.Private.Prelude +import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Decoders.Results as Decoders.Results import qualified Hasql.Private.Decoders.Result as Decoders.Result +import qualified Hasql.Private.Encoders.Params as Encoders.Params import qualified Hasql.Private.Settings as Settings import qualified Hasql.Private.IO as IO -import qualified Hasql.Private.Query as Query +import qualified Hasql.Query as Query import qualified Hasql.Private.Connection as Connection -- | -- A batch of actions to be executed in the context of a database connection. newtype Session a = - Session (ReaderT Connection.Connection (ExceptT Error IO) a) - deriving (Functor, Applicative, Monad, MonadError Error, MonadIO) + Session (ReaderT Connection.Connection (ExceptT QueryError IO) a) + deriving (Functor, Applicative, Monad, MonadError QueryError, MonadIO) -- | -- Executes a bunch of commands on the provided connection. -run :: Session a -> Connection.Connection -> IO (Either Error a) +run :: Session a -> Connection.Connection -> IO (Either QueryError a) run (Session impl) connection = runExceptT $ runReaderT impl connection @@ -31,87 +33,27 @@ run (Session impl) connection = sql :: ByteString -> Session () sql sql = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ fmap (mapLeft unsafeCoerce) $ withMVar pqConnectionRef $ \pqConnection -> do + ExceptT $ fmap (mapLeft (QueryError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendNonparametricQuery pqConnection sql r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 where decoder = - Decoders.Results.single $ - Decoders.Result.unit + Decoders.Results.single Decoders.Result.unit -- | -- Parameters and a specification of the parametric query to apply them to. -query :: a -> Query.Query a b -> Session b -query input (Query.Query (Kleisli impl)) = - Session $ unsafeCoerce $ impl input - - --- * Error -------------------------- - --- | --- An error of some command in the session. -data Error = - -- | - -- An error on the client-side, - -- with a message generated by the \"libpq\" library. - -- Usually indicates problems with connection. - ClientError !(Maybe ByteString) | - -- | - -- Some error with a command result. - ResultError !ResultError - deriving (Show, Eq) - --- | --- An error with a command result. -data ResultError = - -- | - -- An error reported by the DB. - -- Consists of the following: Code, message, details, hint. - -- - -- * __Code__. - -- The SQLSTATE code for the error. - -- It's recommended to use - -- - -- to work with those. - -- - -- * __Message__. - -- The primary human-readable error message (typically one line). Always present. - -- - -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. - -- Might run to multiple lines. - ServerError !ByteString !ByteString !(Maybe ByteString) !(Maybe ByteString) | - -- | - -- The database returned an unexpected result. - -- Indicates an improper statement or a schema mismatch. - UnexpectedResult !Text | - -- | - -- An error of the row reader, preceded by the index of the row. - RowError !Int !RowError | - -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows !Int - deriving (Show, Eq) - --- | --- An error during the decoding of a specific row. -data RowError = - -- | - -- Appears on the attempt to parse more columns than there are in the result. - EndOfInput | - -- | - -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNull | - -- | - -- Appears when a wrong value parser is used. - -- Comes with the error details. - ValueError !Text - deriving (Show, Eq) +query :: params -> Query.Query params result -> Session result +query input (Query.Query template encoder decoder preparable) = + Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT $ fmap (mapLeft (QueryError template inputReps)) $ withMVar pqConnectionRef $ \pqConnection -> do + r1 <- IO.sendParametricQuery pqConnection integerDatetimes registry template (unsafeCoerce encoder) preparable input + r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) + return $ r1 *> r2 + where + inputReps = + let + Encoders.Params.Params (Op encoderOp) = (unsafeCoerce encoder) + step (_, _, _, rendering) acc = + rendering : acc + in foldr step [] (encoderOp input) \ No newline at end of file diff --git a/library/Hasql/Query.hs b/library/Hasql/Query.hs index 491cd5e13f..176fcd5077 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Query.hs @@ -1,19 +1,11 @@ module Hasql.Query -( - Query.Query, - statement, -) where import Hasql.Private.Prelude -import qualified Hasql.Private.Query as Query -import qualified Hasql.Private.Decoders.Results as Decoders.Results import qualified Hasql.Decoders as Decoders -import qualified Hasql.Private.Encoders.Params as Encoders.Params import qualified Hasql.Encoders as Encoders - -- | -- A specification of a strictly single-statement query, which can be parameterized and prepared. -- @@ -34,9 +26,9 @@ import qualified Hasql.Encoders as Encoders -- Following is an example of the declaration of a prepared statement with its associated codecs. -- -- @ --- selectSum :: Hasql.Query.'Query.Query' (Int64, Int64) Int64 +-- selectSum :: Hasql.Query.'Query' (Int64, Int64) Int64 -- selectSum = --- Hasql.Query.'statement' sql encoder decoder True +-- Hasql.Query.'Query' sql encoder decoder True -- where -- sql = -- "select ($1 + $2)" @@ -50,8 +42,14 @@ import qualified Hasql.Encoders as Encoders -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. -- -{-# INLINE statement #-} -statement :: ByteString -> Encoders.Params a -> Decoders.Result b -> Bool -> Query.Query a b -statement = - unsafeCoerce Query.statement +data Query a b = + Query ByteString (Encoders.Params a) (Decoders.Result b) Bool + +instance Functor (Query a) where + {-# INLINE fmap #-} + fmap = rmap +instance Profunctor Query where + {-# INLINE dimap #-} + dimap f1 f2 (Query template encoder decoder preparable) = + Query template (contramap f1 encoder) (fmap f2 decoder) preparable diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 29aa2b90d8..7d619d4826 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -1,15 +1,14 @@ module Hasql.Session ( - Session.Session, - Session.sql, - Session.query, + Session, + sql, + query, -- * Execution - Session.Error(..), - Session.ResultError(..), - Session.RowError(..), - Session.run, + run, + -- * Errors + module Hasql.Private.Errors, ) where -import qualified Hasql.Private.Session as Session - +import Hasql.Private.Session +import Hasql.Private.Errors diff --git a/profiling/Main.hs b/profiling/Main.hs index b8b725cb73..e27b7b2d52 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -60,7 +60,7 @@ queryWithManyParameters = queryWithSingleRow :: C.Query () (Int64, Int64) queryWithSingleRow = - C.statement template encoder decoder True + C.Query template encoder decoder True where template = "SELECT 1, 2" @@ -77,7 +77,7 @@ queryWithSingleRow = queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result queryWithManyRows decoder = - C.statement template encoder (decoder rowDecoder) True + C.Query template encoder (decoder rowDecoder) True where template = "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" diff --git a/tasty/Main.hs b/tasty/Main.hs index 5ef5d62c06..3c8435ce71 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,10 +22,29 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testCase "Failed query" $ + let + query = + Query.Query "select true where 1 = any ($1) and $2" encoder decoder True + where + encoder = + contrazip2 + (Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8)))) + (Encoders.value Encoders.text) + decoder = + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + session = + Session.query ([3, 7], "a") query + in do + x <- Connection.with (Session.run session) + assertBool (show x) $ case x of + Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True + _ -> False + , testCase "IN simulation" $ let query = - Query.statement "select true where 1 = any ($1)" encoder decoder True + Query.Query "select true where 1 = any ($1)" encoder decoder True where encoder = Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) @@ -43,7 +62,7 @@ tree = testCase "NOT IN simulation" $ let query = - Query.statement "select true where 3 <> all ($1)" encoder decoder True + Query.Query "select true where 3 <> all ($1)" encoder decoder True where encoder = Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) @@ -61,7 +80,7 @@ tree = testCase "Composite decoding" $ let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select (1, true)" @@ -78,7 +97,7 @@ tree = testCase "Complex composite decoding" $ let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select (1, true) as entity1, ('hello', 3) as entity2" @@ -111,7 +130,7 @@ tree = Session.query () query where query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select array[]::int8[]" @@ -129,7 +148,7 @@ tree = where resultTest = \case - Right (Left (Session.ResultError (Session.ServerError "26000" _ _ _))) -> False + Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session @@ -138,7 +157,7 @@ tree = Session.query () query where query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "absurd" @@ -161,7 +180,7 @@ tree = Session.query 1 query where query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1 :: int8" @@ -177,7 +196,7 @@ tree = let sumQuery :: Query.Query (Int64, Int64) Int64 sumQuery = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select ($1 + $2)" @@ -202,7 +221,7 @@ tree = let sumQuery :: Query.Query (Int64, Int64) Int64 sumQuery = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select ($1 + $2)" @@ -229,7 +248,7 @@ tree = DSL.session $ do let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1 = interval '10 seconds'" @@ -246,7 +265,7 @@ tree = DSL.session $ do let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select interval '10 seconds'" @@ -263,7 +282,7 @@ tree = DSL.session $ do let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1" @@ -280,21 +299,21 @@ tree = DSL.session $ do let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" in DSL.query () query let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1 = ('ok' :: mood)" @@ -311,21 +330,21 @@ tree = DSL.session $ do let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" in DSL.query () query let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" in DSL.query () query let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select overloaded($1, $2) || overloaded($3, $4, $5)" @@ -342,21 +361,21 @@ tree = DSL.session $ do let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "drop type if exists mood" in DSL.query () query let query = - Query.statement sql mempty Decoders.unit True + Query.Query sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" in DSL.query () query let query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select ($1 :: mood)" @@ -376,7 +395,7 @@ tree = DSL.query "ok" query where query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1" @@ -388,7 +407,7 @@ tree = DSL.query 1 query where query = - Query.statement sql encoder decoder True + Query.Query sql encoder decoder True where sql = "select $1" @@ -419,7 +438,7 @@ tree = DSL.query () $ Queries.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () $ Query.statement sql def decoder False + DSL.query () $ Query.Query sql def decoder False where sql = "delete from a" @@ -433,8 +452,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ Query.statement "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False - id2 <- DSL.query () $ Query.statement "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 7add19bb7f..b654760368 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -21,7 +21,7 @@ type Session = data SessionError = ConnectionError (HC.ConnectionError) | - SessionError (Hasql.Session.Error) + SessionError (Hasql.Session.QueryError) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index afaa40d9a4..22d698119d 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -9,11 +9,11 @@ import qualified Main.Prelude as Prelude def :: ByteString -> HQ.Query () () def sql = - HQ.statement sql Prelude.def Prelude.def False + HQ.Query sql Prelude.def Prelude.def False plain :: ByteString -> HQ.Query () () plain sql = - HQ.statement sql mempty HD.unit False + HQ.Query sql mempty HD.unit False dropType :: ByteString -> HQ.Query () () dropType name = @@ -28,7 +28,7 @@ createEnum name values = selectList :: HQ.Query () ([] (Int64, Int64)) selectList = - HQ.statement sql mempty decoder True + HQ.Query sql mempty decoder True where sql = "values (1,2), (3,4), (5,6)" diff --git a/threads-test/Main/Queries.hs b/threads-test/Main/Queries.hs index 1ca2bba924..8cb8f242ae 100644 --- a/threads-test/Main/Queries.hs +++ b/threads-test/Main/Queries.hs @@ -8,7 +8,7 @@ import qualified Hasql.Decoders as D selectSleep :: Query Double () selectSleep = - statement sql encoder decoder True + Query sql encoder decoder True where sql = "select pg_sleep($1)" From 8eb3830a7f4ca6aa9b22e5881739b73f834cc769 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:04:13 +0800 Subject: [PATCH 0447/1204] Make the codec names more consistent --- benchmarks/Main.hs | 4 +- library/Hasql/Decoders.hs | 160 +++++++++++++++++------------------ library/Hasql/Encoders.hs | 62 +++++++------- profiling/Main.hs | 4 +- tasty/Main.hs | 74 ++++++++-------- tasty/Main/Queries.hs | 2 +- threads-test/Main/Queries.hs | 2 +- 7 files changed, 154 insertions(+), 154 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 38e6a7ea31..19919f37f3 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -79,7 +79,7 @@ queryWithSingleRow = D.singleRow row where row = - tuple <$> D.value D.int8 <*> D.value D.int8 + tuple <$> D.column D.int8 <*> D.column D.int8 where tuple !a !b = (a, b) @@ -93,7 +93,7 @@ queryWithManyRows decoder = encoder = conquer rowDecoder = - tuple <$> D.value D.int8 <*> D.value D.int8 + tuple <$> D.column D.int8 <*> D.column D.int8 where tuple !a !b = (a, b) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 48294ea4d2..b5ab1ea885 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -16,8 +16,8 @@ module Hasql.Decoders foldrRows, -- * Row Row, - value, - nullableValue, + column, + nullableColumn, -- * Value Value, bool, @@ -49,13 +49,13 @@ module Hasql.Decoders custom, -- * Array Array, - arrayDimension, - arrayValue, - arrayNullableValue, + dimension, + element, + nullableElement, -- * Composite Composite, - compositeValue, - compositeNullableValue, + field, + nullableField, ) where @@ -82,7 +82,7 @@ newtype Result a = deriving (Functor) -- | --- Decode no value from the result. +-- Decode no column from the result. -- -- Useful for statements like @INSERT@ or @CREATE@. -- @@ -204,32 +204,32 @@ instance Default (Row a) => Default (Result (Identity a)) where -- | -- Decoder of an individual row, --- which gets composed of column value decoders. +-- which gets composed of column column decoders. -- -- E.g.: -- -- >x :: Row (Maybe Int64, Text, TimeOfDay) -- >x = --- > (,,) <$> nullableValue int8 <*> value text <*> value time +-- > (,,) <$> nullableColumn int8 <*> column text <*> column time -- newtype Row a = Row (Row.Row a) deriving (Functor, Applicative, Monad) -- | --- Lift an individual non-nullable value decoder to a composable row decoder. +-- Lift an individual non-nullable column decoder to a composable row decoder. -- -{-# INLINABLE value #-} -value :: Value a -> Row a -value (Value imp) = +{-# INLINABLE column #-} +column :: Value a -> Row a +column (Value imp) = Row (Row.nonNullValue imp) -- | --- Lift an individual nullable value decoder to a composable row decoder. +-- Lift an individual nullable column decoder to a composable row decoder. -- -{-# INLINABLE nullableValue #-} -nullableValue :: Value a -> Row (Maybe a) -nullableValue (Value imp) = +{-# INLINABLE nullableColumn #-} +nullableColumn :: Value a -> Row (Maybe a) +nullableColumn (Value imp) = Row (Row.value imp) @@ -239,35 +239,35 @@ nullableValue (Value imp) = instance Default (Value a) => Default (Row (Identity a)) where {-# INLINE def #-} def = - fmap Identity (value def) + fmap Identity (column def) instance Default (Value a) => Default (Row (Maybe a)) where {-# INLINE def #-} def = - nullableValue def + nullableColumn def instance (Default (Value a1), Default (Value a2)) => Default (Row (a1, a2)) where {-# INLINE def #-} def = - ap (fmap (,) (value def)) (value def) + ap (fmap (,) (column def)) (column def) -- * Value ------------------------- -- | --- Decoder of an individual value. +-- Decoder of an individual column. -- newtype Value a = Value (Value.Value a) deriving (Functor) --- ** Plain value decoders +-- ** Plain column decoders ------------------------- -- | --- Decoder of the @BOOL@ values. +-- Decoder of the @BOOL@ columns. -- {-# INLINABLE bool #-} bool :: Value Bool @@ -275,7 +275,7 @@ bool = Value (Value.decoder (const A.bool)) -- | --- Decoder of the @INT2@ values. +-- Decoder of the @INT2@ columns. -- {-# INLINABLE int2 #-} int2 :: Value Int16 @@ -283,7 +283,7 @@ int2 = Value (Value.decoder (const A.int)) -- | --- Decoder of the @INT4@ values. +-- Decoder of the @INT4@ columns. -- {-# INLINABLE int4 #-} int4 :: Value Int32 @@ -291,7 +291,7 @@ int4 = Value (Value.decoder (const A.int)) -- | --- Decoder of the @INT8@ values. +-- Decoder of the @INT8@ columns. -- {-# INLINABLE int8 #-} int8 :: Value Int64 @@ -300,7 +300,7 @@ int8 = Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) -- | --- Decoder of the @FLOAT4@ values. +-- Decoder of the @FLOAT4@ columns. -- {-# INLINABLE float4 #-} float4 :: Value Float @@ -308,7 +308,7 @@ float4 = Value (Value.decoder (const A.float4)) -- | --- Decoder of the @FLOAT8@ values. +-- Decoder of the @FLOAT8@ columns. -- {-# INLINABLE float8 #-} float8 :: Value Double @@ -316,7 +316,7 @@ float8 = Value (Value.decoder (const A.float8)) -- | --- Decoder of the @NUMERIC@ values. +-- Decoder of the @NUMERIC@ columns. -- {-# INLINABLE numeric #-} numeric :: Value B.Scientific @@ -324,15 +324,15 @@ numeric = Value (Value.decoder (const A.numeric)) -- | --- Decoder of the @CHAR@ values. --- Note that it supports UTF-8 values. +-- Decoder of the @CHAR@ columns. +-- Note that it supports UTF-8 columns. {-# INLINABLE char #-} char :: Value Char char = Value (Value.decoder (const A.char)) -- | --- Decoder of the @TEXT@ values. +-- Decoder of the @TEXT@ columns. -- {-# INLINABLE text #-} text :: Value Text @@ -340,7 +340,7 @@ text = Value (Value.decoder (const A.text_strict)) -- | --- Decoder of the @BYTEA@ values. +-- Decoder of the @BYTEA@ columns. -- {-# INLINABLE bytea #-} bytea :: Value ByteString @@ -348,7 +348,7 @@ bytea = Value (Value.decoder (const A.bytea_strict)) -- | --- Decoder of the @DATE@ values. +-- Decoder of the @DATE@ columns. -- {-# INLINABLE date #-} date :: Value B.Day @@ -356,7 +356,7 @@ date = Value (Value.decoder (const A.date)) -- | --- Decoder of the @TIMESTAMP@ values. +-- Decoder of the @TIMESTAMP@ columns. -- {-# INLINABLE timestamp #-} timestamp :: Value B.LocalTime @@ -364,22 +364,22 @@ timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) -- | --- Decoder of the @TIMESTAMPTZ@ values. +-- Decoder of the @TIMESTAMPTZ@ columns. -- -- /NOTICE/ -- -- Postgres does not store the timezone information of @TIMESTAMPTZ@. --- Instead it stores a UTC value and performs silent conversions +-- Instead it stores a UTC column and performs silent conversions -- to the currently set timezone, when dealt with in the text format. -- However this library bypasses the silent conversions --- and communicates with Postgres using the UTC values directly. +-- and communicates with Postgres using the UTC columns directly. {-# INLINABLE timestamptz #-} timestamptz :: Value B.UTCTime timestamptz = Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | --- Decoder of the @TIME@ values. +-- Decoder of the @TIME@ columns. -- {-# INLINABLE time #-} time :: Value B.TimeOfDay @@ -387,20 +387,20 @@ time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -- | --- Decoder of the @TIMETZ@ values. +-- Decoder of the @TIMETZ@ columns. -- -- Unlike in case of @TIMESTAMPTZ@, -- Postgres does store the timezone information for @TIMETZ@. -- However the Haskell's \"time\" library does not contain any composite type, -- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' --- to represent a value on the Haskell's side. +-- to represent a column on the Haskell's side. {-# INLINABLE timetz #-} timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) -- | --- Decoder of the @INTERVAL@ values. +-- Decoder of the @INTERVAL@ columns. -- {-# INLINABLE interval #-} interval :: Value B.DiffTime @@ -408,7 +408,7 @@ interval = Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) -- | --- Decoder of the @UUID@ values. +-- Decoder of the @UUID@ columns. -- {-# INLINABLE uuid #-} uuid :: Value B.UUID @@ -416,7 +416,7 @@ uuid = Value (Value.decoder (const A.uuid)) -- | --- Decoder of the @INET@ values. +-- Decoder of the @INET@ columns. -- {-# INLINABLE inet #-} inet :: Value (B.NetAddr B.IP) @@ -424,7 +424,7 @@ inet = Value (Value.decoder (const A.inet)) -- | --- Decoder of the @JSON@ values into a JSON AST. +-- Decoder of the @JSON@ columns into a JSON AST. -- {-# INLINABLE json #-} json :: Value B.Value @@ -432,7 +432,7 @@ json = Value (Value.decoder (const A.json_ast)) -- | --- Decoder of the @JSON@ values into a raw JSON 'ByteString'. +-- Decoder of the @JSON@ columns into a raw JSON 'ByteString'. -- {-# INLINABLE jsonBytes #-} jsonBytes :: (ByteString -> Either Text a) -> Value a @@ -440,7 +440,7 @@ jsonBytes fn = Value (Value.decoder (const (A.json_bytes fn))) -- | --- Decoder of the @JSONB@ values into a JSON AST. +-- Decoder of the @JSONB@ columns into a JSON AST. -- {-# INLINABLE jsonb #-} jsonb :: Value B.Value @@ -448,7 +448,7 @@ jsonb = Value (Value.decoder (const A.jsonb_ast)) -- | --- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. +-- Decoder of the @JSONB@ columns into a raw JSON 'ByteString'. -- {-# INLINABLE jsonbBytes #-} jsonbBytes :: (ByteString -> Either Text a) -> Value a @@ -456,7 +456,7 @@ jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) -- | --- Lifts a custom value decoder function to a 'Value' decoder. +-- Lifts a custom column decoder function to a 'Value' decoder. -- {-# INLINABLE custom #-} custom :: (Bool -> ByteString -> Either Text a) -> Value a @@ -464,7 +464,7 @@ custom fn = Value (Value.decoderFn fn) --- ** Composite value decoders +-- ** Composite column decoders ------------------------- -- | @@ -484,9 +484,9 @@ composite (Composite imp) = Value (Value.decoder (Composite.run imp)) -- | --- A generic decoder of @HSTORE@ values. +-- A generic decoder of @HSTORE@ columns. -- --- Here's how you can use it to construct a specific value: +-- Here's how you can use it to construct a specific column: -- -- @ -- x :: Value [(Text, Maybe Text)] @@ -500,8 +500,8 @@ hstore replicateM = Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) -- | --- Given a partial mapping from text to value, --- produces a decoder of that value. +-- Given a partial mapping from text to column, +-- produces a decoder of that column. enum :: (Text -> Maybe a) -> Value a enum mapping = Value (Value.decoder (const (A.enum mapping))) @@ -643,12 +643,12 @@ instance Default (Value B.Value) where -- | -- A generic array decoder. -- --- Here's how you can use it to produce a specific array value decoder: +-- Here's how you can use it to produce a specific array column decoder: -- -- @ -- x :: Value [[Text]] -- x = --- array (arrayDimension 'replicateM' (arrayDimension 'replicateM' (arrayValue text))) +-- array (dimension 'replicateM' (dimension 'replicateM' (element text))) -- @ -- newtype Array a = @@ -663,28 +663,28 @@ newtype Array a = -- -- * An implementation of the @replicateM@ function -- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), --- which determines the output value. +-- which determines the output column. -- --- * A decoder of its components, which can be either another 'arrayDimension', --- 'arrayValue' or 'arrayNullableValue'. +-- * A decoder of its components, which can be either another 'dimension', +-- 'element' or 'nullableElement'. -- -{-# INLINABLE arrayDimension #-} -arrayDimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b -arrayDimension replicateM (Array imp) = +{-# INLINABLE dimension #-} +dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +dimension replicateM (Array imp) = Array (Array.dimension replicateM imp) -- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf values. -{-# INLINABLE arrayValue #-} -arrayValue :: Value a -> Array a -arrayValue (Value imp) = +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf columns. +{-# INLINABLE element #-} +element :: Value a -> Array a +element (Value imp) = Array (Array.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf values. -{-# INLINABLE arrayNullableValue #-} -arrayNullableValue :: Value a -> Array (Maybe a) -arrayNullableValue (Value imp) = +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf columns. +{-# INLINABLE nullableElement #-} +nullableElement :: Value a -> Array (Maybe a) +nullableElement (Value imp) = Array (Array.value (Value.run imp)) @@ -692,22 +692,22 @@ arrayNullableValue (Value imp) = ------------------------- -- | --- Composable decoder of composite values (rows, records). +-- Composable decoder of composite columns (rows, records). newtype Composite a = Composite (Composite.Composite a) deriving (Functor, Applicative, Monad) -- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. -{-# INLINABLE compositeValue #-} -compositeValue :: Value a -> Composite a -compositeValue (Value imp) = +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf columns. +{-# INLINABLE field #-} +field :: Value a -> Composite a +field (Value imp) = Composite (Composite.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf values. -{-# INLINABLE compositeNullableValue #-} -compositeNullableValue :: Value a -> Composite (Maybe a) -compositeNullableValue (Value imp) = +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf columns. +{-# INLINABLE nullableField #-} +nullableField :: Value a -> Composite (Maybe a) +nullableField (Value imp) = Composite (Composite.value (Value.run imp)) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 46a6fd62fd..0aaca244bb 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -5,8 +5,8 @@ module Hasql.Encoders -- * Params Params, unit, - value, - nullableValue, + param, + nullableParam, -- * Value Value, bool, @@ -36,9 +36,9 @@ module Hasql.Encoders unknown, -- * Array Array, - arrayValue, - arrayNullableValue, - arrayDimension, + element, + nullableElement, + dimension, -- ** Insert Many -- $insertMany ) @@ -68,7 +68,7 @@ import qualified Hasql.Private.Prelude as Prelude -- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = -- 'contramap' 'fst' ('value' 'int8') '<>' --- 'contramap' 'snd' ('nullableValue' 'text') +-- 'contramap' 'snd' ('nullableParam' 'text') -- @ -- -- As a general solution for tuples of any arity, instead of 'fst' and 'snd', @@ -79,7 +79,7 @@ import qualified Hasql.Private.Prelude as Prelude -- @ -- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = --- 'contrazip2' ('value' 'int8') ('nullableValue' 'text') +-- 'contrazip2' ('value' 'int8') ('nullableParam' 'text') -- @ -- -- Here's how you can implement encoders for custom composite types: @@ -122,17 +122,17 @@ unit = -- | -- Lift an individual value encoder to a parameters encoder. -- -{-# INLINABLE value #-} -value :: Value a -> Params a -value (Value x) = +{-# INLINABLE param #-} +param :: Value a -> Params a +param (Value x) = Params (Params.value x) -- | -- Lift an individual nullable value encoder to a parameters encoder. -- -{-# INLINABLE nullableValue #-} -nullableValue :: Value a -> Params (Maybe a) -nullableValue (Value x) = +{-# INLINABLE nullableParam #-} +nullableParam :: Value a -> Params (Maybe a) +nullableParam (Value x) = Params (Params.nullableValue x) @@ -149,27 +149,27 @@ instance Default (Params ()) where instance Default (Value a) => Default (Params (Identity a)) where {-# INLINE def #-} def = - contramap runIdentity (value def) + contramap runIdentity (param def) instance (Default (Value a1), Default (Value a2)) => Default (Params (a1, a2)) where {-# INLINE def #-} def = - contrazip2 (value def) (value def) + contrazip2 (param def) (param def) instance (Default (Value a1), Default (Value a2), Default (Value a3)) => Default (Params (a1, a2, a3)) where {-# INLINE def #-} def = - contrazip3 (value def) (value def) (value def) + contrazip3 (param def) (param def) (param def) instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4)) => Default (Params (a1, a2, a3, a4)) where {-# INLINE def #-} def = - contrazip4 (value def) (value def) (value def) (value def) + contrazip4 (param def) (param def) (param def) (param def) instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4), Default (Value a5)) => Default (Params (a1, a2, a3, a4, a5)) where {-# INLINE def #-} def = - contrazip5 (value def) (value def) (value def) (value def) (value def) + contrazip5 (param def) (param def) (param def) (param def) (param def) -- * Value Encoder @@ -494,7 +494,7 @@ instance Default (Value B.Value) where -- -- >x :: Value [[Int64]] -- >x = --- > array (arrayDimension foldl' (arrayDimension foldl' (arrayValue int8))) +-- > array (dimension foldl' (dimension foldl' (element int8))) -- -- Please note that the PostgreSQL __IN__ keyword does not "accept" an array, but rather a syntactical list of -- values, thus this encoder is not suited for that. Use a **field** = ANY($1) query instead. @@ -504,16 +504,16 @@ newtype Array a = -- | -- Lifts the 'Value' encoder into the 'Array' encoder of a non-nullable value. -{-# INLINABLE arrayValue #-} -arrayValue :: Value a -> Array a -arrayValue (Value (Value.Value elementOID arrayOID encoder renderer)) = +{-# INLINABLE element #-} +element :: Value a -> Array a +element (Value (Value.Value elementOID arrayOID encoder renderer)) = Array (Array.value elementOID arrayOID encoder renderer) -- | -- Lifts the 'Value' encoder into the 'Array' encoder of a nullable value. -{-# INLINABLE arrayNullableValue #-} -arrayNullableValue :: Value a -> Array (Maybe a) -arrayNullableValue (Value (Value.Value elementOID arrayOID encoder renderer)) = +{-# INLINABLE nullableElement #-} +nullableElement :: Value a -> Array (Maybe a) +nullableElement (Value (Value.Value elementOID arrayOID encoder renderer)) = Array (Array.nullableValue elementOID arrayOID encoder renderer) -- | @@ -526,12 +526,12 @@ arrayNullableValue (Value (Value.Value elementOID arrayOID encoder renderer)) = -- such as @Data.Foldable.'foldl''@, -- which determines the input value. -- --- * A component encoder, which can be either another 'arrayDimension', --- 'arrayValue' or 'arrayNullableValue'. +-- * A component encoder, which can be either another 'dimension', +-- 'element' or 'nullableElement'. -- -{-# INLINABLE arrayDimension #-} -arrayDimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c -arrayDimension foldl (Array imp) = +{-# INLINABLE dimension #-} +dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c +dimension foldl (Array imp) = Array (Array.dimension foldl imp) -- $insertMany @@ -553,7 +553,7 @@ arrayDimension foldl (Array imp) = -- contrazip3 (vector Encoders.uuid) (vector Encoders.float8) (vector Encoders.float8) -- where -- vector value = --- Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue value))) +-- Encoders.value (Encoders.array (Encoders.dimension foldl' (Encoders.element value))) -- decoder = -- Decoders.unit -- @ \ No newline at end of file diff --git a/profiling/Main.hs b/profiling/Main.hs index e27b7b2d52..fd295f10e8 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -70,7 +70,7 @@ queryWithSingleRow = D.singleRow row where row = - tuple <$> D.value D.int8 <*> D.value D.int8 + tuple <$> D.column D.int8 <*> D.column D.int8 where tuple !a !b = (a, b) @@ -84,7 +84,7 @@ queryWithManyRows decoder = encoder = conquer rowDecoder = - tuple <$> D.value D.int8 <*> D.value D.int8 + tuple <$> D.column D.int8 <*> D.column D.int8 where tuple !a !b = (a, b) diff --git a/tasty/Main.hs b/tasty/Main.hs index 3c8435ce71..c7f2565dea 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -29,10 +29,10 @@ tree = where encoder = contrazip2 - (Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8)))) - (Encoders.value Encoders.text) + (Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8)))) + (Encoders.param Encoders.text) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) session = Session.query ([3, 7], "a") query in do @@ -47,9 +47,9 @@ tree = Query.Query "select true where 1 = any ($1)" encoder decoder True where encoder = - Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) + Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) session = do result1 <- Session.query [1, 2] query @@ -65,9 +65,9 @@ tree = Query.Query "select true where 3 <> all ($1)" encoder decoder True where encoder = - Encoders.value (Encoders.array (Encoders.arrayDimension foldl' (Encoders.arrayValue Encoders.int8))) + Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.value Decoders.bool)) + fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) session = do result1 <- Session.query [1, 2] query @@ -87,7 +87,7 @@ tree = encoder = Encoders.unit decoder = - Decoders.singleRow (Decoders.value (Decoders.composite ((,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool))) + Decoders.singleRow (Decoders.column (Decoders.composite ((,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool))) session = Session.query () query in do @@ -105,14 +105,14 @@ tree = Encoders.unit decoder = Decoders.singleRow $ - (,) <$> Decoders.value entity1 <*> Decoders.value entity2 + (,) <$> Decoders.column entity1 <*> Decoders.column entity2 where entity1 = Decoders.composite $ - (,) <$> Decoders.compositeValue Decoders.int8 <*> Decoders.compositeValue Decoders.bool + (,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool entity2 = Decoders.composite $ - (,) <$> Decoders.compositeValue Decoders.text <*> Decoders.compositeValue Decoders.int8 + (,) <$> Decoders.field Decoders.text <*> Decoders.field Decoders.int8 session = Session.query () query in do @@ -137,7 +137,7 @@ tree = encoder = Encoders.unit decoder = - Decoders.singleRow (Decoders.value (Decoders.array (Decoders.arrayDimension replicateM (Decoders.arrayValue Decoders.int8)))) + Decoders.singleRow (Decoders.column (Decoders.array (Decoders.dimension replicateM (Decoders.element Decoders.int8)))) in io , testCase "Failing prepared statements" $ @@ -185,9 +185,9 @@ tree = sql = "select $1 :: int8" encoder = - Encoders.value Encoders.int8 + Encoders.param Encoders.int8 decoder = - Decoders.singleRow $ Decoders.value Decoders.int8 + Decoders.singleRow $ Decoders.column Decoders.int8 fail = catchError (Session.sql "absurd") (const (pure ())) in io @@ -201,10 +201,10 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.value Encoders.int8) <> - contramap snd (Encoders.value Encoders.int8) + contramap fst (Encoders.param Encoders.int8) <> + contramap snd (Encoders.param Encoders.int8) decoder = - Decoders.singleRow (Decoders.value Decoders.int8) + Decoders.singleRow (Decoders.column Decoders.int8) sumSession :: Session.Session Int64 sumSession = Session.sql "begin" *> Session.query (1, 1) sumQuery <* Session.sql "end" @@ -226,10 +226,10 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.value Encoders.int8) <> - contramap snd (Encoders.value Encoders.int8) + contramap fst (Encoders.param Encoders.int8) <> + contramap snd (Encoders.param Encoders.int8) decoder = - Decoders.singleRow (Decoders.value Decoders.int8) + Decoders.singleRow (Decoders.column Decoders.int8) session :: Session.Session Int64 session = do @@ -253,9 +253,9 @@ tree = sql = "select $1 = interval '10 seconds'" decoder = - (Decoders.singleRow (Decoders.value (Decoders.bool))) + (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = - Encoders.value (Encoders.interval) + Encoders.param (Encoders.interval) in DSL.query (10 :: DiffTime) query in actualIO >>= \x -> assertEqual (show x) (Right True) x , @@ -270,7 +270,7 @@ tree = sql = "select interval '10 seconds'" decoder = - (Decoders.singleRow (Decoders.value (Decoders.interval))) + (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = Encoders.unit in DSL.query () query @@ -287,9 +287,9 @@ tree = sql = "select $1" decoder = - (Decoders.singleRow (Decoders.value (Decoders.interval))) + (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = - Encoders.value (Encoders.interval) + Encoders.param (Encoders.interval) in DSL.query (10 :: DiffTime) query in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , @@ -318,9 +318,9 @@ tree = sql = "select $1 = ('ok' :: mood)" decoder = - (Decoders.singleRow (Decoders.value (Decoders.bool))) + (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = - Encoders.value (Encoders.unknown) + Encoders.param (Encoders.unknown) in DSL.query "ok" query in actualIO >>= assertEqual "" (Right True) , @@ -349,9 +349,9 @@ tree = sql = "select overloaded($1, $2) || overloaded($3, $4, $5)" decoder = - (Decoders.singleRow (Decoders.value (Decoders.text))) + (Decoders.singleRow (Decoders.column (Decoders.text))) encoder = - contramany (Encoders.value Encoders.unknown) + contramany (Encoders.param Encoders.unknown) in DSL.query ["1", "2", "4", "5", "6"] query in actualIO >>= assertEqual "" (Right "3456") , @@ -380,9 +380,9 @@ tree = sql = "select ($1 :: mood)" decoder = - (Decoders.singleRow (Decoders.value (Decoders.enum (Just . id)))) + (Decoders.singleRow (Decoders.column (Decoders.enum (Just . id)))) encoder = - Encoders.value (Encoders.enum id) + Encoders.param (Encoders.enum id) in DSL.query "ok" query in actualIO >>= assertEqual "" (Right "ok") , @@ -400,9 +400,9 @@ tree = sql = "select $1" encoder = - Encoders.value Encoders.text + Encoders.param Encoders.text decoder = - (Decoders.singleRow (Decoders.value (Decoders.text))) + (Decoders.singleRow (Decoders.column (Decoders.text))) effect2 = DSL.query 1 query where @@ -412,9 +412,9 @@ tree = sql = "select $1" encoder = - Encoders.value Encoders.int8 + Encoders.param Encoders.int8 decoder = - (Decoders.singleRow (Decoders.value Decoders.int8)) + (Decoders.singleRow (Decoders.column Decoders.int8)) in (,) <$> effect1 <*> effect2 in actualIO >>= assertEqual "" (Right ("ok", 1)) , @@ -452,8 +452,8 @@ tree = DSL.session $ do DSL.query () $ Queries.plain $ "drop table if exists a" DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False - id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.value Decoders.int4)) False + id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False + id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False DSL.query () $ Queries.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 22d698119d..5619a44457 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -33,4 +33,4 @@ selectList = sql = "values (1,2), (3,4), (5,6)" decoder = - HD.rowsList ((,) <$> HD.value HD.int8 <*> HD.value HD.int8) + HD.rowsList ((,) <$> HD.column HD.int8 <*> HD.column HD.int8) diff --git a/threads-test/Main/Queries.hs b/threads-test/Main/Queries.hs index 8cb8f242ae..4c481a9ec8 100644 --- a/threads-test/Main/Queries.hs +++ b/threads-test/Main/Queries.hs @@ -13,7 +13,7 @@ selectSleep = sql = "select pg_sleep($1)" encoder = - E.value E.float8 + E.param E.float8 decoder = D.unit From 726097efd506a84a5a766a5b45a0318d9c4ad85c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:11:16 +0800 Subject: [PATCH 0448/1204] Rename some result decoders --- benchmarks/Main.hs | 4 ++-- library/Hasql/Decoders.hs | 38 +++++++++++++++++++------------------- profiling/Main.hs | 4 ++-- tasty/Main.hs | 6 +++--- tasty/Main/Queries.hs | 2 +- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 19919f37f3..b4b7e7f3de 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -100,8 +100,8 @@ queryWithManyRows decoder = queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) queryWithManyRowsInVector = - queryWithManyRows D.rowsVector + queryWithManyRows D.rowVector queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) queryWithManyRowsInList = - queryWithManyRows D.rowsList + queryWithManyRows D.rowList diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index b5ab1ea885..c083188475 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -8,9 +8,9 @@ module Hasql.Decoders rowsAffected, singleRow, -- ** Specialized multi-row results - maybeRow, - rowsVector, - rowsList, + rowMaybe, + rowVector, + rowList, -- ** Multi-row traversers foldlRows, foldrRows, @@ -134,28 +134,28 @@ foldrRows step init (Row row) = -- | -- Maybe one row or none. -- -{-# INLINABLE maybeRow #-} -maybeRow :: Row a -> Result (Maybe a) -maybeRow (Row row) = +{-# INLINABLE rowMaybe #-} +rowMaybe :: Row a -> Result (Maybe a) +rowMaybe (Row row) = Result (Results.single (Result.maybe row)) -- | -- Zero or more rows packed into the vector. -- --- It's recommended to prefer this function to 'rowsList', +-- It's recommended to prefer this function to 'rowList', -- since it performs notably better. -- -{-# INLINABLE rowsVector #-} -rowsVector :: Row a -> Result (Vector a) -rowsVector (Row row) = +{-# INLINABLE rowVector #-} +rowVector :: Row a -> Result (Vector a) +rowVector (Row row) = Result (Results.single (Result.vector row)) -- | -- Zero or more rows packed into the list. -- -{-# INLINABLE rowsList #-} -rowsList :: Row a -> Result [a] -rowsList = +{-# INLINABLE rowList #-} +rowList :: Row a -> Result [a] +rowList = foldrRows strictCons [] @@ -174,23 +174,23 @@ instance Default (Result Int64) where def = rowsAffected --- | Maps to @('maybeRow' def)@. +-- | Maps to @('rowMaybe' def)@. instance Default (Row a) => Default (Result (Maybe a)) where {-# INLINE def #-} def = - maybeRow def + rowMaybe def --- | Maps to @('rowsVector' def)@. +-- | Maps to @('rowVector' def)@. instance Default (Row a) => Default (Result (Vector a)) where {-# INLINE def #-} def = - rowsVector def + rowVector def --- | Maps to @('rowsList' def)@. +-- | Maps to @('rowList' def)@. instance Default (Row a) => Default (Result ([] a)) where {-# INLINE def #-} def = - rowsList def + rowList def -- | Maps to @(fmap Identity ('singleRow' def)@. instance Default (Row a) => Default (Result (Identity a)) where diff --git a/profiling/Main.hs b/profiling/Main.hs index fd295f10e8..5089a4a290 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -91,8 +91,8 @@ queryWithManyRows decoder = queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) queryWithManyRowsInVector = - queryWithManyRows D.rowsVector + queryWithManyRows D.rowVector queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) queryWithManyRowsInList = - queryWithManyRows D.rowsList + queryWithManyRows D.rowList diff --git a/tasty/Main.hs b/tasty/Main.hs index c7f2565dea..1d9ed89dfe 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -32,7 +32,7 @@ tree = (Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8)))) (Encoders.param Encoders.text) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = Session.query ([3, 7], "a") query in do @@ -49,7 +49,7 @@ tree = encoder = Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = do result1 <- Session.query [1, 2] query @@ -67,7 +67,7 @@ tree = encoder = Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) decoder = - fmap (maybe False (const True)) (Decoders.maybeRow (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = do result1 <- Session.query [1, 2] query diff --git a/tasty/Main/Queries.hs b/tasty/Main/Queries.hs index 5619a44457..2cd8ee28a9 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Queries.hs @@ -33,4 +33,4 @@ selectList = sql = "values (1,2), (3,4), (5,6)" decoder = - HD.rowsList ((,) <$> HD.column HD.int8 <*> HD.column HD.int8) + HD.rowList ((,) <$> HD.column HD.int8 <*> HD.column HD.int8) From 1516b51593212066baeadefce02fa967e4cc10a5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:33:01 +0800 Subject: [PATCH 0449/1204] Fix a typo in the docs --- library/Hasql/Decoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index c083188475..c58bd0a7e9 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -102,7 +102,7 @@ rowsAffected = -- | -- Exactly one row. --- Will raise the 'Hasql.Query.UnexpectedAmountOfRows' error if it's any other. +-- Will raise the 'Hasql.Errors.UnexpectedAmountOfRows' error if it's any other. -- {-# INLINABLE singleRow #-} singleRow :: Row a -> Result a From e947e820bbdaca925fd5e3863f7bf6d27878f213 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:33:12 +0800 Subject: [PATCH 0450/1204] Set the version to 1.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 3f1608aee4..58d8990733 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.2 + 1.3 category: Hasql, Database, PostgreSQL synopsis: From 509dafdfbf209d9139e2848adbb5fdace4b2d2fa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:33:34 +0800 Subject: [PATCH 0451/1204] Rename Query to Statement --- benchmarks/Main.hs | 38 ++-- hasql.cabal | 6 +- library/Hasql/Encoders.hs | 4 +- library/Hasql/Private/IO.hs | 30 +-- library/Hasql/Private/Session.hs | 12 +- library/Hasql/Session.hs | 2 +- library/Hasql/{Query.hs => Statement.hs} | 18 +- profiling/Main.hs | 36 ++-- tasty/Main.hs | 176 +++++++++--------- tasty/Main/Connection.hs | 2 +- tasty/Main/DSL.hs | 4 +- tasty/Main/{Queries.hs => Statements.hs} | 20 +- threads-test/Main.hs | 8 +- .../Main/{Queries.hs => Statements.hs} | 8 +- 14 files changed, 182 insertions(+), 182 deletions(-) rename library/Hasql/{Query.hs => Statement.hs} (77%) rename tasty/Main/{Queries.hs => Statements.hs} (55%) rename threads-test/Main/{Queries.hs => Statements.hs} (64%) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index b4b7e7f3de..c983951e01 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -6,7 +6,7 @@ import Criterion import Criterion.Main import qualified Hasql.Connection as A import qualified Hasql.Session as B -import qualified Hasql.Query as C +import qualified Hasql.Statement as C import qualified Hasql.Decoders as D import qualified Hasql.Encoders as E import qualified Data.Vector as F @@ -45,31 +45,31 @@ sessionWithManySmallParameters = sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = - B.query () queryWithManyRowsInVector + B.statement () statementWithManyRowsInVector sessionWithManyLargeResults :: B.Session [Vector (Int64, Int64)] sessionWithManyLargeResults = - replicateM 1000 (B.query () queryWithManyRowsInVector) + replicateM 1000 (B.statement () statementWithManyRowsInVector) sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) sessionWithSingleLargeResultInList = - B.query () queryWithManyRowsInList + B.statement () statementWithManyRowsInList sessionWithManySmallResults :: B.Session [(Int64, Int64)] sessionWithManySmallResults = - replicateM 1000 (B.query () queryWithSingleRow) + replicateM 1000 (B.statement () statementWithSingleRow) -- * Statements ------------------------- -queryWithManyParameters :: C.Query (Vector (Int64, Int64)) () -queryWithManyParameters = +statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () +statementWithManyParameters = $(todo "statementWithManyParameters") -queryWithSingleRow :: C.Query () (Int64, Int64) -queryWithSingleRow = - C.Query template encoder decoder True +statementWithSingleRow :: C.Statement () (Int64, Int64) +statementWithSingleRow = + C.Statement template encoder decoder True where template = "SELECT 1, 2" @@ -84,9 +84,9 @@ queryWithSingleRow = tuple !a !b = (a, b) -queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result -queryWithManyRows decoder = - C.Query template encoder (decoder rowDecoder) True +statementWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Statement () result +statementWithManyRows decoder = + C.Statement template encoder (decoder rowDecoder) True where template = "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" @@ -98,10 +98,10 @@ queryWithManyRows decoder = tuple !a !b = (a, b) -queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) -queryWithManyRowsInVector = - queryWithManyRows D.rowVector +statementWithManyRowsInVector :: C.Statement () (Vector (Int64, Int64)) +statementWithManyRowsInVector = + statementWithManyRows D.rowVector -queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) -queryWithManyRowsInList = - queryWithManyRows D.rowList +statementWithManyRowsInList :: C.Statement () (List (Int64, Int64)) +statementWithManyRowsInList = + statementWithManyRows D.rowList diff --git a/hasql.cabal b/hasql.cabal index 58d8990733..18c7a283c6 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -51,7 +51,7 @@ library Hasql.Decoders Hasql.Encoders Hasql.Connection - Hasql.Query + Hasql.Statement Hasql.Session other-modules: Hasql.Private.Prelude @@ -114,7 +114,7 @@ test-suite tasty other-modules: Main.DSL Main.Connection - Main.Queries + Main.Statements Main.Prelude default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples @@ -143,7 +143,7 @@ test-suite threads-test main-is: Main.hs other-modules: - Main.Queries + Main.Statements ghc-options: -O2 -threaded diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 0aaca244bb..57061484bc 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -536,13 +536,13 @@ dimension foldl (Array imp) = -- $insertMany -- It is not currently possible to pass in an array of encodable values --- to use in an 'insert many' query using Hasql. Instead, PostgreSQL's +-- to use in an 'insert many' statement using Hasql. Instead, PostgreSQL's -- (9.4 or later) `unnest` function can be used to in an analogous way -- to haskell's `zip` function by passing in multiple arrays of values -- to be zipped into the rows we want to insert: -- -- @ --- insertMultipleLocations :: Query (Vector (UUID, Double, Double)) () +-- insertMultipleLocations :: Statement (Vector (UUID, Double, Double)) () -- insertMultipleLocations = -- statement sql encoder decoder True -- where diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index 75c312224e..f227a169fa 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -106,8 +106,8 @@ checkedSend connection send = False -> fmap (Left . ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) -{-# INLINE sendPreparedParametricQuery #-} -sendPreparedParametricQuery :: +{-# INLINE sendPreparedParametricStatement #-} +sendPreparedParametricStatement :: LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> @@ -115,7 +115,7 @@ sendPreparedParametricQuery :: ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendPreparedParametricQuery connection registry integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = +sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = let (oidList, valueAndFormatList) = let @@ -128,15 +128,15 @@ sendPreparedParametricQuery connection registry integerDatetimes template (Param key <- ExceptT $ getPreparedStatementKey connection registry template oidList ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary -{-# INLINE sendUnpreparedParametricQuery #-} -sendUnpreparedParametricQuery :: +{-# INLINE sendUnpreparedParametricStatement #-} +sendUnpreparedParametricStatement :: LibPQ.Connection -> Bool -> ByteString -> ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendUnpreparedParametricQuery connection integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = +sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = let params = let @@ -145,8 +145,8 @@ sendUnpreparedParametricQuery connection integerDatetimes template (ParamsEncode in foldr step [] (encoderOp input) in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary -{-# INLINE sendParametricQuery #-} -sendParametricQuery :: +{-# INLINE sendParametricStatement #-} +sendParametricStatement :: LibPQ.Connection -> Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> @@ -155,13 +155,13 @@ sendParametricQuery :: Bool -> a -> IO (Either CommandError ()) -sendParametricQuery connection integerDatetimes registry template encoder prepared params = - {-# SCC "sendParametricQuery" #-} +sendParametricStatement connection integerDatetimes registry template encoder prepared params = + {-# SCC "sendParametricStatement" #-} if prepared - then sendPreparedParametricQuery connection registry integerDatetimes template encoder params - else sendUnpreparedParametricQuery connection integerDatetimes template encoder params + then sendPreparedParametricStatement connection registry integerDatetimes template encoder params + else sendUnpreparedParametricStatement connection integerDatetimes template encoder params -{-# INLINE sendNonparametricQuery #-} -sendNonparametricQuery :: LibPQ.Connection -> ByteString -> IO (Either CommandError ()) -sendNonparametricQuery connection sql = +{-# INLINE sendNonparametricStatement #-} +sendNonparametricStatement :: LibPQ.Connection -> ByteString -> IO (Either CommandError ()) +sendNonparametricStatement connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 67c9ab9c3f..87676bacb0 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -9,7 +9,7 @@ import qualified Hasql.Private.Decoders.Result as Decoders.Result import qualified Hasql.Private.Encoders.Params as Encoders.Params import qualified Hasql.Private.Settings as Settings import qualified Hasql.Private.IO as IO -import qualified Hasql.Query as Query +import qualified Hasql.Statement as Statement import qualified Hasql.Private.Connection as Connection @@ -34,7 +34,7 @@ sql :: ByteString -> Session () sql sql = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT $ fmap (mapLeft (QueryError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendNonparametricQuery pqConnection sql + r1 <- IO.sendNonparametricStatement pqConnection sql r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 where @@ -42,12 +42,12 @@ sql sql = Decoders.Results.single Decoders.Result.unit -- | --- Parameters and a specification of the parametric query to apply them to. -query :: params -> Query.Query params result -> Session result -query input (Query.Query template encoder decoder preparable) = +-- Parameters and a specification of a parametric single-statement query to apply them to. +statement :: params -> Statement.Statement params result -> Session result +statement input (Statement.Statement template encoder decoder preparable) = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT $ fmap (mapLeft (QueryError template inputReps)) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricQuery pqConnection integerDatetimes registry template (unsafeCoerce encoder) preparable input + r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template (unsafeCoerce encoder) preparable input r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) return $ r1 *> r2 where diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 7d619d4826..539b654d4b 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -2,7 +2,7 @@ module Hasql.Session ( Session, sql, - query, + statement, -- * Execution run, -- * Errors diff --git a/library/Hasql/Query.hs b/library/Hasql/Statement.hs similarity index 77% rename from library/Hasql/Query.hs rename to library/Hasql/Statement.hs index 176fcd5077..73bf74f649 100644 --- a/library/Hasql/Query.hs +++ b/library/Hasql/Statement.hs @@ -1,4 +1,4 @@ -module Hasql.Query +module Hasql.Statement where import Hasql.Private.Prelude @@ -26,9 +26,9 @@ import qualified Hasql.Encoders as Encoders -- Following is an example of the declaration of a prepared statement with its associated codecs. -- -- @ --- selectSum :: Hasql.Query.'Query' (Int64, Int64) Int64 +-- selectSum :: Hasql.Statement.'Statement' (Int64, Int64) Int64 -- selectSum = --- Hasql.Query.'Query' sql encoder decoder True +-- Hasql.Statement.'Statement' sql encoder decoder True -- where -- sql = -- "select ($1 + $2)" @@ -42,14 +42,14 @@ import qualified Hasql.Encoders as Encoders -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. -- -data Query a b = - Query ByteString (Encoders.Params a) (Decoders.Result b) Bool +data Statement a b = + Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool -instance Functor (Query a) where +instance Functor (Statement a) where {-# INLINE fmap #-} fmap = rmap -instance Profunctor Query where +instance Profunctor Statement where {-# INLINE dimap #-} - dimap f1 f2 (Query template encoder decoder preparable) = - Query template (contramap f1 encoder) (fmap f2 decoder) preparable + dimap f1 f2 (Statement template encoder decoder preparable) = + Statement template (contramap f1 encoder) (fmap f2 decoder) preparable diff --git a/profiling/Main.hs b/profiling/Main.hs index 5089a4a290..acb8c70852 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -4,7 +4,7 @@ import Prelude import Bug import qualified Hasql.Connection as A import qualified Hasql.Session as B -import qualified Hasql.Query as C +import qualified Hasql.Statement as C import qualified Hasql.Decoders as D import qualified Hasql.Encoders as E import qualified Data.Vector as F @@ -40,27 +40,27 @@ sessionWithManySmallParameters = sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = - B.query () queryWithManyRowsInVector + B.statement () statementWithManyRowsInVector sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) sessionWithSingleLargeResultInList = - B.query () queryWithManyRowsInList + B.statement () statementWithManyRowsInList sessionWithManySmallResults :: B.Session (Vector (Int64, Int64)) sessionWithManySmallResults = - F.replicateM 1000 (B.query () queryWithSingleRow) + F.replicateM 1000 (B.statement () statementWithSingleRow) -- * Statements ------------------------- -queryWithManyParameters :: C.Query (Vector (Int64, Int64)) () -queryWithManyParameters = +statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () +statementWithManyParameters = $(todo "statementWithManyParameters") -queryWithSingleRow :: C.Query () (Int64, Int64) -queryWithSingleRow = - C.Query template encoder decoder True +statementWithSingleRow :: C.Statement () (Int64, Int64) +statementWithSingleRow = + C.Statement template encoder decoder True where template = "SELECT 1, 2" @@ -75,9 +75,9 @@ queryWithSingleRow = tuple !a !b = (a, b) -queryWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Query () result -queryWithManyRows decoder = - C.Query template encoder (decoder rowDecoder) True +statementWithManyRows :: (D.Row (Int64, Int64) -> D.Result result) -> C.Statement () result +statementWithManyRows decoder = + C.Statement template encoder (decoder rowDecoder) True where template = "SELECT generate_series(0,1000) as a, generate_series(1000,2000) as b" @@ -89,10 +89,10 @@ queryWithManyRows decoder = tuple !a !b = (a, b) -queryWithManyRowsInVector :: C.Query () (Vector (Int64, Int64)) -queryWithManyRowsInVector = - queryWithManyRows D.rowVector +statementWithManyRowsInVector :: C.Statement () (Vector (Int64, Int64)) +statementWithManyRowsInVector = + statementWithManyRows D.rowVector -queryWithManyRowsInList :: C.Query () (List (Int64, Int64)) -queryWithManyRowsInList = - queryWithManyRows D.rowList +statementWithManyRowsInList :: C.Statement () (List (Int64, Int64)) +statementWithManyRowsInList = + statementWithManyRows D.rowList diff --git a/tasty/Main.hs b/tasty/Main.hs index 1d9ed89dfe..54f90eefbc 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -7,10 +7,10 @@ import Test.Tasty.Runners import Test.Tasty.HUnit import Test.Tasty.QuickCheck import qualified Test.QuickCheck as QuickCheck -import qualified Main.Queries as Queries +import qualified Main.Statements as Statements import qualified Main.DSL as DSL import qualified Main.Connection as Connection -import qualified Hasql.Query as Query +import qualified Hasql.Statement as Statement import qualified Hasql.Encoders as Encoders import qualified Hasql.Decoders as Decoders import qualified Hasql.Session as Session @@ -24,8 +24,8 @@ tree = [ testCase "Failed query" $ let - query = - Query.Query "select true where 1 = any ($1) and $2" encoder decoder True + statement = + Statement.Statement "select true where 1 = any ($1) and $2" encoder decoder True where encoder = contrazip2 @@ -34,7 +34,7 @@ tree = decoder = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = - Session.query ([3, 7], "a") query + Session.statement ([3, 7], "a") statement in do x <- Connection.with (Session.run session) assertBool (show x) $ case x of @@ -43,8 +43,8 @@ tree = , testCase "IN simulation" $ let - query = - Query.Query "select true where 1 = any ($1)" encoder decoder True + statement = + Statement.Statement "select true where 1 = any ($1)" encoder decoder True where encoder = Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) @@ -52,8 +52,8 @@ tree = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = do - result1 <- Session.query [1, 2] query - result2 <- Session.query [2, 3] query + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement return (result1, result2) in do x <- Connection.with (Session.run session) @@ -61,8 +61,8 @@ tree = , testCase "NOT IN simulation" $ let - query = - Query.Query "select true where 3 <> all ($1)" encoder decoder True + statement = + Statement.Statement "select true where 3 <> all ($1)" encoder decoder True where encoder = Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) @@ -70,8 +70,8 @@ tree = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = do - result1 <- Session.query [1, 2] query - result2 <- Session.query [2, 3] query + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement return (result1, result2) in do x <- Connection.with (Session.run session) @@ -79,8 +79,8 @@ tree = , testCase "Composite decoding" $ let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select (1, true)" @@ -89,15 +89,15 @@ tree = decoder = Decoders.singleRow (Decoders.column (Decoders.composite ((,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool))) session = - Session.query () query + Session.statement () statement in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right (1, True))) x , testCase "Complex composite decoding" $ let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select (1, true) as entity1, ('hello', 3) as entity2" @@ -114,7 +114,7 @@ tree = Decoders.composite $ (,) <$> Decoders.field Decoders.text <*> Decoders.field Decoders.int8 session = - Session.query () query + Session.statement () statement in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x @@ -127,10 +127,10 @@ tree = assertEqual (show x) (Right (Right [])) x where session = - Session.query () query + Session.statement () statement where - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select array[]::int8[]" @@ -154,10 +154,10 @@ tree = catchError session (const (pure ())) *> session where session = - Session.query () query + Session.statement () statement where - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "absurd" @@ -177,10 +177,10 @@ tree = try *> fail *> try where try = - Session.query 1 query + Session.statement 1 statement where - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1 :: int8" @@ -194,9 +194,9 @@ tree = , testCase "\"in progress after error\" bugfix" $ let - sumQuery :: Query.Query (Int64, Int64) Int64 - sumQuery = - Query.Query sql encoder decoder True + sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True where sql = "select ($1 + $2)" @@ -207,7 +207,7 @@ tree = Decoders.singleRow (Decoders.column Decoders.int8) sumSession :: Session.Session Int64 sumSession = - Session.sql "begin" *> Session.query (1, 1) sumQuery <* Session.sql "end" + Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" errorSession :: Session.Session () errorSession = Session.sql "asldfjsldk" @@ -219,9 +219,9 @@ tree = , testCase "\"another command is already in progress\" bugfix" $ let - sumQuery :: Query.Query (Int64, Int64) Int64 - sumQuery = - Query.Query sql encoder decoder True + sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True where sql = "select ($1 + $2)" @@ -234,7 +234,7 @@ tree = session = do Session.sql "begin;" - s <- Session.query (1,1) sumQuery + s <- Session.statement (1,1) sumStatement Session.sql "end;" return s in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x @@ -247,8 +247,8 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1 = interval '10 seconds'" @@ -256,7 +256,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = Encoders.param (Encoders.interval) - in DSL.query (10 :: DiffTime) query + in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right True) x , testCase "Interval Decoding" $ @@ -264,8 +264,8 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select interval '10 seconds'" @@ -273,7 +273,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = Encoders.unit - in DSL.query () query + in DSL.statement () statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , testCase "Interval Encoding/Decoding" $ @@ -281,8 +281,8 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1" @@ -290,7 +290,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = Encoders.param (Encoders.interval) - in DSL.query (10 :: DiffTime) query + in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , testCase "Unknown" $ @@ -298,22 +298,22 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "drop type if exists mood" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1 = ('ok' :: mood)" @@ -321,7 +321,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = Encoders.param (Encoders.unknown) - in DSL.query "ok" query + in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right True) , testCase "Textual Unknown" $ @@ -329,22 +329,22 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select overloaded($1, $2) || overloaded($3, $4, $5)" @@ -352,7 +352,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.text))) encoder = contramany (Encoders.param Encoders.unknown) - in DSL.query ["1", "2", "4", "5", "6"] query + in DSL.statement ["1", "2", "4", "5", "6"] statement in actualIO >>= assertEqual "" (Right "3456") , testCase "Enum" $ @@ -360,22 +360,22 @@ tree = actualIO = DSL.session $ do let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "drop type if exists mood" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql mempty Decoders.unit True + statement = + Statement.Statement sql mempty Decoders.unit True where sql = "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.query () query + in DSL.statement () statement let - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select ($1 :: mood)" @@ -383,7 +383,7 @@ tree = (Decoders.singleRow (Decoders.column (Decoders.enum (Just . id)))) encoder = Encoders.param (Encoders.enum id) - in DSL.query "ok" query + in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right "ok") , testCase "The same prepared statement used on different types" $ @@ -392,10 +392,10 @@ tree = DSL.session $ do let effect1 = - DSL.query "ok" query + DSL.statement "ok" statement where - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1" @@ -404,10 +404,10 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.text))) effect2 = - DSL.query 1 query + DSL.statement 1 statement where - query = - Query.Query sql encoder decoder True + statement = + Statement.Statement sql encoder decoder True where sql = "select $1" @@ -429,16 +429,16 @@ tree = deleteRows <* dropTable where dropTable = - DSL.query () $ Queries.plain $ + DSL.statement () $ Statements.plain $ "drop table if exists a" createTable = - DSL.query () $ Queries.plain $ + DSL.statement () $ Statements.plain $ "create table a (id bigserial not null, name varchar not null, primary key (id))" insertRow = - DSL.query () $ Queries.plain $ + DSL.statement () $ Statements.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.query () $ Query.Query sql def decoder False + DSL.statement () $ Statement.Statement sql def decoder False where sql = "delete from a" @@ -450,18 +450,18 @@ tree = let actualIO = DSL.session $ do - DSL.query () $ Queries.plain $ "drop table if exists a" - DSL.query () $ Queries.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.query () $ Query.Query "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False - id2 <- DSL.query () $ Query.Query "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False - DSL.query () $ Queries.plain $ "drop table if exists a" + DSL.statement () $ Statements.plain $ "drop table if exists a" + DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" + id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False + id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False + DSL.statement () $ Statements.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO , testCase "List decoding" $ let actualIO = - DSL.session $ DSL.query () $ Queries.selectList + DSL.session $ DSL.statement () $ Statements.selectList in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index 58e2eb8c81..6215615465 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -3,7 +3,7 @@ where import Main.Prelude import qualified Hasql.Connection as HC -import qualified Hasql.Query as HQ +import qualified Hasql.Statement as HQ import qualified Hasql.Session diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index b654760368..95b7bc08e8 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -3,14 +3,14 @@ module Main.DSL Session, SessionError(..), session, - Hasql.Session.query, + Hasql.Session.statement, Hasql.Session.sql, ) where import Main.Prelude import qualified Hasql.Connection as HC -import qualified Hasql.Query as HQ +import qualified Hasql.Statement as HQ import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD import qualified Hasql.Session diff --git a/tasty/Main/Queries.hs b/tasty/Main/Statements.hs similarity index 55% rename from tasty/Main/Queries.hs rename to tasty/Main/Statements.hs index 2cd8ee28a9..a3e1403d64 100644 --- a/tasty/Main/Queries.hs +++ b/tasty/Main/Statements.hs @@ -1,34 +1,34 @@ -module Main.Queries where +module Main.Statements where import Main.Prelude hiding (def) -import qualified Hasql.Query as HQ +import qualified Hasql.Statement as HQ import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD import qualified Main.Prelude as Prelude -def :: ByteString -> HQ.Query () () +def :: ByteString -> HQ.Statement () () def sql = - HQ.Query sql Prelude.def Prelude.def False + HQ.Statement sql Prelude.def Prelude.def False -plain :: ByteString -> HQ.Query () () +plain :: ByteString -> HQ.Statement () () plain sql = - HQ.Query sql mempty HD.unit False + HQ.Statement sql mempty HD.unit False -dropType :: ByteString -> HQ.Query () () +dropType :: ByteString -> HQ.Statement () () dropType name = plain $ "drop type if exists " <> name -createEnum :: ByteString -> [ByteString] -> HQ.Query () () +createEnum :: ByteString -> [ByteString] -> HQ.Statement () () createEnum name values = plain $ "create type " <> name <> " as enum (" <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) <> ")" -selectList :: HQ.Query () ([] (Int64, Int64)) +selectList :: HQ.Statement () ([] (Int64, Int64)) selectList = - HQ.Query sql mempty decoder True + HQ.Statement sql mempty decoder True where sql = "values (1,2), (3,4), (5,6)" diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 93ca7f5d12..044719559e 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -2,11 +2,11 @@ module Main where import Rebase.Prelude import qualified Hasql.Connection -import qualified Hasql.Query +import qualified Hasql.Statement import qualified Hasql.Encoders import qualified Hasql.Decoders import qualified Hasql.Session -import qualified Main.Queries as Queries +import qualified Main.Statements as Statements main = @@ -29,13 +29,13 @@ main = forkIO $ do traceM "1: in" putMVar beginVar () - session connection1 (Hasql.Session.query 0.2 Queries.selectSleep) + session connection1 (Hasql.Session.statement 0.2 Statements.selectSleep) traceM "1: out" void (tryPutMVar finishVar False) forkIO $ do takeMVar beginVar traceM "2: in" - session connection2 (Hasql.Session.query 0.1 Queries.selectSleep) + session connection2 (Hasql.Session.statement 0.1 Statements.selectSleep) traceM "2: out" void (tryPutMVar finishVar True) bool exitFailure exitSuccess . traceShowId =<< takeMVar finishVar diff --git a/threads-test/Main/Queries.hs b/threads-test/Main/Statements.hs similarity index 64% rename from threads-test/Main/Queries.hs rename to threads-test/Main/Statements.hs index 4c481a9ec8..ecd591a7a4 100644 --- a/threads-test/Main/Queries.hs +++ b/threads-test/Main/Statements.hs @@ -1,14 +1,14 @@ -module Main.Queries where +module Main.Statements where import Rebase.Prelude -import Hasql.Query +import Hasql.Statement import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D -selectSleep :: Query Double () +selectSleep :: Statement Double () selectSleep = - Query sql encoder decoder True + Statement sql encoder decoder True where sql = "select pg_sleep($1)" From 75f8ab44d94909b3956c43f0e0e31ae49d3dce2a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:39:42 +0800 Subject: [PATCH 0452/1204] Fix the Hasql dep bounds --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 00d7e6455d..866b60cf57 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.6 + 0.6.0.1 category: Hasql, Database, PostgreSQL synopsis: @@ -53,7 +53,7 @@ library Hasql.Transaction.Sessions build-depends: -- database: - hasql >= 0.19 && < 0.20 || >= 1 && < 2, + hasql >= 0.19 && < 0.20 || >= 1 && < 1.2, -- data: bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, From 668150d9c7deecf8a6aa69cf03cb1b4fea0a7586 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:48:58 +0800 Subject: [PATCH 0453/1204] Set the version to 0.7 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 866b60cf57..530fe82742 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: - 0.6.0.1 + 0.7 category: Hasql, Database, PostgreSQL synopsis: From 7aa5d3c63eb95ed0221c2ed27167e046bb04b999 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 May 2018 18:49:08 +0800 Subject: [PATCH 0454/1204] Migrate to Hasql 1.3 --- conflicts-test/Main.hs | 30 +++++------ .../Main/{Queries.hs => Statements.hs} | 34 ++++++------- conflicts-test/Main/Transactions.hs | 10 ++-- hasql-transaction.cabal | 6 +-- library/Hasql/Transaction.hs | 2 +- library/Hasql/Transaction/Private/Queries.hs | 50 ------------------- library/Hasql/Transaction/Private/Sessions.hs | 12 ++--- .../Hasql/Transaction/Private/Statements.hs | 50 +++++++++++++++++++ .../Hasql/Transaction/Private/Transaction.hs | 12 ++--- 9 files changed, 103 insertions(+), 103 deletions(-) rename conflicts-test/Main/{Queries.hs => Statements.hs} (52%) delete mode 100644 library/Hasql/Transaction/Private/Queries.hs create mode 100644 library/Hasql/Transaction/Private/Statements.hs diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 056dcb320e..7e2837e3f3 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -5,7 +5,7 @@ import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Transaction as C import qualified Hasql.Transaction.Sessions as G -import qualified Main.Queries as D +import qualified Main.Statements as D import qualified Main.Transactions as E import qualified Control.Concurrent.Async as F @@ -57,14 +57,14 @@ type Test = transactionsTest :: Test transactionsTest connection1 connection2 = do - id1 <- session connection1 (B.query 0 D.createAccount) - id2 <- session connection1 (B.query 0 D.createAccount) + id1 <- session connection1 (B.statement 0 D.createAccount) + id2 <- session connection1 (B.statement 0 D.createAccount) async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1))) async2 <- F.async (replicateM_ 1000 (transaction connection2 (E.transfer id1 id2 1))) F.wait async1 F.wait async2 - balance1 <- session connection1 (B.query id1 D.getBalance) - balance2 <- session connection1 (B.query id2 D.getBalance) + balance1 <- session connection1 (B.statement id1 D.getBalance) + balance2 <- session connection1 (B.statement id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 2000 && balance2 == Just (-2000)) @@ -72,14 +72,14 @@ transactionsTest connection1 connection2 = readAndWriteTransactionsTest :: Test readAndWriteTransactionsTest connection1 connection2 = do - id1 <- session connection1 (B.query 0 D.createAccount) - id2 <- session connection1 (B.query 0 D.createAccount) + id1 <- session connection1 (B.statement 0 D.createAccount) + id2 <- session connection1 (B.statement 0 D.createAccount) async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1))) - async2 <- F.async (replicateM_ 1000 (transaction connection2 (C.query id1 D.getBalance))) + async2 <- F.async (replicateM_ 1000 (transaction connection2 (C.statement id1 D.getBalance))) F.wait async1 F.wait async2 - balance1 <- session connection1 (B.query id1 D.getBalance) - balance2 <- session connection1 (B.query id2 D.getBalance) + balance1 <- session connection1 (B.statement id1 D.getBalance) + balance2 <- session connection1 (B.statement id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 1000 && balance2 == Just (-1000)) @@ -87,14 +87,14 @@ readAndWriteTransactionsTest connection1 connection2 = transactionAndQueryTest :: Test transactionAndQueryTest connection1 connection2 = do - id1 <- session connection1 (B.query 0 D.createAccount) - id2 <- session connection1 (B.query 0 D.createAccount) + id1 <- session connection1 (B.statement 0 D.createAccount) + id2 <- session connection1 (B.statement 0 D.createAccount) async1 <- F.async (transaction connection1 (E.transferTimes 200 id1 id2 1)) - async2 <- F.async (session connection2 (replicateM_ 200 (B.query (id1, 1) D.modifyBalance))) + async2 <- F.async (session connection2 (replicateM_ 200 (B.statement (id1, 1) D.modifyBalance))) F.wait async1 F.wait async2 - balance1 <- session connection1 (B.query id1 D.getBalance) - balance2 <- session connection1 (B.query id2 D.getBalance) + balance1 <- session connection1 (B.statement id1 D.getBalance) + balance2 <- session connection1 (B.statement id2 D.getBalance) traceShowM balance1 traceShowM balance2 return (balance1 == Just 400 && balance2 == Just (-200)) diff --git a/conflicts-test/Main/Queries.hs b/conflicts-test/Main/Statements.hs similarity index 52% rename from conflicts-test/Main/Queries.hs rename to conflicts-test/Main/Statements.hs index 2650efaefc..0366e04d91 100644 --- a/conflicts-test/Main/Queries.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,47 +1,47 @@ -module Main.Queries where +module Main.Statements where import Rebase.Prelude -import Hasql.Query +import Hasql.Statement import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D -createAccountTable :: Query () () +createAccountTable :: Statement () () createAccountTable = - statement sql E.unit D.unit False + Statement sql E.unit D.unit False where sql = "create table account (id serial not null, balance numeric not null, primary key (id))" -dropAccountTable :: Query () () +dropAccountTable :: Statement () () dropAccountTable = - statement + Statement "drop table account" E.unit D.unit False -createAccount :: Query Scientific Int64 +createAccount :: Statement Scientific Int64 createAccount = - statement + Statement "insert into account (balance) values ($1) returning id" - (E.value E.numeric) - (D.singleRow (D.value D.int8)) + (E.param E.numeric) + (D.singleRow (D.column D.int8)) True -modifyBalance :: Query (Int64, Scientific) Bool +modifyBalance :: Statement (Int64, Scientific) Bool modifyBalance = - statement + Statement "update account set balance = balance + $2 where id = $1" - (contrazip2 (E.value E.int8) (E.value E.numeric)) + (contrazip2 (E.param E.int8) (E.param E.numeric)) (fmap (> 0) D.rowsAffected) True -getBalance :: Query Int64 (Maybe Scientific) +getBalance :: Statement Int64 (Maybe Scientific) getBalance = - statement + Statement "select balance from account where id = $1" - (E.value E.int8) - (D.maybeRow (D.value D.numeric)) + (E.param E.int8) + (D.rowMaybe (D.column D.numeric)) True diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index e206855ef3..3cc1d1c4f1 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -2,26 +2,26 @@ module Main.Transactions where import Rebase.Prelude import Hasql.Transaction -import qualified Main.Queries as A +import qualified Main.Statements as A createSchema :: Transaction () createSchema = do - query () A.createAccountTable + statement () A.createAccountTable dropSchema :: Transaction () dropSchema = do - query () A.dropAccountTable + statement () A.dropAccountTable transfer :: Int64 -> Int64 -> Scientific -> Transaction Bool transfer id1 id2 amount = do - success <- query (id1, amount) A.modifyBalance + success <- statement (id1, amount) A.modifyBalance if success then - query (id2, negate amount) A.modifyBalance + statement (id2, negate amount) A.modifyBalance else return False diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 530fe82742..5ef86b9a71 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -45,7 +45,7 @@ library Hasql.Transaction.Private.Prelude Hasql.Transaction.Private.Model Hasql.Transaction.Private.SQL - Hasql.Transaction.Private.Queries + Hasql.Transaction.Private.Statements Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Transaction exposed-modules: @@ -53,7 +53,7 @@ library Hasql.Transaction.Sessions build-depends: -- database: - hasql >= 0.19 && < 0.20 || >= 1 && < 1.2, + hasql >= 1.3 && < 1.4, -- data: bytestring-tree-builder >= 0.1 && < 0.3, bytestring >= 0.10 && < 0.11, @@ -75,7 +75,7 @@ test-suite conflicts-test main-is: Main.hs other-modules: - Main.Queries + Main.Statements Main.Transactions ghc-options: -O2 diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index 842b232c5a..ad5d4e4ba9 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -6,7 +6,7 @@ module Hasql.Transaction Transaction, condemn, sql, - query, + statement, ) where diff --git a/library/Hasql/Transaction/Private/Queries.hs b/library/Hasql/Transaction/Private/Queries.hs deleted file mode 100644 index c453dbe7ed..0000000000 --- a/library/Hasql/Transaction/Private/Queries.hs +++ /dev/null @@ -1,50 +0,0 @@ -module Hasql.Transaction.Private.Queries -where - -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Model -import qualified Hasql.Query as A -import qualified Hasql.Encoders as B -import qualified Hasql.Decoders as C -import qualified Hasql.Transaction.Private.SQL as D - - --- * Transactions -------------------------- - -beginTransaction :: IsolationLevel -> Mode -> A.Query () () -beginTransaction isolation mode = - A.statement (D.beginTransaction isolation mode) B.unit C.unit True - -commitTransaction :: A.Query () () -commitTransaction = - A.statement "COMMIT" B.unit C.unit True - -abortTransaction :: A.Query () () -abortTransaction = - A.statement "ABORT" B.unit C.unit True - - --- * Streaming -------------------------- - -declareCursor :: ByteString -> ByteString -> B.Params a -> A.Query a () -declareCursor name sql encoder = - A.statement (D.declareCursor name sql) encoder C.unit False - -closeCursor :: A.Query ByteString () -closeCursor = - A.statement "CLOSE $1" (B.value B.bytea) C.unit True - -fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Query (Int64, ByteString) b -fetchFromCursor step init rowDec = - A.statement sql encoder decoder True - where - sql = - "FETCH FORWARD $1 FROM $2" - encoder = - contrazip2 - (B.value B.int8) - (B.value B.bytea) - decoder = - C.foldlRows step init rowDec diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index edf322e2d9..60c5aa96be 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -4,7 +4,7 @@ where import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Model import qualified Hasql.Session as A -import qualified Hasql.Transaction.Private.Queries as B +import qualified Hasql.Transaction.Private.Statements as B {- @@ -18,17 +18,17 @@ inRetryingTransaction isolation mode session = where normal = do - A.query () (B.beginTransaction isolation mode) + A.statement () (B.beginTransaction isolation mode) (result, commit) <- session if commit - then A.query () B.commitTransaction - else A.query () B.abortTransaction + then A.statement () B.commitTransaction + else A.statement () B.abortTransaction return result onError continue error = do - A.query () B.abortTransaction + A.statement () B.abortTransaction case error of - A.ResultError (A.ServerError "40001" _ _ _) -> + A.QueryError _ _ (A.ResultError (A.ServerError "40001" _ _ _)) -> continue _ -> throwError error diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs new file mode 100644 index 0000000000..49096b8054 --- /dev/null +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -0,0 +1,50 @@ +module Hasql.Transaction.Private.Statements +where + +import Hasql.Transaction.Private.Prelude +import Hasql.Transaction.Private.Model +import qualified Hasql.Statement as A +import qualified Hasql.Encoders as B +import qualified Hasql.Decoders as C +import qualified Hasql.Transaction.Private.SQL as D + + +-- * Transactions +------------------------- + +beginTransaction :: IsolationLevel -> Mode -> A.Statement () () +beginTransaction isolation mode = + A.Statement (D.beginTransaction isolation mode) B.unit C.unit True + +commitTransaction :: A.Statement () () +commitTransaction = + A.Statement "COMMIT" B.unit C.unit True + +abortTransaction :: A.Statement () () +abortTransaction = + A.Statement "ABORT" B.unit C.unit True + + +-- * Streaming +------------------------- + +declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a () +declareCursor name sql encoder = + A.Statement (D.declareCursor name sql) encoder C.unit False + +closeCursor :: A.Statement ByteString () +closeCursor = + A.Statement "CLOSE $1" (B.param B.bytea) C.unit True + +fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Statement (Int64, ByteString) b +fetchFromCursor step init rowDec = + A.Statement sql encoder decoder True + where + sql = + "FETCH FORWARD $1 FROM $2" + encoder = + contrazip2 + (B.param B.int8) + (B.param B.bytea) + decoder = + C.foldlRows step init rowDec diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index b535cbb0d4..843e4e17af 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -3,9 +3,9 @@ where import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Model -import qualified Hasql.Query as A +import qualified Hasql.Statement as A import qualified Hasql.Session as B -import qualified Hasql.Transaction.Private.Queries as C +import qualified Hasql.Transaction.Private.Statements as C import qualified Hasql.Transaction.Private.Sessions as D @@ -37,10 +37,10 @@ sql = -- | -- Parameters and a specification of the parametric query to apply them to. -{-# INLINE query #-} -query :: a -> A.Query a b -> Transaction b -query params query = - Transaction . lift $ B.query params query +{-# INLINE statement #-} +statement :: a -> A.Statement a b -> Transaction b +statement params statement = + Transaction . lift $ B.statement params statement -- | -- Cause transaction to eventually roll back. From 24b16c65a880fa4c1501f16d2449f18b23f910a4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 24 May 2018 14:53:02 +0800 Subject: [PATCH 0455/1204] Restrict the Hasql version bounds --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index d9ddd6433e..2ccefff007 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4.3 + 0.4.3.1 category: Hasql, Database, PostgreSQL synopsis: @@ -49,7 +49,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.19 && < 0.20 || >= 1 && < 2, + hasql >= 0.19 && < 0.20 || >= 1 && < 1.2, -- data: time >= 1.5 && < 2, -- general: From 5b5b50b048cee0ba1a5123feba12805a16db58d4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 24 May 2018 14:55:04 +0800 Subject: [PATCH 0456/1204] Update to newer Hasql --- hasql-pool.cabal | 4 ++-- library/Hasql/Pool.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 2ccefff007..aa740138b0 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.4.3.1 + 0.5 category: Hasql, Database, PostgreSQL synopsis: @@ -49,7 +49,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 0.19 && < 0.20 || >= 1 && < 1.2, + hasql >= 1.3 && < 1.4, -- data: time >= 1.5 && < 2, -- general: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 4488234514..cfff7dd734 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -58,8 +58,8 @@ release (Pool pool) = -- | -- A union over the connection establishment error and the session error. data UsageError = - ConnectionError !Hasql.Connection.ConnectionError | - SessionError !Hasql.Session.Error + ConnectionError Hasql.Connection.ConnectionError | + SessionError Hasql.Session.QueryError deriving (Show, Eq) -- | From e50dd830d574e901d12c2da2720ca9455c789b5a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 25 May 2018 19:36:02 +0800 Subject: [PATCH 0457/1204] Restore the correct docs --- library/Hasql/Decoders.hs | 90 +++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index c58bd0a7e9..b9287bb451 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -82,7 +82,7 @@ newtype Result a = deriving (Functor) -- | --- Decode no column from the result. +-- Decode no value from the result. -- -- Useful for statements like @INSERT@ or @CREATE@. -- @@ -204,7 +204,7 @@ instance Default (Row a) => Default (Result (Identity a)) where -- | -- Decoder of an individual row, --- which gets composed of column column decoders. +-- which gets composed of column value decoders. -- -- E.g.: -- @@ -217,7 +217,7 @@ newtype Row a = deriving (Functor, Applicative, Monad) -- | --- Lift an individual non-nullable column decoder to a composable row decoder. +-- Lift an individual non-nullable value decoder to a composable row decoder. -- {-# INLINABLE column #-} column :: Value a -> Row a @@ -225,7 +225,7 @@ column (Value imp) = Row (Row.nonNullValue imp) -- | --- Lift an individual nullable column decoder to a composable row decoder. +-- Lift an individual nullable value decoder to a composable row decoder. -- {-# INLINABLE nullableColumn #-} nullableColumn :: Value a -> Row (Maybe a) @@ -256,18 +256,18 @@ instance (Default (Value a1), Default (Value a2)) => Default (Row (a1, a2)) wher ------------------------- -- | --- Decoder of an individual column. +-- Decoder of an individual value. -- newtype Value a = Value (Value.Value a) deriving (Functor) --- ** Plain column decoders +-- ** Plain value decoders ------------------------- -- | --- Decoder of the @BOOL@ columns. +-- Decoder of the @BOOL@ values. -- {-# INLINABLE bool #-} bool :: Value Bool @@ -275,7 +275,7 @@ bool = Value (Value.decoder (const A.bool)) -- | --- Decoder of the @INT2@ columns. +-- Decoder of the @INT2@ values. -- {-# INLINABLE int2 #-} int2 :: Value Int16 @@ -283,7 +283,7 @@ int2 = Value (Value.decoder (const A.int)) -- | --- Decoder of the @INT4@ columns. +-- Decoder of the @INT4@ values. -- {-# INLINABLE int4 #-} int4 :: Value Int32 @@ -291,7 +291,7 @@ int4 = Value (Value.decoder (const A.int)) -- | --- Decoder of the @INT8@ columns. +-- Decoder of the @INT8@ values. -- {-# INLINABLE int8 #-} int8 :: Value Int64 @@ -300,7 +300,7 @@ int8 = Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) -- | --- Decoder of the @FLOAT4@ columns. +-- Decoder of the @FLOAT4@ values. -- {-# INLINABLE float4 #-} float4 :: Value Float @@ -308,7 +308,7 @@ float4 = Value (Value.decoder (const A.float4)) -- | --- Decoder of the @FLOAT8@ columns. +-- Decoder of the @FLOAT8@ values. -- {-# INLINABLE float8 #-} float8 :: Value Double @@ -316,7 +316,7 @@ float8 = Value (Value.decoder (const A.float8)) -- | --- Decoder of the @NUMERIC@ columns. +-- Decoder of the @NUMERIC@ values. -- {-# INLINABLE numeric #-} numeric :: Value B.Scientific @@ -324,15 +324,15 @@ numeric = Value (Value.decoder (const A.numeric)) -- | --- Decoder of the @CHAR@ columns. --- Note that it supports UTF-8 columns. +-- Decoder of the @CHAR@ values. +-- Note that it supports UTF-8 values. {-# INLINABLE char #-} char :: Value Char char = Value (Value.decoder (const A.char)) -- | --- Decoder of the @TEXT@ columns. +-- Decoder of the @TEXT@ values. -- {-# INLINABLE text #-} text :: Value Text @@ -340,7 +340,7 @@ text = Value (Value.decoder (const A.text_strict)) -- | --- Decoder of the @BYTEA@ columns. +-- Decoder of the @BYTEA@ values. -- {-# INLINABLE bytea #-} bytea :: Value ByteString @@ -348,7 +348,7 @@ bytea = Value (Value.decoder (const A.bytea_strict)) -- | --- Decoder of the @DATE@ columns. +-- Decoder of the @DATE@ values. -- {-# INLINABLE date #-} date :: Value B.Day @@ -356,7 +356,7 @@ date = Value (Value.decoder (const A.date)) -- | --- Decoder of the @TIMESTAMP@ columns. +-- Decoder of the @TIMESTAMP@ values. -- {-# INLINABLE timestamp #-} timestamp :: Value B.LocalTime @@ -364,22 +364,22 @@ timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) -- | --- Decoder of the @TIMESTAMPTZ@ columns. +-- Decoder of the @TIMESTAMPTZ@ values. -- -- /NOTICE/ -- -- Postgres does not store the timezone information of @TIMESTAMPTZ@. --- Instead it stores a UTC column and performs silent conversions +-- Instead it stores a UTC value and performs silent conversions -- to the currently set timezone, when dealt with in the text format. -- However this library bypasses the silent conversions --- and communicates with Postgres using the UTC columns directly. +-- and communicates with Postgres using the UTC values directly. {-# INLINABLE timestamptz #-} timestamptz :: Value B.UTCTime timestamptz = Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | --- Decoder of the @TIME@ columns. +-- Decoder of the @TIME@ values. -- {-# INLINABLE time #-} time :: Value B.TimeOfDay @@ -387,20 +387,20 @@ time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -- | --- Decoder of the @TIMETZ@ columns. +-- Decoder of the @TIMETZ@ values. -- -- Unlike in case of @TIMESTAMPTZ@, -- Postgres does store the timezone information for @TIMETZ@. -- However the Haskell's \"time\" library does not contain any composite type, -- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' --- to represent a column on the Haskell's side. +-- to represent a value on the Haskell's side. {-# INLINABLE timetz #-} timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) -- | --- Decoder of the @INTERVAL@ columns. +-- Decoder of the @INTERVAL@ values. -- {-# INLINABLE interval #-} interval :: Value B.DiffTime @@ -408,7 +408,7 @@ interval = Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) -- | --- Decoder of the @UUID@ columns. +-- Decoder of the @UUID@ values. -- {-# INLINABLE uuid #-} uuid :: Value B.UUID @@ -416,7 +416,7 @@ uuid = Value (Value.decoder (const A.uuid)) -- | --- Decoder of the @INET@ columns. +-- Decoder of the @INET@ values. -- {-# INLINABLE inet #-} inet :: Value (B.NetAddr B.IP) @@ -424,7 +424,7 @@ inet = Value (Value.decoder (const A.inet)) -- | --- Decoder of the @JSON@ columns into a JSON AST. +-- Decoder of the @JSON@ values into a JSON AST. -- {-# INLINABLE json #-} json :: Value B.Value @@ -432,7 +432,7 @@ json = Value (Value.decoder (const A.json_ast)) -- | --- Decoder of the @JSON@ columns into a raw JSON 'ByteString'. +-- Decoder of the @JSON@ values into a raw JSON 'ByteString'. -- {-# INLINABLE jsonBytes #-} jsonBytes :: (ByteString -> Either Text a) -> Value a @@ -440,7 +440,7 @@ jsonBytes fn = Value (Value.decoder (const (A.json_bytes fn))) -- | --- Decoder of the @JSONB@ columns into a JSON AST. +-- Decoder of the @JSONB@ values into a JSON AST. -- {-# INLINABLE jsonb #-} jsonb :: Value B.Value @@ -448,7 +448,7 @@ jsonb = Value (Value.decoder (const A.jsonb_ast)) -- | --- Decoder of the @JSONB@ columns into a raw JSON 'ByteString'. +-- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. -- {-# INLINABLE jsonbBytes #-} jsonbBytes :: (ByteString -> Either Text a) -> Value a @@ -456,7 +456,7 @@ jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) -- | --- Lifts a custom column decoder function to a 'Value' decoder. +-- Lifts a custom value decoder function to a 'Value' decoder. -- {-# INLINABLE custom #-} custom :: (Bool -> ByteString -> Either Text a) -> Value a @@ -464,7 +464,7 @@ custom fn = Value (Value.decoderFn fn) --- ** Composite column decoders +-- ** Composite value decoders ------------------------- -- | @@ -484,9 +484,9 @@ composite (Composite imp) = Value (Value.decoder (Composite.run imp)) -- | --- A generic decoder of @HSTORE@ columns. +-- A generic decoder of @HSTORE@ values. -- --- Here's how you can use it to construct a specific column: +-- Here's how you can use it to construct a specific value: -- -- @ -- x :: Value [(Text, Maybe Text)] @@ -500,8 +500,8 @@ hstore replicateM = Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) -- | --- Given a partial mapping from text to column, --- produces a decoder of that column. +-- Given a partial mapping from text to value, +-- produces a decoder of that value. enum :: (Text -> Maybe a) -> Value a enum mapping = Value (Value.decoder (const (A.enum mapping))) @@ -643,7 +643,7 @@ instance Default (Value B.Value) where -- | -- A generic array decoder. -- --- Here's how you can use it to produce a specific array column decoder: +-- Here's how you can use it to produce a specific array value decoder: -- -- @ -- x :: Value [[Text]] @@ -663,7 +663,7 @@ newtype Array a = -- -- * An implementation of the @replicateM@ function -- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), --- which determines the output column. +-- which determines the output value. -- -- * A decoder of its components, which can be either another 'dimension', -- 'element' or 'nullableElement'. @@ -674,14 +674,14 @@ dimension replicateM (Array imp) = Array (Array.dimension replicateM imp) -- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf columns. +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf values. {-# INLINABLE element #-} element :: Value a -> Array a element (Value imp) = Array (Array.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf columns. +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf values. {-# INLINABLE nullableElement #-} nullableElement :: Value a -> Array (Maybe a) nullableElement (Value imp) = @@ -692,20 +692,20 @@ nullableElement (Value imp) = ------------------------- -- | --- Composable decoder of composite columns (rows, records). +-- Composable decoder of composite values (rows, records). newtype Composite a = Composite (Composite.Composite a) deriving (Functor, Applicative, Monad) -- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf columns. +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. {-# INLINABLE field #-} field :: Value a -> Composite a field (Value imp) = Composite (Composite.nonNullValue (Value.run imp)) -- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf columns. +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf values. {-# INLINABLE nullableField #-} nullableField :: Value a -> Composite (Maybe a) nullableField (Value imp) = From f7827865f4bf166bd6f3b0ee865c604837bf3edb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 25 May 2018 19:36:35 +0800 Subject: [PATCH 0458/1204] Set the version to 1.3.0.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 18c7a283c6..3df8ddef4b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3 + 1.3.0.1 category: Hasql, Database, PostgreSQL synopsis: From 9b7d9b32c8302fecd81c65d312bb0ba24817d6a1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Jun 2018 15:49:39 +0800 Subject: [PATCH 0459/1204] Update the Travis setup --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d811d2a47d..d77a07eb7c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ env: - - ghc=7.10.1 cabal=1.22 lower_bound_dependencies=1 - - ghc=8.0.2 cabal=1.24 - - ghc=8.2.1 cabal=1.24 benchmarks=1 tests=1 + - ghc=7.10.1 cabal=1.24 lower_bound_dependencies=1 + - ghc=8.0.3 cabal=1.24 + - ghc=8.2.3 cabal=2.2 + - ghc=8.4.3 cabal=2.2 benchmarks=1 tests=1 install: # Set up the Shell to treat the semicolon as && From 615f887526a9edc0f5d9b97b6a87cc032c0b1735 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Jun 2018 16:19:29 +0800 Subject: [PATCH 0460/1204] Set the version to 1.3.0.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 3df8ddef4b..0fce2e9f63 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3.0.1 + 1.3.0.2 category: Hasql, Database, PostgreSQL synopsis: From 9218bb5394f942b92e28f1c72d25cfbd70368384 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Jun 2018 16:19:50 +0800 Subject: [PATCH 0461/1204] Reimplement Semigroup thru derivation --- library/Hasql/Private/Commands.hs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/library/Hasql/Private/Commands.hs b/library/Hasql/Private/Commands.hs index 602fbd4e42..9fd393a4e5 100644 --- a/library/Hasql/Private/Commands.hs +++ b/library/Hasql/Private/Commands.hs @@ -16,9 +16,7 @@ import qualified Data.ByteString.Lazy as BL newtype Commands = Commands (DList BB.Builder) - deriving (Monoid) - -instance Semigroup Commands + deriving (Semigroup, Monoid) asBytes :: Commands -> ByteString asBytes (Commands list) = From 0c190278602729e5ec451a4ba526b14ce4549b23 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 5 Jun 2018 16:31:46 +0800 Subject: [PATCH 0462/1204] Downgrade GHC in Travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d77a07eb7c..d7d27665df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ env: - ghc=7.10.1 cabal=1.24 lower_bound_dependencies=1 - - ghc=8.0.3 cabal=1.24 - - ghc=8.2.3 cabal=2.2 + - ghc=8.0.1 cabal=1.24 + - ghc=8.2.1 cabal=2.2 - ghc=8.4.3 cabal=2.2 benchmarks=1 tests=1 install: From 35c845eb32964feafbf6ba92af97693ae8a477ca Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Jun 2018 17:23:18 +0800 Subject: [PATCH 0463/1204] Add explicit Semigroup --- library/Hasql/Private/Encoders/Params.hs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index a59f65d74b..fcc61f8797 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -12,9 +12,7 @@ import qualified Text.Builder as E -- Encoder of some representation of a parameters product. newtype Params a = Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a) - deriving (Contravariant, Divisible, Decidable, Monoid) - -instance Semigroup (Params a) + deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid) value :: C.Value a -> Params a value = From 585464f7fa9f2425119da3217fc850bce2aee236 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Jun 2018 14:33:46 +0800 Subject: [PATCH 0464/1204] Update the "base" bounds --- .travis.yml | 3 +-- hasql.cabal | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index d7d27665df..f4f4abe720 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ env: - - ghc=7.10.1 cabal=1.24 lower_bound_dependencies=1 - - ghc=8.0.1 cabal=1.24 + - ghc=8.0.1 cabal=2.2 - ghc=8.2.1 cabal=2.2 - ghc=8.4.3 cabal=2.2 benchmarks=1 tests=1 diff --git a/hasql.cabal b/hasql.cabal index 0fce2e9f63..79092b3bd4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -89,7 +89,6 @@ library bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: - semigroups >= 0.18 && < 0.20, data-default-class >= 0.0.1 && < 0.2, profunctors >= 5.1 && < 6, contravariant-extras == 0.3.*, @@ -101,7 +100,7 @@ library placeholders == 0.1.*, -- general: base-prelude >= 0.1.19 && < 2, - base >= 4.6 && < 5 + base >= 4.9 && < 5 test-suite tasty From f88a70553108568136603238b20aa1d7be427dcd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Jun 2018 15:23:16 +0800 Subject: [PATCH 0465/1204] Restrict the builder deps --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 79092b3bd4..4a0fdf9a57 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -79,13 +79,13 @@ library postgresql-binary >= 0.12.1 && < 0.13, postgresql-libpq == 0.9.*, -- builders: - bytestring-strict-builder >= 0.4 && < 0.5, + bytestring-strict-builder >= 0.4.5.1 && < 0.5, -- data: dlist >= 0.7 && < 0.9, vector >= 0.10 && < 0.13, hashtables >= 1.1 && < 2, text >= 1 && < 2, - text-builder >= 0.5.1 && < 0.6, + text-builder >= 0.5.1.1 && < 0.6, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: From b2e1f5c51977d424a336b219c96b20ecd20352a2 Mon Sep 17 00:00:00 2001 From: Christopher Davenport Date: Fri, 15 Jun 2018 12:47:47 -0400 Subject: [PATCH 0466/1204] Change Trivial to hopefully easier Attempting to make the description a bit more welcoming to those finding it difficult, hopefully not stepping on any toes. Thank you for your time. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47b0f618b7..d2c1e9885f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib ### Benefits of being an ecosystem -* **Simplicity.** Each library in isolation provides a simple API, which is trivial to comprehend. +* **Simplicity.** Each library in isolation provides a simple API, which is hopefully easier to comprehend. * **Flexibility and composability.** The user picks and chooses the features, thus precisely matching the level of abstraction that he needs for his task. From f1d2015395caef5f72bc4f23dc72e58552966d14 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Jul 2018 17:54:06 +0300 Subject: [PATCH 0467/1204] Fix the docs --- library/Hasql/Statement.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 73bf74f649..8a0a70f23b 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -33,10 +33,10 @@ import qualified Hasql.Encoders as Encoders -- sql = -- "select ($1 + $2)" -- encoder = --- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') '<>' --- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.value' Hasql.Encoders.'Hasql.Encoders.int8') +-- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.param' Hasql.Encoders.'Hasql.Encoders.int8') '<>' +-- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.param' Hasql.Encoders.'Hasql.Encoders.int8') -- decoder = --- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.value' Hasql.Decoders.'Hasql.Decoders.int8') +-- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.column' Hasql.Decoders.'Hasql.Decoders.int8') -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' From 743c2c5c3ded134bb5fba7b838c66cc0a871058b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 23 Jul 2018 17:54:23 +0300 Subject: [PATCH 0468/1204] Set the version to 1.3.0.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 4a0fdf9a57..8ff28105cd 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3.0.2 + 1.3.0.3 category: Hasql, Database, PostgreSQL synopsis: From 9b193cddc0a74c978f72e155e7d74ec372525345 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 1 Sep 2018 12:48:54 +0300 Subject: [PATCH 0469/1204] Update the "text-builder dep" --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8ff28105cd..a85ace7b20 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -85,7 +85,7 @@ library vector >= 0.10 && < 0.13, hashtables >= 1.1 && < 2, text >= 1 && < 2, - text-builder >= 0.5.1.1 && < 0.6, + text-builder >= 0.6.1.2 && < 0.7, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: From 82885b31c1b9d1be2c5542ac8591575048c16588 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 1 Sep 2018 12:49:05 +0300 Subject: [PATCH 0470/1204] Set the version to 1.3.0.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index a85ace7b20..ec835c34ec 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3.0.3 + 1.3.0.4 category: Hasql, Database, PostgreSQL synopsis: From ac1f2b571967f9c3012f37b031f2915f331184b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Domen=20Ko=C5=BEar?= Date: Sun, 2 Sep 2018 16:08:52 +0100 Subject: [PATCH 0471/1204] Add tested README getting started example --- README.lhs | 1 + README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ hasql.cabal | 9 ++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 120000 README.lhs diff --git a/README.lhs b/README.lhs new file mode 120000 index 0000000000..42061c01a1 --- /dev/null +++ b/README.lhs @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/README.md b/README.md index d2c1e9885f..fc79b0dfbf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,51 @@ # What Hasql is + +[![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) +[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) + Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-powered applications, providing them with higher-level APIs. +## Getting started + +```haskell +{-# LANGUAGE OverloadedStrings #-} +import Data.Text (Text) +import Data.Functor.Contravariant (contramap) +import Hasql.Connection (acquire) +import Hasql.Session (run, statement) +import Hasql.Statement (Statement(..)) +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE + +data User = User + { uId :: Integer + , uName :: Text + } deriving (Show) + +getUser :: Statement Integer User +getUser = Statement sql encoder (HD.singleRow decoder) True + where + sql = "SELECT id, name FROM users" + + encoder = + contramap fromIntegral (HE.param HE.int8) + + decoder = User + <$> fmap fromIntegral (HD.column HD.int8) + <*> HD.column HD.text + +go :: IO () +go = do + Right conn <- acquire "postgresql:///mydb" + result <- Hasql.Session.run (statement 42 getUser) conn + print result + + +main = return () +``` + + ## Ecosystem Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. diff --git a/hasql.cabal b/hasql.cabal index ec835c34ec..fb55533243 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -85,7 +85,7 @@ library vector >= 0.10 && < 0.13, hashtables >= 1.1 && < 2, text >= 1 && < 2, - text-builder >= 0.6.1.2 && < 0.7, + text-builder >= 0.5.1.1 && < 0.7, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: @@ -203,3 +203,10 @@ test-suite profiling hasql, bug == 1.*, rerebase == 1.* + +test-suite readme + type: exitcode-stdio-1.0 + main-is: README.lhs + build-depends: base, hasql, text, contravariant + ghc-options: -pgmL markdown-unlit + build-tool-depends: markdown-unlit:markdown-unlit From c68c10332da98e3ec28903e9e59b194a3ef0c0b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Domen=20Ko=C5=BEar?= Date: Mon, 3 Sep 2018 11:28:02 +0100 Subject: [PATCH 0472/1204] hasql.cabal: also build-depend on markdown-unlit --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index fb55533243..53255ae324 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -207,6 +207,6 @@ test-suite profiling test-suite readme type: exitcode-stdio-1.0 main-is: README.lhs - build-depends: base, hasql, text, contravariant + build-depends: base, hasql, text, contravariant, markdown-unlit ghc-options: -pgmL markdown-unlit build-tool-depends: markdown-unlit:markdown-unlit From c1cfb3c68e1a4233ae4bfaace8c2dd577a3a3cc2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 15 Sep 2018 18:31:38 +0300 Subject: [PATCH 0473/1204] Revert some changes and change the example --- README.lhs | 1 - README.md | 115 +++++++++++++++++++++++++++++++++------------------- hasql.cabal | 9 +--- 3 files changed, 74 insertions(+), 51 deletions(-) delete mode 120000 README.lhs diff --git a/README.lhs b/README.lhs deleted file mode 120000 index 42061c01a1..0000000000 --- a/README.lhs +++ /dev/null @@ -1 +0,0 @@ -README.md \ No newline at end of file diff --git a/README.md b/README.md index fc79b0dfbf..cee59ae042 100644 --- a/README.md +++ b/README.md @@ -6,45 +6,6 @@ Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-powered applications, providing them with higher-level APIs. -## Getting started - -```haskell -{-# LANGUAGE OverloadedStrings #-} -import Data.Text (Text) -import Data.Functor.Contravariant (contramap) -import Hasql.Connection (acquire) -import Hasql.Session (run, statement) -import Hasql.Statement (Statement(..)) -import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE - -data User = User - { uId :: Integer - , uName :: Text - } deriving (Show) - -getUser :: Statement Integer User -getUser = Statement sql encoder (HD.singleRow decoder) True - where - sql = "SELECT id, name FROM users" - - encoder = - contramap fromIntegral (HE.param HE.int8) - - decoder = User - <$> fmap fromIntegral (HD.column HD.int8) - <*> HD.column HD.text - -go :: IO () -go = do - Right conn <- acquire "postgresql:///mydb" - result <- Hasql.Session.run (statement 42 getUser) conn - print result - - -main = return () -``` - ## Ecosystem @@ -78,8 +39,78 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical one, where some core-team is responsible for everything. One is scalable, the other is not. ---- -# NOTICE +# Example -With the recent releases and more to come still, the Hasql ecosystem has undergone a major revision. It is now expected that the users will need a thorough introduction. Hence this notice is to inform you that the documentation with tutorials targeted at both the newcomers and the users who need to migrate from the older versions of the ecosystem are coming soon. +Following is a complete application, which performs some arithmetic in Postgres using Hasql. + +```haskell +{-# LANGUAGE OverloadedStrings #-} +import Prelude +import Data.Int +import Data.Functor.Contravariant +import Hasql.Session (Session) +import Hasql.Statement (Statement(..)) +import qualified Hasql.Session as Session +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Connection as Connection + + +main :: IO () +main = do + Right connection <- Connection.acquire connectionSettings + result <- Session.run (sumAndDivModSession 3 8 3) connection + print result + where + connectionSettings = Connection.settings "localhost" 5432 "postgres" "" "postgres" + + +-- * Sessions +-- +-- Session is an abstraction over the database connection and all possible errors. +-- It is used to execute statements. +-- It is composable and has a Monad instance. +-- +-- It's recommended to define sessions in a dedicated 'Sessions' +-- submodule of your project. +------------------------- + +sumAndDivModSession :: Int64 -> Int64 -> Int64 -> Session (Int64, Int64) +sumAndDivModSession a b c = do + -- Get the sum of a and b + sumOfAAndB <- Session.statement (a, b) sumStatement + -- Divide the sum by c and get the modulo as well + Session.statement (sumOfAAndB, c) divModStatement + + +-- * Statements +-- +-- Statement is a definition of an individual SQL-statement, +-- accompanied by a specification of how to encode its parameters and +-- decode its result. +-- +-- It's recommended to define statements in a dedicated 'Statements' +-- submodule of your project. +------------------------- + +sumStatement :: Statement (Int64, Int64) Int64 +sumStatement = Statement sql encoder decoder True where + sql = "select $1 + $2" + encoder = + (fst >$< Encoders.param Encoders.int8) <> + (snd >$< Encoders.param Encoders.int8) + decoder = Decoders.singleRow (Decoders.column Decoders.int8) + +divModStatement :: Statement (Int64, Int64) (Int64, Int64) +divModStatement = Statement sql encoder decoder True where + sql = "select $1 / $2, $1 % $2" + encoder = + (fst >$< Encoders.param Encoders.int8) <> + (snd >$< Encoders.param Encoders.int8) + decoder = Decoders.singleRow row where + row = + (,) <$> + Decoders.column Decoders.int8 <*> + Decoders.column Decoders.int8 +``` diff --git a/hasql.cabal b/hasql.cabal index 53255ae324..ec835c34ec 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -85,7 +85,7 @@ library vector >= 0.10 && < 0.13, hashtables >= 1.1 && < 2, text >= 1 && < 2, - text-builder >= 0.5.1.1 && < 0.7, + text-builder >= 0.6.1.2 && < 0.7, bytestring >= 0.10 && < 0.11, hashable >= 1.2 && < 1.3, -- control: @@ -203,10 +203,3 @@ test-suite profiling hasql, bug == 1.*, rerebase == 1.* - -test-suite readme - type: exitcode-stdio-1.0 - main-is: README.lhs - build-depends: base, hasql, text, contravariant, markdown-unlit - ghc-options: -pgmL markdown-unlit - build-tool-depends: markdown-unlit:markdown-unlit From 5bfef630dd539eab0798e650490ac7ec28518318 Mon Sep 17 00:00:00 2001 From: Sjur Millidahl Date: Fri, 11 Jan 2019 13:58:07 +0100 Subject: [PATCH 0474/1204] Avoid connection-pool-poisoning by leaning on the exception handling inside Data.Pool.withResource --- hasql-pool.cabal | 4 +++- library/Hasql/Pool.hs | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index aa740138b0..745ab0698a 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -53,4 +53,6 @@ library -- data: time >= 1.5 && < 2, -- general: - base-prelude >= 1 && < 2 + base-prelude >= 1 && < 2, + -- exceptions (from base): + base >= 4.0 && < 5 \ No newline at end of file diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index cfff7dd734..89f3dcc29c 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -9,6 +9,7 @@ module Hasql.Pool ) where +import Control.Exception (Exception, throwIO, catch) import Hasql.Pool.Prelude import qualified Hasql.Connection import qualified Hasql.Session @@ -62,12 +63,23 @@ data UsageError = SessionError Hasql.Session.QueryError deriving (Show, Eq) +-- | +-- An exception to be thrown inside `Data.Pool.withResource` +-- Its single responsibility is to make sure the resource +-- is not returned to the pool in the case of a ConnectionError +newtype PoolResourceException = PoolResourceException + { conErr :: Hasql.Connection.ConnectionError + } deriving (Show) + +instance Exception PoolResourceException + -- | -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) use (Pool pool) session = - fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ - Data.Pool.withResource pool $ - traverse $ - Hasql.Session.run session + (fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ + Data.Pool.withResource pool $ + const . traverse (Hasql.Session.run session) >>= + either (throwIO . PoolResourceException)) `catch` + (\(ex :: PoolResourceException) -> pure (Left (ConnectionError (conErr ex)))) From a5d6b2e3adfbf57a45550c53fd89fd95bb58b677 Mon Sep 17 00:00:00 2001 From: Sjur Millidahl Date: Sun, 13 Jan 2019 14:56:08 +0100 Subject: [PATCH 0475/1204] Add a test for connection pool exception throw and handling --- hasql-pool.cabal | 34 +++++++++++++++++++++++++--- library/Hasql/Pool.hs | 3 +-- test/Hasql/PoolSpec.hs | 50 ++++++++++++++++++++++++++++++++++++++++++ test/Hasql/Prelude.hs | 10 +++++++++ test/Main.hs | 12 ++++++++++ 5 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 test/Hasql/PoolSpec.hs create mode 100644 test/Hasql/Prelude.hs create mode 100644 test/Main.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 745ab0698a..1b35749212 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -53,6 +53,34 @@ library -- data: time >= 1.5 && < 2, -- general: - base-prelude >= 1 && < 2, - -- exceptions (from base): - base >= 4.0 && < 5 \ No newline at end of file + base-prelude >= 1 && < 2 + + +test-suite test + type: + exitcode-stdio-1.0 + hs-source-dirs: + test + main-is: + Main.hs + other-modules: + Hasql.PoolSpec + Hasql.Prelude + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 + build-depends: + hasql-pool, + -- hasql-pool internals: + resource-pool >= 0.2 && < 0.3, + -- database: + hasql >= 1.3 && < 1.4, + -- data: + -- text >= 1.2 && < 1.3, + -- testing: + hspec >= 2.6 && < 2.7, + tasty-hspec >= 1.1 && < 1.2, + tasty >= 1.2 && < 1.3, + -- general: + base-prelude >= 1 && < 2 \ No newline at end of file diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 89f3dcc29c..ff690b8272 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,6 +1,6 @@ module Hasql.Pool ( - Pool, + Pool(..), Settings(..), acquire, release, @@ -9,7 +9,6 @@ module Hasql.Pool ) where -import Control.Exception (Exception, throwIO, catch) import Hasql.Pool.Prelude import qualified Hasql.Connection import qualified Hasql.Session diff --git a/test/Hasql/PoolSpec.hs b/test/Hasql/PoolSpec.hs new file mode 100644 index 0000000000..b40539497c --- /dev/null +++ b/test/Hasql/PoolSpec.hs @@ -0,0 +1,50 @@ +module Hasql.PoolSpec + ( spec + ) where + +import Test.Hspec + +import qualified Data.Pool +import qualified Hasql.Connection +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import Hasql.Pool +import Hasql.Prelude +import Hasql.Session +import Hasql.Statement + +testPool :: IORef ResourceEvent -> IO Pool +testPool ioRef = + Pool <$> + Data.Pool.createPool + onCreateResource + onDestroyResource + stripes + seconds + poolSize + where + onCreateResource = + Hasql.Connection.acquire -- make an actual connection attempt resulting in a `Left ConnectionError` + "host=unresolvable-address port=5432 dbname=mydb connect_timeout=1" + onDestroyResource = const (atomicWriteIORef ioRef Destroyed) + stripes = 1 + seconds = 2 + poolSize = 1 + +data ResourceEvent + = Created + | Destroyed + deriving (Show, Eq) + +spec :: Spec +spec = + describe "Hasql.Pool.use" $ do + it + "releases a connection back into the pool when resource in pool is a Left" $ do + ioRef <- (newIORef Created :: IO (IORef ResourceEvent)) -- a resource in the pool to observe on + p <- testPool ioRef -- put it in a Hasql.Pool.Pool + _ <- use p testSession -- trigger use + readIORef ioRef `shouldReturn` Destroyed -- expectation + where + testStatement = Statement "" Encoders.unit Decoders.unit True + testSession = statement () testStatement diff --git a/test/Hasql/Prelude.hs b/test/Hasql/Prelude.hs new file mode 100644 index 0000000000..e1a846e24d --- /dev/null +++ b/test/Hasql/Prelude.hs @@ -0,0 +1,10 @@ +module Hasql.Prelude +( + module Exports, +) +where + + +-- base-prelude +------------------------- +import BasePrelude as Exports diff --git a/test/Main.hs b/test/Main.hs new file mode 100644 index 0000000000..3f30c585da --- /dev/null +++ b/test/Main.hs @@ -0,0 +1,12 @@ +module Main where + +import Test.Tasty +import Test.Tasty.Hspec + +import Hasql.Prelude +import qualified Hasql.PoolSpec + +main = tests >>= defaultMain + +tests :: IO TestTree +tests = testSpec "Hasql.Pool" Hasql.PoolSpec.spec \ No newline at end of file From 70559c094e62b4cd9920133e553cc368d1e2f162 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 15 Jan 2019 08:55:38 +0300 Subject: [PATCH 0476/1204] Reimplement --- hasql-pool.cabal | 19 +++--------- library/Hasql/Pool.hs | 30 ++++++------------ library/Hasql/Pool/ResourcePool.hs | 21 +++++++++++++ test/Hasql/PoolSpec.hs | 50 ------------------------------ test/Hasql/Prelude.hs | 10 ------ test/Main.hs | 33 +++++++++++++++----- 6 files changed, 60 insertions(+), 103 deletions(-) create mode 100644 library/Hasql/Pool/ResourcePool.hs delete mode 100644 test/Hasql/PoolSpec.hs delete mode 100644 test/Hasql/Prelude.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 1b35749212..188615915b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -43,6 +43,7 @@ library Haskell2010 other-modules: Hasql.Pool.Prelude + Hasql.Pool.ResourcePool exposed-modules: Hasql.Pool build-depends: @@ -63,24 +64,12 @@ test-suite test test main-is: Main.hs - other-modules: - Hasql.PoolSpec - Hasql.Prelude default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 build-depends: + base-prelude, + hasql, hasql-pool, - -- hasql-pool internals: - resource-pool >= 0.2 && < 0.3, - -- database: - hasql >= 1.3 && < 1.4, - -- data: - -- text >= 1.2 && < 1.3, - -- testing: - hspec >= 2.6 && < 2.7, - tasty-hspec >= 1.1 && < 1.2, - tasty >= 1.2 && < 1.3, - -- general: - base-prelude >= 1 && < 2 \ No newline at end of file + hspec >= 2.6 && < 3 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index ff690b8272..124bc5ceab 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,6 +1,6 @@ module Hasql.Pool ( - Pool(..), + Pool, Settings(..), acquire, release, @@ -12,13 +12,14 @@ where import Hasql.Pool.Prelude import qualified Hasql.Connection import qualified Hasql.Session -import qualified Data.Pool +import qualified Data.Pool as ResourcePool +import qualified Hasql.Pool.ResourcePool as ResourcePool -- | -- A pool of connections to DB. newtype Pool = - Pool (Data.Pool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) + Pool (ResourcePool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) -- | -- Settings of the connection pool. Consist of: @@ -40,7 +41,7 @@ type Settings = acquire :: Settings -> IO Pool acquire (size, timeout, connectionSettings) = fmap Pool $ - Data.Pool.createPool acquire release stripes timeout size + ResourcePool.createPool acquire release stripes timeout size where acquire = Hasql.Connection.acquire connectionSettings @@ -53,7 +54,7 @@ acquire (size, timeout, connectionSettings) = -- Release the connection-pool. release :: Pool -> IO () release (Pool pool) = - Data.Pool.destroyAllResources pool + ResourcePool.destroyAllResources pool -- | -- A union over the connection establishment error and the session error. @@ -62,23 +63,12 @@ data UsageError = SessionError Hasql.Session.QueryError deriving (Show, Eq) --- | --- An exception to be thrown inside `Data.Pool.withResource` --- Its single responsibility is to make sure the resource --- is not returned to the pool in the case of a ConnectionError -newtype PoolResourceException = PoolResourceException - { conErr :: Hasql.Connection.ConnectionError - } deriving (Show) - -instance Exception PoolResourceException - -- | -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) use (Pool pool) session = - (fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ - Data.Pool.withResource pool $ - const . traverse (Hasql.Session.run session) >>= - either (throwIO . PoolResourceException)) `catch` - (\(ex :: PoolResourceException) -> pure (Left (ConnectionError (conErr ex)))) + fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ + ResourcePool.withResourceOnEither pool $ + traverse $ + Hasql.Session.run session diff --git a/library/Hasql/Pool/ResourcePool.hs b/library/Hasql/Pool/ResourcePool.hs new file mode 100644 index 0000000000..7895477171 --- /dev/null +++ b/library/Hasql/Pool/ResourcePool.hs @@ -0,0 +1,21 @@ +{-| +Extras for the resource-pool library. +-} +module Hasql.Pool.ResourcePool +where + +import Hasql.Pool.Prelude +import Data.Pool + + +withResourceOnEither :: Pool resource -> (resource -> IO (Either failure success)) -> IO (Either failure success) +withResourceOnEither pool act = mask_ $ do + (resource, localPool) <- takeResource pool + failureOrSuccess <- act resource + case failureOrSuccess of + Right success -> do + putResource localPool resource + return (Right success) + Left failure -> do + destroyResource pool localPool resource + return (Left failure) diff --git a/test/Hasql/PoolSpec.hs b/test/Hasql/PoolSpec.hs deleted file mode 100644 index b40539497c..0000000000 --- a/test/Hasql/PoolSpec.hs +++ /dev/null @@ -1,50 +0,0 @@ -module Hasql.PoolSpec - ( spec - ) where - -import Test.Hspec - -import qualified Data.Pool -import qualified Hasql.Connection -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders as Encoders -import Hasql.Pool -import Hasql.Prelude -import Hasql.Session -import Hasql.Statement - -testPool :: IORef ResourceEvent -> IO Pool -testPool ioRef = - Pool <$> - Data.Pool.createPool - onCreateResource - onDestroyResource - stripes - seconds - poolSize - where - onCreateResource = - Hasql.Connection.acquire -- make an actual connection attempt resulting in a `Left ConnectionError` - "host=unresolvable-address port=5432 dbname=mydb connect_timeout=1" - onDestroyResource = const (atomicWriteIORef ioRef Destroyed) - stripes = 1 - seconds = 2 - poolSize = 1 - -data ResourceEvent - = Created - | Destroyed - deriving (Show, Eq) - -spec :: Spec -spec = - describe "Hasql.Pool.use" $ do - it - "releases a connection back into the pool when resource in pool is a Left" $ do - ioRef <- (newIORef Created :: IO (IORef ResourceEvent)) -- a resource in the pool to observe on - p <- testPool ioRef -- put it in a Hasql.Pool.Pool - _ <- use p testSession -- trigger use - readIORef ioRef `shouldReturn` Destroyed -- expectation - where - testStatement = Statement "" Encoders.unit Decoders.unit True - testSession = statement () testStatement diff --git a/test/Hasql/Prelude.hs b/test/Hasql/Prelude.hs deleted file mode 100644 index e1a846e24d..0000000000 --- a/test/Hasql/Prelude.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Hasql.Prelude -( - module Exports, -) -where - - --- base-prelude -------------------------- -import BasePrelude as Exports diff --git a/test/Main.hs b/test/Main.hs index 3f30c585da..e3df5c26ef 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,12 +1,29 @@ module Main where -import Test.Tasty -import Test.Tasty.Hspec +import BasePrelude +import Test.Hspec +import Hasql.Pool +import qualified Hasql.Connection as Connection +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement -import Hasql.Prelude -import qualified Hasql.PoolSpec -main = tests >>= defaultMain - -tests :: IO TestTree -tests = testSpec "Hasql.Pool" Hasql.PoolSpec.spec \ No newline at end of file +main = hspec $ do + describe "Hasql.Pool.use" $ do + it "releases a spot in the pool when there is an error" $ do + pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") + let + statement = Statement.Statement "" Encoders.unit Decoders.unit True + session = Session.statement () statement + in do + use pool session `shouldNotReturn` (Right ()) + let + session = let + statement = let + decoder = Decoders.singleRow (Decoders.column Decoders.int8) + in Statement.Statement "SELECT 1" Encoders.unit decoder True + in Session.statement () statement + in do + use pool session `shouldReturn` (Right 1) From f9d418c022efe668caa92aebcb6376eaf3ad568d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 15 Jan 2019 09:52:22 +0300 Subject: [PATCH 0477/1204] Update Travis --- .travis.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 633cafc257..45b70244bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,15 @@ env: - - ghc=7.6.1 cabal=1.18 - - ghc=7.8.1 cabal=1.18 - - ghc=7.10.1 cabal=1.22 benchmarks=1 tests=1 - + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.2 + - ghc=8.6.1 benchmarks=1 tests=1 + install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e # Install GHC and Cabal - - ghc=${ghc=7.10.1}; - cabal=${cabal=1.22}; + cabal=${cabal=2.4}; travis_retry sudo add-apt-repository -y ppa:hvr/ghc; travis_retry sudo apt-get update; travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; @@ -49,5 +49,5 @@ script: if [ "$tests" = "1" ]; then cabal clean; - cabal test --show-details=always; + cabal test --show-details=always --test-options=--quickcheck-tests=100000; fi; From cf753c795be7fd3149dc3ed98cc75f493d375aac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 15 Jan 2019 09:52:50 +0300 Subject: [PATCH 0478/1204] Set the version to 0.5.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 188615915b..48cf9aeb51 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5 + 0.5.0.1 category: Hasql, Database, PostgreSQL synopsis: From 6bd2dab10f65c7e12d5afbbdb56d5efcf54475dd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 15 Jan 2019 10:18:17 +0300 Subject: [PATCH 0479/1204] Remove the test options from Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 45b70244bb..2982791b87 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,5 +49,5 @@ script: if [ "$tests" = "1" ]; then cabal clean; - cabal test --show-details=always --test-options=--quickcheck-tests=100000; + cabal test --show-details=always; fi; From a5f75a788a06bd296ce6c1ed70a4c4182d3ae7e5 Mon Sep 17 00:00:00 2001 From: Ian Duncan Date: Thu, 17 Jan 2019 10:57:02 +0900 Subject: [PATCH 0480/1204] Add convenience function for refining domain types --- library/Hasql/Decoders.hs | 9 +++++++++ library/Hasql/Private/Prelude.hs | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index b9287bb451..77844c8c50 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -47,6 +47,7 @@ module Hasql.Decoders hstore, enum, custom, + refine, -- * Array Array, dimension, @@ -463,6 +464,14 @@ custom :: (Bool -> ByteString -> Either Text a) -> Value a custom fn = Value (Value.decoderFn fn) +-- | +-- Maps a custom decoding over an existing 'Value' decoder. +-- +{-# INLINABLE refine #-} +refine :: (a -> Either Text b) -> Value a -> Value b +refine fn (Value v) = + Value (Value.Value (ask >>= \b -> lift (A.refine fn (Value.run v b)))) + -- ** Composite value decoders ------------------------- diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index b069065624..50cdd29ee3 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -26,7 +26,7 @@ import Control.Monad.Trans.Class as Exports import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT, throwE, catchE) import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) +import Control.Monad.Trans.Reader as Exports (Reader, ask, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) import Data.Functor.Compose as Exports From bd8df81bfa85749ff416e9b0886ddb95fc10191d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Jan 2019 08:58:32 +0300 Subject: [PATCH 0481/1204] Update the package description --- hasql.cabal | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index ec835c34ec..29b354e034 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -9,9 +9,7 @@ synopsis: description: This package is the root of the \"hasql\" ecosystem. . - The API is completely disinfected from exceptions. All error-reporting is explicit and is presented using the 'Either' type. - . - The version 1 is completely backward-compatible with 0.19. + The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. homepage: https://github.com/nikita-volkov/hasql bug-reports: From 3555318732594207c8428139c420d2b2645a9c70 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 13 Feb 2019 13:53:48 +0300 Subject: [PATCH 0482/1204] Update Travis --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index f4f4abe720..2e28f329ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,15 @@ env: - - ghc=8.0.1 cabal=2.2 - - ghc=8.2.1 cabal=2.2 - - ghc=8.4.3 cabal=2.2 benchmarks=1 tests=1 + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.3 + - ghc=8.6.3 benchmarks=1 tests=1 install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e # Install GHC and Cabal - + cabal=${cabal=2.4}; travis_retry sudo add-apt-repository -y ppa:hvr/ghc; travis_retry sudo apt-get update; travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; @@ -28,8 +30,6 @@ install: constraint_options=( ); fi; - # Install the "haskell-src-exts" implicit dependency - - cabal install happy --reorder-goals --force-reinstalls ${constraint_options[@]} # Install the library dependencies - cabal install --only-dependencies --reorder-goals --force-reinstalls ${constraint_options[@]} From 115e9ff7e3b5bbe9dcaa4cae4cd3d7f409ef3e41 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 14 Feb 2019 10:36:43 +0300 Subject: [PATCH 0483/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cee59ae042..c4b02b87b2 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with the automated conflict resolution. +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with automated conflict resolution. * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. From d6e70209b66b954ba7b972b79d203ae87ae1f545 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 9 Apr 2019 20:15:23 +0200 Subject: [PATCH 0484/1204] Add instance Monoid (Transaction a) --- hasql-transaction.cabal | 1 + library/Hasql/Transaction/Private/Prelude.hs | 4 ++++ library/Hasql/Transaction/Private/Transaction.hs | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 5ef86b9a71..274b16632b 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -63,6 +63,7 @@ library mtl >= 2 && < 3, transformers >= 0.3 && < 0.6, -- general: + semigroups >= 0.3.0, base-prelude >= 0.1.19 && < 2, base >= 4.6 && < 5 diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs index 40d009d2a3..cb16314d6a 100644 --- a/library/Hasql/Transaction/Private/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -35,6 +35,10 @@ import Contravariant.Extras as Exports ------------------------- import Data.ByteString as Exports (ByteString) +-- semigroups / base +------------------------- +import Data.Semigroup as Exports + tryError :: MonadError e m => m a -> m (Either e a) tryError m = catchError (liftM Right m) (return . Left) diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 843e4e17af..2bfddc8559 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -19,6 +19,13 @@ newtype Transaction a = Transaction (StateT Bool B.Session a) deriving (Functor, Applicative, Monad) +instance Semigroup a => Semigroup (Transaction a) where + (<>) = liftA2 (<>) + +instance Monoid a => Monoid (Transaction a) where + mempty = pure mempty + mappend = liftA2 mappend + -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINE run #-} From b6ee8253ffae11c60d175114a504e271da2b6cc1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 10 Apr 2019 01:02:23 +0300 Subject: [PATCH 0485/1204] Restrict the dep versions --- .travis.yml | 15 ++++++++------- hasql-transaction.cabal | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index a78d157fad..f202008c07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,17 @@ +if: tag IS blank + env: - - ghc=7.6.1 cabal=1.18 - - ghc=7.8.1 cabal=1.18 - - ghc=7.10.1 cabal=1.22 - - ghc=8.0.1 cabal=1.24 benchmarks=1 tests=1 - + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.2 + - ghc=8.6.1 benchmarks=1 tests=1 + install: # Set up the Shell to treat the semicolon as && - set -o pipefail && set -e # Install GHC and Cabal - - ghc=${ghc=7.10.1}; - cabal=${cabal=1.22}; + cabal=${cabal=2.4}; travis_retry sudo add-apt-repository -y ppa:hvr/ghc; travis_retry sudo apt-get update; travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 274b16632b..69acbc1e07 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -63,9 +63,9 @@ library mtl >= 2 && < 3, transformers >= 0.3 && < 0.6, -- general: - semigroups >= 0.3.0, + semigroups >= 0.3 && < 0.19, base-prelude >= 0.1.19 && < 2, - base >= 4.6 && < 5 + base >= 4.9 && < 5 test-suite conflicts-test From 502f4693de72a76411d16bd01a0495069311fb08 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 10 Apr 2019 01:07:44 +0300 Subject: [PATCH 0486/1204] Reformat Cabal --- hasql-transaction.cabal | 101 ++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 66 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 69acbc1e07..3d32d511bf 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,46 +1,25 @@ -name: - hasql-transaction -version: - 0.7 -category: - Hasql, Database, PostgreSQL -synopsis: - A composable abstraction over the retryable transactions for Hasql -homepage: - https://github.com/nikita-volkov/hasql-transaction -bug-reports: - https://github.com/nikita-volkov/hasql-transaction/issues -author: - Nikita Volkov -maintainer: - Nikita Volkov -copyright: - (c) 2015, Nikita Volkov -license: - MIT -license-file: - LICENSE -build-type: - Simple -cabal-version: - >=1.10 - +name: hasql-transaction +version: 0.7 +category: Hasql, Database, PostgreSQL +synopsis: A composable abstraction over the retryable transactions for Hasql +homepage: https://github.com/nikita-volkov/hasql-transaction +bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple +cabal-version: >=1.10 source-repository head - type: - git - location: - git://github.com/nikita-volkov/hasql-transaction.git - + type: git + location: git://github.com/nikita-volkov/hasql-transaction.git library - hs-source-dirs: - library - ghc-options: - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 + hs-source-dirs: library + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 other-modules: Hasql.Transaction.Private.Prelude Hasql.Transaction.Private.Model @@ -52,29 +31,23 @@ library Hasql.Transaction Hasql.Transaction.Sessions build-depends: - -- database: - hasql >= 1.3 && < 1.4, - -- data: - bytestring-tree-builder >= 0.1 && < 0.3, - bytestring >= 0.10 && < 0.11, - -- control: - contravariant >= 1.3 && < 2, - contravariant-extras >= 0.3 && < 0.4, - mtl >= 2 && < 3, - transformers >= 0.3 && < 0.6, - -- general: - semigroups >= 0.3 && < 0.19, - base-prelude >= 0.1.19 && < 2, - base >= 4.9 && < 5 - + base >=4.9 && <5, + base-prelude >=0.1.19 && <2, + bytestring >=0.10 && <0.11, + bytestring-tree-builder >=0.1 && <0.3, + contravariant >=1.3 && <2, + contravariant-extras >=0.3 && <0.4, + hasql >=1.3 && <1.4, + mtl >=2 && <3, + semigroups >=0.3 && <0.19, + transformers >=0.3 && <0.6 test-suite conflicts-test - type: - exitcode-stdio-1.0 - hs-source-dirs: - conflicts-test - main-is: - Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: conflicts-test + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 + main-is: Main.hs other-modules: Main.Statements Main.Transactions @@ -82,12 +55,8 @@ test-suite conflicts-test -O2 -threaded "-with-rtsopts=-N" - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 build-depends: hasql-transaction, hasql, - async >= 2.1 && < 3, - rebase < 2 + async >=2.1 && <3, + rebase <2 From 41b536821a56f367ef36a16bb57113a6667d2f1c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 10 Apr 2019 01:12:39 +0300 Subject: [PATCH 0487/1204] Reduce the deps --- hasql-transaction.cabal | 2 - library/Hasql/Transaction/Private/Prelude.hs | 71 ++++++++++++++++++-- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 3d32d511bf..a7996661c3 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -32,14 +32,12 @@ library Hasql.Transaction.Sessions build-depends: base >=4.9 && <5, - base-prelude >=0.1.19 && <2, bytestring >=0.10 && <0.11, bytestring-tree-builder >=0.1 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, hasql >=1.3 && <1.4, mtl >=2 && <3, - semigroups >=0.3 && <0.19, transformers >=0.3 && <0.6 test-suite conflicts-test diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs index cb16314d6a..9c54666553 100644 --- a/library/Hasql/Transaction/Private/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -6,9 +6,72 @@ module Hasql.Transaction.Private.Prelude where --- base-prelude +-- base ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (join, fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) +import Control.Monad.IO.Class as Exports +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.ST as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Last(..), First(..), (<>), Alt) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (sizeOf, alignment) +import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) +import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (printf, hPrintf) +import Text.Read as Exports (Read(..), readMaybe, readEither) +import Unsafe.Coerce as Exports -- transformers ------------------------- @@ -35,10 +98,6 @@ import Contravariant.Extras as Exports ------------------------- import Data.ByteString as Exports (ByteString) --- semigroups / base -------------------------- -import Data.Semigroup as Exports - tryError :: MonadError e m => m a -> m (Either e a) tryError m = catchError (liftM Right m) (return . Left) From fe1c2022d8af8fff766607ed6da4075bc935d96d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 10 Apr 2019 01:12:59 +0300 Subject: [PATCH 0488/1204] Set the version to 0.7.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index a7996661c3..a28275a89b 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 0.7 +version: 0.7.1 category: Hasql, Database, PostgreSQL synopsis: A composable abstraction over the retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From ad42b4e42a88d4e8da542e4977f846c1d47f2ee4 Mon Sep 17 00:00:00 2001 From: rl-king Date: Sun, 14 Apr 2019 16:50:22 +0200 Subject: [PATCH 0489/1204] Rename `value` -> `param` --- library/Hasql/Encoders.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 57061484bc..c0028100c2 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -553,7 +553,7 @@ dimension foldl (Array imp) = -- contrazip3 (vector Encoders.uuid) (vector Encoders.float8) (vector Encoders.float8) -- where -- vector value = --- Encoders.value (Encoders.array (Encoders.dimension foldl' (Encoders.element value))) +-- Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element value))) -- decoder = -- Decoders.unit --- @ \ No newline at end of file +-- @ From c86d7a3b58c26b5833b9f4d69e55b50dc2476b95 Mon Sep 17 00:00:00 2001 From: rl-king Date: Tue, 23 Apr 2019 07:28:32 +0200 Subject: [PATCH 0490/1204] Update Encoders introduction example --- library/Hasql/Encoders.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 57061484bc..18c68ade01 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -67,7 +67,7 @@ import qualified Hasql.Private.Prelude as Prelude -- @ -- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = --- 'contramap' 'fst' ('value' 'int8') '<>' +-- 'contramap' 'fst' ('param' 'int8') '<>' -- 'contramap' 'snd' ('nullableParam' 'text') -- @ -- @@ -79,7 +79,7 @@ import qualified Hasql.Private.Prelude as Prelude -- @ -- someParamsEncoder :: 'Params' (Int64, Maybe Text) -- someParamsEncoder = --- 'contrazip2' ('value' 'int8') ('nullableParam' 'text') +-- 'contrazip2' ('param' 'int8') ('nullableParam' 'text') -- @ -- -- Here's how you can implement encoders for custom composite types: @@ -93,9 +93,9 @@ import qualified Hasql.Private.Prelude as Prelude -- -- personParams :: 'Params' Person -- personParams = --- 'contramap' name ('value' 'text') '<>' --- 'contramap' gender ('value' genderValue) '<>' --- 'contramap' (fromIntegral . age) ('value' 'int8') +-- 'contramap' name ('param' 'text') '<>' +-- 'contramap' gender ('param' genderValue) '<>' +-- 'contramap' (fromIntegral . age) ('param' 'int8') -- -- genderValue :: 'Value' Gender -- genderValue = @@ -556,4 +556,4 @@ dimension foldl (Array imp) = -- Encoders.value (Encoders.array (Encoders.dimension foldl' (Encoders.element value))) -- decoder = -- Decoders.unit --- @ \ No newline at end of file +-- @ From 583e91524acfe42afa4a6c27a331746be7247b58 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Apr 2019 19:06:17 +0300 Subject: [PATCH 0491/1204] Set the version to 1.3.0.5 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 29b354e034..2d9bc96394 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3.0.4 + 1.3.0.5 category: Hasql, Database, PostgreSQL synopsis: From 90b679d0ec98c23ac7b23ce8ebf7505ca1b27fca Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2019 15:41:33 +0300 Subject: [PATCH 0492/1204] Set the version to 0.5.0.2 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 48cf9aeb51..7ddf153588 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.0.1 + 0.5.0.2 category: Hasql, Database, PostgreSQL synopsis: From 69c6d27ca40fc522540a525475b91ceca0fbb628 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 11 May 2019 12:12:42 +0300 Subject: [PATCH 0493/1204] Relax the "hashable" dep --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 2d9bc96394..1d37f53d06 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -85,7 +85,7 @@ library text >= 1 && < 2, text-builder >= 0.6.1.2 && < 0.7, bytestring >= 0.10 && < 0.11, - hashable >= 1.2 && < 1.3, + hashable >= 1.2 && < 2, -- control: data-default-class >= 0.0.1 && < 0.2, profunctors >= 5.1 && < 6, From e1e5dad2c34e6af4ff529497a5a5a947b610991d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 May 2019 22:20:58 +0300 Subject: [PATCH 0494/1204] Init --- .travis.yml | 56 ++++++++++++++ LICENSE | 22 ++++++ hasql-dynamic-statements.cabal | 31 ++++++++ library/Hasql/DynamicStatements/Prelude.hs | 73 +++++++++++++++++++ library/Hasql/DynamicStatements/Snippet.hs | 4 + .../Hasql/DynamicStatements/Snippet/Defs.hs | 3 + library/Hasql/DynamicStatements/Statement.hs | 4 + 7 files changed, 193 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 hasql-dynamic-statements.cabal create mode 100644 library/Hasql/DynamicStatements/Prelude.hs create mode 100644 library/Hasql/DynamicStatements/Snippet.hs create mode 100644 library/Hasql/DynamicStatements/Snippet/Defs.hs create mode 100644 library/Hasql/DynamicStatements/Statement.hs diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..5cfa2fb259 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,56 @@ +if: tag IS blank + +env: + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.2 + - ghc=8.6.1 + - ghc=8.8.1 benchmarks=1 tests=1 + +install: + # Set up the Shell to treat the semicolon as && + - set -o pipefail && set -e + # Install GHC and Cabal + - + cabal=${cabal=2.4}; + travis_retry sudo add-apt-repository -y ppa:hvr/ghc; + travis_retry sudo apt-get update; + travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; + # Update the Cabal database + - cabal update + # Switch to the distro: + - + export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; + # Install the lower bound dependencies + - + if [ "$lower_bound_dependencies" = "1" ]; + then + constraint_options=( + ); + fi; + # Install the library dependencies + - cabal install --only-dependencies --reorder-goals --force-reinstalls + ${constraint_options[@]} + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + # Build the library + - cabal build + # Configure and build the remaining stuff + - cabal configure + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + -f doctest + - cabal build + +script: + - | + if [ "$tests" = "1" ]; + then + cabal clean; + cabal test --show-details=always --test-options=--quickcheck-tests=100000; + fi; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..78878c1fd5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2019, Nikita Volkov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal new file mode 100644 index 0000000000..3559732325 --- /dev/null +++ b/hasql-dynamic-statements.cabal @@ -0,0 +1,31 @@ +name: hasql-dynamic-statements +version: 0.4.2.1 +synopsis: Toolkit for constructing Hasql statements dynamically +homepage: https://github.com/nikita-volkov/hasql-dynamic-statements +bug-reports: https://github.com/nikita-volkov/hasql-dynamic-statements/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple +cabal-version: >=1.10 + +source-repository head + type: git + location: git://github.com/nikita-volkov/hasql-dynamic-statements.git + +library + hs-source-dirs: library + default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies + ghc-options: -funbox-strict-fields + default-language: Haskell2010 + exposed-modules: + Hasql.DynamicStatements.Snippet + Hasql.DynamicStatements.Statement + other-modules: + Hasql.DynamicStatements.Prelude + Hasql.DynamicStatements.Snippet.Defs + build-depends: + base >=4.9 && <5, + hasql >=1.3.0.5 && <1.4 diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs new file mode 100644 index 0000000000..1d08737aca --- /dev/null +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -0,0 +1,73 @@ +module Hasql.DynamicStatements.Prelude +( + module Exports, +) +where + + +-- base +------------------------- +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) +import Control.Monad.IO.Class as Exports +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.ST as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Last(..), First(..), (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (sizeOf, alignment) +import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) +import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (printf, hPrintf) +import Text.Read as Exports (Read(..), readMaybe, readEither) +import Unsafe.Coerce as Exports diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs new file mode 100644 index 0000000000..629d1e5830 --- /dev/null +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -0,0 +1,4 @@ +module Hasql.DynamicStatements.Snippet where + +import Hasql.DynamicStatements.Prelude +import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs new file mode 100644 index 0000000000..e333e19de8 --- /dev/null +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -0,0 +1,3 @@ +module Hasql.DynamicStatements.Snippet.Defs where + +import Hasql.DynamicStatements.Prelude diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs new file mode 100644 index 0000000000..642afbfdbe --- /dev/null +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -0,0 +1,4 @@ +module Hasql.DynamicStatements.Statement where + +import Hasql.DynamicStatements.Prelude +import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs From 05a99d94fa10de428ad83aba3a705648c4bc4ed4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 16:41:40 +0300 Subject: [PATCH 0495/1204] Implement Snippet Defs --- hasql-dynamic-statements.cabal | 7 ++-- library/Hasql/DynamicStatements/Prelude.hs | 13 +++++++ .../Hasql/DynamicStatements/Snippet/Defs.hs | 34 +++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 3559732325..ddc579734b 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -27,5 +27,8 @@ library Hasql.DynamicStatements.Prelude Hasql.DynamicStatements.Snippet.Defs build-depends: - base >=4.9 && <5, - hasql >=1.3.0.5 && <1.4 + base >=4.12 && <5, + bytestring >=0.10 && <0.11, + containers >=0.6 && <0.7, + hasql >=1.3.0.5 && <1.4, + text >=1 && <2 diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 1d08737aca..cc19f38137 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -29,6 +29,7 @@ import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports +import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports import Data.Int as Exports import Data.IORef as Exports @@ -71,3 +72,15 @@ import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, read import Text.Printf as Exports (printf, hPrintf) import Text.Read as Exports (Read(..), readMaybe, readEither) import Unsafe.Coerce as Exports + +-- containers +------------------------- +import Data.Sequence as Exports (Seq) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- text +------------------------- +import Data.Text as Exports (Text) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index e333e19de8..f960a21a73 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -1,3 +1,37 @@ module Hasql.DynamicStatements.Snippet.Defs where import Hasql.DynamicStatements.Prelude +import qualified Hasql.Encoders as Encoders + + +data Snippet = Snippet + Int {-^ Amount of placeholders -} + (Seq SnippetChunk) + +data SnippetChunk = + TextSnippetChunk ByteString | + ParamSnippetChunk (Encoders.Value ()) + +instance Semigroup Snippet where + (<>) (Snippet amountOfPlaceholdersL chunksL) (Snippet amountOfPlaceholdersR chunksR) = + Snippet (amountOfPlaceholdersL + amountOfPlaceholdersR) (chunksL <> chunksR) + +instance Monoid Snippet where + mempty = Snippet 0 mempty + mappend = (<>) + +instance IsString Snippet where + fromString x = Snippet 0 (pure (TextSnippetChunk (fromString x))) + +byteStringSnippet :: ByteString -> Snippet +byteStringSnippet x = Snippet 0 (pure (TextSnippetChunk x)) + +param :: Encoders.Value param -> param -> Snippet +param encoder param = Snippet 1 (pure (ParamSnippetChunk (param >$ encoder))) + +text :: Text -> Snippet +text = param Encoders.text + +int8 :: Int64 -> Snippet +int8 = param Encoders.int8 + From 7380450cf2c6e3d695a9e0d22cd1f961de55277e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 17:28:01 +0300 Subject: [PATCH 0496/1204] Implement Statement --- hasql-dynamic-statements.cabal | 1 + library/Hasql/DynamicStatements/Statement.hs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index ddc579734b..d5b2cb9e4f 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -31,4 +31,5 @@ library bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, hasql >=1.3.0.5 && <1.4, + ptr >=0.16.6 && <0.17, text >=1 && <2 diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 642afbfdbe..eebe40fdfe 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -1,4 +1,24 @@ module Hasql.DynamicStatements.Statement where import Hasql.DynamicStatements.Prelude +import Hasql.Statement import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Ptr.Poking as Poking +import qualified Ptr.ByteString as ByteString + +{-| +Construct a statement dynamically, specifying the parameters in-place. +-} +snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result +snippet (SnippetDefs.Snippet _ chunks) decoder = let + step (!paramId, !poking, !encoder) = \ case + SnippetDefs.TextSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) + SnippetDefs.ParamSnippetChunk paramEncoder -> let + newParamId = paramId + 1 + newPoking = poking <> Poking.word8 36 <> Poking.asciiIntegral paramId + newEncoder = encoder <> Encoders.param paramEncoder + in (newParamId, newPoking, newEncoder) + in case foldl' step (1, mempty, mempty) chunks of + (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder False From 242eae9fad51ce8c9232bf46a1cb57331a64fb23 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 17:31:12 +0300 Subject: [PATCH 0497/1204] Ditch the amount of placeholders --- hasql-dynamic-statements.cabal | 2 +- .../Hasql/DynamicStatements/Snippet/Defs.hs | 19 ++++++------------- library/Hasql/DynamicStatements/Statement.hs | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index d5b2cb9e4f..e3d2fdd8fb 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -17,7 +17,7 @@ source-repository head library hs-source-dirs: library - default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies + default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index f960a21a73..f484c4c1a9 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -4,30 +4,23 @@ import Hasql.DynamicStatements.Prelude import qualified Hasql.Encoders as Encoders -data Snippet = Snippet - Int {-^ Amount of placeholders -} - (Seq SnippetChunk) +newtype Snippet = Snippet (Seq SnippetChunk) data SnippetChunk = TextSnippetChunk ByteString | ParamSnippetChunk (Encoders.Value ()) -instance Semigroup Snippet where - (<>) (Snippet amountOfPlaceholdersL chunksL) (Snippet amountOfPlaceholdersR chunksR) = - Snippet (amountOfPlaceholdersL + amountOfPlaceholdersR) (chunksL <> chunksR) - -instance Monoid Snippet where - mempty = Snippet 0 mempty - mappend = (<>) +deriving instance Semigroup Snippet +deriving instance Monoid Snippet instance IsString Snippet where - fromString x = Snippet 0 (pure (TextSnippetChunk (fromString x))) + fromString x = Snippet (pure (TextSnippetChunk (fromString x))) byteStringSnippet :: ByteString -> Snippet -byteStringSnippet x = Snippet 0 (pure (TextSnippetChunk x)) +byteStringSnippet x = Snippet (pure (TextSnippetChunk x)) param :: Encoders.Value param -> param -> Snippet -param encoder param = Snippet 1 (pure (ParamSnippetChunk (param >$ encoder))) +param encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) text :: Text -> Snippet text = param Encoders.text diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index eebe40fdfe..11ddc7c1bc 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -12,7 +12,7 @@ import qualified Ptr.ByteString as ByteString Construct a statement dynamically, specifying the parameters in-place. -} snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result -snippet (SnippetDefs.Snippet _ chunks) decoder = let +snippet (SnippetDefs.Snippet chunks) decoder = let step (!paramId, !poking, !encoder) = \ case SnippetDefs.TextSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) SnippetDefs.ParamSnippetChunk paramEncoder -> let From befd821e2cf88f7c75dd12225789ae83f731d06c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 17:34:35 +0300 Subject: [PATCH 0498/1204] Implement Session --- hasql-dynamic-statements.cabal | 1 + library/Hasql/DynamicStatements/Session.hs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 library/Hasql/DynamicStatements/Session.hs diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index e3d2fdd8fb..4fde4ca664 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -21,6 +21,7 @@ library ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: + Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet Hasql.DynamicStatements.Statement other-modules: diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs new file mode 100644 index 0000000000..40babbf926 --- /dev/null +++ b/library/Hasql/DynamicStatements/Session.hs @@ -0,0 +1,14 @@ +module Hasql.DynamicStatements.Session where + +import Hasql.DynamicStatements.Prelude +import Hasql.Session +import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs +import qualified Hasql.DynamicStatements.Statement as Statement +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Session as Session + +{-| +Execute a dynamically constructed statement, providing a result decoder. +-} +snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Session result +snippet snippet decoder = Session.statement () (Statement.snippet snippet decoder) From 80027259caed0b58a057a7244f46aa8afde79f5b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 21:01:01 +0300 Subject: [PATCH 0499/1204] Sketch out implicit encoders --- hasql-dynamic-statements.cabal | 3 +- .../DynamicStatements/ImplicitEncoders.hs | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 library/Hasql/DynamicStatements/ImplicitEncoders.hs diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 4fde4ca664..fcc8a0fc7e 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -17,10 +17,11 @@ source-repository head library hs-source-dirs: library - default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies + default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, OverloadedStrings, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: + Hasql.DynamicStatements.ImplicitEncoders Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet Hasql.DynamicStatements.Statement diff --git a/library/Hasql/DynamicStatements/ImplicitEncoders.hs b/library/Hasql/DynamicStatements/ImplicitEncoders.hs new file mode 100644 index 0000000000..14e3170b01 --- /dev/null +++ b/library/Hasql/DynamicStatements/ImplicitEncoders.hs @@ -0,0 +1,38 @@ +module Hasql.DynamicStatements.ImplicitEncoders where + +import Hasql.DynamicStatements.Prelude +import Hasql.Encoders + + +class ParamsEncoder a where + params :: Params a + +instance ParamsEncoder Text where + params = param text + +instance ParamsEncoder [Maybe Text] where + params = param (array (dimension foldl' (nullableElement text))) + +instance ParamsEncoder [Text] where + params = param (array (dimension foldl' (element text))) + +instance ParamsEncoder [[Text]] where + params = param (array (dimension foldl' (dimension foldl' (element text)))) + +instance ParamsEncoder [[Maybe Text]] where + params = param (array (dimension foldl' (dimension foldl' (nullableElement text)))) + +instance ParamsEncoder (Maybe Text) where + params = nullableParam text + +instance ParamsEncoder (Maybe [Maybe Text]) where + params = nullableParam (array (dimension foldl' (nullableElement text))) + +instance ParamsEncoder (Maybe [Text]) where + params = nullableParam (array (dimension foldl' (element text))) + +instance ParamsEncoder (Maybe [[Text]]) where + params = nullableParam (array (dimension foldl' (dimension foldl' (element text)))) + +instance ParamsEncoder (Maybe [[Maybe Text]]) where + params = nullableParam (array (dimension foldl' (dimension foldl' (nullableElement text)))) From 06a30c2d5076f1a9c235665b85ee5ee28c7a7b05 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 21:56:54 +0300 Subject: [PATCH 0500/1204] Implement implicit encoders --- hasql-dynamic-statements.cabal | 8 +- .../DynamicStatements/ImplicitEncoders.hs | 105 +++++++++++++----- library/Hasql/DynamicStatements/Prelude.hs | 20 ++++ 3 files changed, 105 insertions(+), 28 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index fcc8a0fc7e..6a5aac3eba 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -29,9 +29,15 @@ library Hasql.DynamicStatements.Prelude Hasql.DynamicStatements.Snippet.Defs build-depends: + aeson >=1 && <2, base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, hasql >=1.3.0.5 && <1.4, + network-ip >=0.2 && <1, ptr >=0.16.6 && <0.17, - text >=1 && <2 + scientific >=0.2 && <0.4, + text >=1 && <2, + time >=1.4 && <2, + uuid >=1.3 && <1.4, + vector >=0.10 && <0.13 diff --git a/library/Hasql/DynamicStatements/ImplicitEncoders.hs b/library/Hasql/DynamicStatements/ImplicitEncoders.hs index 14e3170b01..95e162f84d 100644 --- a/library/Hasql/DynamicStatements/ImplicitEncoders.hs +++ b/library/Hasql/DynamicStatements/ImplicitEncoders.hs @@ -1,38 +1,89 @@ +{-# LANGUAGE CPP #-} module Hasql.DynamicStatements.ImplicitEncoders where import Hasql.DynamicStatements.Prelude import Hasql.Encoders +import qualified Data.Aeson as Aeson class ParamsEncoder a where params :: Params a -instance ParamsEncoder Text where - params = param text +#define Q(a) a' +#define INSTANCES(VALUE, ENCODER) \ +instance ParamsEncoder VALUE where { \ + params = param ENCODER; \ +}; \ +instance ParamsEncoder [Maybe VALUE] where { \ + params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder [VALUE] where { \ + params = param (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder [[VALUE]] where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder [[Maybe VALUE]] where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Vector (Maybe VALUE)) where { \ + params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Vector VALUE) where { \ + params = param (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Vector (Vector VALUE)) where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Vector (Vector (Maybe VALUE))) where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe VALUE) where { \ + params = nullableParam ENCODER; \ +}; \ +instance ParamsEncoder (Maybe [Maybe VALUE]) where { \ + params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe [VALUE]) where { \ + params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe [[VALUE]]) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe [[Maybe VALUE]]) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Maybe VALUE))) where { \ + params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe (Vector VALUE)) where { \ + params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Vector VALUE))) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +} -instance ParamsEncoder [Maybe Text] where - params = param (array (dimension foldl' (nullableElement text))) +INSTANCES(Char, char) +INSTANCES(Double, float8) +INSTANCES(Float, float4) +INSTANCES(Int16, int2) +INSTANCES(Int32, int4) +INSTANCES(Int64, int8) +INSTANCES(ByteString, bytea) +INSTANCES(Scientific, numeric) +INSTANCES(Text, text) +INSTANCES(UTCTime, timestamptz) +INSTANCES(Aeson.Value, jsonb) +INSTANCES(UUID, uuid) +INSTANCES(Day, date) +INSTANCES(DiffTime, interval) +INSTANCES(TimeOfDay, time) +INSTANCES(LocalTime, timestamp) +INSTANCES((TimeOfDay, TimeZone), timetz) +INSTANCES((NetAddr IP), inet) -instance ParamsEncoder [Text] where - params = param (array (dimension foldl' (element text))) - -instance ParamsEncoder [[Text]] where - params = param (array (dimension foldl' (dimension foldl' (element text)))) - -instance ParamsEncoder [[Maybe Text]] where - params = param (array (dimension foldl' (dimension foldl' (nullableElement text)))) - -instance ParamsEncoder (Maybe Text) where - params = nullableParam text - -instance ParamsEncoder (Maybe [Maybe Text]) where - params = nullableParam (array (dimension foldl' (nullableElement text))) - -instance ParamsEncoder (Maybe [Text]) where - params = nullableParam (array (dimension foldl' (element text))) - -instance ParamsEncoder (Maybe [[Text]]) where - params = nullableParam (array (dimension foldl' (dimension foldl' (element text)))) - -instance ParamsEncoder (Maybe [[Maybe Text]]) where - params = nullableParam (array (dimension foldl' (dimension foldl' (nullableElement text)))) +#undef INSTANCES +#undef Q diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index cc19f38137..31c726ed01 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -84,3 +84,23 @@ import Data.ByteString as Exports (ByteString) -- text ------------------------- import Data.Text as Exports (Text) + +-- vector +------------------------- +import Data.Vector as Exports (Vector) + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) + +-- uuid +------------------------- +import Data.UUID as Exports (UUID) + +-- time +------------------------- +import Data.Time as Exports + +-- network-ip +------------------------- +import Network.IP.Addr as Exports (NetAddr, IP) From da6c7687700b91ab19efe728a0692c0fa041d1a6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 19 May 2019 22:08:58 +0300 Subject: [PATCH 0501/1204] Integrate implicit encoders --- library/Hasql/DynamicStatements/Snippet.hs | 10 +++++++--- .../Hasql/DynamicStatements/Snippet/Defs.hs | 18 ++++++------------ library/Hasql/DynamicStatements/Statement.hs | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs index 629d1e5830..3630c1d4ce 100644 --- a/library/Hasql/DynamicStatements/Snippet.hs +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -1,4 +1,8 @@ -module Hasql.DynamicStatements.Snippet where +module Hasql.DynamicStatements.Snippet +( + Snippet, + param, +) +where -import Hasql.DynamicStatements.Prelude -import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs +import Hasql.DynamicStatements.Snippet.Defs diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index f484c4c1a9..68cc463dcd 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -2,13 +2,14 @@ module Hasql.DynamicStatements.Snippet.Defs where import Hasql.DynamicStatements.Prelude import qualified Hasql.Encoders as Encoders +import qualified Hasql.DynamicStatements.ImplicitEncoders as ImplicitEncoders newtype Snippet = Snippet (Seq SnippetChunk) data SnippetChunk = TextSnippetChunk ByteString | - ParamSnippetChunk (Encoders.Value ()) + ParamSnippetChunk (Encoders.Params ()) deriving instance Semigroup Snippet deriving instance Monoid Snippet @@ -16,15 +17,8 @@ deriving instance Monoid Snippet instance IsString Snippet where fromString x = Snippet (pure (TextSnippetChunk (fromString x))) -byteStringSnippet :: ByteString -> Snippet -byteStringSnippet x = Snippet (pure (TextSnippetChunk x)) - -param :: Encoders.Value param -> param -> Snippet -param encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) - -text :: Text -> Snippet -text = param Encoders.text - -int8 :: Int64 -> Snippet -int8 = param Encoders.int8 +sql :: ByteString -> Snippet +sql x = Snippet (pure (TextSnippetChunk x)) +param :: ImplicitEncoders.ParamsEncoder param => param -> Snippet +param param = Snippet (pure (ParamSnippetChunk (param >$ ImplicitEncoders.params))) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 11ddc7c1bc..b9d5170a3e 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -18,7 +18,7 @@ snippet (SnippetDefs.Snippet chunks) decoder = let SnippetDefs.ParamSnippetChunk paramEncoder -> let newParamId = paramId + 1 newPoking = poking <> Poking.word8 36 <> Poking.asciiIntegral paramId - newEncoder = encoder <> Encoders.param paramEncoder + newEncoder = encoder <> paramEncoder in (newParamId, newPoking, newEncoder) in case foldl' step (1, mempty, mempty) chunks of (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder False From 75466505fe70ff8b3121aa2f349d35ef77358dd9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 12:58:04 +0300 Subject: [PATCH 0502/1204] Add encoderAndParam --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index 68cc463dcd..a63e93f225 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -22,3 +22,6 @@ sql x = Snippet (pure (TextSnippetChunk x)) param :: ImplicitEncoders.ParamsEncoder param => param -> Snippet param param = Snippet (pure (ParamSnippetChunk (param >$ ImplicitEncoders.params))) + +encoderAndParam :: Encoders.Params param -> param -> Snippet +encoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) From dd3d2b89e011c4bfccbd99a38e662ed80aa0b4f3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 13:05:12 +0300 Subject: [PATCH 0503/1204] Add docs --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index a63e93f225..c79c2ff5aa 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -5,6 +5,9 @@ import qualified Hasql.Encoders as Encoders import qualified Hasql.DynamicStatements.ImplicitEncoders as ImplicitEncoders +{-| +Dynamically generated statement. +-} newtype Snippet = Snippet (Seq SnippetChunk) data SnippetChunk = @@ -17,11 +20,20 @@ deriving instance Monoid Snippet instance IsString Snippet where fromString x = Snippet (pure (TextSnippetChunk (fromString x))) +{-| +SQL chunk in ASCII. +-} sql :: ByteString -> Snippet sql x = Snippet (pure (TextSnippetChunk x)) +{-| +Parameter encoded using an implicitly derived encoder from the type. +-} param :: ImplicitEncoders.ParamsEncoder param => param -> Snippet param param = Snippet (pure (ParamSnippetChunk (param >$ ImplicitEncoders.params))) +{-| +Parameter with an explicitly defined encoder. +-} encoderAndParam :: Encoders.Params param -> param -> Snippet encoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) From ed1965b982197f5a25dd35904d72637f547aea46 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 13:20:12 +0300 Subject: [PATCH 0504/1204] Extract from hasql-dynamic-statements --- .travis.yml | 56 +++++++++++ LICENSE | 22 ++++ hasql-implicits.cabal | 39 +++++++ library/Hasql/Implicits/ImplicitEncoders.hs | 89 ++++++++++++++++ library/Hasql/Implicits/Prelude.hs | 106 ++++++++++++++++++++ 5 files changed, 312 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 hasql-implicits.cabal create mode 100644 library/Hasql/Implicits/ImplicitEncoders.hs create mode 100644 library/Hasql/Implicits/Prelude.hs diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..5cfa2fb259 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,56 @@ +if: tag IS blank + +env: + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.2 + - ghc=8.6.1 + - ghc=8.8.1 benchmarks=1 tests=1 + +install: + # Set up the Shell to treat the semicolon as && + - set -o pipefail && set -e + # Install GHC and Cabal + - + cabal=${cabal=2.4}; + travis_retry sudo add-apt-repository -y ppa:hvr/ghc; + travis_retry sudo apt-get update; + travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; + export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; + # Update the Cabal database + - cabal update + # Switch to the distro: + - + export pkg_name=$(cabal info . | awk '{print $2;exit}'); + cabal sdist; + cd dist; + tar xzvf $pkg_name.tar.gz; + cd $pkg_name; + # Install the lower bound dependencies + - + if [ "$lower_bound_dependencies" = "1" ]; + then + constraint_options=( + ); + fi; + # Install the library dependencies + - cabal install --only-dependencies --reorder-goals --force-reinstalls + ${constraint_options[@]} + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + # Build the library + - cabal build + # Configure and build the remaining stuff + - cabal configure + $([ "$tests" = "1" ] && echo "--enable-tests") + $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") + -f doctest + - cabal build + +script: + - | + if [ "$tests" = "1" ]; + then + cabal clean; + cabal test --show-details=always --test-options=--quickcheck-tests=100000; + fi; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..78878c1fd5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2019, Nikita Volkov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal new file mode 100644 index 0000000000..f78b948357 --- /dev/null +++ b/hasql-implicits.cabal @@ -0,0 +1,39 @@ +name: hasql-implicits +version: 0.1 +synopsis: Toolkit for constructing Hasql statements dynamically +homepage: https://github.com/nikita-volkov/hasql-implicits +bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple +cabal-version: >=1.10 + +source-repository head + type: git + location: git://github.com/nikita-volkov/hasql-implicits.git + +library + hs-source-dirs: library + default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, OverloadedStrings, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies + ghc-options: -funbox-strict-fields + default-language: Haskell2010 + exposed-modules: + Hasql.Implicits.ImplicitEncoders + other-modules: + Hasql.Implicits.Prelude + build-depends: + aeson >=1 && <2, + base >=4.12 && <5, + bytestring >=0.10 && <0.11, + containers >=0.6 && <0.7, + hasql >=1.3.0.5 && <1.4, + network-ip >=0.2 && <1, + ptr >=0.16.6 && <0.17, + scientific >=0.2 && <0.4, + text >=1 && <2, + time >=1.4 && <2, + uuid >=1.3 && <1.4, + vector >=0.10 && <0.13 diff --git a/library/Hasql/Implicits/ImplicitEncoders.hs b/library/Hasql/Implicits/ImplicitEncoders.hs new file mode 100644 index 0000000000..b8b7489102 --- /dev/null +++ b/library/Hasql/Implicits/ImplicitEncoders.hs @@ -0,0 +1,89 @@ +{-# LANGUAGE CPP #-} +module Hasql.Implicits.ImplicitEncoders where + +import Hasql.Implicits.Prelude +import Hasql.Encoders +import qualified Data.Aeson as Aeson + + +class ParamsEncoder a where + params :: Params a + +#define Q(a) a' +#define INSTANCES(VALUE, ENCODER) \ +instance ParamsEncoder VALUE where { \ + params = param ENCODER; \ +}; \ +instance ParamsEncoder [Maybe VALUE] where { \ + params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder [VALUE] where { \ + params = param (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder [[VALUE]] where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder [[Maybe VALUE]] where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Vector (Maybe VALUE)) where { \ + params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Vector VALUE) where { \ + params = param (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Vector (Vector VALUE)) where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Vector (Vector (Maybe VALUE))) where { \ + params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe VALUE) where { \ + params = nullableParam ENCODER; \ +}; \ +instance ParamsEncoder (Maybe [Maybe VALUE]) where { \ + params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe [VALUE]) where { \ + params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe [[VALUE]]) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe [[Maybe VALUE]]) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Maybe VALUE))) where { \ + params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe (Vector VALUE)) where { \ + params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Vector VALUE))) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ +}; \ +instance ParamsEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ + params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ +} + +INSTANCES(Char, char) +INSTANCES(Double, float8) +INSTANCES(Float, float4) +INSTANCES(Int16, int2) +INSTANCES(Int32, int4) +INSTANCES(Int64, int8) +INSTANCES(ByteString, bytea) +INSTANCES(Scientific, numeric) +INSTANCES(Text, text) +INSTANCES(UTCTime, timestamptz) +INSTANCES(Aeson.Value, jsonb) +INSTANCES(UUID, uuid) +INSTANCES(Day, date) +INSTANCES(DiffTime, interval) +INSTANCES(TimeOfDay, time) +INSTANCES(LocalTime, timestamp) +INSTANCES((TimeOfDay, TimeZone), timetz) +INSTANCES((NetAddr IP), inet) + +#undef INSTANCES +#undef Q diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs new file mode 100644 index 0000000000..8153c4b649 --- /dev/null +++ b/library/Hasql/Implicits/Prelude.hs @@ -0,0 +1,106 @@ +module Hasql.Implicits.Prelude +( + module Exports, +) +where + + +-- base +------------------------- +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) +import Control.Monad.IO.Class as Exports +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.ST as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports +import Data.Functor.Contravariant as Exports +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Last(..), First(..), (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (sizeOf, alignment) +import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) +import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (printf, hPrintf) +import Text.Read as Exports (Read(..), readMaybe, readEither) +import Unsafe.Coerce as Exports + +-- containers +------------------------- +import Data.Sequence as Exports (Seq) + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) + +-- text +------------------------- +import Data.Text as Exports (Text) + +-- vector +------------------------- +import Data.Vector as Exports (Vector) + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) + +-- uuid +------------------------- +import Data.UUID as Exports (UUID) + +-- time +------------------------- +import Data.Time as Exports + +-- network-ip +------------------------- +import Network.IP.Addr as Exports (NetAddr, IP) From 1291502699ff1d120504702bf8ae39f6227af6b2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 13:31:22 +0300 Subject: [PATCH 0505/1204] Extend with explicit encoders --- hasql-implicits.cabal | 1 + library/Hasql/Implicits/ExplicitEncoders.hs | 33 +++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 library/Hasql/Implicits/ExplicitEncoders.hs diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index f78b948357..5bdca8e70d 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -21,6 +21,7 @@ library ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: + Hasql.Implicits.ExplicitEncoders Hasql.Implicits.ImplicitEncoders other-modules: Hasql.Implicits.Prelude diff --git a/library/Hasql/Implicits/ExplicitEncoders.hs b/library/Hasql/Implicits/ExplicitEncoders.hs new file mode 100644 index 0000000000..b6c9ab0e8c --- /dev/null +++ b/library/Hasql/Implicits/ExplicitEncoders.hs @@ -0,0 +1,33 @@ +{-| +Extensions to the explicit encoders DSL from the \"hasql\" library ("Hasql.Encoders"). +-} +module Hasql.Implicits.ExplicitEncoders where + +import Hasql.Implicits.Prelude +import Hasql.Encoders as Old + + +{-| +Lift a single-param encoder definition to the level of composable encoder of multiple params. +-} +param :: Param a -> Params a +param (Param params) = params + + +{-| +Single param encoder, which captures its nullability. +-} +newtype Param a = Param (Params a) + +{-| +Lift a value encoder into a non-nullable parameter encoder. +-} +nonNullable :: Value a -> Param a +nonNullable = Param . Old.param + +{-| +Lift a value encoder into a nullable parameter encoder. +-} +nullable :: Value a -> Param (Maybe a) +nullable = Param . nullableParam + From 27bbccbaf0108c1abd8d7008281aaee8390ac1c9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 14:48:18 +0300 Subject: [PATCH 0506/1204] Set the version to 1.3.0.6 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 1d37f53d06..6661fceb34 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,7 +1,7 @@ name: hasql version: - 1.3.0.5 + 1.3.0.6 category: Hasql, Database, PostgreSQL synopsis: From 2b530025b7010478ccf9545246a244c8cc210541 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 14:57:05 +0300 Subject: [PATCH 0507/1204] Update the formatting in Cabal --- hasql.cabal | 204 +++++++++++++++++++--------------------------------- 1 file changed, 73 insertions(+), 131 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 6661fceb34..4e130d60ef 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,50 +1,29 @@ -name: - hasql -version: - 1.3.0.6 -category: - Hasql, Database, PostgreSQL -synopsis: - An efficient PostgreSQL driver and a flexible mapping API +name: hasql +version: 1.3.0.6 +category: Hasql, Database, PostgreSQL +synopsis: An efficient PostgreSQL driver with a flexible mapping API description: This package is the root of the \"hasql\" ecosystem. . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. -homepage: - https://github.com/nikita-volkov/hasql -bug-reports: - https://github.com/nikita-volkov/hasql/issues -author: - Nikita Volkov -maintainer: - Nikita Volkov -copyright: - (c) 2014, Nikita Volkov -license: - MIT -license-file: - LICENSE -build-type: - Simple -cabal-version: - >=1.10 - +homepage: https://github.com/nikita-volkov/hasql +bug-reports: https://github.com/nikita-volkov/hasql/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2014, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple +cabal-version: >=1.10 source-repository head - type: - git - location: - git://github.com/nikita-volkov/hasql.git - + type: git + location: git://github.com/nikita-volkov/hasql.git library - hs-source-dirs: - library - ghc-options: - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 + hs-source-dirs: library + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 exposed-modules: Hasql.Decoders Hasql.Encoders @@ -71,133 +50,96 @@ library Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params build-depends: - -- parsing: - attoparsec >= 0.10 && < 0.14, - -- database: - postgresql-binary >= 0.12.1 && < 0.13, - postgresql-libpq == 0.9.*, - -- builders: - bytestring-strict-builder >= 0.4.5.1 && < 0.5, - -- data: - dlist >= 0.7 && < 0.9, - vector >= 0.10 && < 0.13, - hashtables >= 1.1 && < 2, - text >= 1 && < 2, - text-builder >= 0.6.1.2 && < 0.7, - bytestring >= 0.10 && < 0.11, - hashable >= 1.2 && < 2, - -- control: - data-default-class >= 0.0.1 && < 0.2, - profunctors >= 5.1 && < 6, - contravariant-extras == 0.3.*, - contravariant >= 1.3 && < 2, - mtl >= 2 && < 3, - transformers >= 0.3 && < 0.6, - -- errors: - loch-th == 0.2.*, - placeholders == 0.1.*, - -- general: - base-prelude >= 0.1.19 && < 2, - base >= 4.9 && < 5 - + attoparsec >=0.10 && <0.14, + base >=4.9 && <5, + base-prelude >=0.1.19 && <2, + bytestring >=0.10 && <0.11, + bytestring-strict-builder >=0.4.5.1 && <0.5, + contravariant >=1.3 && <2, + contravariant-extras ==0.3.*, + data-default-class >=0.0.1 && <0.2, + dlist >=0.7 && <0.9, + hashable >=1.2 && <2, + hashtables >=1.1 && <2, + loch-th ==0.2.*, + mtl >=2 && <3, + placeholders ==0.1.*, + postgresql-binary >=0.12.1 && <0.13, + postgresql-libpq ==0.9.*, + profunctors >=5.1 && <6, + text >=1 && <2, + text-builder >=0.6.1.2 && <0.7, + transformers >=0.3 && <0.6, + vector >=0.10 && <0.13 test-suite tasty - type: - exitcode-stdio-1.0 - hs-source-dirs: - tasty - main-is: - Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: tasty + main-is: Main.hs + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 other-modules: Main.DSL Main.Connection Main.Statements Main.Prelude - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 build-depends: - -- database: - hasql, - -- testing: - tasty >= 0.12 && < 2, - tasty-quickcheck >= 0.9 && < 0.11, - tasty-hunit >= 0.9 && < 0.11, - quickcheck-instances >= 0.3.11 && < 0.4, - QuickCheck >= 2.8.1 && < 3, - -- general: data-default-class, - -- - rerebase < 2 - + hasql, + QuickCheck >=2.8.1 && <3, + quickcheck-instances >=0.3.11 && <0.4, + rerebase <2, + tasty >=0.12 && <2, + tasty-hunit >=0.9 && <0.11, + tasty-quickcheck >=0.9 && <0.11 test-suite threads-test - type: - exitcode-stdio-1.0 - hs-source-dirs: - threads-test - main-is: - Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: threads-test + main-is: Main.hs + default-extensions: + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: + Haskell2010 other-modules: Main.Statements ghc-options: -O2 -threaded "-with-rtsopts=-N" - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 build-depends: - -- database: hasql, - -- rebase - benchmark benchmarks - type: - exitcode-stdio-1.0 - hs-source-dirs: - benchmarks - main-is: - Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: benchmarks + main-is: Main.hs + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 ghc-options: -O2 -threaded "-with-rtsopts=-N" -rtsopts -funbox-strict-fields - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 build-depends: + bug ==1.*, + criterion >=1.1 && <2, hasql, - -- benchmarking: - criterion >= 1.1 && < 2, - -- general: - bug == 1.*, - rerebase < 2 - + rerebase <2 test-suite profiling - type: - exitcode-stdio-1.0 - hs-source-dirs: - profiling - main-is: - Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: profiling + main-is: Main.hs + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 ghc-options: -O2 -threaded -rtsopts - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 build-depends: + bug ==1.*, hasql, - bug == 1.*, - rerebase == 1.* + rerebase ==1.* From 9eee8c990b579afcb6944e622bcde76e4dc64e10 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 15:02:17 +0300 Subject: [PATCH 0508/1204] Ditch the integration with "default" --- hasql.cabal | 2 - library/Hasql/Decoders.hs | 189 ------------------------------- library/Hasql/Encoders.hs | 148 ------------------------ library/Hasql/Private/Prelude.hs | 4 - tasty/Main.hs | 6 +- tasty/Main/Prelude.hs | 4 - tasty/Main/Statements.hs | 6 +- 7 files changed, 4 insertions(+), 355 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 4e130d60ef..9188bd8d6d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -57,7 +57,6 @@ library bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, - data-default-class >=0.0.1 && <0.2, dlist >=0.7 && <0.9, hashable >=1.2 && <2, hashtables >=1.1 && <2, @@ -84,7 +83,6 @@ test-suite tasty Main.Statements Main.Prelude build-depends: - data-default-class, hasql, QuickCheck >=2.8.1 && <3, quickcheck-instances >=0.3.11 && <0.4, diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index b9287bb451..aa3d4324f1 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -159,46 +159,6 @@ rowList = foldrRows strictCons [] --- ** Instances -------------------------- - --- | Maps to 'unit'. -instance Default (Result ()) where - {-# INLINE def #-} - def = - unit - --- | Maps to 'rowsAffected'. -instance Default (Result Int64) where - {-# INLINE def #-} - def = - rowsAffected - --- | Maps to @('rowMaybe' def)@. -instance Default (Row a) => Default (Result (Maybe a)) where - {-# INLINE def #-} - def = - rowMaybe def - --- | Maps to @('rowVector' def)@. -instance Default (Row a) => Default (Result (Vector a)) where - {-# INLINE def #-} - def = - rowVector def - --- | Maps to @('rowList' def)@. -instance Default (Row a) => Default (Result ([] a)) where - {-# INLINE def #-} - def = - rowList def - --- | Maps to @(fmap Identity ('singleRow' def)@. -instance Default (Row a) => Default (Result (Identity a)) where - {-# INLINE def #-} - def = - fmap Identity (singleRow def) - - -- * Row ------------------------- @@ -233,25 +193,6 @@ nullableColumn (Value imp) = Row (Row.value imp) --- ** Instances -------------------------- - -instance Default (Value a) => Default (Row (Identity a)) where - {-# INLINE def #-} - def = - fmap Identity (column def) - -instance Default (Value a) => Default (Row (Maybe a)) where - {-# INLINE def #-} - def = - nullableColumn def - -instance (Default (Value a1), Default (Value a2)) => Default (Row (a1, a2)) where - {-# INLINE def #-} - def = - ap (fmap (,) (column def)) (column def) - - -- * Value ------------------------- @@ -507,136 +448,6 @@ enum mapping = Value (Value.decoder (const (A.enum mapping))) --- ** Instances -------------------------- - --- | --- Maps to 'bool'. -instance Default (Value Bool) where - {-# INLINE def #-} - def = - bool - --- | --- Maps to 'int2'. -instance Default (Value Int16) where - {-# INLINE def #-} - def = - int2 - --- | --- Maps to 'int4'. -instance Default (Value Int32) where - {-# INLINE def #-} - def = - int4 - --- | --- Maps to 'int8'. -instance Default (Value Int64) where - {-# INLINE def #-} - def = - int8 - --- | --- Maps to 'float4'. -instance Default (Value Float) where - {-# INLINE def #-} - def = - float4 - --- | --- Maps to 'float8'. -instance Default (Value Double) where - {-# INLINE def #-} - def = - float8 - --- | --- Maps to 'numeric'. -instance Default (Value B.Scientific) where - {-# INLINE def #-} - def = - numeric - --- | --- Maps to 'char'. -instance Default (Value Char) where - {-# INLINE def #-} - def = - char - --- | --- Maps to 'text'. -instance Default (Value Text) where - {-# INLINE def #-} - def = - text - --- | --- Maps to 'bytea'. -instance Default (Value ByteString) where - {-# INLINE def #-} - def = - bytea - --- | --- Maps to 'date'. -instance Default (Value B.Day) where - {-# INLINE def #-} - def = - date - --- | --- Maps to 'timestamp'. -instance Default (Value B.LocalTime) where - {-# INLINE def #-} - def = - timestamp - --- | --- Maps to 'timestamptz'. -instance Default (Value B.UTCTime) where - {-# INLINE def #-} - def = - timestamptz - --- | --- Maps to 'time'. -instance Default (Value B.TimeOfDay) where - {-# INLINE def #-} - def = - time - --- | --- Maps to 'timetz'. -instance Default (Value (B.TimeOfDay, B.TimeZone)) where - {-# INLINE def #-} - def = - timetz - --- | --- Maps to 'interval'. -instance Default (Value B.DiffTime) where - {-# INLINE def #-} - def = - interval - --- | --- Maps to 'uuid'. -instance Default (Value B.UUID) where - {-# INLINE def #-} - def = - uuid - --- | --- Maps to 'json'. -instance Default (Value B.Value) where - {-# INLINE def #-} - def = - json - - -- * Array decoders ------------------------- diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index e525a17166..7f5f7e88f6 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -136,42 +136,6 @@ nullableParam (Value x) = Params (Params.nullableValue x) --- ** Instances -------------------------- - --- | --- Maps to 'unit'. -instance Default (Params ()) where - {-# INLINE def #-} - def = - unit - -instance Default (Value a) => Default (Params (Identity a)) where - {-# INLINE def #-} - def = - contramap runIdentity (param def) - -instance (Default (Value a1), Default (Value a2)) => Default (Params (a1, a2)) where - {-# INLINE def #-} - def = - contrazip2 (param def) (param def) - -instance (Default (Value a1), Default (Value a2), Default (Value a3)) => Default (Params (a1, a2, a3)) where - {-# INLINE def #-} - def = - contrazip3 (param def) (param def) (param def) - -instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4)) => Default (Params (a1, a2, a3, a4)) where - {-# INLINE def #-} - def = - contrazip4 (param def) (param def) (param def) (param def) - -instance (Default (Value a1), Default (Value a2), Default (Value a3), Default (Value a4), Default (Value a5)) => Default (Params (a1, a2, a3, a4, a5)) where - {-# INLINE def #-} - def = - contrazip5 (param def) (param def) (param def) (param def) (param def) - - -- * Value Encoder ------------------------- @@ -372,118 +336,6 @@ unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) --- ** Instances -------------------------- - --- | Maps to 'bool'. -instance Default (Value Bool) where - {-# INLINE def #-} - def = - bool - --- | Maps to 'int2'. -instance Default (Value Int16) where - {-# INLINE def #-} - def = - int2 - --- | Maps to 'int4'. -instance Default (Value Int32) where - {-# INLINE def #-} - def = - int4 - --- | Maps to 'int8'. -instance Default (Value Int64) where - {-# INLINE def #-} - def = - int8 - --- | Maps to 'float4'. -instance Default (Value Float) where - {-# INLINE def #-} - def = - float4 - --- | Maps to 'float8'. -instance Default (Value Double) where - {-# INLINE def #-} - def = - float8 - --- | Maps to 'numeric'. -instance Default (Value B.Scientific) where - {-# INLINE def #-} - def = - numeric - --- | Maps to 'char'. -instance Default (Value Char) where - {-# INLINE def #-} - def = - char - --- | Maps to 'text'. -instance Default (Value Text) where - {-# INLINE def #-} - def = - text - --- | Maps to 'bytea'. -instance Default (Value ByteString) where - {-# INLINE def #-} - def = - bytea - --- | Maps to 'date'. -instance Default (Value B.Day) where - {-# INLINE def #-} - def = - date - --- | Maps to 'timestamp'. -instance Default (Value B.LocalTime) where - {-# INLINE def #-} - def = - timestamp - --- | Maps to 'timestamptz'. -instance Default (Value B.UTCTime) where - {-# INLINE def #-} - def = - timestamptz - --- | Maps to 'time'. -instance Default (Value B.TimeOfDay) where - {-# INLINE def #-} - def = - time - --- | Maps to 'timetz'. -instance Default (Value (B.TimeOfDay, B.TimeZone)) where - {-# INLINE def #-} - def = - timetz - --- | Maps to 'interval'. -instance Default (Value B.DiffTime) where - {-# INLINE def #-} - def = - interval - --- | Maps to 'uuid'. -instance Default (Value B.UUID) where - {-# INLINE def #-} - def = - uuid - --- | Maps to 'json'. -instance Default (Value B.Value) where - {-# INLINE def #-} - def = - json - - -- * Array ------------------------- diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index b069065624..7d91ca6dd4 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -36,10 +36,6 @@ import Data.Functor.Identity as Exports ------------------------- import Control.Monad.Error.Class as Exports (MonadError (..)) --- data-default-class -------------------------- -import Data.Default.Class as Exports - -- profunctors ------------------------- import Data.Profunctor.Unsafe as Exports diff --git a/tasty/Main.hs b/tasty/Main.hs index 54f90eefbc..b14a5f7f59 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -438,7 +438,7 @@ tree = DSL.statement () $ Statements.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.statement () $ Statement.Statement sql def decoder False + DSL.statement () $ Statement.Statement sql mempty decoder False where sql = "delete from a" @@ -452,8 +452,8 @@ tree = DSL.session $ do DSL.statement () $ Statements.plain $ "drop table if exists a" DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False - id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" def (Decoders.singleRow (Decoders.column Decoders.int4)) False + id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow (Decoders.column Decoders.int4)) False + id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow (Decoders.column Decoders.int4)) False DSL.statement () $ Statements.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index c7f8dfba12..ac88b09fa5 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -8,7 +8,3 @@ where -- rerebase ------------------------- import Prelude as Exports - --- data-default-class -------------------------- -import Data.Default.Class as Exports diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index a3e1403d64..f31f6ac40e 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -1,16 +1,12 @@ module Main.Statements where -import Main.Prelude hiding (def) +import Main.Prelude import qualified Hasql.Statement as HQ import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD import qualified Main.Prelude as Prelude -def :: ByteString -> HQ.Statement () () -def sql = - HQ.Statement sql Prelude.def Prelude.def False - plain :: ByteString -> HQ.Statement () () plain sql = HQ.Statement sql mempty HD.unit False From 19345cf624a6296a36a215b45e92c5ccadd4da11 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 19:24:27 +0300 Subject: [PATCH 0509/1204] Redesign the encoders --- hasql.cabal | 1 + library/Hasql/Encoders.hs | 396 ++---------------------------- library/Hasql/Private/Encoders.hs | 371 ++++++++++++++++++++++++++++ library/Hasql/Private/Prelude.hs | 4 + library/Hasql/Statement.hs | 53 +++- tasty/Main.hs | 42 ++-- threads-test/Main/Statements.hs | 2 +- 7 files changed, 459 insertions(+), 410 deletions(-) create mode 100644 library/Hasql/Private/Encoders.hs diff --git a/hasql.cabal b/hasql.cabal index 9188bd8d6d..5136b957ad 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -46,6 +46,7 @@ library Hasql.Private.Decoders.Row Hasql.Private.Decoders.Result Hasql.Private.Decoders.Results + Hasql.Private.Encoders Hasql.Private.Encoders.Array Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 7f5f7e88f6..d2a9303913 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -1,14 +1,25 @@ --- | --- A DSL for declaration of query parameter encoders. +{-| +A DSL for declaration of statement parameter encoders. + +For compactness of names all the types defined here imply being an encoder. +E.g., the `Array` type is an __encoder__ of arrays, not the data-structure itself. +-} module Hasql.Encoders ( - -- * Params + -- * Parameters product Params, - unit, + noParams, param, - nullableParam, - -- * Value - Value, + -- * Nullability + NullableOrNot, + nonNullable, + nullable, + -- * Param + Param, + primitive, + array, + -- * Primitive + Primitive, bool, int2, int4, @@ -31,381 +42,14 @@ module Hasql.Encoders jsonBytes, jsonb, jsonbBytes, - array, enum, unknown, -- * Array Array, element, - nullableElement, dimension, - -- ** Insert Many - -- $insertMany + foldableDimension, ) where -import Hasql.Private.Prelude hiding (bool) -import qualified PostgreSQL.Binary.Encoding as A -import qualified PostgreSQL.Binary.Data as B -import qualified Text.Builder as C -import qualified Hasql.Private.Encoders.Params as Params -import qualified Hasql.Private.Encoders.Value as Value -import qualified Hasql.Private.Encoders.Array as Array -import qualified Hasql.Private.PTI as PTI -import qualified Hasql.Private.Prelude as Prelude - --- * Parameters Product Encoder -------------------------- - --- | --- Encoder of some representation of the parameters product. --- --- Has instances of 'Contravariant', 'Divisible' and 'Monoid', --- which you can use to compose multiple parameters together. --- E.g., --- --- @ --- someParamsEncoder :: 'Params' (Int64, Maybe Text) --- someParamsEncoder = --- 'contramap' 'fst' ('param' 'int8') '<>' --- 'contramap' 'snd' ('nullableParam' 'text') --- @ --- --- As a general solution for tuples of any arity, instead of 'fst' and 'snd', --- consider the functions of the @contrazip@ family --- from the \"contravariant-extras\" package. --- E.g., here's how you can achieve the same as the above: --- --- @ --- someParamsEncoder :: 'Params' (Int64, Maybe Text) --- someParamsEncoder = --- 'contrazip2' ('param' 'int8') ('nullableParam' 'text') --- @ --- --- Here's how you can implement encoders for custom composite types: --- --- @ --- data Person = --- Person { name :: Text, gender :: Gender, age :: Int } --- --- data Gender = --- Male | Female --- --- personParams :: 'Params' Person --- personParams = --- 'contramap' name ('param' 'text') '<>' --- 'contramap' gender ('param' genderValue) '<>' --- 'contramap' (fromIntegral . age) ('param' 'int8') --- --- genderValue :: 'Value' Gender --- genderValue = --- 'contramap' genderText 'text' --- where --- genderText gender = --- case gender of --- Male -> "male" --- Female -> "female" --- @ --- -newtype Params a = - Params (Params.Params a) - deriving (Contravariant, Divisible, Decidable, Monoid, Semigroup) - --- | --- Encode no parameters. --- -{-# INLINABLE unit #-} -unit :: Params () -unit = - Params mempty - --- | --- Lift an individual value encoder to a parameters encoder. --- -{-# INLINABLE param #-} -param :: Value a -> Params a -param (Value x) = - Params (Params.value x) - --- | --- Lift an individual nullable value encoder to a parameters encoder. --- -{-# INLINABLE nullableParam #-} -nullableParam :: Value a -> Params (Maybe a) -nullableParam (Value x) = - Params (Params.nullableValue x) - - --- * Value Encoder -------------------------- - --- | --- An individual value encoder. --- Will be mapped to a single placeholder in the query. --- -newtype Value a = - Value (Value.Value a) - deriving (Contravariant) - --- | --- Encoder of @BOOL@ values. -{-# INLINABLE bool #-} -bool :: Value Bool -bool = - Value (Value.unsafePTIWithShow PTI.bool (const A.bool)) - --- | --- Encoder of @INT2@ values. -{-# INLINABLE int2 #-} -int2 :: Value Int16 -int2 = - Value (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) - --- | --- Encoder of @INT4@ values. -{-# INLINABLE int4 #-} -int4 :: Value Int32 -int4 = - Value (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) - --- | --- Encoder of @INT8@ values. -{-# INLINABLE int8 #-} -int8 :: Value Int64 -int8 = - Value (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) - --- | --- Encoder of @FLOAT4@ values. -{-# INLINABLE float4 #-} -float4 :: Value Float -float4 = - Value (Value.unsafePTIWithShow PTI.float4 (const A.float4)) - --- | --- Encoder of @FLOAT8@ values. -{-# INLINABLE float8 #-} -float8 :: Value Double -float8 = - Value (Value.unsafePTIWithShow PTI.float8 (const A.float8)) - --- | --- Encoder of @NUMERIC@ values. -{-# INLINABLE numeric #-} -numeric :: Value B.Scientific -numeric = - Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) - --- | --- Encoder of @CHAR@ values. --- Note that it supports UTF-8 values and --- identifies itself under the @TEXT@ OID because of that. -{-# INLINABLE char #-} -char :: Value Char -char = - Value (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) - --- | --- Encoder of @TEXT@ values. -{-# INLINABLE text #-} -text :: Value Text -text = - Value (Value.unsafePTIWithShow PTI.text (const A.text_strict)) - --- | --- Encoder of @BYTEA@ values. -{-# INLINABLE bytea #-} -bytea :: Value ByteString -bytea = - Value (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) - --- | --- Encoder of @DATE@ values. -{-# INLINABLE date #-} -date :: Value B.Day -date = - Value (Value.unsafePTIWithShow PTI.date (const A.date)) - --- | --- Encoder of @TIMESTAMP@ values. -{-# INLINABLE timestamp #-} -timestamp :: Value B.LocalTime -timestamp = - Value (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) - --- | --- Encoder of @TIMESTAMPTZ@ values. -{-# INLINABLE timestamptz #-} -timestamptz :: Value B.UTCTime -timestamptz = - Value (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) - --- | --- Encoder of @TIME@ values. -{-# INLINABLE time #-} -time :: Value B.TimeOfDay -time = - Value (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) - --- | --- Encoder of @TIMETZ@ values. -{-# INLINABLE timetz #-} -timetz :: Value (B.TimeOfDay, B.TimeZone) -timetz = - Value (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) - --- | --- Encoder of @INTERVAL@ values. -{-# INLINABLE interval #-} -interval :: Value B.DiffTime -interval = - Value (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) - --- | --- Encoder of @UUID@ values. -{-# INLINABLE uuid #-} -uuid :: Value B.UUID -uuid = - Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) - --- | --- Encoder of @INET@ values. -{-# INLINABLE inet #-} -inet :: Value (B.NetAddr B.IP) -inet = - Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) - --- | --- Encoder of @JSON@ values from JSON AST. -{-# INLINABLE json #-} -json :: Value B.Value -json = - Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) - --- | --- Encoder of @JSON@ values from raw JSON. -{-# INLINABLE jsonBytes #-} -jsonBytes :: Value ByteString -jsonBytes = - Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) - --- | --- Encoder of @JSONB@ values from JSON AST. -{-# INLINABLE jsonb #-} -jsonb :: Value B.Value -jsonb = - Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) - --- | --- Encoder of @JSONB@ values from raw JSON. -{-# INLINABLE jsonbBytes #-} -jsonbBytes :: Value ByteString -jsonbBytes = - Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) - --- | --- Unlifts the 'Array' encoder to the plain 'Value' encoder. -{-# INLINABLE array #-} -array :: Array a -> Value a -array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = - let - encoder env input = - A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) - in Value (Value.Value arrayOID arrayOID encoder renderer) - --- | --- Given a function, --- which maps the value into the textual enum label from the DB side, --- produces a encoder of that value. -{-# INLINABLE enum #-} -enum :: (a -> Text) -> Value a -enum mapping = - Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) - --- | --- Identifies the value with the PostgreSQL's \"unknown\" type, --- thus leaving it up to Postgres to infer the actual type of the value. --- --- The value transimitted is any value encoded in the Postgres' Text data format. --- For reference, see the --- --- section of the Postgres' documentation. -{-# INLINABLE unknown #-} -unknown :: Value ByteString -unknown = - Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) - - --- * Array -------------------------- - --- | --- A generic array encoder. --- --- Here's an example of its usage: --- --- >x :: Value [[Int64]] --- >x = --- > array (dimension foldl' (dimension foldl' (element int8))) --- --- Please note that the PostgreSQL __IN__ keyword does not "accept" an array, but rather a syntactical list of --- values, thus this encoder is not suited for that. Use a **field** = ANY($1) query instead. --- -newtype Array a = - Array (Array.Array a) - --- | --- Lifts the 'Value' encoder into the 'Array' encoder of a non-nullable value. -{-# INLINABLE element #-} -element :: Value a -> Array a -element (Value (Value.Value elementOID arrayOID encoder renderer)) = - Array (Array.value elementOID arrayOID encoder renderer) - --- | --- Lifts the 'Value' encoder into the 'Array' encoder of a nullable value. -{-# INLINABLE nullableElement #-} -nullableElement :: Value a -> Array (Maybe a) -nullableElement (Value (Value.Value elementOID arrayOID encoder renderer)) = - Array (Array.nullableValue elementOID arrayOID encoder renderer) - --- | --- An encoder of an array dimension, --- which thus provides support for multidimensional arrays. --- --- Accepts: --- --- * An implementation of the left-fold operation, --- such as @Data.Foldable.'foldl''@, --- which determines the input value. --- --- * A component encoder, which can be either another 'dimension', --- 'element' or 'nullableElement'. --- -{-# INLINABLE dimension #-} -dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c -dimension foldl (Array imp) = - Array (Array.dimension foldl imp) - --- $insertMany --- It is not currently possible to pass in an array of encodable values --- to use in an 'insert many' statement using Hasql. Instead, PostgreSQL's --- (9.4 or later) `unnest` function can be used to in an analogous way --- to haskell's `zip` function by passing in multiple arrays of values --- to be zipped into the rows we want to insert: --- --- @ --- insertMultipleLocations :: Statement (Vector (UUID, Double, Double)) () --- insertMultipleLocations = --- statement sql encoder decoder True --- where --- sql = --- "insert into location (id, x, y) select * from unnest ($1, $2, $3)" --- encoder = --- contramap Vector.unzip3 $ --- contrazip3 (vector Encoders.uuid) (vector Encoders.float8) (vector Encoders.float8) --- where --- vector value = --- Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element value))) --- decoder = --- Decoders.unit --- @ +import Hasql.Private.Encoders diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs new file mode 100644 index 0000000000..7525065199 --- /dev/null +++ b/library/Hasql/Private/Encoders.hs @@ -0,0 +1,371 @@ +{-| +A DSL for declaration of query parameter encoders. +-} +module Hasql.Private.Encoders +where + +import Hasql.Private.Prelude hiding (bool) +import qualified PostgreSQL.Binary.Encoding as A +import qualified PostgreSQL.Binary.Data as B +import qualified Text.Builder as C +import qualified Hasql.Private.Encoders.Params as Params +import qualified Hasql.Private.Encoders.Value as Value +import qualified Hasql.Private.Encoders.Array as Array +import qualified Hasql.Private.PTI as PTI +import qualified Hasql.Private.Prelude as Prelude + + +-- * Parameters Product Encoder +------------------------- + +{-| +Encoder of some representation of a parameters product. + +Has instances of 'Contravariant', 'Divisible' and 'Monoid', +which you can use to compose multiple parameters together. +E.g., + +@ +someParamsEncoder :: 'Params' (Int64, Maybe Text) +someParamsEncoder = + ('fst' '>$<' 'param' ('nonNullable' ('primitive' 'int8'))) '<>' + ('snd' '>$<' 'param' ('nullable' ('primitive' 'text'))) +@ + +As a general solution for tuples of any arity, instead of 'fst' and 'snd', +consider the functions of the @contrazip@ family +from the \"contravariant-extras\" package. +E.g., here's how you can achieve the same as the above: + +@ +someParamsEncoder :: 'Params' (Int64, Maybe Text) +someParamsEncoder = + 'contrazip2' ('param' ('nonNullable' ('primitive' 'int8'))) ('param' ('nullable' ('primitive' 'text'))) +@ + +Here's how you can implement encoders for custom composite types: + +@ +data Person = Person { name :: Text, gender :: Gender, age :: Int } + +data Gender = Male | Female + +personParams :: 'Params' Person +personParams = + (name '>$<' 'param' ('nonNullable' ('primitive' 'text'))) '<>' + (gender '>$<' 'param' ('nonNullable' ('primitive' genderPrimitive))) '<>' + ('fromIntegral' . age '>$<' 'param' ('nonNullable' ('primitive' 'int8'))) + +genderPrimitive :: 'Primitive' Gender +genderPrimitive = 'enum' genderText 'text' where + genderText gender = case gender of + Male -> "male" + Female -> "female" +@ +-} +newtype Params a = Params (Params.Params a) + deriving (Contravariant, Divisible, Decidable, Monoid, Semigroup) + +{-| +No parameters. Same as `mempty` and `conquered`. +-} +noParams :: Params () +noParams = mempty + +{-| +Lift a single parameter, with its nullability specified. +-} +param :: NullableOrNot Param a -> Params a +param = \ case + NonNullable (Param valueEnc) -> Params (Params.value valueEnc) + Nullable (Param valueEnc) -> Params (Params.nullableValue valueEnc) + + +-- * Nullability +------------------------- + +{-| +Extensional specification of nullability over a generic encoder. +-} +data NullableOrNot encoder a where + NonNullable :: encoder a -> NullableOrNot encoder a + Nullable :: encoder a -> NullableOrNot encoder (Maybe a) + +{-| +Specify that an encoder produces a non-nullable value. +-} +nonNullable :: encoder a -> NullableOrNot encoder a +nonNullable = NonNullable + +{-| +Specify that an encoder produces a nullable value. +-} +nullable :: encoder a -> NullableOrNot encoder (Maybe a) +nullable = Nullable + + +-- * Param +------------------------- + +{-| +An individual parameter encoder. +Will be mapped to a single placeholder in the statement. +-} +newtype Param a = Param (Value.Value a) + deriving (Contravariant) + +{-| +Lift a primitive value encoder into a parameter encoder. +-} +primitive :: Primitive a -> Param a +primitive (Primitive valueEnc) = Param valueEnc + +{-| +Lift an array encoder into a parameter encoder. +-} +array :: Array a -> Param a +array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let + encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) + in Param (Value.Value arrayOID arrayOID encoder renderer) + + +-- * Primitive +------------------------- + +{-| +Primitive value encoder. +-} +newtype Primitive a = Primitive (Value.Value a) + deriving (Contravariant) + +{-| +Encoder of @BOOL@ values. +-} +{-# INLINABLE bool #-} +bool :: Primitive Bool +bool = Primitive (Value.unsafePTIWithShow PTI.bool (const A.bool)) + +{-| +Encoder of @INT2@ values. +-} +{-# INLINABLE int2 #-} +int2 :: Primitive Int16 +int2 = Primitive (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) + +{-| +Encoder of @INT4@ values. +-} +{-# INLINABLE int4 #-} +int4 :: Primitive Int32 +int4 = Primitive (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) + +{-| +Encoder of @INT8@ values. +-} +{-# INLINABLE int8 #-} +int8 :: Primitive Int64 +int8 = Primitive (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) + +{-| +Encoder of @FLOAT4@ values. +-} +{-# INLINABLE float4 #-} +float4 :: Primitive Float +float4 = Primitive (Value.unsafePTIWithShow PTI.float4 (const A.float4)) + +{-| +Encoder of @FLOAT8@ values. +-} +{-# INLINABLE float8 #-} +float8 :: Primitive Double +float8 = Primitive (Value.unsafePTIWithShow PTI.float8 (const A.float8)) + +{-| +Encoder of @NUMERIC@ values. +-} +{-# INLINABLE numeric #-} +numeric :: Primitive B.Scientific +numeric = Primitive (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) + +{-| +Encoder of @CHAR@ values. +-} +-- Note that it supports UTF-8 values and +-- identifies itself under the @TEXT@ OID because of that. +{-# INLINABLE char #-} +char :: Primitive Char +char = Primitive (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) + +{-| +Encoder of @TEXT@ values. +-} +{-# INLINABLE text #-} +text :: Primitive Text +text = Primitive (Value.unsafePTIWithShow PTI.text (const A.text_strict)) + +{-| +Encoder of @BYTEA@ values. +-} +{-# INLINABLE bytea #-} +bytea :: Primitive ByteString +bytea = Primitive (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) + +{-| +Encoder of @DATE@ values. +-} +{-# INLINABLE date #-} +date :: Primitive B.Day +date = Primitive (Value.unsafePTIWithShow PTI.date (const A.date)) + +{-| +Encoder of @TIMESTAMP@ values. +-} +{-# INLINABLE timestamp #-} +timestamp :: Primitive B.LocalTime +timestamp = Primitive (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) + +{-| +Encoder of @TIMESTAMPTZ@ values. +-} +{-# INLINABLE timestamptz #-} +timestamptz :: Primitive B.UTCTime +timestamptz = Primitive (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) + +{-| +Encoder of @TIME@ values. +-} +{-# INLINABLE time #-} +time :: Primitive B.TimeOfDay +time = Primitive (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) + +{-| +Encoder of @TIMETZ@ values. +-} +{-# INLINABLE timetz #-} +timetz :: Primitive (B.TimeOfDay, B.TimeZone) +timetz = Primitive (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) + +{-| +Encoder of @INTERVAL@ values. +-} +{-# INLINABLE interval #-} +interval :: Primitive B.DiffTime +interval = Primitive (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) + +{-| +Encoder of @UUID@ values. +-} +{-# INLINABLE uuid #-} +uuid :: Primitive B.UUID +uuid = Primitive (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) + +{-| +Encoder of @INET@ values. +-} +{-# INLINABLE inet #-} +inet :: Primitive (B.NetAddr B.IP) +inet = Primitive (Value.unsafePTIWithShow PTI.inet (const A.inet)) + +{-| +Encoder of @JSON@ values from JSON AST. +-} +{-# INLINABLE json #-} +json :: Primitive B.Value +json = Primitive (Value.unsafePTIWithShow PTI.json (const A.json_ast)) + +{-| +Encoder of @JSON@ values from raw JSON. +-} +{-# INLINABLE jsonBytes #-} +jsonBytes :: Primitive ByteString +jsonBytes = Primitive (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) + +{-| +Encoder of @JSONB@ values from JSON AST. +-} +{-# INLINABLE jsonb #-} +jsonb :: Primitive B.Value +jsonb = Primitive (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) + +{-| +Encoder of @JSONB@ values from raw JSON. +-} +{-# INLINABLE jsonbBytes #-} +jsonbBytes :: Primitive ByteString +jsonbBytes = Primitive (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) + +{-| +Given a function, +which maps a value into a textual enum label used on the DB side, +produces an encoder of that value. +-} +{-# INLINABLE enum #-} +enum :: (a -> Text) -> Primitive a +enum mapping = Primitive (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) + +{-| +Identifies the value with the PostgreSQL's \"unknown\" type, +thus leaving it up to Postgres to infer the actual type of the value. + +The value transimitted is any value encoded in the Postgres' Text data format. +For reference, see the + +section of the Postgres' documentation. +-} +{-# INLINABLE unknown #-} +unknown :: Primitive ByteString +unknown = Primitive (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) + + +-- * Array +------------------------- + +{-| +Generic array encoder. + +Here's an example of its usage: + +@ +someParamsEncoder :: 'Params' [[Int64]] +someParamsEncoder = 'param' ('nonNullable' ('array' ('foldableDimension' ('foldableDimension' ('element' ('nonNullable' 'int8')))))) +@ + +Please note that the PostgreSQL __IN__ keyword does not accept an array, but rather a syntactical list of +values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condition instead. +-} +newtype Array a = Array (Array.Array a) + +{-| +Lifts a 'Primitive' encoder into an 'Array' encoder. +-} +element :: NullableOrNot Primitive a -> Array a +element = \ case + NonNullable (Primitive (Value.Value elementOID arrayOID encoder renderer)) -> + Array (Array.value elementOID arrayOID encoder renderer) + Nullable (Primitive (Value.Value elementOID arrayOID encoder renderer)) -> + Array (Array.nullableValue elementOID arrayOID encoder renderer) + +{-| +Encoder of an array dimension, +which thus provides support for multidimensional arrays. + +Accepts: + +* An implementation of the left-fold operation, +such as @Data.Foldable.'foldl''@, +which determines the input value. + +* A component encoder, which can be either another 'dimension', +'element' or 'nullableElement'. +-} +{-# INLINABLE dimension #-} +dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c +dimension foldl (Array imp) = Array (Array.dimension foldl imp) + +{-| +Same as 'dimension', but specialized to 'Foldable' values, +which includes such structures as list and 'Vector'. +-} +{-# INLINE foldableDimension #-} +foldableDimension :: Foldable foldable => Array a -> Array (foldable a) +foldableDimension = dimension foldl' diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 7d91ca6dd4..e6964c32be 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -81,6 +81,10 @@ import Development.Placeholders as Exports ------------------------- import Debug.Trace.LocationTH as Exports +-- postgresql-binary +------------------------- +import PostgreSQL.Binary.Data as Exports (UUID) + -- custom ------------------------- import qualified Debug.Trace.LocationTH diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 8a0a70f23b..9375ed0cb5 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -1,4 +1,36 @@ module Hasql.Statement +( + Statement(..), + -- * Recipies + -- ** Insert many + -- | + -- It is not currently possible to pass in an array of encodable values + -- to use in an insert many statement. Instead, PostgreSQL's + -- (9.4 or later) @unnest@ function can be used in an analogous way + -- to haskell's `zip` function by passing in multiple arrays of values + -- to be zipped into the rows we want to insert: + -- + -- @ + -- insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () + -- insertMultipleLocations = 'Statement' sql encoder decoder True where + -- sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" + -- encoder = + -- contramap Vector.'Data.Vector.unzip3' $ + -- contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') + -- where + -- vector = + -- Encoders.'Encoders.param' . + -- Encoders.'Encoders.nonNullable' . + -- Encoders.'Encoders.array' . + -- Encoders.'Encoders.foldableDimension' . + -- Encoders.'Encoders.element' . + -- Encoders.'Encoders.nonNullable' + -- decoder = Decoders.'Decoders.unit' + -- @ + -- + -- This approach is much more efficient than executing a single-row Insert + -- statement multiple times. +) where import Hasql.Private.Prelude @@ -26,22 +58,17 @@ import qualified Hasql.Encoders as Encoders -- Following is an example of the declaration of a prepared statement with its associated codecs. -- -- @ --- selectSum :: Hasql.Statement.'Statement' (Int64, Int64) Int64 --- selectSum = --- Hasql.Statement.'Statement' sql encoder decoder True --- where --- sql = --- "select ($1 + $2)" --- encoder = --- 'contramap' 'fst' (Hasql.Encoders.'Hasql.Encoders.param' Hasql.Encoders.'Hasql.Encoders.int8') '<>' --- 'contramap' 'snd' (Hasql.Encoders.'Hasql.Encoders.param' Hasql.Encoders.'Hasql.Encoders.int8') --- decoder = --- Hasql.Decoders.'Hasql.Decoders.singleRow' (Hasql.Decoders.'Hasql.Decoders.column' Hasql.Decoders.'Hasql.Decoders.int8') +-- selectSum :: 'Statement' (Int64, Int64) Int64 +-- selectSum = 'Statement' sql encoder decoder True where +-- sql = "select ($1 + $2)" +-- encoder = +-- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' (Encoders.'Hasql.Encoders.primitive' Encoders.'Hasql.Encoders.int8'))) '<>' +-- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' (Encoders.'Hasql.Encoders.primitive' Encoders.'Hasql.Encoders.text'))) +-- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' Decoders.'Hasql.Decoders.int8') -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. --- data Statement a b = Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool @@ -53,3 +80,5 @@ instance Profunctor Statement where {-# INLINE dimap #-} dimap f1 f2 (Statement template encoder decoder preparable) = Statement template (contramap f1 encoder) (fmap f2 decoder) preparable + + diff --git a/tasty/Main.hs b/tasty/Main.hs index b14a5f7f59..9847dd3339 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -29,8 +29,8 @@ tree = where encoder = contrazip2 - (Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8)))) - (Encoders.param Encoders.text) + (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text))) decoder = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = @@ -47,7 +47,7 @@ tree = Statement.Statement "select true where 1 = any ($1)" encoder decoder True where encoder = - Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = @@ -65,7 +65,7 @@ tree = Statement.Statement "select true where 3 <> all ($1)" encoder decoder True where encoder = - Encoders.param (Encoders.array (Encoders.dimension foldl' (Encoders.element Encoders.int8))) + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) session = @@ -85,7 +85,7 @@ tree = sql = "select (1, true)" encoder = - Encoders.unit + mempty decoder = Decoders.singleRow (Decoders.column (Decoders.composite ((,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool))) session = @@ -102,7 +102,7 @@ tree = sql = "select (1, true) as entity1, ('hello', 3) as entity2" encoder = - Encoders.unit + mempty decoder = Decoders.singleRow $ (,) <$> Decoders.column entity1 <*> Decoders.column entity2 @@ -135,7 +135,7 @@ tree = sql = "select array[]::int8[]" encoder = - Encoders.unit + mempty decoder = Decoders.singleRow (Decoders.column (Decoders.array (Decoders.dimension replicateM (Decoders.element Decoders.int8)))) in io @@ -162,7 +162,7 @@ tree = sql = "absurd" encoder = - Encoders.unit + mempty decoder = Decoders.unit in io @@ -185,7 +185,7 @@ tree = sql = "select $1 :: int8" encoder = - Encoders.param Encoders.int8 + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) decoder = Decoders.singleRow $ Decoders.column Decoders.int8 fail = @@ -201,8 +201,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param Encoders.int8) <> - contramap snd (Encoders.param Encoders.int8) + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> + contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) decoder = Decoders.singleRow (Decoders.column Decoders.int8) sumSession :: Session.Session Int64 @@ -226,8 +226,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param Encoders.int8) <> - contramap snd (Encoders.param Encoders.int8) + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> + contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) decoder = Decoders.singleRow (Decoders.column Decoders.int8) session :: Session.Session Int64 @@ -255,7 +255,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = - Encoders.param (Encoders.interval) + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right True) x , @@ -272,7 +272,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = - Encoders.unit + Encoders.noParams in DSL.statement () statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , @@ -289,7 +289,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.interval))) encoder = - Encoders.param (Encoders.interval) + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , @@ -320,7 +320,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.bool))) encoder = - Encoders.param (Encoders.unknown) + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown)) in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right True) , @@ -351,7 +351,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.text))) encoder = - contramany (Encoders.param Encoders.unknown) + contramany (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown))) in DSL.statement ["1", "2", "4", "5", "6"] statement in actualIO >>= assertEqual "" (Right "3456") , @@ -382,7 +382,7 @@ tree = decoder = (Decoders.singleRow (Decoders.column (Decoders.enum (Just . id)))) encoder = - Encoders.param (Encoders.enum id) + Encoders.param (Encoders.nonNullable (Encoders.primitive (Encoders.enum id))) in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right "ok") , @@ -400,7 +400,7 @@ tree = sql = "select $1" encoder = - Encoders.param Encoders.text + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text)) decoder = (Decoders.singleRow (Decoders.column (Decoders.text))) effect2 = @@ -412,7 +412,7 @@ tree = sql = "select $1" encoder = - Encoders.param Encoders.int8 + Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) decoder = (Decoders.singleRow (Decoders.column Decoders.int8)) in (,) <$> effect1 <*> effect2 diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index ecd591a7a4..f652a7a0b8 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -13,7 +13,7 @@ selectSleep = sql = "select pg_sleep($1)" encoder = - E.param E.float8 + E.param (E.nonNullable (E.primitive E.float8)) decoder = D.unit From 68339eeabefdf10be0ac47b840d296ae71f36bc2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 May 2019 19:27:10 +0300 Subject: [PATCH 0510/1204] Ditch the coersion of encoders --- library/Hasql/Private/Session.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 87676bacb0..4145b3b971 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -7,6 +7,7 @@ import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Decoders.Results as Decoders.Results import qualified Hasql.Private.Decoders.Result as Decoders.Result import qualified Hasql.Private.Encoders.Params as Encoders.Params +import qualified Hasql.Private.Encoders as Encoders import qualified Hasql.Private.Settings as Settings import qualified Hasql.Private.IO as IO import qualified Hasql.Statement as Statement @@ -44,16 +45,16 @@ sql sql = -- | -- Parameters and a specification of a parametric single-statement query to apply them to. statement :: params -> Statement.Statement params result -> Session result -statement input (Statement.Statement template encoder decoder preparable) = +statement input (Statement.Statement template (Encoders.Params paramsEncoder) decoder preparable) = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT $ fmap (mapLeft (QueryError template inputReps)) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template (unsafeCoerce encoder) preparable input + r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) return $ r1 *> r2 where inputReps = let - Encoders.Params.Params (Op encoderOp) = (unsafeCoerce encoder) + Encoders.Params.Params (Op encoderOp) = paramsEncoder step (_, _, _, rendering) acc = rendering : acc in foldr step [] (encoderOp input) \ No newline at end of file From 590be494bc448bd47dded3d44390b8fbc8919dc4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 01:20:57 +0300 Subject: [PATCH 0511/1204] Redesign decoders --- benchmarks/Main.hs | 4 +- hasql.cabal | 1 + library/Hasql/Decoders.hs | 476 +----------------------------- library/Hasql/Private/Decoders.hs | 428 +++++++++++++++++++++++++++ profiling/Main.hs | 4 +- tasty/Main.hs | 42 +-- tasty/Main/Statements.hs | 2 +- 7 files changed, 463 insertions(+), 494 deletions(-) create mode 100644 library/Hasql/Private/Decoders.hs diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index c983951e01..7ec6572ad7 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -79,7 +79,7 @@ statementWithSingleRow = D.singleRow row where row = - tuple <$> D.column D.int8 <*> D.column D.int8 + tuple <$> (D.column . D.nonNullable) D.int8 <*> (D.column . D.nonNullable) D.int8 where tuple !a !b = (a, b) @@ -93,7 +93,7 @@ statementWithManyRows decoder = encoder = conquer rowDecoder = - tuple <$> D.column D.int8 <*> D.column D.int8 + tuple <$> (D.column . D.nonNullable) D.int8 <*> (D.column . D.nonNullable) D.int8 where tuple !a !b = (a, b) diff --git a/hasql.cabal b/hasql.cabal index 5136b957ad..e5e7f9d69b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -40,6 +40,7 @@ library Hasql.Private.PreparedStatementRegistry Hasql.Private.Settings Hasql.Private.Commands + Hasql.Private.Decoders Hasql.Private.Decoders.Array Hasql.Private.Decoders.Composite Hasql.Private.Decoders.Value diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index aa3d4324f1..a031ef5c17 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -1,5 +1,6 @@ --- | --- A DSL for declaration of result decoders. +{-| +A DSL for declaration of result decoders. +-} module Hasql.Decoders ( -- * Result @@ -17,7 +18,10 @@ module Hasql.Decoders -- * Row Row, column, - nullableColumn, + -- * Nullability + NullableOrNot, + nonNullable, + nullable, -- * Value Value, bool, @@ -51,474 +55,10 @@ module Hasql.Decoders Array, dimension, element, - nullableElement, -- * Composite Composite, field, - nullableField, ) where -import Hasql.Private.Prelude hiding (maybe, bool) -import qualified Data.Vector as Vector -import qualified PostgreSQL.Binary.Decoding as A -import qualified PostgreSQL.Binary.Data as B -import qualified Hasql.Private.Decoders.Results as Results -import qualified Hasql.Private.Decoders.Result as Result -import qualified Hasql.Private.Decoders.Row as Row -import qualified Hasql.Private.Decoders.Value as Value -import qualified Hasql.Private.Decoders.Array as Array -import qualified Hasql.Private.Decoders.Composite as Composite -import qualified Hasql.Private.Prelude as Prelude - --- * Result -------------------------- - --- | --- Decoder of a query result. --- -newtype Result a = - Result (Results.Results a) - deriving (Functor) - --- | --- Decode no value from the result. --- --- Useful for statements like @INSERT@ or @CREATE@. --- -{-# INLINABLE unit #-} -unit :: Result () -unit = - Result (Results.single Result.unit) - --- | --- Get the amount of rows affected by such statements as --- @UPDATE@ or @DELETE@. --- -{-# INLINABLE rowsAffected #-} -rowsAffected :: Result Int64 -rowsAffected = - Result (Results.single Result.rowsAffected) - --- | --- Exactly one row. --- Will raise the 'Hasql.Errors.UnexpectedAmountOfRows' error if it's any other. --- -{-# INLINABLE singleRow #-} -singleRow :: Row a -> Result a -singleRow (Row row) = - Result (Results.single (Result.single row)) - --- ** Multi-row traversers -------------------------- - --- | --- Foldl multiple rows. --- -{-# INLINABLE foldlRows #-} -foldlRows :: (a -> b -> a) -> a -> Row b -> Result a -foldlRows step init (Row row) = - Result (Results.single (Result.foldl step init row)) - --- | --- Foldr multiple rows. --- -{-# INLINABLE foldrRows #-} -foldrRows :: (b -> a -> a) -> a -> Row b -> Result a -foldrRows step init (Row row) = - Result (Results.single (Result.foldr step init row)) - --- ** Specialized multi-row results -------------------------- - --- | --- Maybe one row or none. --- -{-# INLINABLE rowMaybe #-} -rowMaybe :: Row a -> Result (Maybe a) -rowMaybe (Row row) = - Result (Results.single (Result.maybe row)) - --- | --- Zero or more rows packed into the vector. --- --- It's recommended to prefer this function to 'rowList', --- since it performs notably better. --- -{-# INLINABLE rowVector #-} -rowVector :: Row a -> Result (Vector a) -rowVector (Row row) = - Result (Results.single (Result.vector row)) - --- | --- Zero or more rows packed into the list. --- -{-# INLINABLE rowList #-} -rowList :: Row a -> Result [a] -rowList = - foldrRows strictCons [] - - --- * Row -------------------------- - --- | --- Decoder of an individual row, --- which gets composed of column value decoders. --- --- E.g.: --- --- >x :: Row (Maybe Int64, Text, TimeOfDay) --- >x = --- > (,,) <$> nullableColumn int8 <*> column text <*> column time --- -newtype Row a = - Row (Row.Row a) - deriving (Functor, Applicative, Monad) - --- | --- Lift an individual non-nullable value decoder to a composable row decoder. --- -{-# INLINABLE column #-} -column :: Value a -> Row a -column (Value imp) = - Row (Row.nonNullValue imp) - --- | --- Lift an individual nullable value decoder to a composable row decoder. --- -{-# INLINABLE nullableColumn #-} -nullableColumn :: Value a -> Row (Maybe a) -nullableColumn (Value imp) = - Row (Row.value imp) - - --- * Value -------------------------- - --- | --- Decoder of an individual value. --- -newtype Value a = - Value (Value.Value a) - deriving (Functor) - - --- ** Plain value decoders -------------------------- - --- | --- Decoder of the @BOOL@ values. --- -{-# INLINABLE bool #-} -bool :: Value Bool -bool = - Value (Value.decoder (const A.bool)) - --- | --- Decoder of the @INT2@ values. --- -{-# INLINABLE int2 #-} -int2 :: Value Int16 -int2 = - Value (Value.decoder (const A.int)) - --- | --- Decoder of the @INT4@ values. --- -{-# INLINABLE int4 #-} -int4 :: Value Int32 -int4 = - Value (Value.decoder (const A.int)) - --- | --- Decoder of the @INT8@ values. --- -{-# INLINABLE int8 #-} -int8 :: Value Int64 -int8 = - {-# SCC "int8" #-} - Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) - --- | --- Decoder of the @FLOAT4@ values. --- -{-# INLINABLE float4 #-} -float4 :: Value Float -float4 = - Value (Value.decoder (const A.float4)) - --- | --- Decoder of the @FLOAT8@ values. --- -{-# INLINABLE float8 #-} -float8 :: Value Double -float8 = - Value (Value.decoder (const A.float8)) - --- | --- Decoder of the @NUMERIC@ values. --- -{-# INLINABLE numeric #-} -numeric :: Value B.Scientific -numeric = - Value (Value.decoder (const A.numeric)) - --- | --- Decoder of the @CHAR@ values. --- Note that it supports UTF-8 values. -{-# INLINABLE char #-} -char :: Value Char -char = - Value (Value.decoder (const A.char)) - --- | --- Decoder of the @TEXT@ values. --- -{-# INLINABLE text #-} -text :: Value Text -text = - Value (Value.decoder (const A.text_strict)) - --- | --- Decoder of the @BYTEA@ values. --- -{-# INLINABLE bytea #-} -bytea :: Value ByteString -bytea = - Value (Value.decoder (const A.bytea_strict)) - --- | --- Decoder of the @DATE@ values. --- -{-# INLINABLE date #-} -date :: Value B.Day -date = - Value (Value.decoder (const A.date)) - --- | --- Decoder of the @TIMESTAMP@ values. --- -{-# INLINABLE timestamp #-} -timestamp :: Value B.LocalTime -timestamp = - Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) - --- | --- Decoder of the @TIMESTAMPTZ@ values. --- --- /NOTICE/ --- --- Postgres does not store the timezone information of @TIMESTAMPTZ@. --- Instead it stores a UTC value and performs silent conversions --- to the currently set timezone, when dealt with in the text format. --- However this library bypasses the silent conversions --- and communicates with Postgres using the UTC values directly. -{-# INLINABLE timestamptz #-} -timestamptz :: Value B.UTCTime -timestamptz = - Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) - --- | --- Decoder of the @TIME@ values. --- -{-# INLINABLE time #-} -time :: Value B.TimeOfDay -time = - Value (Value.decoder (Prelude.bool A.time_float A.time_int)) - --- | --- Decoder of the @TIMETZ@ values. --- --- Unlike in case of @TIMESTAMPTZ@, --- Postgres does store the timezone information for @TIMETZ@. --- However the Haskell's \"time\" library does not contain any composite type, --- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' --- to represent a value on the Haskell's side. -{-# INLINABLE timetz #-} -timetz :: Value (B.TimeOfDay, B.TimeZone) -timetz = - Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) - --- | --- Decoder of the @INTERVAL@ values. --- -{-# INLINABLE interval #-} -interval :: Value B.DiffTime -interval = - Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) - --- | --- Decoder of the @UUID@ values. --- -{-# INLINABLE uuid #-} -uuid :: Value B.UUID -uuid = - Value (Value.decoder (const A.uuid)) - --- | --- Decoder of the @INET@ values. --- -{-# INLINABLE inet #-} -inet :: Value (B.NetAddr B.IP) -inet = - Value (Value.decoder (const A.inet)) - --- | --- Decoder of the @JSON@ values into a JSON AST. --- -{-# INLINABLE json #-} -json :: Value B.Value -json = - Value (Value.decoder (const A.json_ast)) - --- | --- Decoder of the @JSON@ values into a raw JSON 'ByteString'. --- -{-# INLINABLE jsonBytes #-} -jsonBytes :: (ByteString -> Either Text a) -> Value a -jsonBytes fn = - Value (Value.decoder (const (A.json_bytes fn))) - --- | --- Decoder of the @JSONB@ values into a JSON AST. --- -{-# INLINABLE jsonb #-} -jsonb :: Value B.Value -jsonb = - Value (Value.decoder (const A.jsonb_ast)) - --- | --- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. --- -{-# INLINABLE jsonbBytes #-} -jsonbBytes :: (ByteString -> Either Text a) -> Value a -jsonbBytes fn = - Value (Value.decoder (const (A.jsonb_bytes fn))) - --- | --- Lifts a custom value decoder function to a 'Value' decoder. --- -{-# INLINABLE custom #-} -custom :: (Bool -> ByteString -> Either Text a) -> Value a -custom fn = - Value (Value.decoderFn fn) - - --- ** Composite value decoders -------------------------- - --- | --- Lifts the 'Array' decoder to the 'Value' decoder. --- -{-# INLINABLE array #-} -array :: Array a -> Value a -array (Array imp) = - Value (Value.decoder (Array.run imp)) - --- | --- Lifts the 'Composite' decoder to the 'Value' decoder. --- -{-# INLINABLE composite #-} -composite :: Composite a -> Value a -composite (Composite imp) = - Value (Value.decoder (Composite.run imp)) - --- | --- A generic decoder of @HSTORE@ values. --- --- Here's how you can use it to construct a specific value: --- --- @ --- x :: Value [(Text, Maybe Text)] --- x = --- hstore 'replicateM' --- @ --- -{-# INLINABLE hstore #-} -hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a -hstore replicateM = - Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) - --- | --- Given a partial mapping from text to value, --- produces a decoder of that value. -enum :: (Text -> Maybe a) -> Value a -enum mapping = - Value (Value.decoder (const (A.enum mapping))) - - --- * Array decoders -------------------------- - --- | --- A generic array decoder. --- --- Here's how you can use it to produce a specific array value decoder: --- --- @ --- x :: Value [[Text]] --- x = --- array (dimension 'replicateM' (dimension 'replicateM' (element text))) --- @ --- -newtype Array a = - Array (Array.Array a) - deriving (Functor) - --- | --- A function for parsing a dimension of an array. --- Provides support for multi-dimensional arrays. --- --- Accepts: --- --- * An implementation of the @replicateM@ function --- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), --- which determines the output value. --- --- * A decoder of its components, which can be either another 'dimension', --- 'element' or 'nullableElement'. --- -{-# INLINABLE dimension #-} -dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b -dimension replicateM (Array imp) = - Array (Array.dimension replicateM imp) - --- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of non-nullable leaf values. -{-# INLINABLE element #-} -element :: Value a -> Array a -element (Value imp) = - Array (Array.nonNullValue (Value.run imp)) - --- | --- Lift a 'Value' decoder into an 'Array' decoder for parsing of nullable leaf values. -{-# INLINABLE nullableElement #-} -nullableElement :: Value a -> Array (Maybe a) -nullableElement (Value imp) = - Array (Array.value (Value.run imp)) - - --- * Composite decoders -------------------------- - --- | --- Composable decoder of composite values (rows, records). -newtype Composite a = - Composite (Composite.Composite a) - deriving (Functor, Applicative, Monad) - --- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. -{-# INLINABLE field #-} -field :: Value a -> Composite a -field (Value imp) = - Composite (Composite.nonNullValue (Value.run imp)) - --- | --- Lift a 'Value' decoder into a 'Composite' decoder for parsing of nullable leaf values. -{-# INLINABLE nullableField #-} -nullableField :: Value a -> Composite (Maybe a) -nullableField (Value imp) = - Composite (Composite.value (Value.run imp)) - +import Hasql.Private.Decoders diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs new file mode 100644 index 0000000000..69fe26a345 --- /dev/null +++ b/library/Hasql/Private/Decoders.hs @@ -0,0 +1,428 @@ +{-| +A DSL for declaration of result decoders. +-} +module Hasql.Private.Decoders +where + +import Hasql.Private.Prelude hiding (maybe, bool) +import qualified Data.Vector as Vector +import qualified PostgreSQL.Binary.Decoding as A +import qualified PostgreSQL.Binary.Data as B +import qualified Hasql.Private.Decoders.Results as Results +import qualified Hasql.Private.Decoders.Result as Result +import qualified Hasql.Private.Decoders.Row as Row +import qualified Hasql.Private.Decoders.Value as Value +import qualified Hasql.Private.Decoders.Array as Array +import qualified Hasql.Private.Decoders.Composite as Composite +import qualified Hasql.Private.Prelude as Prelude + +-- * Result +------------------------- + +{-| +Decoder of a query result. +-} +newtype Result a = Result (Results.Results a) deriving (Functor) + +{-| +Decode no value from the result. + +Useful for statements like @INSERT@ or @CREATE@. +-} +{-# INLINABLE unit #-} +unit :: Result () +unit = Result (Results.single Result.unit) + +{-| +Get the amount of rows affected by such statements as +@UPDATE@ or @DELETE@. +-} +{-# INLINABLE rowsAffected #-} +rowsAffected :: Result Int64 +rowsAffected = Result (Results.single Result.rowsAffected) + +{-| +Exactly one row. +Will raise the 'Hasql.Errors.UnexpectedAmountOfRows' error if it's any other. +-} +{-# INLINABLE singleRow #-} +singleRow :: Row a -> Result a +singleRow (Row row) = Result (Results.single (Result.single row)) + +-- ** Multi-row traversers +------------------------- + +{-| +Foldl multiple rows. +-} +{-# INLINABLE foldlRows #-} +foldlRows :: (a -> b -> a) -> a -> Row b -> Result a +foldlRows step init (Row row) = Result (Results.single (Result.foldl step init row)) + +{-| +Foldr multiple rows. +-} +{-# INLINABLE foldrRows #-} +foldrRows :: (b -> a -> a) -> a -> Row b -> Result a +foldrRows step init (Row row) = Result (Results.single (Result.foldr step init row)) + +-- ** Specialized multi-row results +------------------------- + +{-| +Maybe one row or none. +-} +{-# INLINABLE rowMaybe #-} +rowMaybe :: Row a -> Result (Maybe a) +rowMaybe (Row row) = Result (Results.single (Result.maybe row)) + +{-| +Zero or more rows packed into the vector. + +It's recommended to prefer this function to 'rowList', +since it performs notably better. +-} +{-# INLINABLE rowVector #-} +rowVector :: Row a -> Result (Vector a) +rowVector (Row row) = Result (Results.single (Result.vector row)) + +{-| +Zero or more rows packed into the list. +-} +{-# INLINABLE rowList #-} +rowList :: Row a -> Result [a] +rowList = foldrRows strictCons [] + + +-- * Row +------------------------- + +{-| +Decoder of an individual row, +which gets composed of column value decoders. + +E.g.: + +>x :: Row (Maybe Int64, Text, TimeOfDay) +>x = +> (,,) <$> nullableColumn int8 <*> column text <*> column time +-} +newtype Row a = + Row (Row.Row a) + deriving (Functor, Applicative, Monad) + +{-| +Lift an individual non-nullable value decoder to a composable row decoder. +-} +{-# INLINABLE column #-} +column :: NullableOrNot Value a -> Row a +column = \ case + NonNullable (Value imp) -> Row (Row.nonNullValue imp) + Nullable (Value imp) -> Row (Row.value imp) + + +-- * Nullability +------------------------- + +{-| +Extensional specification of nullability over a generic decoder. +-} +data NullableOrNot decoder a where + NonNullable :: decoder a -> NullableOrNot decoder a + Nullable :: decoder a -> NullableOrNot decoder (Maybe a) + +{-| +Specify that a decoder produces a non-nullable value. +-} +nonNullable :: decoder a -> NullableOrNot decoder a +nonNullable = NonNullable + +{-| +Specify that a decoder produces a nullable value. +-} +nullable :: decoder a -> NullableOrNot decoder (Maybe a) +nullable = Nullable + + +-- * Value +------------------------- + +{-| +Decoder of a value. +-} +newtype Value a = Value (Value.Value a) + deriving (Functor) + +{-| +Decoder of the @BOOL@ values. +-} +{-# INLINABLE bool #-} +bool :: Value Bool +bool = Value (Value.decoder (const A.bool)) + +{-| +Decoder of the @INT2@ values. +-} +{-# INLINABLE int2 #-} +int2 :: Value Int16 +int2 = Value (Value.decoder (const A.int)) + +{-| +Decoder of the @INT4@ values. +-} +{-# INLINABLE int4 #-} +int4 :: Value Int32 +int4 = Value (Value.decoder (const A.int)) + +{-| +Decoder of the @INT8@ values. +-} +{-# INLINABLE int8 #-} +int8 :: Value Int64 +int8 = {-# SCC "int8" #-} + Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) + +{-| +Decoder of the @FLOAT4@ values. +-} +{-# INLINABLE float4 #-} +float4 :: Value Float +float4 = Value (Value.decoder (const A.float4)) + +{-| +Decoder of the @FLOAT8@ values. +-} +{-# INLINABLE float8 #-} +float8 :: Value Double +float8 = Value (Value.decoder (const A.float8)) + +{-| +Decoder of the @NUMERIC@ values. +-} +{-# INLINABLE numeric #-} +numeric :: Value B.Scientific +numeric = Value (Value.decoder (const A.numeric)) + +{-| +Decoder of the @CHAR@ values. +Note that it supports UTF-8 values. +-} +{-# INLINABLE char #-} +char :: Value Char +char = Value (Value.decoder (const A.char)) + +{-| +Decoder of the @TEXT@ values. +-} +{-# INLINABLE text #-} +text :: Value Text +text = Value (Value.decoder (const A.text_strict)) + +{-| +Decoder of the @BYTEA@ values. +-} +{-# INLINABLE bytea #-} +bytea :: Value ByteString +bytea = Value (Value.decoder (const A.bytea_strict)) + +{-| +Decoder of the @DATE@ values. +-} +{-# INLINABLE date #-} +date :: Value B.Day +date = Value (Value.decoder (const A.date)) + +{-| +Decoder of the @TIMESTAMP@ values. +-} +{-# INLINABLE timestamp #-} +timestamp :: Value B.LocalTime +timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) + +{-| +Decoder of the @TIMESTAMPTZ@ values. + +/NOTICE/ + +Postgres does not store the timezone information of @TIMESTAMPTZ@. +Instead it stores a UTC value and performs silent conversions +to the currently set timezone, when dealt with in the text format. +However this library bypasses the silent conversions +and communicates with Postgres using the UTC values directly. +-} +{-# INLINABLE timestamptz #-} +timestamptz :: Value B.UTCTime +timestamptz = Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) + +{-| +Decoder of the @TIME@ values. +-} +{-# INLINABLE time #-} +time :: Value B.TimeOfDay +time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) + +{-| +Decoder of the @TIMETZ@ values. + +Unlike in case of @TIMESTAMPTZ@, +Postgres does store the timezone information for @TIMETZ@. +However the Haskell's \"time\" library does not contain any composite type, +that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' +to represent a value on the Haskell's side. +-} +{-# INLINABLE timetz #-} +timetz :: Value (B.TimeOfDay, B.TimeZone) +timetz = Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) + +{-| +Decoder of the @INTERVAL@ values. +-} +{-# INLINABLE interval #-} +interval :: Value B.DiffTime +interval = Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) + +{-| +Decoder of the @UUID@ values. +-} +{-# INLINABLE uuid #-} +uuid :: Value B.UUID +uuid = Value (Value.decoder (const A.uuid)) + +{-| +Decoder of the @INET@ values. +-} +{-# INLINABLE inet #-} +inet :: Value (B.NetAddr B.IP) +inet = Value (Value.decoder (const A.inet)) + +{-| +Decoder of the @JSON@ values into a JSON AST. +-} +{-# INLINABLE json #-} +json :: Value B.Value +json = Value (Value.decoder (const A.json_ast)) + +{-| +Decoder of the @JSON@ values into a raw JSON 'ByteString'. +-} +{-# INLINABLE jsonBytes #-} +jsonBytes :: (ByteString -> Either Text a) -> Value a +jsonBytes fn = Value (Value.decoder (const (A.json_bytes fn))) + +{-| +Decoder of the @JSONB@ values into a JSON AST. +-} +{-# INLINABLE jsonb #-} +jsonb :: Value B.Value +jsonb = Value (Value.decoder (const A.jsonb_ast)) + +{-| +Decoder of the @JSONB@ values into a raw JSON 'ByteString'. +-} +{-# INLINABLE jsonbBytes #-} +jsonbBytes :: (ByteString -> Either Text a) -> Value a +jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) + +{-| +Lifts a custom value decoder function to a 'Value' decoder. +-} +{-# INLINABLE custom #-} +custom :: (Bool -> ByteString -> Either Text a) -> Value a +custom fn = Value (Value.decoderFn fn) + +{-| +A generic decoder of @HSTORE@ values. + +Here's how you can use it to construct a specific value: + +@ +x :: Value [(Text, Maybe Text)] +x = hstore 'replicateM' +@ +-} +{-# INLINABLE hstore #-} +hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a +hstore replicateM = Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) + +{-| +Given a partial mapping from text to value, +produces a decoder of that value. +-} +enum :: (Text -> Maybe a) -> Value a +enum mapping = Value (Value.decoder (const (A.enum mapping))) + +{-| +Lifts the 'Array' decoder to a 'Value' decoder. +-} +{-# INLINABLE array #-} +array :: Array a -> Value a +array (Array imp) = Value (Value.decoder (Array.run imp)) + +{-| +Lifts the 'Composite' decoder to a 'Value' decoder. +-} +{-# INLINABLE composite #-} +composite :: Composite a -> Value a +composite (Composite imp) = Value (Value.decoder (Composite.run imp)) + + +-- * Array decoders +------------------------- + +{-| +A generic array decoder. + +Here's how you can use it to produce a specific array value decoder: + +@ +x :: Value [[Text]] +x = + array (dimension 'replicateM' (dimension 'replicateM' (element text))) +@ +-} +newtype Array a = Array (Array.Array a) + deriving (Functor) + +{-| +A function for parsing a dimension of an array. +Provides support for multi-dimensional arrays. + +Accepts: + +* An implementation of the @replicateM@ function +(@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), +which determines the output value. + +* A decoder of its components, which can be either another 'dimension', +'element' or 'nullableElement'. +-} +{-# INLINABLE dimension #-} +dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +dimension replicateM (Array imp) = Array (Array.dimension replicateM imp) + +{-| +Lift a 'Value' decoder into an 'Array' decoder for parsing of leaf values. +-} +{-# INLINABLE element #-} +element :: NullableOrNot Value a -> Array a +element = \ case + NonNullable (Value imp) -> Array (Array.nonNullValue (Value.run imp)) + Nullable (Value imp) -> Array (Array.value (Value.run imp)) + + +-- * Composite decoders +------------------------- + +{-| +Composable decoder of composite values (rows, records). +-} +newtype Composite a = Composite (Composite.Composite a) + deriving (Functor, Applicative, Monad) + +{-| +Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. +-} +field :: NullableOrNot Value a -> Composite a +field = \ case + NonNullable (Value imp) -> Composite (Composite.nonNullValue (Value.run imp)) + Nullable (Value imp) -> Composite (Composite.value (Value.run imp)) diff --git a/profiling/Main.hs b/profiling/Main.hs index acb8c70852..55bbf34a95 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -70,7 +70,7 @@ statementWithSingleRow = D.singleRow row where row = - tuple <$> D.column D.int8 <*> D.column D.int8 + tuple <$> (D.column . D.nonNullable) D.int8 <*> (D.column . D.nonNullable) D.int8 where tuple !a !b = (a, b) @@ -84,7 +84,7 @@ statementWithManyRows decoder = encoder = conquer rowDecoder = - tuple <$> D.column D.int8 <*> D.column D.int8 + tuple <$> (D.column . D.nonNullable) D.int8 <*> (D.column . D.nonNullable) D.int8 where tuple !a !b = (a, b) diff --git a/tasty/Main.hs b/tasty/Main.hs index 9847dd3339..9cdb7ed006 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -32,7 +32,7 @@ tree = (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text))) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = Session.statement ([3, 7], "a") statement in do @@ -49,7 +49,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = do result1 <- Session.statement [1, 2] statement @@ -67,7 +67,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe (Decoders.column Decoders.bool)) + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = do result1 <- Session.statement [1, 2] statement @@ -87,7 +87,7 @@ tree = encoder = mempty decoder = - Decoders.singleRow (Decoders.column (Decoders.composite ((,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.composite ((,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool))) session = Session.statement () statement in do @@ -105,14 +105,14 @@ tree = mempty decoder = Decoders.singleRow $ - (,) <$> Decoders.column entity1 <*> Decoders.column entity2 + (,) <$> (Decoders.column . Decoders.nonNullable) entity1 <*> (Decoders.column . Decoders.nonNullable) entity2 where entity1 = Decoders.composite $ - (,) <$> Decoders.field Decoders.int8 <*> Decoders.field Decoders.bool + (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool entity2 = Decoders.composite $ - (,) <$> Decoders.field Decoders.text <*> Decoders.field Decoders.int8 + (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.text <*> (Decoders.field . Decoders.nonNullable) Decoders.int8 session = Session.statement () statement in do @@ -137,7 +137,7 @@ tree = encoder = mempty decoder = - Decoders.singleRow (Decoders.column (Decoders.array (Decoders.dimension replicateM (Decoders.element Decoders.int8)))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))) in io , testCase "Failing prepared statements" $ @@ -187,7 +187,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) decoder = - Decoders.singleRow $ Decoders.column Decoders.int8 + Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 fail = catchError (Session.sql "absurd") (const (pure ())) in io @@ -204,7 +204,7 @@ tree = contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) decoder = - Decoders.singleRow (Decoders.column Decoders.int8) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) sumSession :: Session.Session Int64 sumSession = Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" @@ -229,7 +229,7 @@ tree = contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) decoder = - Decoders.singleRow (Decoders.column Decoders.int8) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) session :: Session.Session Int64 session = do @@ -253,7 +253,7 @@ tree = sql = "select $1 = interval '10 seconds'" decoder = - (Decoders.singleRow (Decoders.column (Decoders.bool))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) in DSL.statement (10 :: DiffTime) statement @@ -270,7 +270,7 @@ tree = sql = "select interval '10 seconds'" decoder = - (Decoders.singleRow (Decoders.column (Decoders.interval))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) encoder = Encoders.noParams in DSL.statement () statement @@ -287,7 +287,7 @@ tree = sql = "select $1" decoder = - (Decoders.singleRow (Decoders.column (Decoders.interval))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) in DSL.statement (10 :: DiffTime) statement @@ -318,7 +318,7 @@ tree = sql = "select $1 = ('ok' :: mood)" decoder = - (Decoders.singleRow (Decoders.column (Decoders.bool))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown)) in DSL.statement "ok" statement @@ -349,7 +349,7 @@ tree = sql = "select overloaded($1, $2) || overloaded($3, $4, $5)" decoder = - (Decoders.singleRow (Decoders.column (Decoders.text))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) encoder = contramany (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown))) in DSL.statement ["1", "2", "4", "5", "6"] statement @@ -380,7 +380,7 @@ tree = sql = "select ($1 :: mood)" decoder = - (Decoders.singleRow (Decoders.column (Decoders.enum (Just . id)))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive (Encoders.enum id))) in DSL.statement "ok" statement @@ -402,7 +402,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text)) decoder = - (Decoders.singleRow (Decoders.column (Decoders.text))) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) effect2 = DSL.statement 1 statement where @@ -414,7 +414,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) decoder = - (Decoders.singleRow (Decoders.column Decoders.int8)) + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) in (,) <$> effect1 <*> effect2 in actualIO >>= assertEqual "" (Right ("ok", 1)) , @@ -452,8 +452,8 @@ tree = DSL.session $ do DSL.statement () $ Statements.plain $ "drop table if exists a" DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow (Decoders.column Decoders.int4)) False - id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow (Decoders.column Decoders.int4)) False + id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False DSL.statement () $ Statements.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index f31f6ac40e..f67a4e3f60 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -29,4 +29,4 @@ selectList = sql = "values (1,2), (3,4), (5,6)" decoder = - HD.rowList ((,) <$> HD.column HD.int8 <*> HD.column HD.int8) + HD.rowList ((,) <$> (HD.column . HD.nonNullable) HD.int8 <*> (HD.column . HD.nonNullable) HD.int8) From 51e0568b753785c708c3a5e40ec98df7e97cef3a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 01:34:04 +0300 Subject: [PATCH 0512/1204] Add array roundtrip tests --- tasty/Main.hs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 9cdb7ed006..24452845e1 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -22,6 +22,26 @@ tree = localOption (NumThreads 1) $ testGroup "All tests" [ + testGroup "Roundtrips" $ let + roundtrip encoder decoder input = let + session = let + statement = Statement.Statement "select $1" encoder decoder True + in Session.statement input statement + in unsafePerformIO $ do + x <- Connection.with (Session.run session) + return (Right (Right input) === x) + in [ + testProperty "Array" $ let + encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8)))))) + in roundtrip encoder decoder + , + testProperty "2D Array" $ let + encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))))) + in \ list -> list /= [] ==> roundtrip encoder decoder (replicate 3 list) + ] + , testCase "Failed query" $ let statement = From 5b258ae53a4224533a89eea47f50931dd91e8bf3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 12:59:50 +0300 Subject: [PATCH 0513/1204] Ditch Primitive from encoders That's for consistency with decoders, and decoders can't have this separation without introducing too much complexity. That's so because of there existing a support for composite types, which may consist of arrays and arrays may consist of composites. --- library/Hasql/Encoders.hs | 7 +- library/Hasql/Private/Encoders.hs | 146 +++++++++++++----------------- tasty/Main.hs | 26 +++--- threads-test/Main/Statements.hs | 2 +- 4 files changed, 81 insertions(+), 100 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index d2a9303913..02e9f1cda1 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -14,12 +14,9 @@ module Hasql.Encoders NullableOrNot, nonNullable, nullable, - -- * Param - Param, - primitive, + -- * Value + Value, array, - -- * Primitive - Primitive, bool, int2, int4, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 7525065199..93cc55e35c 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -53,11 +53,11 @@ data Gender = Male | Female personParams :: 'Params' Person personParams = (name '>$<' 'param' ('nonNullable' ('primitive' 'text'))) '<>' - (gender '>$<' 'param' ('nonNullable' ('primitive' genderPrimitive))) '<>' + (gender '>$<' 'param' ('nonNullable' ('primitive' genderValue))) '<>' ('fromIntegral' . age '>$<' 'param' ('nonNullable' ('primitive' 'int8'))) -genderPrimitive :: 'Primitive' Gender -genderPrimitive = 'enum' genderText 'text' where +genderValue :: 'Value' Gender +genderValue = 'enum' genderText 'text' where genderText gender = case gender of Male -> "male" Female -> "female" @@ -73,12 +73,13 @@ noParams :: Params () noParams = mempty {-| -Lift a single parameter, with its nullability specified. +Lift a single parameter encoder, with its nullability specified, +associating it with a single placeholder. -} -param :: NullableOrNot Param a -> Params a +param :: NullableOrNot Value a -> Params a param = \ case - NonNullable (Param valueEnc) -> Params (Params.value valueEnc) - Nullable (Param valueEnc) -> Params (Params.nullableValue valueEnc) + NonNullable (Value valueEnc) -> Params (Params.value valueEnc) + Nullable (Value valueEnc) -> Params (Params.nullableValue valueEnc) -- * Nullability @@ -104,88 +105,71 @@ nullable :: encoder a -> NullableOrNot encoder (Maybe a) nullable = Nullable --- * Param +-- * Value ------------------------- {-| -An individual parameter encoder. -Will be mapped to a single placeholder in the statement. +Value encoder. -} -newtype Param a = Param (Value.Value a) +newtype Value a = Value (Value.Value a) deriving (Contravariant) -{-| -Lift a primitive value encoder into a parameter encoder. --} -primitive :: Primitive a -> Param a -primitive (Primitive valueEnc) = Param valueEnc - {-| Lift an array encoder into a parameter encoder. -} -array :: Array a -> Param a +array :: Array a -> Value a array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) - in Param (Value.Value arrayOID arrayOID encoder renderer) - - --- * Primitive -------------------------- - -{-| -Primitive value encoder. --} -newtype Primitive a = Primitive (Value.Value a) - deriving (Contravariant) + in Value (Value.Value arrayOID arrayOID encoder renderer) {-| Encoder of @BOOL@ values. -} {-# INLINABLE bool #-} -bool :: Primitive Bool -bool = Primitive (Value.unsafePTIWithShow PTI.bool (const A.bool)) +bool :: Value Bool +bool = Value (Value.unsafePTIWithShow PTI.bool (const A.bool)) {-| Encoder of @INT2@ values. -} {-# INLINABLE int2 #-} -int2 :: Primitive Int16 -int2 = Primitive (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) +int2 :: Value Int16 +int2 = Value (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) {-| Encoder of @INT4@ values. -} {-# INLINABLE int4 #-} -int4 :: Primitive Int32 -int4 = Primitive (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) +int4 :: Value Int32 +int4 = Value (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) {-| Encoder of @INT8@ values. -} {-# INLINABLE int8 #-} -int8 :: Primitive Int64 -int8 = Primitive (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) +int8 :: Value Int64 +int8 = Value (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) {-| Encoder of @FLOAT4@ values. -} {-# INLINABLE float4 #-} -float4 :: Primitive Float -float4 = Primitive (Value.unsafePTIWithShow PTI.float4 (const A.float4)) +float4 :: Value Float +float4 = Value (Value.unsafePTIWithShow PTI.float4 (const A.float4)) {-| Encoder of @FLOAT8@ values. -} {-# INLINABLE float8 #-} -float8 :: Primitive Double -float8 = Primitive (Value.unsafePTIWithShow PTI.float8 (const A.float8)) +float8 :: Value Double +float8 = Value (Value.unsafePTIWithShow PTI.float8 (const A.float8)) {-| Encoder of @NUMERIC@ values. -} {-# INLINABLE numeric #-} -numeric :: Primitive B.Scientific -numeric = Primitive (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) +numeric :: Value B.Scientific +numeric = Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) {-| Encoder of @CHAR@ values. @@ -193,106 +177,106 @@ Encoder of @CHAR@ values. -- Note that it supports UTF-8 values and -- identifies itself under the @TEXT@ OID because of that. {-# INLINABLE char #-} -char :: Primitive Char -char = Primitive (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) +char :: Value Char +char = Value (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) {-| Encoder of @TEXT@ values. -} {-# INLINABLE text #-} -text :: Primitive Text -text = Primitive (Value.unsafePTIWithShow PTI.text (const A.text_strict)) +text :: Value Text +text = Value (Value.unsafePTIWithShow PTI.text (const A.text_strict)) {-| Encoder of @BYTEA@ values. -} {-# INLINABLE bytea #-} -bytea :: Primitive ByteString -bytea = Primitive (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) +bytea :: Value ByteString +bytea = Value (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) {-| Encoder of @DATE@ values. -} {-# INLINABLE date #-} -date :: Primitive B.Day -date = Primitive (Value.unsafePTIWithShow PTI.date (const A.date)) +date :: Value B.Day +date = Value (Value.unsafePTIWithShow PTI.date (const A.date)) {-| Encoder of @TIMESTAMP@ values. -} {-# INLINABLE timestamp #-} -timestamp :: Primitive B.LocalTime -timestamp = Primitive (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) +timestamp :: Value B.LocalTime +timestamp = Value (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) {-| Encoder of @TIMESTAMPTZ@ values. -} {-# INLINABLE timestamptz #-} -timestamptz :: Primitive B.UTCTime -timestamptz = Primitive (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) +timestamptz :: Value B.UTCTime +timestamptz = Value (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) {-| Encoder of @TIME@ values. -} {-# INLINABLE time #-} -time :: Primitive B.TimeOfDay -time = Primitive (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) +time :: Value B.TimeOfDay +time = Value (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) {-| Encoder of @TIMETZ@ values. -} {-# INLINABLE timetz #-} -timetz :: Primitive (B.TimeOfDay, B.TimeZone) -timetz = Primitive (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) +timetz :: Value (B.TimeOfDay, B.TimeZone) +timetz = Value (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) {-| Encoder of @INTERVAL@ values. -} {-# INLINABLE interval #-} -interval :: Primitive B.DiffTime -interval = Primitive (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) +interval :: Value B.DiffTime +interval = Value (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) {-| Encoder of @UUID@ values. -} {-# INLINABLE uuid #-} -uuid :: Primitive B.UUID -uuid = Primitive (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) +uuid :: Value B.UUID +uuid = Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) {-| Encoder of @INET@ values. -} {-# INLINABLE inet #-} -inet :: Primitive (B.NetAddr B.IP) -inet = Primitive (Value.unsafePTIWithShow PTI.inet (const A.inet)) +inet :: Value (B.NetAddr B.IP) +inet = Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) {-| Encoder of @JSON@ values from JSON AST. -} {-# INLINABLE json #-} -json :: Primitive B.Value -json = Primitive (Value.unsafePTIWithShow PTI.json (const A.json_ast)) +json :: Value B.Value +json = Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) {-| Encoder of @JSON@ values from raw JSON. -} {-# INLINABLE jsonBytes #-} -jsonBytes :: Primitive ByteString -jsonBytes = Primitive (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) +jsonBytes :: Value ByteString +jsonBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) {-| Encoder of @JSONB@ values from JSON AST. -} {-# INLINABLE jsonb #-} -jsonb :: Primitive B.Value -jsonb = Primitive (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) +jsonb :: Value B.Value +jsonb = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) {-| Encoder of @JSONB@ values from raw JSON. -} {-# INLINABLE jsonbBytes #-} -jsonbBytes :: Primitive ByteString -jsonbBytes = Primitive (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) +jsonbBytes :: Value ByteString +jsonbBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) {-| Given a function, @@ -300,8 +284,8 @@ which maps a value into a textual enum label used on the DB side, produces an encoder of that value. -} {-# INLINABLE enum #-} -enum :: (a -> Text) -> Primitive a -enum mapping = Primitive (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) +enum :: (a -> Text) -> Value a +enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) {-| Identifies the value with the PostgreSQL's \"unknown\" type, @@ -313,8 +297,8 @@ For reference, see the section of the Postgres' documentation. -} {-# INLINABLE unknown #-} -unknown :: Primitive ByteString -unknown = Primitive (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) +unknown :: Value ByteString +unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) -- * Array @@ -336,13 +320,13 @@ values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condit newtype Array a = Array (Array.Array a) {-| -Lifts a 'Primitive' encoder into an 'Array' encoder. +Lifts a 'Value' encoder into an 'Array' encoder. -} -element :: NullableOrNot Primitive a -> Array a +element :: NullableOrNot Value a -> Array a element = \ case - NonNullable (Primitive (Value.Value elementOID arrayOID encoder renderer)) -> + NonNullable (Value (Value.Value elementOID arrayOID encoder renderer)) -> Array (Array.value elementOID arrayOID encoder renderer) - Nullable (Primitive (Value.Value elementOID arrayOID encoder renderer)) -> + Nullable (Value (Value.Value elementOID arrayOID encoder renderer)) -> Array (Array.nullableValue elementOID arrayOID encoder renderer) {-| diff --git a/tasty/Main.hs b/tasty/Main.hs index 24452845e1..25dfaa0aec 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -50,7 +50,7 @@ tree = encoder = contrazip2 (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text))) + (Encoders.param (Encoders.nonNullable (Encoders.text))) decoder = fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = @@ -205,7 +205,7 @@ tree = sql = "select $1 :: int8" encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) + Encoders.param (Encoders.nonNullable (Encoders.int8)) decoder = Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 fail = @@ -221,8 +221,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> - contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) <> + contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) decoder = Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) sumSession :: Session.Session Int64 @@ -246,8 +246,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) <> - contramap snd (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8))) + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) <> + contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) decoder = Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) session :: Session.Session Int64 @@ -275,7 +275,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) + Encoders.param (Encoders.nonNullable (Encoders.interval)) in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right True) x , @@ -309,7 +309,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.interval)) + Encoders.param (Encoders.nonNullable (Encoders.interval)) in DSL.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x , @@ -340,7 +340,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown)) + Encoders.param (Encoders.nonNullable (Encoders.unknown)) in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right True) , @@ -371,7 +371,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) encoder = - contramany (Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.unknown))) + contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) in DSL.statement ["1", "2", "4", "5", "6"] statement in actualIO >>= assertEqual "" (Right "3456") , @@ -402,7 +402,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive (Encoders.enum id))) + Encoders.param (Encoders.nonNullable ((Encoders.enum id))) in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right "ok") , @@ -420,7 +420,7 @@ tree = sql = "select $1" encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.text)) + Encoders.param (Encoders.nonNullable (Encoders.text)) decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) effect2 = @@ -432,7 +432,7 @@ tree = sql = "select $1" encoder = - Encoders.param (Encoders.nonNullable (Encoders.primitive Encoders.int8)) + Encoders.param (Encoders.nonNullable (Encoders.int8)) decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) in (,) <$> effect1 <*> effect2 diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index f652a7a0b8..c6ebd19a42 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -13,7 +13,7 @@ selectSleep = sql = "select pg_sleep($1)" encoder = - E.param (E.nonNullable (E.primitive E.float8)) + E.param (E.nonNullable E.float8) decoder = D.unit From 8f78014876563963cffb47385b19b50c966061de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 13:18:20 +0300 Subject: [PATCH 0514/1204] Correct the docs --- library/Hasql/Private/Decoders.hs | 15 +++++++-------- library/Hasql/Private/Encoders.hs | 12 ++++++------ library/Hasql/Statement.hs | 6 +++--- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 69fe26a345..4457bec639 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -103,12 +103,12 @@ which gets composed of column value decoders. E.g.: ->x :: Row (Maybe Int64, Text, TimeOfDay) ->x = -> (,,) <$> nullableColumn int8 <*> column text <*> column time +@ +x :: 'Row' (Maybe Int64, Text, TimeOfDay) +x = (,,) '<$>' ('column' . 'nullable') 'int8' '<*>' ('column' . 'nonNullable') 'text' '<*>' ('column' . 'nonNullable') 'time' +@ -} -newtype Row a = - Row (Row.Row a) +newtype Row a = Row (Row.Row a) deriving (Functor, Applicative, Monad) {-| @@ -375,9 +375,8 @@ A generic array decoder. Here's how you can use it to produce a specific array value decoder: @ -x :: Value [[Text]] -x = - array (dimension 'replicateM' (dimension 'replicateM' (element text))) +x :: 'Value' [[Text]] +x = 'array' ('dimension' 'replicateM' ('dimension' 'replicateM' ('element' ('nonNullable' 'text')))) @ -} newtype Array a = Array (Array.Array a) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 93cc55e35c..867771604f 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -28,8 +28,8 @@ E.g., @ someParamsEncoder :: 'Params' (Int64, Maybe Text) someParamsEncoder = - ('fst' '>$<' 'param' ('nonNullable' ('primitive' 'int8'))) '<>' - ('snd' '>$<' 'param' ('nullable' ('primitive' 'text'))) + ('fst' '>$<' 'param' ('nonNullable' 'int8')) '<>' + ('snd' '>$<' 'param' ('nullable' 'text')) @ As a general solution for tuples of any arity, instead of 'fst' and 'snd', @@ -40,7 +40,7 @@ E.g., here's how you can achieve the same as the above: @ someParamsEncoder :: 'Params' (Int64, Maybe Text) someParamsEncoder = - 'contrazip2' ('param' ('nonNullable' ('primitive' 'int8'))) ('param' ('nullable' ('primitive' 'text'))) + 'contrazip2' ('param' ('nonNullable' 'int8')) ('param' ('nullable' 'text')) @ Here's how you can implement encoders for custom composite types: @@ -52,9 +52,9 @@ data Gender = Male | Female personParams :: 'Params' Person personParams = - (name '>$<' 'param' ('nonNullable' ('primitive' 'text'))) '<>' - (gender '>$<' 'param' ('nonNullable' ('primitive' genderValue))) '<>' - ('fromIntegral' . age '>$<' 'param' ('nonNullable' ('primitive' 'int8'))) + (name '>$<' 'param' ('nonNullable' 'text')) '<>' + (gender '>$<' 'param' ('nonNullable' genderValue)) '<>' + ('fromIntegral' . age '>$<' 'param' ('nonNullable' 'int8')) genderValue :: 'Value' Gender genderValue = 'enum' genderText 'text' where diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 9375ed0cb5..e5faf42d68 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -62,9 +62,9 @@ import qualified Hasql.Encoders as Encoders -- selectSum = 'Statement' sql encoder decoder True where -- sql = "select ($1 + $2)" -- encoder = --- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' (Encoders.'Hasql.Encoders.primitive' Encoders.'Hasql.Encoders.int8'))) '<>' --- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' (Encoders.'Hasql.Encoders.primitive' Encoders.'Hasql.Encoders.text'))) --- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' Decoders.'Hasql.Decoders.int8') +-- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' +-- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' Encoders.'Hasql.Encoders.text')) +-- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' From db4261ddb5c334b70829064426269eadfaa56bfd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 13:25:22 +0300 Subject: [PATCH 0515/1204] Rename unit to noResult --- library/Hasql/Decoders.hs | 2 +- library/Hasql/Private/Decoders.hs | 6 +++--- library/Hasql/Private/Decoders/Result.hs | 6 +++--- library/Hasql/Private/Decoders/Results.hs | 2 +- library/Hasql/Private/IO.hs | 2 +- library/Hasql/Private/Session.hs | 2 +- library/Hasql/Statement.hs | 2 +- tasty/Main.hs | 14 +++++++------- tasty/Main/Statements.hs | 2 +- threads-test/Main/Statements.hs | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index a031ef5c17..fa5c98dd92 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -5,7 +5,7 @@ module Hasql.Decoders ( -- * Result Result, - unit, + noResult, rowsAffected, singleRow, -- ** Specialized multi-row results diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 4457bec639..9a53888c6b 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -29,9 +29,9 @@ Decode no value from the result. Useful for statements like @INSERT@ or @CREATE@. -} -{-# INLINABLE unit #-} -unit :: Result () -unit = Result (Results.single Result.unit) +{-# INLINABLE noResult #-} +noResult :: Result () +noResult = Result (Results.single Result.noResult) {-| Get the amount of rows affected by such statements as diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 519a1b91db..11acf7727f 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -20,9 +20,9 @@ run :: Result a -> (Bool, LibPQ.Result) -> IO (Either ResultError a) run (Result reader) env = runExceptT (runReaderT reader env) -{-# INLINE unit #-} -unit :: Result () -unit = +{-# INLINE noResult #-} +noResult :: Result () +noResult = checkExecStatus $ \case LibPQ.CommandOk -> True LibPQ.TuplesOk -> True diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index 34e82570e1..cf0cb56169 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -81,4 +81,4 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.unit (integerDatetimes, result) + ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index f227a169fa..d51c712a51 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -88,7 +88,7 @@ getPreparedStatementKey connection registry template oidList = sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) let resultsDecoder = if sent - then ResultsDecoders.single ResultDecoders.unit + then ResultsDecoders.single ResultDecoders.noResult else ResultsDecoders.clientError fmap resultsMapping $ getResults connection undefined resultsDecoder where diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 4145b3b971..d9dafb2f7c 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -40,7 +40,7 @@ sql sql = return $ r1 *> r2 where decoder = - Decoders.Results.single Decoders.Result.unit + Decoders.Results.single Decoders.Result.noResult -- | -- Parameters and a specification of a parametric single-statement query to apply them to. diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index e5faf42d68..e60488b5af 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -25,7 +25,7 @@ module Hasql.Statement -- Encoders.'Encoders.foldableDimension' . -- Encoders.'Encoders.element' . -- Encoders.'Encoders.nonNullable' - -- decoder = Decoders.'Decoders.unit' + -- decoder = Decoders.'Decoders.noResult' -- @ -- -- This approach is much more efficient than executing a single-row Insert diff --git a/tasty/Main.hs b/tasty/Main.hs index 25dfaa0aec..c7772ca297 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -184,7 +184,7 @@ tree = encoder = mempty decoder = - Decoders.unit + Decoders.noResult in io , testCase "Prepared statements after error" $ @@ -319,14 +319,14 @@ tree = DSL.session $ do let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "drop type if exists mood" in DSL.statement () statement let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" @@ -350,14 +350,14 @@ tree = DSL.session $ do let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" in DSL.statement () statement let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" @@ -381,14 +381,14 @@ tree = DSL.session $ do let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "drop type if exists mood" in DSL.statement () statement let statement = - Statement.Statement sql mempty Decoders.unit True + Statement.Statement sql mempty Decoders.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index f67a4e3f60..ea3cbcc189 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -9,7 +9,7 @@ import qualified Main.Prelude as Prelude plain :: ByteString -> HQ.Statement () () plain sql = - HQ.Statement sql mempty HD.unit False + HQ.Statement sql mempty HD.noResult False dropType :: ByteString -> HQ.Statement () () dropType name = diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index c6ebd19a42..a2f53d522a 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -15,6 +15,6 @@ selectSleep = encoder = E.param (E.nonNullable E.float8) decoder = - D.unit + D.noResult From a1ead0ed62a686d9dfb82561b415641caa786660 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 13:29:00 +0300 Subject: [PATCH 0516/1204] Ditch foldableDimension --- library/Hasql/Encoders.hs | 1 - library/Hasql/Private/Encoders.hs | 10 +--------- library/Hasql/Statement.hs | 2 +- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 02e9f1cda1..8720df084c 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -45,7 +45,6 @@ module Hasql.Encoders Array, element, dimension, - foldableDimension, ) where diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 867771604f..83f193541f 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -311,7 +311,7 @@ Here's an example of its usage: @ someParamsEncoder :: 'Params' [[Int64]] -someParamsEncoder = 'param' ('nonNullable' ('array' ('foldableDimension' ('foldableDimension' ('element' ('nonNullable' 'int8')))))) +someParamsEncoder = 'param' ('nonNullable' ('array' ('dimension' 'foldl'' ('dimension' 'foldl'' ('element' ('nonNullable' 'int8')))))) @ Please note that the PostgreSQL __IN__ keyword does not accept an array, but rather a syntactical list of @@ -345,11 +345,3 @@ which determines the input value. {-# INLINABLE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c dimension foldl (Array imp) = Array (Array.dimension foldl imp) - -{-| -Same as 'dimension', but specialized to 'Foldable' values, -which includes such structures as list and 'Vector'. --} -{-# INLINE foldableDimension #-} -foldableDimension :: Foldable foldable => Array a -> Array (foldable a) -foldableDimension = dimension foldl' diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index e60488b5af..0eadd6bbfd 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -22,7 +22,7 @@ module Hasql.Statement -- Encoders.'Encoders.param' . -- Encoders.'Encoders.nonNullable' . -- Encoders.'Encoders.array' . - -- Encoders.'Encoders.foldableDimension' . + -- Encoders.'Encoders.dimension' 'foldl'' . -- Encoders.'Encoders.element' . -- Encoders.'Encoders.nonNullable' -- decoder = Decoders.'Decoders.noResult' From 872808e9635f6917fc8a16d948ece32623f9ada6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 14:50:40 +0300 Subject: [PATCH 0517/1204] Correct the docs --- library/Hasql/Statement.hs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 0eadd6bbfd..efd4e2f5b4 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -39,7 +39,7 @@ import qualified Hasql.Encoders as Encoders -- | --- A specification of a strictly single-statement query, which can be parameterized and prepared. +-- Specification of a strictly single-statement query, which can be parameterized and prepared. -- -- Consists of the following: -- @@ -51,11 +51,12 @@ import qualified Hasql.Encoders as Encoders -- The SQL template must be formatted according to Postgres' standard, -- with any non-ASCII characters of the template encoded using UTF-8. -- According to the format, --- parameters must be referred to using the positional notation, as in the following: +-- parameters must be referred to using a positional notation, as in the following: -- @$1@, @$2@, @$3@ and etc. --- Those references must be used to refer to the values of the 'Encoders.Params' encoder. +-- Those references must be used in accordance to the order in which the according +-- value encoders are specified in 'Encoders.Params'. -- --- Following is an example of the declaration of a prepared statement with its associated codecs. +-- Following is an example of a declaration of a prepared statement with its associated codecs. -- -- @ -- selectSum :: 'Statement' (Int64, Int64) Int64 From 38e80351e6bb538604a1cdfde3623c3dae5538eb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 18:51:53 +0300 Subject: [PATCH 0518/1204] Correct the docs --- library/Hasql/Private/Encoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 83f193541f..aa62f89ee5 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -314,7 +314,7 @@ someParamsEncoder :: 'Params' [[Int64]] someParamsEncoder = 'param' ('nonNullable' ('array' ('dimension' 'foldl'' ('dimension' 'foldl'' ('element' ('nonNullable' 'int8')))))) @ -Please note that the PostgreSQL __IN__ keyword does not accept an array, but rather a syntactical list of +Please note that the PostgreSQL @IN@ keyword does not accept an array, but rather a syntactical list of values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condition instead. -} newtype Array a = Array (Array.Array a) From 799fbca0ed3ae972c618f7592ef1abf81d68bc4c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 19:01:18 +0300 Subject: [PATCH 0519/1204] Add "foldableArray" encoder --- library/Hasql/Encoders.hs | 1 + library/Hasql/Private/Encoders.hs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 8720df084c..0ae794d056 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -17,6 +17,7 @@ module Hasql.Encoders -- * Value Value, array, + foldableArray, bool, int2, int4, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index aa62f89ee5..01c01f73d4 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -122,6 +122,26 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) in Value (Value.Value arrayOID arrayOID encoder renderer) +{-| +Lift a value encoder of element into a unidimensional array encoder of a foldable value. + +E.g., + +@ +vectorOfInts :: Value (Vector Int64) +vectorOfInts = 'foldableArray' ('nonNullable' 'int8') +@ + +This function is merely a shortcut for the following expression: + +@ +('array' . 'dimension' 'foldl'' . 'element') +@ +-} +{-# INLINE foldableArray #-} +foldableArray :: Foldable foldable => NullableOrNot Value a -> Value (foldable a) +foldableArray = array . dimension foldl' . element + {-| Encoder of @BOOL@ values. -} From 5fc68b7d92147304070e021eb9321b7e30402b6d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:20:31 +0300 Subject: [PATCH 0520/1204] Rearrange the encoders --- library/Hasql/Encoders.hs | 4 +-- library/Hasql/Private/Encoders.hs | 56 +++++++++++++++---------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 0ae794d056..42fcfb690e 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -16,8 +16,6 @@ module Hasql.Encoders nullable, -- * Value Value, - array, - foldableArray, bool, int2, int4, @@ -42,6 +40,8 @@ module Hasql.Encoders jsonbBytes, enum, unknown, + array, + foldableArray, -- * Array Array, element, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 01c01f73d4..b1e406c68b 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -114,34 +114,6 @@ Value encoder. newtype Value a = Value (Value.Value a) deriving (Contravariant) -{-| -Lift an array encoder into a parameter encoder. --} -array :: Array a -> Value a -array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let - encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) - in Value (Value.Value arrayOID arrayOID encoder renderer) - -{-| -Lift a value encoder of element into a unidimensional array encoder of a foldable value. - -E.g., - -@ -vectorOfInts :: Value (Vector Int64) -vectorOfInts = 'foldableArray' ('nonNullable' 'int8') -@ - -This function is merely a shortcut for the following expression: - -@ -('array' . 'dimension' 'foldl'' . 'element') -@ --} -{-# INLINE foldableArray #-} -foldableArray :: Foldable foldable => NullableOrNot Value a -> Value (foldable a) -foldableArray = array . dimension foldl' . element - {-| Encoder of @BOOL@ values. -} @@ -320,6 +292,34 @@ section of the Postgres' documentation. unknown :: Value ByteString unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) +{-| +Lift an array encoder into a parameter encoder. +-} +array :: Array a -> Value a +array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let + encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) + in Value (Value.Value arrayOID arrayOID encoder renderer) + +{-| +Lift a value encoder of element into a unidimensional array encoder of a foldable value. + +E.g., + +@ +vectorOfInts :: Value (Vector Int64) +vectorOfInts = 'foldableArray' ('nonNullable' 'int8') +@ + +This function is merely a shortcut for the following expression: + +@ +('array' . 'dimension' 'foldl'' . 'element') +@ +-} +{-# INLINE foldableArray #-} +foldableArray :: Foldable foldable => NullableOrNot Value a -> Value (foldable a) +foldableArray = array . dimension foldl' . element + -- * Array ------------------------- From 37002e6530f6d2001406dcee6876cdd408672e5c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:22:42 +0300 Subject: [PATCH 0521/1204] Update the signature of "foldableArray" --- library/Hasql/Private/Encoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index b1e406c68b..feaba3cb2e 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -317,7 +317,7 @@ This function is merely a shortcut for the following expression: @ -} {-# INLINE foldableArray #-} -foldableArray :: Foldable foldable => NullableOrNot Value a -> Value (foldable a) +foldableArray :: Foldable foldable => NullableOrNot Value element -> Value (foldable element) foldableArray = array . dimension foldl' . element From 296de5498b57f23c68ad4ad7b0900071d17922aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:34:01 +0300 Subject: [PATCH 0522/1204] Correct the grammar in docs --- library/Hasql/Private/Decoders.hs | 6 +++--- library/Hasql/Private/Encoders.hs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 9a53888c6b..41650f7a7e 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -324,7 +324,7 @@ jsonbBytes :: (ByteString -> Either Text a) -> Value a jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) {-| -Lifts a custom value decoder function to a 'Value' decoder. +Lift a custom value decoder function to a 'Value' decoder. -} {-# INLINABLE custom #-} custom :: (Bool -> ByteString -> Either Text a) -> Value a @@ -352,14 +352,14 @@ enum :: (Text -> Maybe a) -> Value a enum mapping = Value (Value.decoder (const (A.enum mapping))) {-| -Lifts the 'Array' decoder to a 'Value' decoder. +Lift an 'Array' decoder to a 'Value' decoder. -} {-# INLINABLE array #-} array :: Array a -> Value a array (Array imp) = Value (Value.decoder (Array.run imp)) {-| -Lifts the 'Composite' decoder to a 'Value' decoder. +Lift a 'Composite' decoder to a 'Value' decoder. -} {-# INLINABLE composite #-} composite :: Composite a -> Value a diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index feaba3cb2e..b3201a36ec 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -310,7 +310,7 @@ vectorOfInts :: Value (Vector Int64) vectorOfInts = 'foldableArray' ('nonNullable' 'int8') @ -This function is merely a shortcut for the following expression: +This function is merely a shortcut to the following expression: @ ('array' . 'dimension' 'foldl'' . 'element') From 3b6af08a2863d458c2230d7e3cc319e7e973865f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:34:20 +0300 Subject: [PATCH 0523/1204] Add shortcut array decoders --- library/Hasql/Decoders.hs | 2 ++ library/Hasql/Private/Decoders.hs | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index fa5c98dd92..90d9c62308 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -47,6 +47,8 @@ module Hasql.Decoders jsonb, jsonbBytes, array, + listArray, + vectorArray, composite, hstore, enum, diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 41650f7a7e..25f6f14d1f 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -15,6 +15,7 @@ import qualified Hasql.Private.Decoders.Value as Value import qualified Hasql.Private.Decoders.Array as Array import qualified Hasql.Private.Decoders.Composite as Composite import qualified Hasql.Private.Prelude as Prelude +import qualified Data.Vector.Generic as GenericVector -- * Result ------------------------- @@ -358,6 +359,32 @@ Lift an 'Array' decoder to a 'Value' decoder. array :: Array a -> Value a array (Array imp) = Value (Value.decoder (Array.run imp)) +{-| +Lift a value decoder of element into a unidimensional array decoder producing a list. + +This function is merely a shortcut to the following expression: + +@ +('array' . 'dimension' Control.Monad.'replicateM' . 'element') +@ +-} +{-# INLINE listArray #-} +listArray :: NullableOrNot Value element -> Value [element] +listArray = array . dimension replicateM . element + +{-| +Lift a value decoder of element into a unidimensional array decoder producing a generic vector. + +This function is merely a shortcut to the following expression: + +@ +('array' . 'dimension' Data.Vector.Generic.'GenericVector.replicateM' . 'element') +@ +-} +{-# INLINE vectorArray #-} +vectorArray :: GenericVector.Vector vector element => NullableOrNot Value element -> Value (vector element) +vectorArray = array . dimension GenericVector.replicateM . element + {-| Lift a 'Composite' decoder to a 'Value' decoder. -} From 5c260f9b50e154ad712f339f8ef14c0e2f2b7981 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:36:29 +0300 Subject: [PATCH 0524/1204] Correct the docs --- library/Hasql/Private/Decoders.hs | 3 +-- library/Hasql/Private/Encoders.hs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 25f6f14d1f..3cfc6b1bb0 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -419,8 +419,7 @@ Accepts: (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), which determines the output value. -* A decoder of its components, which can be either another 'dimension', -'element' or 'nullableElement'. +* A decoder of its components, which can be either another 'dimension' or 'element'. -} {-# INLINABLE dimension #-} dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index b3201a36ec..5f42f90792 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -359,8 +359,7 @@ Accepts: such as @Data.Foldable.'foldl''@, which determines the input value. -* A component encoder, which can be either another 'dimension', -'element' or 'nullableElement'. +* A component encoder, which can be either another 'dimension' or 'element'. -} {-# INLINABLE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c From 9ebf5593ce3c4490a72fc76244b4122d8ac75907 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 21 May 2019 21:37:28 +0300 Subject: [PATCH 0525/1204] Correct the docs --- library/Hasql/Private/Decoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 3cfc6b1bb0..12f05b571f 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -445,7 +445,7 @@ newtype Composite a = Composite (Composite.Composite a) deriving (Functor, Applicative, Monad) {-| -Lift a 'Value' decoder into a 'Composite' decoder for parsing of non-nullable leaf values. +Lift a 'Value' decoder into a 'Composite' decoder for parsing of component values. -} field :: NullableOrNot Value a -> Composite a field = \ case From ab3783f2eb0a68217b17854e9d2dc043b549b5e2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 10:46:22 +0300 Subject: [PATCH 0526/1204] Update the links to other projects --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4b02b87b2..dc6e5daba1 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. -* "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* +* ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. From ba6625b7250b1e2f6727288d4c135f55adc66d59 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 10:46:42 +0300 Subject: [PATCH 0527/1204] Update README in accordance to the new API --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dc6e5daba1..9a6e08e95b 100644 --- a/README.md +++ b/README.md @@ -98,19 +98,19 @@ sumStatement :: Statement (Int64, Int64) Int64 sumStatement = Statement sql encoder decoder True where sql = "select $1 + $2" encoder = - (fst >$< Encoders.param Encoders.int8) <> - (snd >$< Encoders.param Encoders.int8) - decoder = Decoders.singleRow (Decoders.column Decoders.int8) + (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> + (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) divModStatement :: Statement (Int64, Int64) (Int64, Int64) divModStatement = Statement sql encoder decoder True where sql = "select $1 / $2, $1 % $2" encoder = - (fst >$< Encoders.param Encoders.int8) <> - (snd >$< Encoders.param Encoders.int8) + (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> + (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) decoder = Decoders.singleRow row where row = (,) <$> - Decoders.column Decoders.int8 <*> - Decoders.column Decoders.int8 + Decoders.column (Decoders.nonNullable Decoders.int8) <*> + Decoders.column (Decoders.nonNullable Decoders.int8) ``` From 5f51693e754394f7dcc862a2ff4fe4552fe0838f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 21:50:59 +0300 Subject: [PATCH 0528/1204] Correct the docs --- library/Hasql/Private/Encoders.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 5f42f90792..a06917c282 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -165,9 +165,10 @@ numeric = Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) {-| Encoder of @CHAR@ values. + +Note that it supports UTF-8 values and +identifies itself under the @TEXT@ OID because of that. -} --- Note that it supports UTF-8 values and --- identifies itself under the @TEXT@ OID because of that. {-# INLINABLE char #-} char :: Value Char char = Value (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) From 68aeeb3ab55b7deaffc925e664013736b316d25b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 22:00:25 +0300 Subject: [PATCH 0529/1204] Set the version to 0.1 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 6a5aac3eba..d39d07169a 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.4.2.1 +version: 0.1 synopsis: Toolkit for constructing Hasql statements dynamically homepage: https://github.com/nikita-volkov/hasql-dynamic-statements bug-reports: https://github.com/nikita-volkov/hasql-dynamic-statements/issues From e51fe317a17bdfb06110111e14dccdcc66a7ed76 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 22:00:53 +0300 Subject: [PATCH 0530/1204] Rename TextSnippetChunk to StringSnippetChunk --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 6 +++--- library/Hasql/DynamicStatements/Statement.hs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index c79c2ff5aa..498c5ca8ad 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -11,20 +11,20 @@ Dynamically generated statement. newtype Snippet = Snippet (Seq SnippetChunk) data SnippetChunk = - TextSnippetChunk ByteString | + StringSnippetChunk ByteString | ParamSnippetChunk (Encoders.Params ()) deriving instance Semigroup Snippet deriving instance Monoid Snippet instance IsString Snippet where - fromString x = Snippet (pure (TextSnippetChunk (fromString x))) + fromString x = Snippet (pure (StringSnippetChunk (fromString x))) {-| SQL chunk in ASCII. -} sql :: ByteString -> Snippet -sql x = Snippet (pure (TextSnippetChunk x)) +sql x = Snippet (pure (StringSnippetChunk x)) {-| Parameter encoded using an implicitly derived encoder from the type. diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index b9d5170a3e..17bd724968 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -14,7 +14,7 @@ Construct a statement dynamically, specifying the parameters in-place. snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result snippet (SnippetDefs.Snippet chunks) decoder = let step (!paramId, !poking, !encoder) = \ case - SnippetDefs.TextSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) + SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) SnippetDefs.ParamSnippetChunk paramEncoder -> let newParamId = paramId + 1 newPoking = poking <> Poking.word8 36 <> Poking.asciiIntegral paramId From 3c2db6a6af44349fbead7e83f60b68be9e9fdb95 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 22:10:58 +0300 Subject: [PATCH 0531/1204] Ditch implicit encoders in favor of Default Working around the parameter nullability issue with explicit functions --- hasql-dynamic-statements.cabal | 2 +- .../DynamicStatements/ImplicitEncoders.hs | 89 ------------------- library/Hasql/DynamicStatements/Prelude.hs | 4 + library/Hasql/DynamicStatements/Snippet.hs | 3 + .../Hasql/DynamicStatements/Snippet/Defs.hs | 24 +++-- 5 files changed, 27 insertions(+), 95 deletions(-) delete mode 100644 library/Hasql/DynamicStatements/ImplicitEncoders.hs diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index d39d07169a..dd523927f1 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -21,7 +21,6 @@ library ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: - Hasql.DynamicStatements.ImplicitEncoders Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet Hasql.DynamicStatements.Statement @@ -33,6 +32,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, + data-default >=0.7 && <0.8, hasql >=1.3.0.5 && <1.4, network-ip >=0.2 && <1, ptr >=0.16.6 && <0.17, diff --git a/library/Hasql/DynamicStatements/ImplicitEncoders.hs b/library/Hasql/DynamicStatements/ImplicitEncoders.hs deleted file mode 100644 index 95e162f84d..0000000000 --- a/library/Hasql/DynamicStatements/ImplicitEncoders.hs +++ /dev/null @@ -1,89 +0,0 @@ -{-# LANGUAGE CPP #-} -module Hasql.DynamicStatements.ImplicitEncoders where - -import Hasql.DynamicStatements.Prelude -import Hasql.Encoders -import qualified Data.Aeson as Aeson - - -class ParamsEncoder a where - params :: Params a - -#define Q(a) a' -#define INSTANCES(VALUE, ENCODER) \ -instance ParamsEncoder VALUE where { \ - params = param ENCODER; \ -}; \ -instance ParamsEncoder [Maybe VALUE] where { \ - params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder [VALUE] where { \ - params = param (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder [[VALUE]] where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder [[Maybe VALUE]] where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Vector (Maybe VALUE)) where { \ - params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Vector VALUE) where { \ - params = param (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Vector (Vector VALUE)) where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Vector (Vector (Maybe VALUE))) where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe VALUE) where { \ - params = nullableParam ENCODER; \ -}; \ -instance ParamsEncoder (Maybe [Maybe VALUE]) where { \ - params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe [VALUE]) where { \ - params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe [[VALUE]]) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe [[Maybe VALUE]]) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Maybe VALUE))) where { \ - params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe (Vector VALUE)) where { \ - params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Vector VALUE))) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -} - -INSTANCES(Char, char) -INSTANCES(Double, float8) -INSTANCES(Float, float4) -INSTANCES(Int16, int2) -INSTANCES(Int32, int4) -INSTANCES(Int64, int8) -INSTANCES(ByteString, bytea) -INSTANCES(Scientific, numeric) -INSTANCES(Text, text) -INSTANCES(UTCTime, timestamptz) -INSTANCES(Aeson.Value, jsonb) -INSTANCES(UUID, uuid) -INSTANCES(Day, date) -INSTANCES(DiffTime, interval) -INSTANCES(TimeOfDay, time) -INSTANCES(LocalTime, timestamp) -INSTANCES((TimeOfDay, TimeZone), timetz) -INSTANCES((NetAddr IP), inet) - -#undef INSTANCES -#undef Q diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 31c726ed01..be8bbf5c8b 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -104,3 +104,7 @@ import Data.Time as Exports -- network-ip ------------------------- import Network.IP.Addr as Exports (NetAddr, IP) + +-- data-default +------------------------- +import Data.Default as Exports diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs index 3630c1d4ce..40bd57157d 100644 --- a/library/Hasql/DynamicStatements/Snippet.hs +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -2,6 +2,9 @@ module Hasql.DynamicStatements.Snippet ( Snippet, param, + nullableParam, + encoderAndParam, + encoderAndNullableParam, ) where diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index 498c5ca8ad..aa816b95ca 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -2,7 +2,6 @@ module Hasql.DynamicStatements.Snippet.Defs where import Hasql.DynamicStatements.Prelude import qualified Hasql.Encoders as Encoders -import qualified Hasql.DynamicStatements.ImplicitEncoders as ImplicitEncoders {-| @@ -29,11 +28,26 @@ sql x = Snippet (pure (StringSnippetChunk x)) {-| Parameter encoded using an implicitly derived encoder from the type. -} -param :: ImplicitEncoders.ParamsEncoder param => param -> Snippet -param param = Snippet (pure (ParamSnippetChunk (param >$ ImplicitEncoders.params))) +param :: Default (Encoders.Value param) => param -> Snippet +param = encoderAndParam def + +{-| +Nullable parameter encoded using an implicitly derived encoder from the type. +-} +nullableParam :: Default (Encoders.Value param) => Maybe param -> Snippet +nullableParam = encoderAndNullableParam def {-| Parameter with an explicitly defined encoder. -} -encoderAndParam :: Encoders.Params param -> param -> Snippet -encoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) +encoderAndParam :: Encoders.Value param -> param -> Snippet +encoderAndParam = paramsEncoderAndParam . Encoders.param + +{-| +Nullable parameter with an explicitly defined encoder. +-} +encoderAndNullableParam :: Encoders.Value param -> Maybe param -> Snippet +encoderAndNullableParam = paramsEncoderAndParam . Encoders.nullableParam + +paramsEncoderAndParam :: Encoders.Params param -> param -> Snippet +paramsEncoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) From 2c7250a4e1a9cb87268e96d7da802cec3ae11366 Mon Sep 17 00:00:00 2001 From: ekalosak Date: Wed, 22 May 2019 16:22:23 -0700 Subject: [PATCH 0532/1204] allowing Hasql.Pool.Pool to be shown via derived method from Data.Pool.Pool --- library/Hasql/Pool.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 124bc5ceab..b215fd1583 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -20,6 +20,7 @@ import qualified Hasql.Pool.ResourcePool as ResourcePool -- A pool of connections to DB. newtype Pool = Pool (ResourcePool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) + deriving (Show) -- | -- Settings of the connection pool. Consist of: From 27d51aa6ac97c7b13c89e32c3eae05d6fdcba09c Mon Sep 17 00:00:00 2001 From: ekalosak Date: Wed, 22 May 2019 16:23:29 -0700 Subject: [PATCH 0533/1204] incremented minor version to reflect change --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 7ddf153588..da376e0dca 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.0.2 + 0.5.0.3 category: Hasql, Database, PostgreSQL synopsis: From cb548c070804ad9864dd33a12016f3d809083bb7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 23 May 2019 20:45:08 +0300 Subject: [PATCH 0534/1204] Extend the docs --- library/Hasql/DynamicStatements/Session.hs | 2 +- .../Hasql/DynamicStatements/Snippet/Defs.hs | 14 ++++++ library/Hasql/DynamicStatements/Statement.hs | 46 +++++++++++++++++-- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs index 40babbf926..05dcfe1cbf 100644 --- a/library/Hasql/DynamicStatements/Session.hs +++ b/library/Hasql/DynamicStatements/Session.hs @@ -11,4 +11,4 @@ import qualified Hasql.Session as Session Execute a dynamically constructed statement, providing a result decoder. -} snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Session result -snippet snippet decoder = Session.statement () (Statement.snippet snippet decoder) +snippet snippet decoder = Session.statement () (Statement.snippetAndDecoder snippet decoder) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index aa816b95ca..28a102981b 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -6,6 +6,20 @@ import qualified Hasql.Encoders as Encoders {-| Dynamically generated statement. + +It has an instance of `IsString`, so having the @OverloadedStrings@ extension enabled +you can use string literals to construct it. + +Here's an example: + +@ +selectSubstring :: Text -> Maybe Int64 -> Maybe Int64 -> 'Snippet' +selectSubstring string from to = + "select substring(" <> 'param' string <> + 'foldMap' (\\ x -> " from " <> 'param' x) from <> + 'foldMap' (\\ x -> " for " <> 'param' x) to <> + ")" +@ -} newtype Snippet = Snippet (Seq SnippetChunk) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 17bd724968..6f3be746e9 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -9,10 +9,50 @@ import qualified Ptr.Poking as Poking import qualified Ptr.ByteString as ByteString {-| -Construct a statement dynamically, specifying the parameters in-place. +Construct a statement dynamically, specifying the parameters in-place +in the declaration of snippet and providing a result decoder. + +The injection of the parameters is handled automatically, +generating parametric statements with binary encoders under the hood. + +This is useful when the SQL of your statement depends on the parameters. +Here's an example: + +@ +selectSubstring :: Text -> Maybe Int64 -> Maybe Int64 -> 'Statement' () Text +selectSubstring string from to = let + snippet = + "select substring(" <> Snippet.'SnippetDefs.param' string <> + foldMap (mappend " from " . Snippet.'SnippetDefs.param') from <> + foldMap (mappend " to " . Snippet.'SnippetDefs.param') to <> + ")" + decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') + in 'snippetAndDecoder' snippet decoder +@ + +Without the Snippet API you would have had to implement the same functionality thus: + +@ +selectSubstring' :: Text -> Maybe Int64 -> Maybe Int64 -> 'Statement' () Text +selectSubstring' string from to = let + sql = case (from, to) of + (Just _, Just _) -> "select substring($1 from $2 to $3)" + (Just _, Nothing) -> "select substring($1 from $2)" + (Nothing, Just _) -> "select substring($1 to $2)" + (Nothing, Nothing) -> "select substring($1)" + encoder = + Encoders.'Encoders.param' (string '>$' Encoders.'Encoders.text') <> + foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) from <> + foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) to + decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') + in Statement sql encoder decoder False +@ + +As you can see, the Snippet API protects you from bugs related to placeholder identification and +encoder mismatches. -} -snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result -snippet (SnippetDefs.Snippet chunks) decoder = let +snippetAndDecoder :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result +snippetAndDecoder (SnippetDefs.Snippet chunks) decoder = let step (!paramId, !poking, !encoder) = \ case SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) SnippetDefs.ParamSnippetChunk paramEncoder -> let From 16d8b783ae980f7a2e4f4fefcd4776a121067ae1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 10:46:22 +0300 Subject: [PATCH 0535/1204] Update the links to other projects --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4b02b87b2..dc6e5daba1 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. -* "hasql-migration" - an abstraction over the migration strategies. *Yet to be released.* +* ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. From 8f5cdbff03ff3a27598e2349e47e42b39dd6c821 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 May 2019 08:55:02 +0300 Subject: [PATCH 0536/1204] Update and correct the docs --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 10 ++++++++-- library/Hasql/DynamicStatements/Statement.hs | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index 28a102981b..f7334e08b7 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -5,10 +5,11 @@ import qualified Hasql.Encoders as Encoders {-| -Dynamically generated statement. +Composable SQL snippet with parameters injected. +Abstracts over placeholders and matching of encoders. It has an instance of `IsString`, so having the @OverloadedStrings@ extension enabled -you can use string literals to construct it. +you can use string literals to construct it from string. Here's an example: @@ -20,6 +21,11 @@ selectSubstring string from to = 'foldMap' (\\ x -> " for " <> 'param' x) to <> ")" @ + +Having a decoder you can lift it into 'Hasql.Statement.Statement' using +'Hasql.DynamicStatements.Statement.snippetAndDecoder' or directly execute it in +'Hasql.Session.Session' using +'Hasql.DynamicStatements.Session.snippet'. -} newtype Snippet = Snippet (Seq SnippetChunk) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 6f3be746e9..3f253fed5f 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -48,8 +48,8 @@ selectSubstring' string from to = let in Statement sql encoder decoder False @ -As you can see, the Snippet API protects you from bugs related to placeholder identification and -encoder mismatches. +As you can see, the Snippet API abstracts over placeholders and +matching encoder generation, thus also protecting you from all sorts of related bugs. -} snippetAndDecoder :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result snippetAndDecoder (SnippetDefs.Snippet chunks) decoder = let From d066d4fe3d605b9622bf80994c45c3857220f7b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 May 2019 09:18:17 +0300 Subject: [PATCH 0537/1204] Set the version to 1.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index e5e7f9d69b..d94a0a43de 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.3.0.6 +version: 1.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 5de275854256bc7cc9c7f570bfa479381dc72949 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 24 May 2019 11:21:14 +0300 Subject: [PATCH 0538/1204] Rename functions and extends the docs --- library/Hasql/DynamicStatements/Session.hs | 11 ++++++++--- library/Hasql/DynamicStatements/Snippet/Defs.hs | 2 +- library/Hasql/DynamicStatements/Statement.hs | 6 +++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs index 05dcfe1cbf..ae495ca133 100644 --- a/library/Hasql/DynamicStatements/Session.hs +++ b/library/Hasql/DynamicStatements/Session.hs @@ -8,7 +8,12 @@ import qualified Hasql.Decoders as Decoders import qualified Hasql.Session as Session {-| -Execute a dynamically constructed statement, providing a result decoder. +Execute a dynamically parameterized statement, providing a result decoder. + +This is merely a shortcut, which immediately embeds +@Hasql.DynamicStatements.Statement.'Statement.dynamicallyParameterized'@ +in @Session@. +For details see the docs on that function. -} -snippet :: SnippetDefs.Snippet -> Decoders.Result result -> Session result -snippet snippet decoder = Session.statement () (Statement.snippetAndDecoder snippet decoder) +dynamicallyParameterizedStatement :: SnippetDefs.Snippet -> Decoders.Result result -> Session result +dynamicallyParameterizedStatement snippet decoder = Session.statement () (Statement.dynamicallyParameterized snippet decoder) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index f7334e08b7..0322dbde17 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -23,7 +23,7 @@ selectSubstring string from to = @ Having a decoder you can lift it into 'Hasql.Statement.Statement' using -'Hasql.DynamicStatements.Statement.snippetAndDecoder' or directly execute it in +'Hasql.DynamicStatements.Statement.dynamicallyParameterized' or directly execute it in 'Hasql.Session.Session' using 'Hasql.DynamicStatements.Session.snippet'. -} diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 3f253fed5f..8b3e6c6944 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -27,7 +27,7 @@ selectSubstring string from to = let foldMap (mappend " to " . Snippet.'SnippetDefs.param') to <> ")" decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') - in 'snippetAndDecoder' snippet decoder + in 'dynamicallyParameterized' snippet decoder @ Without the Snippet API you would have had to implement the same functionality thus: @@ -51,8 +51,8 @@ selectSubstring' string from to = let As you can see, the Snippet API abstracts over placeholders and matching encoder generation, thus also protecting you from all sorts of related bugs. -} -snippetAndDecoder :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result -snippetAndDecoder (SnippetDefs.Snippet chunks) decoder = let +dynamicallyParameterized :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result +dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder = let step (!paramId, !poking, !encoder) = \ case SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) SnippetDefs.ParamSnippetChunk paramEncoder -> let From eced57af832f8c344ad93e5f19bbd5e1cde0214f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 12:03:46 +0300 Subject: [PATCH 0539/1204] Ditch the redundant deps --- hasql-dynamic-statements.cabal | 5 ----- library/Hasql/DynamicStatements/Prelude.hs | 24 ---------------------- 2 files changed, 29 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index dd523927f1..99e952a0dd 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -34,10 +34,5 @@ library containers >=0.6 && <0.7, data-default >=0.7 && <0.8, hasql >=1.3.0.5 && <1.4, - network-ip >=0.2 && <1, ptr >=0.16.6 && <0.17, - scientific >=0.2 && <0.4, - text >=1 && <2, - time >=1.4 && <2, - uuid >=1.3 && <1.4, vector >=0.10 && <0.13 diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index be8bbf5c8b..5f2050c6ea 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -81,30 +81,6 @@ import Data.Sequence as Exports (Seq) ------------------------- import Data.ByteString as Exports (ByteString) --- text -------------------------- -import Data.Text as Exports (Text) - --- vector -------------------------- -import Data.Vector as Exports (Vector) - --- scientific -------------------------- -import Data.Scientific as Exports (Scientific) - --- uuid -------------------------- -import Data.UUID as Exports (UUID) - --- time -------------------------- -import Data.Time as Exports - --- network-ip -------------------------- -import Network.IP.Addr as Exports (NetAddr, IP) - -- data-default ------------------------- import Data.Default as Exports From 82738b237189c700c17d998ce2b39f18b7b92147 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 12:12:35 +0300 Subject: [PATCH 0540/1204] Add package description --- hasql-dynamic-statements.cabal | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 99e952a0dd..0b390687cb 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,6 +1,11 @@ name: hasql-dynamic-statements version: 0.1 synopsis: Toolkit for constructing Hasql statements dynamically +description: + This library introduces into the Hasql ecosystem a new abstraction named Snippet, + which makes it trivial to construct SQL, while injecting values. + It is intended to be used when the SQL of your statement depends on the parameters, + that you want to pass in. homepage: https://github.com/nikita-volkov/hasql-dynamic-statements bug-reports: https://github.com/nikita-volkov/hasql-dynamic-statements/issues author: Nikita Volkov From 0724f75e677fd49a41004793911127a4b55b13bc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 12:22:56 +0300 Subject: [PATCH 0541/1204] Add a mention of "hasql-dynamic-statements" --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index dc6e5daba1..629dc86303 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with automated conflict resolution. +* ["hasql-dynamic-statements"](https://github.com/nikita-volkov/hasql-dynamic-statements) - a toolkit for generating statements based on the parameters. + * ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. * ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transaction) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. From e4f81169ac2d33d5c8b1f574748cfb55a42003f4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 May 2019 13:24:11 +0300 Subject: [PATCH 0542/1204] Reimplement based on newer "hasql" --- hasql-implicits.cabal | 5 +- library/Hasql/Implicits/Encoders.hs | 100 ++++++++++++++++++++ library/Hasql/Implicits/ExplicitEncoders.hs | 33 ------- library/Hasql/Implicits/ImplicitEncoders.hs | 89 ----------------- 4 files changed, 102 insertions(+), 125 deletions(-) create mode 100644 library/Hasql/Implicits/Encoders.hs delete mode 100644 library/Hasql/Implicits/ExplicitEncoders.hs delete mode 100644 library/Hasql/Implicits/ImplicitEncoders.hs diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 5bdca8e70d..75850ecb81 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -21,8 +21,7 @@ library ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: - Hasql.Implicits.ExplicitEncoders - Hasql.Implicits.ImplicitEncoders + Hasql.Implicits.Encoders other-modules: Hasql.Implicits.Prelude build-depends: @@ -30,7 +29,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, - hasql >=1.3.0.5 && <1.4, + hasql >=1.4 && <1.5, network-ip >=0.2 && <1, ptr >=0.16.6 && <0.17, scientific >=0.2 && <0.4, diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs new file mode 100644 index 0000000000..ffdc5edd0a --- /dev/null +++ b/library/Hasql/Implicits/Encoders.hs @@ -0,0 +1,100 @@ +{-# LANGUAGE CPP #-} +module Hasql.Implicits.Encoders where + +import Hasql.Implicits.Prelude +import Hasql.Encoders +import qualified Data.Aeson as Aeson + + +{-| Provides a default implementation of value encoder. -} +class DefaultValueEncoder a where + {-| Default value encoder with nullability specified. -} + defaultValue :: NullableOrNot Value a + +#define RIGHT_QUOTED(a) a' +#define INSTANCES(VALUE, ENCODER) \ +instance DefaultValueEncoder VALUE where { \ + defaultValue = nonNullable ENCODER; \ +}; \ +instance DefaultValueEncoder [VALUE] where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder [Maybe VALUE] where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder [[VALUE]] where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder [[Maybe VALUE]] where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Vector VALUE) where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Vector (Maybe VALUE)) where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Vector (Vector VALUE)) where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Vector (Vector (Maybe VALUE))) where { \ + defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe VALUE) where { \ + defaultValue = nullable ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe [VALUE]) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe [Maybe VALUE]) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe [[VALUE]]) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe [[Maybe VALUE]]) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe (Vector VALUE)) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe (Vector (Maybe VALUE))) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe (Vector (Vector VALUE))) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +}; \ +instance DefaultValueEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ + defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +} + +INSTANCES(Char, char) +INSTANCES(Double, float8) +INSTANCES(Float, float4) +INSTANCES(Int16, int2) +INSTANCES(Int32, int4) +INSTANCES(Int64, int8) +INSTANCES(ByteString, bytea) +INSTANCES(Scientific, numeric) +INSTANCES(Text, text) +INSTANCES(UTCTime, timestamptz) +INSTANCES(Aeson.Value, jsonb) +INSTANCES(UUID, uuid) +INSTANCES(Day, date) +INSTANCES(DiffTime, interval) +INSTANCES(TimeOfDay, time) +INSTANCES(LocalTime, timestamp) +INSTANCES((TimeOfDay, TimeZone), timetz) +INSTANCES((NetAddr IP), inet) + +#undef INSTANCES +#undef RIGHT_QUOTED + + +{-| Parameter encoder derived from its input type. -} +defaultParam :: DefaultValueEncoder param => Params param +defaultParam = param defaultValue + +{-| Array element encoder derived from its input type. -} +defaultElement :: DefaultValueEncoder element => Array element +defaultElement = element defaultValue diff --git a/library/Hasql/Implicits/ExplicitEncoders.hs b/library/Hasql/Implicits/ExplicitEncoders.hs deleted file mode 100644 index b6c9ab0e8c..0000000000 --- a/library/Hasql/Implicits/ExplicitEncoders.hs +++ /dev/null @@ -1,33 +0,0 @@ -{-| -Extensions to the explicit encoders DSL from the \"hasql\" library ("Hasql.Encoders"). --} -module Hasql.Implicits.ExplicitEncoders where - -import Hasql.Implicits.Prelude -import Hasql.Encoders as Old - - -{-| -Lift a single-param encoder definition to the level of composable encoder of multiple params. --} -param :: Param a -> Params a -param (Param params) = params - - -{-| -Single param encoder, which captures its nullability. --} -newtype Param a = Param (Params a) - -{-| -Lift a value encoder into a non-nullable parameter encoder. --} -nonNullable :: Value a -> Param a -nonNullable = Param . Old.param - -{-| -Lift a value encoder into a nullable parameter encoder. --} -nullable :: Value a -> Param (Maybe a) -nullable = Param . nullableParam - diff --git a/library/Hasql/Implicits/ImplicitEncoders.hs b/library/Hasql/Implicits/ImplicitEncoders.hs deleted file mode 100644 index b8b7489102..0000000000 --- a/library/Hasql/Implicits/ImplicitEncoders.hs +++ /dev/null @@ -1,89 +0,0 @@ -{-# LANGUAGE CPP #-} -module Hasql.Implicits.ImplicitEncoders where - -import Hasql.Implicits.Prelude -import Hasql.Encoders -import qualified Data.Aeson as Aeson - - -class ParamsEncoder a where - params :: Params a - -#define Q(a) a' -#define INSTANCES(VALUE, ENCODER) \ -instance ParamsEncoder VALUE where { \ - params = param ENCODER; \ -}; \ -instance ParamsEncoder [Maybe VALUE] where { \ - params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder [VALUE] where { \ - params = param (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder [[VALUE]] where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder [[Maybe VALUE]] where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Vector (Maybe VALUE)) where { \ - params = param (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Vector VALUE) where { \ - params = param (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Vector (Vector VALUE)) where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Vector (Vector (Maybe VALUE))) where { \ - params = param (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe VALUE) where { \ - params = nullableParam ENCODER; \ -}; \ -instance ParamsEncoder (Maybe [Maybe VALUE]) where { \ - params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe [VALUE]) where { \ - params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe [[VALUE]]) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe [[Maybe VALUE]]) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Maybe VALUE))) where { \ - params = nullableParam (array (dimension Q(foldl) (nullableElement ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe (Vector VALUE)) where { \ - params = nullableParam (array (dimension Q(foldl) (element ENCODER))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Vector VALUE))) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (element ENCODER)))); \ -}; \ -instance ParamsEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ - params = nullableParam (array (dimension Q(foldl) (dimension Q(foldl) (nullableElement ENCODER)))); \ -} - -INSTANCES(Char, char) -INSTANCES(Double, float8) -INSTANCES(Float, float4) -INSTANCES(Int16, int2) -INSTANCES(Int32, int4) -INSTANCES(Int64, int8) -INSTANCES(ByteString, bytea) -INSTANCES(Scientific, numeric) -INSTANCES(Text, text) -INSTANCES(UTCTime, timestamptz) -INSTANCES(Aeson.Value, jsonb) -INSTANCES(UUID, uuid) -INSTANCES(Day, date) -INSTANCES(DiffTime, interval) -INSTANCES(TimeOfDay, time) -INSTANCES(LocalTime, timestamp) -INSTANCES((TimeOfDay, TimeZone), timetz) -INSTANCES((NetAddr IP), inet) - -#undef INSTANCES -#undef Q From 17e44c6d04726d2405daae39f73794135201a03c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 12:30:21 +0300 Subject: [PATCH 0543/1204] Clean up the deps --- hasql-dynamic-statements.cabal | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 0b390687cb..2bdc2c744c 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -33,11 +33,9 @@ library Hasql.DynamicStatements.Prelude Hasql.DynamicStatements.Snippet.Defs build-depends: - aeson >=1 && <2, base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, data-default >=0.7 && <0.8, hasql >=1.3.0.5 && <1.4, - ptr >=0.16.6 && <0.17, - vector >=0.10 && <0.13 + ptr >=0.16.6 && <0.17 From 9daddfbaa48d191c5ae753f2dd9c6df722dd21d3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 14:22:57 +0300 Subject: [PATCH 0544/1204] Set the version to 0.1.0.1 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 2bdc2c744c..f96e68a140 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.1 +version: 0.1.0.1 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From d7d80ede8eb55b261336d08f7962aeef82d4a2c7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 18:00:26 +0300 Subject: [PATCH 0545/1204] Correct the docs --- library/Hasql/Private/Decoders.hs | 2 +- library/Hasql/Private/Encoders.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 12f05b571f..9959d41d2e 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -206,7 +206,7 @@ numeric = Value (Value.decoder (const A.numeric)) {-| Decoder of the @CHAR@ values. -Note that it supports UTF-8 values. +Note that it supports Unicode values. -} {-# INLINABLE char #-} char :: Value Char diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index a06917c282..aa5e501359 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -166,7 +166,7 @@ numeric = Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) {-| Encoder of @CHAR@ values. -Note that it supports UTF-8 values and +Note that it supports Unicode values and identifies itself under the @TEXT@ OID because of that. -} {-# INLINABLE char #-} From 3fcbcb23ba11a1bdd7a385fabeec2b20861cca6d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 18:05:48 +0300 Subject: [PATCH 0546/1204] Add a Contravariant instance for Array encoder --- library/Hasql/Private/Encoders.hs | 1 + library/Hasql/Private/Encoders/Array.hs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index aa5e501359..9756dac35d 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -339,6 +339,7 @@ Please note that the PostgreSQL @IN@ keyword does not accept an array, but rathe values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condition instead. -} newtype Array a = Array (Array.Array a) + deriving (Contravariant) {-| Lifts a 'Value' encoder into an 'Array' encoder. diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index 536178b91a..b8a3ea1928 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -9,6 +9,10 @@ import qualified Text.Builder as C data Array a = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) +instance Contravariant Array where + contramap fn (Array valueOid arrayOid encoder renderer) = + Array valueOid arrayOid (\ intDateTimes -> encoder intDateTimes . fn) (renderer . fn) + {-# INLINE value #-} value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a value valueOID arrayOID encoder = From f6bc4a53f72d82ddec5ae4d9031d5218ade8d74e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 26 May 2019 14:43:30 +0300 Subject: [PATCH 0547/1204] Rename to DefaultParamEncoder Because provide instances thinking about parameter, not the other use-cases --- library/Hasql/Implicits/Encoders.hs | 89 +++++++++++++---------------- 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index ffdc5edd0a..58f5a48673 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -6,66 +6,66 @@ import Hasql.Encoders import qualified Data.Aeson as Aeson -{-| Provides a default implementation of value encoder. -} -class DefaultValueEncoder a where - {-| Default value encoder with nullability specified. -} - defaultValue :: NullableOrNot Value a +{-| Provides a default implementation of parameter encoder. -} +class DefaultParamEncoder a where + {-| Default parameter encoder with nullability specified. -} + defaultParam :: NullableOrNot Value a #define RIGHT_QUOTED(a) a' #define INSTANCES(VALUE, ENCODER) \ -instance DefaultValueEncoder VALUE where { \ - defaultValue = nonNullable ENCODER; \ +instance DefaultParamEncoder VALUE where { \ + defaultParam = nonNullable ENCODER; \ }; \ -instance DefaultValueEncoder [VALUE] where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder [VALUE] where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder [Maybe VALUE] where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder [Maybe VALUE] where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder [[VALUE]] where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder [[VALUE]] where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder [[Maybe VALUE]] where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder [[Maybe VALUE]] where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Vector VALUE) where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Vector VALUE) where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Vector (Maybe VALUE)) where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Vector (Maybe VALUE)) where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Vector (Vector VALUE)) where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Vector (Vector VALUE)) where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Vector (Vector (Maybe VALUE))) where { \ - defaultValue = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Vector (Vector (Maybe VALUE))) where { \ + defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe VALUE) where { \ - defaultValue = nullable ENCODER; \ +instance DefaultParamEncoder (Maybe VALUE) where { \ + defaultParam = nullable ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe [VALUE]) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Maybe [VALUE]) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe [Maybe VALUE]) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Maybe [Maybe VALUE]) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe [[VALUE]]) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Maybe [[VALUE]]) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe [[Maybe VALUE]]) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Maybe [[Maybe VALUE]]) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe (Vector VALUE)) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Maybe (Vector VALUE)) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe (Vector (Maybe VALUE))) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Maybe (Vector (Maybe VALUE))) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe (Vector (Vector VALUE))) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ +instance DefaultParamEncoder (Maybe (Vector (Vector VALUE))) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ }; \ -instance DefaultValueEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ - defaultValue = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ +instance DefaultParamEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ + defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ } INSTANCES(Char, char) @@ -89,12 +89,3 @@ INSTANCES((NetAddr IP), inet) #undef INSTANCES #undef RIGHT_QUOTED - - -{-| Parameter encoder derived from its input type. -} -defaultParam :: DefaultValueEncoder param => Params param -defaultParam = param defaultValue - -{-| Array element encoder derived from its input type. -} -defaultElement :: DefaultValueEncoder element => Array element -defaultElement = element defaultValue From 8281951cbea3c58e60f9a3630203d2016ce20472 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 May 2019 15:48:19 +0300 Subject: [PATCH 0548/1204] Update to newer Hasql --- conflicts-test/Main/Statements.hs | 16 ++++++++-------- hasql-transaction.cabal | 2 +- library/Hasql/Transaction/Private/Statements.hs | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index 0366e04d91..8604d29573 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -8,7 +8,7 @@ import qualified Hasql.Decoders as D createAccountTable :: Statement () () createAccountTable = - Statement sql E.unit D.unit False + Statement sql E.noParams D.noResult False where sql = "create table account (id serial not null, balance numeric not null, primary key (id))" @@ -17,23 +17,23 @@ dropAccountTable :: Statement () () dropAccountTable = Statement "drop table account" - E.unit - D.unit + E.noParams + D.noResult False createAccount :: Statement Scientific Int64 createAccount = Statement "insert into account (balance) values ($1) returning id" - (E.param E.numeric) - (D.singleRow (D.column D.int8)) + ((E.param . E.nonNullable) E.numeric) + (D.singleRow ((D.column . D.nonNullable) D.int8)) True modifyBalance :: Statement (Int64, Scientific) Bool modifyBalance = Statement "update account set balance = balance + $2 where id = $1" - (contrazip2 (E.param E.int8) (E.param E.numeric)) + (contrazip2 ((E.param . E.nonNullable) E.int8) ((E.param . E.nonNullable) E.numeric)) (fmap (> 0) D.rowsAffected) True @@ -41,7 +41,7 @@ getBalance :: Statement Int64 (Maybe Scientific) getBalance = Statement "select balance from account where id = $1" - (E.param E.int8) - (D.rowMaybe (D.column D.numeric)) + ((E.param . E.nonNullable) E.int8) + (D.rowMaybe ((D.column . D.nonNullable) D.numeric)) True diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index a28275a89b..296f07d8ef 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -36,7 +36,7 @@ library bytestring-tree-builder >=0.1 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, - hasql >=1.3 && <1.4, + hasql >=1.4 && <1.5, mtl >=2 && <3, transformers >=0.3 && <0.6 diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 49096b8054..40492e0f93 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -14,15 +14,15 @@ import qualified Hasql.Transaction.Private.SQL as D beginTransaction :: IsolationLevel -> Mode -> A.Statement () () beginTransaction isolation mode = - A.Statement (D.beginTransaction isolation mode) B.unit C.unit True + A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult True commitTransaction :: A.Statement () () commitTransaction = - A.Statement "COMMIT" B.unit C.unit True + A.Statement "COMMIT" B.noParams C.noResult True abortTransaction :: A.Statement () () abortTransaction = - A.Statement "ABORT" B.unit C.unit True + A.Statement "ABORT" B.noParams C.noResult True -- * Streaming @@ -30,11 +30,11 @@ abortTransaction = declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a () declareCursor name sql encoder = - A.Statement (D.declareCursor name sql) encoder C.unit False + A.Statement (D.declareCursor name sql) encoder C.noResult False closeCursor :: A.Statement ByteString () closeCursor = - A.Statement "CLOSE $1" (B.param B.bytea) C.unit True + A.Statement "CLOSE $1" ((B.param . B.nonNullable) B.bytea) C.noResult True fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Statement (Int64, ByteString) b fetchFromCursor step init rowDec = @@ -44,7 +44,7 @@ fetchFromCursor step init rowDec = "FETCH FORWARD $1 FROM $2" encoder = contrazip2 - (B.param B.int8) - (B.param B.bytea) + ((B.param . B.nonNullable) B.int8) + ((B.param . B.nonNullable) B.bytea) decoder = C.foldlRows step init rowDec From de0e34b62e3a1f140265b60bb59aec9f848f1967 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 May 2019 20:43:46 +0300 Subject: [PATCH 0549/1204] Add notices about multidimensional arrays --- library/Hasql/Private/Decoders.hs | 6 ++++++ library/Hasql/Private/Encoders.hs | 3 +++ 2 files changed, 9 insertions(+) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 9959d41d2e..9320ebe696 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -367,6 +367,9 @@ This function is merely a shortcut to the following expression: @ ('array' . 'dimension' Control.Monad.'replicateM' . 'element') @ + +Please notice that in case of multidimensional arrays nesting 'listArray' decoder +won't work. You have to explicitly construct the array decoder using 'array'. -} {-# INLINE listArray #-} listArray :: NullableOrNot Value element -> Value [element] @@ -380,6 +383,9 @@ This function is merely a shortcut to the following expression: @ ('array' . 'dimension' Data.Vector.Generic.'GenericVector.replicateM' . 'element') @ + +Please notice that in case of multidimensional arrays nesting 'vectorArray' decoder +won't work. You have to explicitly construct the array decoder using 'array'. -} {-# INLINE vectorArray #-} vectorArray :: GenericVector.Vector vector element => NullableOrNot Value element -> Value (vector element) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 9756dac35d..189429a4e3 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -316,6 +316,9 @@ This function is merely a shortcut to the following expression: @ ('array' . 'dimension' 'foldl'' . 'element') @ + +Please notice that in case of multidimensional arrays nesting 'foldableArray' encoder +won't work. You have to explicitly construct the array encoder using 'array'. -} {-# INLINE foldableArray #-} foldableArray :: Foldable foldable => NullableOrNot Value element -> Value (foldable element) From 6e45f9f4d7afdf1c71780ebf263b4b32ff84a099 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 May 2019 20:44:00 +0300 Subject: [PATCH 0550/1204] Add the IN and NOT IN recipe --- library/Hasql/Statement.hs | 144 ++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 59 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index efd4e2f5b4..28272e19c4 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -2,34 +2,12 @@ module Hasql.Statement ( Statement(..), -- * Recipies + -- ** Insert many - -- | - -- It is not currently possible to pass in an array of encodable values - -- to use in an insert many statement. Instead, PostgreSQL's - -- (9.4 or later) @unnest@ function can be used in an analogous way - -- to haskell's `zip` function by passing in multiple arrays of values - -- to be zipped into the rows we want to insert: - -- - -- @ - -- insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () - -- insertMultipleLocations = 'Statement' sql encoder decoder True where - -- sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" - -- encoder = - -- contramap Vector.'Data.Vector.unzip3' $ - -- contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') - -- where - -- vector = - -- Encoders.'Encoders.param' . - -- Encoders.'Encoders.nonNullable' . - -- Encoders.'Encoders.array' . - -- Encoders.'Encoders.dimension' 'foldl'' . - -- Encoders.'Encoders.element' . - -- Encoders.'Encoders.nonNullable' - -- decoder = Decoders.'Decoders.noResult' - -- @ - -- - -- This approach is much more efficient than executing a single-row Insert - -- statement multiple times. + -- $insertMany + + -- ** IN and NOT IN + -- $inAndNotIn ) where @@ -37,39 +15,39 @@ import Hasql.Private.Prelude import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders +{-| +Specification of a strictly single-statement query, which can be parameterized and prepared. + +Consists of the following: + +* SQL template, +* params encoder, +* result decoder, +* a flag, determining whether it should be prepared. --- | --- Specification of a strictly single-statement query, which can be parameterized and prepared. --- --- Consists of the following: --- --- * SQL template, --- * params encoder, --- * result decoder, --- * a flag, determining whether it should be prepared. --- --- The SQL template must be formatted according to Postgres' standard, --- with any non-ASCII characters of the template encoded using UTF-8. --- According to the format, --- parameters must be referred to using a positional notation, as in the following: --- @$1@, @$2@, @$3@ and etc. --- Those references must be used in accordance to the order in which the according --- value encoders are specified in 'Encoders.Params'. --- --- Following is an example of a declaration of a prepared statement with its associated codecs. --- --- @ --- selectSum :: 'Statement' (Int64, Int64) Int64 --- selectSum = 'Statement' sql encoder decoder True where --- sql = "select ($1 + $2)" --- encoder = --- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' --- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' Encoders.'Hasql.Encoders.text')) --- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) --- @ --- --- The statement above accepts a product of two parameters of type 'Int64' --- and produces a single result of type 'Int64'. +The SQL template must be formatted according to Postgres' standard, +with any non-ASCII characters of the template encoded using UTF-8. +According to the format, +parameters must be referred to using a positional notation, as in the following: +@$1@, @$2@, @$3@ and etc. +Those references must be used in accordance to the order in which the according +value encoders are specified in 'Encoders.Params'. + +Following is an example of a declaration of a prepared statement with its associated codecs. + +@ +selectSum :: 'Statement' (Int64, Int64) Int64 +selectSum = 'Statement' sql encoder decoder True where + sql = "select ($1 + $2)" + encoder = + ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' + ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' Encoders.'Hasql.Encoders.text')) + decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) +@ + +The statement above accepts a product of two parameters of type 'Int64' +and produces a single result of type 'Int64'. +-} data Statement a b = Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool @@ -83,3 +61,51 @@ instance Profunctor Statement where Statement template (contramap f1 encoder) (fmap f2 decoder) preparable +{- $insertMany + +It is not currently possible to pass in an array of encodable values +to use in an insert many statement. Instead, PostgreSQL's +(9.4 or later) @unnest@ function can be used in an analogous way +to haskell's `zip` function by passing in multiple arrays of values +to be zipped into the rows we want to insert: + +@ +insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () +insertMultipleLocations = 'Statement' sql encoder decoder True where + sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" + encoder = + contramap Vector.'Data.Vector.unzip3' $ + contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') + where + vector = + Encoders.'Encoders.param' . + Encoders.'Encoders.nonNullable' . + Encoders.'Encoders.array' . + Encoders.'Encoders.dimension' 'foldl'' . + Encoders.'Encoders.element' . + Encoders.'Encoders.nonNullable' + decoder = Decoders.'Decoders.noResult' +@ + +This approach is much more efficient than executing a single-row Insert +statement multiple times. +-} + +{- $inAndNotIn + +There is a common misconception that Postgresql supports array +as a parameter for the @IN@ operator. +However Postgres only supports a syntactical list of values with it, +i.e., you have to specify each option as an individual parameter +(@something IN ($1, $2, $3)@). + +Clearly it would be much more convenient to provide an array as a single parameter, +but the @IN@ operator does not support that. +Fortunately, Postgres does provide such functionality with other operators: + +* Use @something = ANY($1)@ instead of @something IN ($1)@ +* Use @something <> ALL($1)@ instead of @something NOT IN ($1)@ + +For details see +. +-} From 649115d1512c9624b54f5ebc7ca08b89f82b6c1a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 May 2019 20:51:50 +0300 Subject: [PATCH 0551/1204] Set the version to 0.7.2 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 296f07d8ef..ac2b92896d 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 0.7.1 +version: 0.7.2 category: Hasql, Database, PostgreSQL synopsis: A composable abstraction over the retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From eb71760f5147cf566de95cd3709c03a785646ef6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 09:26:16 +0300 Subject: [PATCH 0552/1204] Correct the docs --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 2 +- library/Hasql/DynamicStatements/Statement.hs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index 0322dbde17..ee5af20083 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -14,7 +14,7 @@ you can use string literals to construct it from string. Here's an example: @ -selectSubstring :: Text -> Maybe Int64 -> Maybe Int64 -> 'Snippet' +selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Snippet' selectSubstring string from to = "select substring(" <> 'param' string <> 'foldMap' (\\ x -> " from " <> 'param' x) from <> diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 8b3e6c6944..a9bd512184 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -19,12 +19,12 @@ This is useful when the SQL of your statement depends on the parameters. Here's an example: @ -selectSubstring :: Text -> Maybe Int64 -> Maybe Int64 -> 'Statement' () Text +selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text selectSubstring string from to = let snippet = "select substring(" <> Snippet.'SnippetDefs.param' string <> foldMap (mappend " from " . Snippet.'SnippetDefs.param') from <> - foldMap (mappend " to " . Snippet.'SnippetDefs.param') to <> + foldMap (mappend " for " . Snippet.'SnippetDefs.param') to <> ")" decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') in 'dynamicallyParameterized' snippet decoder @@ -33,7 +33,7 @@ selectSubstring string from to = let Without the Snippet API you would have had to implement the same functionality thus: @ -selectSubstring' :: Text -> Maybe Int64 -> Maybe Int64 -> 'Statement' () Text +selectSubstring' :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text selectSubstring' string from to = let sql = case (from, to) of (Just _, Just _) -> "select substring($1 from $2 to $3)" From f978247292faa3e31e5f96b178ecd828477e52f8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 09:26:37 +0300 Subject: [PATCH 0553/1204] Set the version to 0.1.0.2 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index f96e68a140..68ef14ef76 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.1.0.1 +version: 0.1.0.2 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From f8f502a3ef77364f8bd41eb436ff66159a74b933 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 09:27:23 +0300 Subject: [PATCH 0554/1204] Reimplement with newer Hasql and add tests --- hasql-dynamic-statements.cabal | 20 +++++- library/Hasql/DynamicStatements/Prelude.hs | 4 -- library/Hasql/DynamicStatements/Snippet.hs | 2 - .../Hasql/DynamicStatements/Snippet/Defs.hs | 24 ++----- library/Hasql/DynamicStatements/Statement.hs | 2 +- test/Main.hs | 62 +++++++++++++++++++ 6 files changed, 86 insertions(+), 28 deletions(-) create mode 100644 test/Main.hs diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 68ef14ef76..e21a4e81e0 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -36,6 +36,22 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, - data-default >=0.7 && <0.8, - hasql >=1.3.0.5 && <1.4, + hasql >=1.4 && <1.5, + hasql-implicits >=0.1 && <0.2, ptr >=0.16.6 && <0.17 + +test-suite test + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 + build-depends: + hasql, + hasql-dynamic-statements, + QuickCheck >=2.8.1 && <3, + quickcheck-instances >=0.3.11 && <0.4, + rerebase <2, + tasty >=0.12 && <2, + tasty-hunit >=0.9 && <0.11, + tasty-quickcheck >=0.9 && <0.11 diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 5f2050c6ea..7fa72699a4 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -80,7 +80,3 @@ import Data.Sequence as Exports (Seq) -- bytestring ------------------------- import Data.ByteString as Exports (ByteString) - --- data-default -------------------------- -import Data.Default as Exports diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs index 40bd57157d..982607f1df 100644 --- a/library/Hasql/DynamicStatements/Snippet.hs +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -2,9 +2,7 @@ module Hasql.DynamicStatements.Snippet ( Snippet, param, - nullableParam, encoderAndParam, - encoderAndNullableParam, ) where diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index ee5af20083..d0760355e5 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -2,6 +2,7 @@ module Hasql.DynamicStatements.Snippet.Defs where import Hasql.DynamicStatements.Prelude import qualified Hasql.Encoders as Encoders +import qualified Hasql.Implicits.Encoders as Encoders {-| @@ -48,26 +49,11 @@ sql x = Snippet (pure (StringSnippetChunk x)) {-| Parameter encoded using an implicitly derived encoder from the type. -} -param :: Default (Encoders.Value param) => param -> Snippet -param = encoderAndParam def - -{-| -Nullable parameter encoded using an implicitly derived encoder from the type. --} -nullableParam :: Default (Encoders.Value param) => Maybe param -> Snippet -nullableParam = encoderAndNullableParam def +param :: Encoders.DefaultParamEncoder param => param -> Snippet +param = encoderAndParam Encoders.defaultParam {-| Parameter with an explicitly defined encoder. -} -encoderAndParam :: Encoders.Value param -> param -> Snippet -encoderAndParam = paramsEncoderAndParam . Encoders.param - -{-| -Nullable parameter with an explicitly defined encoder. --} -encoderAndNullableParam :: Encoders.Value param -> Maybe param -> Snippet -encoderAndNullableParam = paramsEncoderAndParam . Encoders.nullableParam - -paramsEncoderAndParam :: Encoders.Params param -> param -> Snippet -paramsEncoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ encoder))) +encoderAndParam :: Encoders.NullableOrNot Encoders.Value param -> param -> Snippet +encoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ Encoders.param encoder))) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index a9bd512184..6be1042195 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -26,7 +26,7 @@ selectSubstring string from to = let foldMap (mappend " from " . Snippet.'SnippetDefs.param') from <> foldMap (mappend " for " . Snippet.'SnippetDefs.param') to <> ")" - decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') + decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' (Decoders.'Decoders.nonNullable' Decoders.'Decoders.text')) in 'dynamicallyParameterized' snippet decoder @ diff --git a/test/Main.hs b/test/Main.hs new file mode 100644 index 0000000000..dbf2fcb17c --- /dev/null +++ b/test/Main.hs @@ -0,0 +1,62 @@ +module Main where + +import Prelude hiding (assert) +import Test.QuickCheck.Instances +import Test.Tasty +import Test.Tasty.Runners +import Test.Tasty.HUnit +import Test.Tasty.QuickCheck +import qualified Test.QuickCheck as QuickCheck +import qualified Hasql.Statement as Statement +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Session as Session +import qualified Hasql.Connection as Connection +import qualified Hasql.DynamicStatements.Snippet as Snippet +import qualified Hasql.DynamicStatements.Session as Session + + +main = + defaultMain tree + +tree = + testGroup "All tests" + [ + testCase "Select substring" $ let + sample string from to = let + snippet = + "select substring(" <> Snippet.param @Text string <> + foldMap (mappend " from " . Snippet.param @Int32) from <> + foldMap (mappend " for " . Snippet.param @Int32) to <> + ")" + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.text)) + in runSession (Session.dynamicallyParameterizedStatement snippet decoder) + in do + assertEqual "" (Right (Right "bc")) =<< sample "abcd" (Just 2) (Just 2) + assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) (Just 3) + assertEqual "" (Right (Right "abc")) =<< sample "abcd" Nothing (Just 3) + assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) Nothing + ] + +runSession :: Session.Session a -> IO (Either Connection.ConnectionError (Either Session.QueryError a)) +runSession = withConnection . Session.run + +withConnection :: (Connection.Connection -> IO a) -> IO (Either Connection.ConnectionError a) +withConnection handler = + runExceptT $ acquire >>= \connection -> use connection <* release connection + where + acquire = + ExceptT $ Connection.acquire settings + where + settings = + Connection.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "" + database = "postgres" + use connection = + lift $ handler connection + release connection = + lift $ Connection.release connection From b6b8b56e9417bdc7e17a2c87d76fab3b51896c38 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 09:33:11 +0300 Subject: [PATCH 0555/1204] Add a notion of "hasql-implicits" in README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c89fa483b7..a33d98f857 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. +* ["hasql-implicits"](https://github.com/nikita-volkov/hasql-implicits) - implicit definitions, such as default codecs for standard types. + ### Benefits of being an ecosystem * **Simplicity.** Each library in isolation provides a simple API, which is hopefully easier to comprehend. From ef7b451541c8cda9f429e00f68487a143545022c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 09:48:37 +0300 Subject: [PATCH 0556/1204] Migrate to newer Hasql and set the version to 0.5.1 --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index da376e0dca..c07d2c0d73 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.0.3 + 0.5.1 category: Hasql, Database, PostgreSQL synopsis: @@ -50,7 +50,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 1.3 && < 1.4, + hasql >= 1.3 && < 1.5, -- data: time >= 1.5 && < 2, -- general: From 47d8bf48e00f9c5e9119781f80600a516f4709c5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 12:08:41 +0300 Subject: [PATCH 0557/1204] Fix the tests --- test/Main.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index e3df5c26ef..7a8c434453 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -15,15 +15,15 @@ main = hspec $ do it "releases a spot in the pool when there is an error" $ do pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") let - statement = Statement.Statement "" Encoders.unit Decoders.unit True + statement = Statement.Statement "" Encoders.noParams Decoders.noResult True session = Session.statement () statement in do use pool session `shouldNotReturn` (Right ()) let session = let statement = let - decoder = Decoders.singleRow (Decoders.column Decoders.int8) - in Statement.Statement "SELECT 1" Encoders.unit decoder True + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + in Statement.Statement "SELECT 1" Encoders.noParams decoder True in Session.statement () statement in do use pool session `shouldReturn` (Right 1) From 482ed6a3f772567bd47f263305b22d2161b54fba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 12:10:12 +0300 Subject: [PATCH 0558/1204] Correct the docs --- library/Hasql/Private/Encoders.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 189429a4e3..e61849c425 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -304,17 +304,17 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let {-| Lift a value encoder of element into a unidimensional array encoder of a foldable value. -E.g., +This function is merely a shortcut to the following expression: @ -vectorOfInts :: Value (Vector Int64) -vectorOfInts = 'foldableArray' ('nonNullable' 'int8') +('array' . 'dimension' 'foldl'' . 'element') @ -This function is merely a shortcut to the following expression: +You can use it like this: @ -('array' . 'dimension' 'foldl'' . 'element') +vectorOfInts :: Value (Vector Int64) +vectorOfInts = 'foldableArray' ('nonNullable' 'int8') @ Please notice that in case of multidimensional arrays nesting 'foldableArray' encoder From b329594b8e8c127beed8a7fb7ccb4f0ce8eadf58 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 12:15:08 +0300 Subject: [PATCH 0559/1204] Set the version to 0.2 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index e21a4e81e0..687bb68e1a 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.1.0.2 +version: 0.2 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 2bd8ca847431e2e6db9c43e29f817f0ee37dc75a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 12:18:43 +0300 Subject: [PATCH 0560/1204] Correct the synopsis --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 75850ecb81..0e56c2db60 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,6 +1,6 @@ name: hasql-implicits version: 0.1 -synopsis: Toolkit for constructing Hasql statements dynamically +synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues author: Nikita Volkov From 19f6e6f2fdf5778c93f2ca8f9b92e26c558d90db Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 16:51:23 +0300 Subject: [PATCH 0561/1204] Set the version to 0.1.0.1 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 0e56c2db60..ef95995c69 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1 +version: 0.1.0.1 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues From 8cc42d5ecbe785f1455d9e32a04a62e45edd5dcd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 16:54:58 +0300 Subject: [PATCH 0562/1204] Allow failures on GHC 8.8 --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5cfa2fb259..017083654f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,12 @@ env: - ghc=8.0.2 - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.1 - - ghc=8.8.1 benchmarks=1 tests=1 + - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.8.1 + +matrix: + allow_failures: + - env: ghc=8.8.1 install: # Set up the Shell to treat the semicolon as && From 3aeec68f1a2b09c7d0adacdce2a61c285f2f1282 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 16:55:14 +0300 Subject: [PATCH 0563/1204] Allow failures on GHC 8.8 --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5cfa2fb259..017083654f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,12 @@ env: - ghc=8.0.2 - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.1 - - ghc=8.8.1 benchmarks=1 tests=1 + - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.8.1 + +matrix: + allow_failures: + - env: ghc=8.8.1 install: # Set up the Shell to treat the semicolon as && From 19c1c17fa18da3d7daf4ecbf4be5ec210806811e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 16:56:09 +0300 Subject: [PATCH 0564/1204] Update the minor GHC versions --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 017083654f..a6613423b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ if: tag IS blank env: - ghc=8.0.2 - ghc=8.2.2 - - ghc=8.4.2 - - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.4.4 + - ghc=8.6.5 benchmarks=1 tests=1 - ghc=8.8.1 matrix: From 915d780a2044b66c593acc9e0e7fa9fa6aef9d3f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 17:14:20 +0300 Subject: [PATCH 0565/1204] Allow older "base" --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index ef95995c69..82aa1caec2 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -26,7 +26,7 @@ library Hasql.Implicits.Prelude build-depends: aeson >=1 && <2, - base >=4.12 && <5, + base >=4.9 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, hasql >=1.4 && <1.5, From a59ac3a7b328f3b00a2fdb39a9ed5dfcc98c7122 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 17:24:03 +0300 Subject: [PATCH 0566/1204] Try to workaround the quotes in CPP issue --- library/Hasql/Implicits/Encoders.hs | 34 ++++++++++++++--------------- library/Hasql/Implicits/Prelude.hs | 5 +++++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index 58f5a48673..dc95033f7e 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -11,61 +11,60 @@ class DefaultParamEncoder a where {-| Default parameter encoder with nullability specified. -} defaultParam :: NullableOrNot Value a -#define RIGHT_QUOTED(a) a' #define INSTANCES(VALUE, ENCODER) \ instance DefaultParamEncoder VALUE where { \ defaultParam = nonNullable ENCODER; \ }; \ instance DefaultParamEncoder [VALUE] where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder [Maybe VALUE] where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder [[VALUE]] where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder [[Maybe VALUE]] where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Vector VALUE) where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Vector (Maybe VALUE)) where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Vector (Vector VALUE)) where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Vector (Vector (Maybe VALUE))) where { \ - defaultParam = (nonNullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe VALUE) where { \ defaultParam = nullable ENCODER; \ }; \ instance DefaultParamEncoder (Maybe [VALUE]) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe [Maybe VALUE]) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe [[VALUE]]) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe [[Maybe VALUE]]) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe (Vector VALUE)) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe (Vector (Maybe VALUE))) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . element . nullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe (Vector (Vector VALUE))) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nonNullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \ }; \ instance DefaultParamEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ - defaultParam = (nullable . array . dimension RIGHT_QUOTED(foldl) . dimension RIGHT_QUOTED(foldl) . element . nullable) ENCODER; \ + defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ } INSTANCES(Char, char) @@ -88,4 +87,3 @@ INSTANCES((TimeOfDay, TimeZone), timetz) INSTANCES((NetAddr IP), inet) #undef INSTANCES -#undef RIGHT_QUOTED diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index 8153c4b649..d04a9ed8eb 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -1,6 +1,7 @@ module Hasql.Implicits.Prelude ( module Exports, + foldlStrict, ) where @@ -104,3 +105,7 @@ import Data.Time as Exports -- network-ip ------------------------- import Network.IP.Addr as Exports (NetAddr, IP) + +{-# INLINE foldlStrict #-} +foldlStrict :: Foldable foldable => (b -> a -> b) -> b -> foldable a -> b +foldlStrict = foldl' From 73c1c8361518217197a5e5f9d4ba17de8e408ba3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 17:44:15 +0300 Subject: [PATCH 0567/1204] Restrict the "base" dep due to use of Contravariant --- .travis.yml | 3 --- hasql-implicits.cabal | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a6613423b6..a82b351d9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,6 @@ if: tag IS blank env: - - ghc=8.0.2 - - ghc=8.2.2 - - ghc=8.4.4 - ghc=8.6.5 benchmarks=1 tests=1 - ghc=8.8.1 diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 82aa1caec2..ef95995c69 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -26,7 +26,7 @@ library Hasql.Implicits.Prelude build-depends: aeson >=1 && <2, - base >=4.9 && <5, + base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, hasql >=1.4 && <1.5, From 1ff2a392e4e83c041c2b26543ac4b1bd5e8d68b0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 17:49:57 +0300 Subject: [PATCH 0568/1204] Remove the older GHCs from Travis --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 017083654f..a82b351d9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,7 @@ if: tag IS blank env: - - ghc=8.0.2 - - ghc=8.2.2 - - ghc=8.4.2 - - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.6.5 benchmarks=1 tests=1 - ghc=8.8.1 matrix: From 0fdf76edfcd1be694ea4a267f491a3f06d3b444f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 22:55:52 +0300 Subject: [PATCH 0569/1204] Update Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a82b351d9d..fc9c071509 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,5 +53,5 @@ script: if [ "$tests" = "1" ]; then cabal clean; - cabal test --show-details=always --test-options=--quickcheck-tests=100000; + cabal test --show-details=always; fi; From 66bd9244ed1394bdc988c57dedc73231d6d40c85 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 May 2019 22:56:01 +0300 Subject: [PATCH 0570/1204] Set the version to 0.2.0.1 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 687bb68e1a..6d771a6e4d 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.2 +version: 0.2.0.1 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From afe46b1a0bfb6e2778e706c6d1d2266e4f2efc40 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 28 Jun 2019 22:12:24 +0300 Subject: [PATCH 0571/1204] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a33d98f857..1238ad70c9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. -* ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything revolves around that library. +* ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything else revolves around that library. * ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. From eab13236a672cf7b7f2c12b8dabed267807ed859 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 30 Jun 2019 09:28:08 +0300 Subject: [PATCH 0572/1204] Update Cabal --- hasql-transaction.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ac2b92896d..dab16cfd9d 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -20,6 +20,9 @@ library hs-source-dirs: library default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 + exposed-modules: + Hasql.Transaction + Hasql.Transaction.Sessions other-modules: Hasql.Transaction.Private.Prelude Hasql.Transaction.Private.Model @@ -27,9 +30,6 @@ library Hasql.Transaction.Private.Statements Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Transaction - exposed-modules: - Hasql.Transaction - Hasql.Transaction.Sessions build-depends: base >=4.9 && <5, bytestring >=0.10 && <0.11, From fe514e6749e019ad292807992e83bbf17a49ec9a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 5 Sep 2019 10:54:47 +0300 Subject: [PATCH 0573/1204] Set the version to 1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index dab16cfd9d..726fe19ba2 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 0.7.2 +version: 1 category: Hasql, Database, PostgreSQL synopsis: A composable abstraction over the retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From bf15b1274b9c68bc425bcdee88590b3753d4dc73 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 30 Oct 2019 11:18:40 +0300 Subject: [PATCH 0574/1204] Correct synopsis --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 726fe19ba2..ce6cb82ba7 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,7 +1,7 @@ name: hasql-transaction version: 1 category: Hasql, Database, PostgreSQL -synopsis: A composable abstraction over the retryable transactions for Hasql +synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues author: Nikita Volkov From aea1fa6a39673e5c977cfc2000074d05f16ac95d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 4 Nov 2019 17:25:36 +0300 Subject: [PATCH 0575/1204] Add a tutorial link --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1238ad70c9..c03f66b125 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,11 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical one, where some core-team is responsible for everything. One is scalable, the other is not. +# Tutorials -# Example +- [Organization of Hasql code in a dedicated library](https://github.com/nikita-volkov/hasql-tutorial1) + +# Short Example Following is a complete application, which performs some arithmetic in Postgres using Hasql. From 084e392672914dfbdf9206c5cd2f13b58ef2b785 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Nov 2019 02:26:57 +0300 Subject: [PATCH 0576/1204] Add a refence to docs --- hasql.cabal | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index d94a0a43de..ea6f26d4f5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -3,7 +3,9 @@ version: 1.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: - This package is the root of the \"hasql\" ecosystem. + Root of the \"hasql\" ecosystem. + For details and tutorials see + . . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. homepage: https://github.com/nikita-volkov/hasql From 173a5f8ae220dd0aed72bad275f176ca4a3c2543 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Nov 2019 02:27:11 +0300 Subject: [PATCH 0577/1204] Set the version to 1.4.0.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index ea6f26d4f5..a0dcc48e53 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4 +version: 1.4.0.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 0bd1529615ffc4641431144baa36bfa132c32c2b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Nov 2019 00:15:04 +0300 Subject: [PATCH 0578/1204] Update Travis --- .travis.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2e28f329ac..b241e37130 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,14 @@ +if: tag IS blank + env: - ghc=8.0.2 - ghc=8.2.2 - - ghc=8.4.3 - - ghc=8.6.3 benchmarks=1 tests=1 + - ghc=8.4.2 + - ghc=8.6.5 + - ghc=8.8.1 benchmarks=1 tests=1 + +services: + - postgresql install: # Set up the Shell to treat the semicolon as && From ffe07b9a76f74b7bfbb057a83fd05b1dc5ab966c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Nov 2019 01:08:12 +0300 Subject: [PATCH 0579/1204] Downgrade the test-suite due to non-building deps for GHC 8.8 --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b241e37130..a3bc9ba632 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,11 @@ env: - ghc=8.0.2 - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.5 - - ghc=8.8.1 benchmarks=1 tests=1 + - ghc=8.6.5 benchmarks=1 tests=1 + - ghc=8.8.1 + +allow_failures: + - ghc=8.8.1 services: - postgresql From eea436f7c5394bf69937e10ed0d6c68c5db6c092 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Nov 2019 02:38:02 +0300 Subject: [PATCH 0580/1204] Update Travis --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a3bc9ba632..44e6cdf5f9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,8 +7,9 @@ env: - ghc=8.6.5 benchmarks=1 tests=1 - ghc=8.8.1 -allow_failures: - - ghc=8.8.1 +jobs: + allow_failures: + - ghc=8.8.1 services: - postgresql From 8db9acead224d5cf5d879f9aa11560f57e137d77 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Nov 2019 15:23:16 +0300 Subject: [PATCH 0581/1204] Update Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 44e6cdf5f9..b8132a3a16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ env: jobs: allow_failures: - - ghc=8.8.1 + - env: ghc=8.8.1 services: - postgresql From be077c0c5fe9978b89b35a4c8d03491cffcea233 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 25 Nov 2019 19:29:14 +0300 Subject: [PATCH 0582/1204] Rewrite sessions to isolate handling of errors in transaction body from its commitment --- library/Hasql/Transaction/Private/Sessions.hs | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 60c5aa96be..3a9fcc5d12 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -3,8 +3,8 @@ where import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Model -import qualified Hasql.Session as A -import qualified Hasql.Transaction.Private.Statements as B +import Hasql.Session +import qualified Hasql.Transaction.Private.Statements as Statements {- @@ -12,23 +12,32 @@ We may want to do one transaction retry in case of the 23505 error, and fail if an identical error is seen. -} -inRetryingTransaction :: IsolationLevel -> Mode -> A.Session (a, Bool) -> A.Session a -inRetryingTransaction isolation mode session = - fix $ \recur -> catchError normal (onError recur) - where - normal = - do - A.statement () (B.beginTransaction isolation mode) - (result, commit) <- session - if commit - then A.statement () B.commitTransaction - else A.statement () B.abortTransaction - return result - onError continue error = - do - A.statement () B.abortTransaction - case error of - A.QueryError _ _ (A.ResultError (A.ServerError "40001" _ _ _)) -> - continue - _ -> - throwError error +inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session a +inRetryingTransaction level mode session = + fix $ \ retry -> do + attemptRes <- tryTransaction level mode session + case attemptRes of + Just a -> return a + Nothing -> retry + +tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session (Maybe a) +tryTransaction level mode body = do + + statement () (Statements.beginTransaction level mode) + + bodyRes <- catchError (fmap Just body) $ \ error -> do + statement () Statements.abortTransaction + handleTransactionError error $ return Nothing + + case bodyRes of + Just (res, commit) -> catchError (commitOrAbort commit $> Just res) $ \ error -> do + handleTransactionError error $ return Nothing + Nothing -> return Nothing + +commitOrAbort commit = if commit + then statement () Statements.commitTransaction + else statement () Statements.abortTransaction + +handleTransactionError error onTransactionError = case error of + QueryError _ _ (ResultError (ServerError "40001" _ _ _)) -> onTransactionError + error -> throwError error From eb254a64a35b91abfe10461df58b35c2ea5a5991 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 27 Nov 2019 20:34:12 +0300 Subject: [PATCH 0583/1204] Set the version to 1.0.0.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ce6cb82ba7..df51e4c686 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1 +version: 1.0.0.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From 667cc26562309b1ed4cbc48c9541bc20243b4a50 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 4 Dec 2019 12:33:11 +0300 Subject: [PATCH 0584/1204] Promote Hasql TH --- README.md | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index c03f66b125..183d175908 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # What Hasql is - [![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) [![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) @@ -13,6 +12,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything else revolves around that library. +* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, providing compile-time syntax checking and easy statement declaration. + * ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. * ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with automated conflict resolution. @@ -23,8 +24,6 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transaction) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. -* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, such as getting SQL from external files at compile-time. It's planned to extend this library to provide a compile-time checking of the SQL-syntax correctness. - * ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. @@ -57,11 +56,10 @@ import Prelude import Data.Int import Data.Functor.Contravariant import Hasql.Session (Session) -import Hasql.Statement (Statement(..)) +import Hasql.Statement (Statement) import qualified Hasql.Session as Session -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders as Encoders import qualified Hasql.Connection as Connection +import qualified Hasql.TH as TH -- from "hasql-th" main :: IO () @@ -102,22 +100,16 @@ sumAndDivModSession a b c = do ------------------------- sumStatement :: Statement (Int64, Int64) Int64 -sumStatement = Statement sql encoder decoder True where - sql = "select $1 + $2" - encoder = - (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> - (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) +sumStatement = + [TH.singletonStatement| + select $1 :: int8 + $2 :: int8 + |] divModStatement :: Statement (Int64, Int64) (Int64, Int64) -divModStatement = Statement sql encoder decoder True where - sql = "select $1 / $2, $1 % $2" - encoder = - (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> - (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) - decoder = Decoders.singleRow row where - row = - (,) <$> - Decoders.column (Decoders.nonNullable Decoders.int8) <*> - Decoders.column (Decoders.nonNullable Decoders.int8) +divModStatement = + [TH.singletonStatement| + select + ($1 :: int8) / ($2 :: int8), + ($1 :: int8) % ($2 :: int8) + |] ``` From 233051f057c2d98a5a31456fd7dbe002f52013ea Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 4 Dec 2019 12:35:42 +0300 Subject: [PATCH 0585/1204] Update the docs on transaction --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 183d175908..2e7d793a91 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything else revolves around that library. * ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, providing compile-time syntax checking and easy statement declaration. - -* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. - -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over the database transactions with automated conflict resolution. +* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over database transactions providing automated conflict resolution. * ["hasql-dynamic-statements"](https://github.com/nikita-volkov/hasql-dynamic-statements) - a toolkit for generating statements based on the parameters. @@ -24,6 +21,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transaction) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. +* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. + * ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. From 56dafd8ac0ea5abd70b93167dec72ee51a826a63 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 4 Dec 2019 13:09:42 +0300 Subject: [PATCH 0586/1204] Update Travis --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f202008c07..b241e37130 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,11 @@ env: - ghc=8.0.2 - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.6.5 + - ghc=8.8.1 benchmarks=1 tests=1 + +services: + - postgresql install: # Set up the Shell to treat the semicolon as && From b629be8cb465c4b40773464aff4af3b049c58218 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 4 Dec 2019 15:48:51 +0300 Subject: [PATCH 0587/1204] Extend the readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 2e7d793a91..035237ad33 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,10 @@ sumAndDivModSession a b c = do -- -- It's recommended to define statements in a dedicated 'Statements' -- submodule of your project. +-- +-- In the following code we use the extension library "hasql-th", +-- which generates statement definitions from SQL, +-- compile-time checking the syntax on the way. ------------------------- sumStatement :: Statement (Int64, Int64) Int64 From b8eb8443ee55720abfad775d6efd2cce445af827 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 22 Jan 2020 09:22:51 +0300 Subject: [PATCH 0588/1204] Set the version to 1.4.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index fbba6be547..1707618fa5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.0.1 +version: 1.4.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 0dd388b29da1fda5e4c678a98a3b543c92ca5dc9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 28 Jan 2020 21:31:23 +0300 Subject: [PATCH 0589/1204] Correct the demo --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 035237ad33..3595dcf865 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib Following is a complete application, which performs some arithmetic in Postgres using Hasql. ```haskell -{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE OverloadedStrings, QuasiQuotes #-} import Prelude import Data.Int import Data.Functor.Contravariant @@ -105,14 +105,14 @@ sumAndDivModSession a b c = do sumStatement :: Statement (Int64, Int64) Int64 sumStatement = [TH.singletonStatement| - select $1 :: int8 + $2 :: int8 + select ($1 :: int8 + $2 :: int8) :: int8 |] divModStatement :: Statement (Int64, Int64) (Int64, Int64) divModStatement = [TH.singletonStatement| select - ($1 :: int8) / ($2 :: int8), - ($1 :: int8) % ($2 :: int8) + (($1 :: int8) / ($2 :: int8)) :: int8, + (($1 :: int8) % ($2 :: int8)) :: int8 |] ``` From 63f225834e5206ab5ac0c14e37651c08c6a209a9 Mon Sep 17 00:00:00 2001 From: Jonathan Fischoff Date: Mon, 17 Feb 2020 09:25:18 -0800 Subject: [PATCH 0590/1204] Add an Exception instance to QueryError #122 --- library/Hasql/Private/Errors.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 70811e42a4..4edd78fb11 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -19,7 +19,9 @@ import Hasql.Private.Prelude -- Comes packed with the query template and a textual representation of the provided params. data QueryError = QueryError ByteString [Text] CommandError - deriving (Show, Eq) + deriving (Show, Eq, Typeable) + +instance Exception QueryError -- | -- An error of some command in the session. From 9f8c7bc2b5173fe0585bdef1f2d6ac3b3ce984ec Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 14 Mar 2020 23:26:04 -0400 Subject: [PATCH 0591/1204] Initial commit --- .gitignore | 21 +++++++ LICENSE | 30 ++++++++++ README.md | 3 + Setup.hs | 2 + app/Main.hs | 6 ++ hasql-notifications.cabal | 56 ++++++++++++++++++ src/Hasql/Notifications.hs | 102 ++++++++++++++++++++++++++++++++ stack.yaml | 7 +++ stack.yaml.lock | 12 ++++ test/Hasql/NotificationsSpec.hs | 17 ++++++ test/Spec.hs | 1 + 11 files changed, 257 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Setup.hs create mode 100644 app/Main.hs create mode 100644 hasql-notifications.cabal create mode 100644 src/Hasql/Notifications.hs create mode 100644 stack.yaml create mode 100644 stack.yaml.lock create mode 100644 test/Hasql/NotificationsSpec.hs create mode 100644 test/Spec.hs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..36321a60a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +db +release +dist +dist-* +.ghc.* +.cabal-sandbox +cabal.sandbox.config +hscope.out +codex.tags +.anvil +.stack-work +tags +site +rails.conf +cabal-helper* +.dir-locals.el +**/.history +result +.vscode +cabal.project.local diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..6c4ebc4d1f --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +Diogo Biazus (c) 2020 + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Author name here nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000..5534c10a11 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# hasql-notifications + +TBD \ No newline at end of file diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 0000000000..9a994af677 --- /dev/null +++ b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/app/Main.hs b/app/Main.hs new file mode 100644 index 0000000000..6a78c2de57 --- /dev/null +++ b/app/Main.hs @@ -0,0 +1,6 @@ +module Main where + +import Hasql.Notifications + +main :: IO () +main = putStrLn "Example" diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal new file mode 100644 index 0000000000..550abc8c5a --- /dev/null +++ b/hasql-notifications.cabal @@ -0,0 +1,56 @@ +name: hasql-notifications +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://github.com/githubuser/hasql-notifications#readme +license: BSD3 +license-file: LICENSE +author: Author name here +maintainer: example@example.com +copyright: 2020 Author name here +category: Web +build-type: Simple +extra-source-files: README.md +cabal-version: >=1.10 + +library + hs-source-dirs: src + exposed-modules: Hasql.Notifications + build-depends: base >= 4.7 && < 5 + , bytestring >= 0.10.8.2 + , text + , hasql-pool >= 0.4 && < 0.6 + , bytestring >= 0.10 + , postgresql-libpq >= 0.9 && < 1.0 + , hasql >= 0.19 + , contravariant + + default-language: Haskell2010 + ghc-options: -Wall + default-extensions: OverloadedStrings + +executable hasql-notifications + hs-source-dirs: app + main-is: Main.hs + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , hasql-notifications + default-language: Haskell2010 + default-extensions: OverloadedStrings + +test-suite hasql-notifications-test + type: exitcode-stdio-1.0 + other-modules: Hasql.NotificationsSpec + hs-source-dirs: test + main-is: Spec.hs + build-depends: base + , hasql-notifications + , hspec + , QuickCheck + ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + default-extensions: OverloadedStrings + +source-repository head + type: git + location: https://github.com/githubuser/hasql-notifications diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs new file mode 100644 index 0000000000..cc26505f89 --- /dev/null +++ b/src/Hasql/Notifications.hs @@ -0,0 +1,102 @@ +{-| This module encapsulates knowledge about the SQL commands and the Hasql interface. +-} +module Hasql.Notifications + ( notifyPool + , notify + , listen + , unlisten + , waitForNotifications + , PgIdentifier + , toPgIdentifier + , fromPgIdentifier + ) where + +import Hasql.Pool (Pool, UsageError, use) +import Hasql.Session (sql, run, statement) +import qualified Hasql.Session as S +import qualified Hasql.Statement as HST +import Hasql.Connection (Connection, withLibPQConnection) +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import qualified Database.PostgreSQL.LibPQ as PQ +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import Data.ByteString.Char8 (ByteString) +import Data.Functor.Contravariant (contramap) +import Control.Monad (void, forever) +import Control.Concurrent (threadWaitRead) +import Control.Exception (Exception, throw) + +-- | A wrapped bytestring that represents a properly escaped and quoted PostgreSQL identifier +newtype PgIdentifier = PgIdentifier ByteString deriving (Show) + +-- | Uncatchable exceptions thrown and never caught. +newtype FatalError = FatalError { fatalErrorMessage :: String } + deriving (Show) + +instance Exception FatalError + +-- | Given a PgIdentifier returns the wrapped bytestring +fromPgIdentifier :: PgIdentifier -> ByteString +fromPgIdentifier (PgIdentifier bs) = bs + +-- | Given a bytestring returns a properly quoted and escaped PgIdentifier +toPgIdentifier :: Text -> PgIdentifier +toPgIdentifier x = + PgIdentifier $ "\"" <> T.encodeUtf8 (strictlyReplaceQuotes x) <> "\"" + where + strictlyReplaceQuotes :: Text -> Text + strictlyReplaceQuotes = T.replace "\"" ("\"\"" :: Text) + +-- | Given a Hasql Pool, a channel and a message sends a notify command to the database +notifyPool :: Pool -> Text -> Text -> IO (Either UsageError ()) +notifyPool pool channel mesg = + use pool (statement (channel, mesg) callStatement) + where + callStatement = HST.Statement ("SELECT pg_notify" <> "($1, $2)") encoder HD.noResult False + encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable $ HE.text) + +-- | Given a Hasql Connection, a channel and a message sends a notify command to the database +notify :: Connection -> PgIdentifier -> Text -> IO (Either S.QueryError ()) +notify con channel mesg = + run (sql ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> T.encodeUtf8 mesg <> "'")) con + +-- | Given a Hasql Connection and a channel sends a listen command to the database +listen :: Connection -> PgIdentifier -> IO () +listen con channel = + void $ withLibPQConnection con execListen + where + execListen pqCon = void $ PQ.exec pqCon $ "LISTEN " <> fromPgIdentifier channel + +-- | Given a Hasql Connection and a channel sends a unlisten command to the database +unlisten :: Connection -> PgIdentifier -> IO () +unlisten con channel = + void $ withLibPQConnection con execListen + where + execListen pqCon = void $ PQ.exec pqCon $ "UNLISTEN " <> fromPgIdentifier channel + + +{- | Given a function that handles notifications and a Hasql connection forks a thread that listens on the database connection and calls the handler everytime a message arrives. + + The message handler passed as first argument needs two parameters channel and payload. +-} + +waitForNotifications :: (ByteString -> ByteString -> IO()) -> Connection -> IO () +waitForNotifications sendNotification con = + withLibPQConnection con $ void . forever . pqFetch + where + pqFetch pqCon = do + mNotification <- PQ.notifies pqCon + case mNotification of + Nothing -> do + mfd <- PQ.socket pqCon + case mfd of + Nothing -> panic "Error checking for PostgreSQL notifications" + Just fd -> do + void $ threadWaitRead fd + void $ PQ.consumeInput pqCon + Just notification -> + sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) + panic :: String -> a + panic a = throw (FatalError a) diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..af3517453d --- /dev/null +++ b/stack.yaml @@ -0,0 +1,7 @@ +resolver: lts-14.27 + +packages: +- . + +# extra-deps: [] + diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..e24dcac6b1 --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + size: 524996 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/14/27.yaml + sha256: 7ea31a280c56bf36ff591a7397cc384d0dff622e7f9e4225b47d8980f019a0f0 + original: lts-14.27 diff --git a/test/Hasql/NotificationsSpec.hs b/test/Hasql/NotificationsSpec.hs new file mode 100644 index 0000000000..0bd44fa188 --- /dev/null +++ b/test/Hasql/NotificationsSpec.hs @@ -0,0 +1,17 @@ +module Hasql.NotificationsSpec (main, spec) where + +import Test.Hspec +import Test.QuickCheck + +import Hasql.Notifications + +-- `main` is here so that this module can be run from GHCi on its own. It is +-- not needed for automatic spec discovery. +main :: IO () +main = hspec spec + +spec :: Spec +spec = + describe "toPgIdenfier" $ + it "enclose text in quotes doubling existing ones" $ + fromPgIdentifier (toPgIdentifier "some \"identifier\"") `shouldBe` "\"some \"\"identifier\"\"\"" \ No newline at end of file diff --git a/test/Spec.hs b/test/Spec.hs new file mode 100644 index 0000000000..a824f8c30c --- /dev/null +++ b/test/Spec.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover #-} From 302b418c18ed73f141468b02179fe9c56d575a57 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 14 Mar 2020 23:56:49 -0400 Subject: [PATCH 0592/1204] Add circleci config --- .circleci/build.sh | 2 ++ .circleci/config.yml | 40 ++++++++++++++++++++++++++++++++++++++++ .circleci/lint.sh | 2 ++ .circleci/setupenv.sh | 3 +++ .circleci/test.sh | 2 ++ 5 files changed, 49 insertions(+) create mode 100755 .circleci/build.sh create mode 100644 .circleci/config.yml create mode 100755 .circleci/lint.sh create mode 100755 .circleci/setupenv.sh create mode 100755 .circleci/test.sh diff --git a/.circleci/build.sh b/.circleci/build.sh new file mode 100755 index 0000000000..575e340fa0 --- /dev/null +++ b/.circleci/build.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +stack --stack-yaml=stack.yaml build --no-terminal --system-ghc diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..fd46d9b954 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,40 @@ +version: 2 +jobs: + build: + docker: + - image: fpco/stack-build:lts-14.27 + + working_directory: /home/stackage/project + + environment: + TEST_RESULTS: /tmp/test-results + + steps: + - checkout + - restore_cache: + key: stack-hasql-notifications-{{ checksum "stack.yaml" }} + - restore_cache: + key: stack-hasql-notifications-final-{{ checksum "stack.yaml" }} + - run: .circleci/setupenv.sh + - run: stack build --only-dependencies -j1 + - save_cache: + key: stack-hasql-notifications-{{ checksum "stack.yaml" }} + paths: + - ~/.stack + - .stack-work + - ~/.local + - run: .circleci/build.sh + - run: .circleci/test.sh + - save_cache: + key: stack-hasql-notifications-final-{{ checksum "stack.yaml" }} + paths: + - ~/.stack + - .stack-work + - ~/.local + - run: .circleci/lint.sh + +workflows: + version: 2 + build-and-deploy: + jobs: + - build diff --git a/.circleci/lint.sh b/.circleci/lint.sh new file mode 100755 index 0000000000..8f1d2e493c --- /dev/null +++ b/.circleci/lint.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +git ls-files . | grep -e '.*\.hs' | grep -v -e "test" | xargs hlint "$@" diff --git a/.circleci/setupenv.sh b/.circleci/setupenv.sh new file mode 100755 index 0000000000..16b9478734 --- /dev/null +++ b/.circleci/setupenv.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +apt -y update +apt -y install hlint diff --git a/.circleci/test.sh b/.circleci/test.sh new file mode 100755 index 0000000000..3093e9b5a3 --- /dev/null +++ b/.circleci/test.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +stack test --no-terminal --system-ghc From 6bdb97491a7941f6e42405503d815298998bcbae Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 15 Mar 2020 00:05:59 -0400 Subject: [PATCH 0593/1204] Clean hlint suggestions --- src/Hasql/Notifications.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index cc26505f89..400d0652c2 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -55,7 +55,7 @@ notifyPool pool channel mesg = use pool (statement (channel, mesg) callStatement) where callStatement = HST.Statement ("SELECT pg_notify" <> "($1, $2)") encoder HD.noResult False - encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable $ HE.text) + encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable HE.text) -- | Given a Hasql Connection, a channel and a message sends a notify command to the database notify :: Connection -> PgIdentifier -> Text -> IO (Either S.QueryError ()) From 07052b0ebe1ce1f9c97e089205bfff44fcd0339f Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 15 Mar 2020 17:17:58 -0400 Subject: [PATCH 0594/1204] Add version constraints so the build process is easier without stack --- hasql-notifications.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 550abc8c5a..482d9a5279 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -18,12 +18,12 @@ library exposed-modules: Hasql.Notifications build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 - , text + , text >= 1.2.3.1 && < 1.3 , hasql-pool >= 0.4 && < 0.6 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 - , contravariant + , contravariant >= 1.5.2 && < 1.6 default-language: Haskell2010 ghc-options: -Wall From 5626f9c40ec8896b3297b7dedb333a9fb9d7be00 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 15 Mar 2020 18:18:27 -0400 Subject: [PATCH 0595/1204] Add sample code to main and haddock documentation --- app/Main.hs | 17 +++++++- hasql-notifications.cabal | 1 + src/Hasql/Notifications.hs | 85 ++++++++++++++++++++++++++++++++++---- 3 files changed, 93 insertions(+), 10 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index 6a78c2de57..e97a2fcfed 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -1,6 +1,21 @@ module Main where +import System.IO +import System.Exit (die) + +import Hasql.Connection import Hasql.Notifications main :: IO () -main = putStrLn "Example" +main = do + hSetBuffering stdout NoBuffering + hSetBuffering stderr NoBuffering + + dbOrError <- acquire "postgres://localhost/db_name" + case dbOrError of + Right db -> do + let channelToListen = toPgIdentifier "sample-channel" + listen db channelToListen + waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db + _ -> die "Could not open database connection" + diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 482d9a5279..7dc77b3044 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -34,6 +34,7 @@ executable hasql-notifications main-is: Main.hs ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: base + , hasql , hasql-notifications default-language: Haskell2010 default-extensions: OverloadedStrings diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 400d0652c2..ee77823451 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -1,4 +1,9 @@ -{-| This module encapsulates knowledge about the SQL commands and the Hasql interface. +{-| + This module has functions to send commands LISTEN and NOTIFY to the database server. + It also has a function to wait for and handle notifications on a database connection. + + For more information check the [PostgreSQL documentation](https://www.postgresql.org/docs/current/libpq-notify.html). + -} module Hasql.Notifications ( notifyPool @@ -50,7 +55,10 @@ toPgIdentifier x = strictlyReplaceQuotes = T.replace "\"" ("\"\"" :: Text) -- | Given a Hasql Pool, a channel and a message sends a notify command to the database -notifyPool :: Pool -> Text -> Text -> IO (Either UsageError ()) +notifyPool :: Pool -- ^ Pool from which the connection will be used to issue a NOTIFY command. + -> Text -- ^ Channel where to send the notification + -> Text -- ^ Payload to be sent with the notification + -> IO (Either UsageError ()) notifyPool pool channel mesg = use pool (statement (channel, mesg) callStatement) where @@ -58,31 +66,90 @@ notifyPool pool channel mesg = encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable HE.text) -- | Given a Hasql Connection, a channel and a message sends a notify command to the database -notify :: Connection -> PgIdentifier -> Text -> IO (Either S.QueryError ()) +notify :: Connection -- ^ Connection to be used to send the NOTIFY command + -> PgIdentifier -- ^ Channel where to send the notification + -> Text -- ^ Payload to be sent with the notification + -> IO (Either S.QueryError ()) notify con channel mesg = run (sql ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> T.encodeUtf8 mesg <> "'")) con --- | Given a Hasql Connection and a channel sends a listen command to the database -listen :: Connection -> PgIdentifier -> IO () +{-| + Given a Hasql Connection and a channel sends a listen command to the database. + Once the connection sends the LISTEN command the server register its interest in the channel. + Hence it's important to keep track of which connection was used to open the listen command. + + Example of listening and waiting for a notification: + + @ + import System.Exit (die) + + import Hasql.Connection + import Hasql.Notifications + + main :: IO () + main = do + dbOrError <- acquire "postgres://localhost/db_name" + case dbOrError of + Right db -> do + let channelToListen = toPgIdentifier "sample-channel" + listen db channelToListen + waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db + _ -> die "Could not open database connection" + @ +-} +listen :: Connection -- ^ Connection to be used to send the LISTEN command + -> PgIdentifier -- ^ Channel this connection will be registered to listen to + -> IO () listen con channel = void $ withLibPQConnection con execListen where execListen pqCon = void $ PQ.exec pqCon $ "LISTEN " <> fromPgIdentifier channel -- | Given a Hasql Connection and a channel sends a unlisten command to the database -unlisten :: Connection -> PgIdentifier -> IO () +unlisten :: Connection -- ^ Connection currently registerd by a previous 'listen' call + -> PgIdentifier -- ^ Channel this connection will be deregistered from + -> IO () unlisten con channel = void $ withLibPQConnection con execListen where execListen pqCon = void $ PQ.exec pqCon $ "UNLISTEN " <> fromPgIdentifier channel -{- | Given a function that handles notifications and a Hasql connection forks a thread that listens on the database connection and calls the handler everytime a message arrives. +{-| + Given a function that handles notifications and a Hasql connection it will listen + on the database connection and call the handler everytime a message arrives. + + The message handler passed as first argument needs two parameters channel and payload. + See an example of handling notification on a separate thread: + + @ + import Control.Concurrent.Async (async) + import Control.Monad (void) + import System.Exit (die) + + import Hasql.Connection + import Hasql.Notifications + + notificationHandler :: ByteString -> ByteString -> IO() + notificationHandler channel payload = + void $ async do + print $ "Handle payload " <> payload <> " in its own thread" - The message handler passed as first argument needs two parameters channel and payload. + main :: IO () + main = do + dbOrError <- acquire "postgres://localhost/db_name" + case dbOrError of + Right db -> do + let channelToListen = toPgIdentifier "sample-channel" + listen db channelToListen + waitForNotifications notificationHandler db + _ -> die "Could not open database connection" + @ -} -waitForNotifications :: (ByteString -> ByteString -> IO()) -> Connection -> IO () +waitForNotifications :: (ByteString -> ByteString -> IO()) -- ^ Callback function to handle incoming notifications + -> Connection -- ^ Connection where we will listen to + -> IO () waitForNotifications sendNotification con = withLibPQConnection con $ void . forever . pqFetch where From dc65f4105dd382d1355b13f544a70a641472a9fc Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 15 Mar 2020 19:02:04 -0400 Subject: [PATCH 0596/1204] Add postgresql to circleci environment and a test case to send and receive a notification --- .circleci/config.yml | 9 +++++++++ .circleci/setupenv.sh | 2 +- hasql-notifications.cabal | 2 ++ test/Hasql/NotificationsSpec.hs | 23 ++++++++++++++++++++++- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fd46d9b954..db13150afc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,6 +3,15 @@ jobs: build: docker: - image: fpco/stack-build:lts-14.27 + environment: + PGHOST: 127.0.0.1 + PGUSER: root + + - image: postgres:12-alpine + environment: + POSTGRES_DB: hasql_notifications_test + POSTGRES_USER: root + POSTGRES_HOST_AUTH_METHOD: trust working_directory: /home/stackage/project diff --git a/.circleci/setupenv.sh b/.circleci/setupenv.sh index 16b9478734..dc46338d97 100755 --- a/.circleci/setupenv.sh +++ b/.circleci/setupenv.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash apt -y update -apt -y install hlint +apt -y install hlint postgresql-client diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 7dc77b3044..dc7af3e7df 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -45,8 +45,10 @@ test-suite hasql-notifications-test hs-source-dirs: test main-is: Spec.hs build-depends: base + , hasql , hasql-notifications , hspec + , bytestring , QuickCheck ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 diff --git a/test/Hasql/NotificationsSpec.hs b/test/Hasql/NotificationsSpec.hs index 0bd44fa188..91a57da8cf 100644 --- a/test/Hasql/NotificationsSpec.hs +++ b/test/Hasql/NotificationsSpec.hs @@ -3,6 +3,13 @@ module Hasql.NotificationsSpec (main, spec) where import Test.Hspec import Test.QuickCheck +import Control.Concurrent (forkIO, killThread) +import Control.Concurrent.MVar +import Control.Monad (void) +import System.Exit (die) +import Data.ByteString + +import Hasql.Connection import Hasql.Notifications -- `main` is here so that this module can be run from GHCi on its own. It is @@ -11,7 +18,21 @@ main :: IO () main = hspec spec spec :: Spec -spec = +spec = do + describe "send and receive notification" $ + describe "when I send a notification to channel my handler is listening to" $ + it "should call our notification handler" $ do + dbOrError <- acquire "postgres://localhost/hasql_notifications_test" + case dbOrError of + Right db -> do + let channelToListen = toPgIdentifier "test-channel" + mailbox <- newEmptyMVar :: IO (MVar ByteString) + listen db channelToListen + threadId <- forkIO $ waitForNotifications (\channel payload -> putMVar mailbox $ "Just got notification on channel " <> channel <> ": " <> payload) db + notify db (toPgIdentifier "test-channel") "Payload" + takeMVar mailbox `shouldReturn` "Just got notification on channel test-channel: Payload" + _ -> die "Could not open database connection" + describe "toPgIdenfier" $ it "enclose text in quotes doubling existing ones" $ fromPgIdentifier (toPgIdentifier "some \"identifier\"") `shouldBe` "\"some \"\"identifier\"\"\"" \ No newline at end of file From 0579d804b4f65473846e738cd9309f69daae5660 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 15 Mar 2020 19:15:54 -0400 Subject: [PATCH 0597/1204] Add status badge to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5534c10a11..eb33c8fd73 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # hasql-notifications +[![CircleCI](https://circleci.com/gh/diogob/hasql-notifications.svg?style=svg)](https://circleci.com/gh/diogob/hasql-notifications) + TBD \ No newline at end of file From 7a2924501a5eeacd8a897d87d3b87c596e4560b4 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 16 Mar 2020 20:12:13 -0400 Subject: [PATCH 0598/1204] Update metadata to publish on hackage --- hasql-notifications.cabal | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index dc7af3e7df..3f763d0b73 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,14 +1,14 @@ name: hasql-notifications version: 0.1.0.0 --- synopsis: --- description: +synopsis: LISTEN/NOTIFY support for Hasql +description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/githubuser/hasql-notifications#readme license: BSD3 license-file: LICENSE -author: Author name here -maintainer: example@example.com -copyright: 2020 Author name here -category: Web +author: Diogo Biazus +maintainer: diogo@biazus.ca +copyright: 2020 Diogo Biazus +category: Hasql, Database, PostgreSQL build-type: Simple extra-source-files: README.md cabal-version: >=1.10 @@ -56,4 +56,4 @@ test-suite hasql-notifications-test source-repository head type: git - location: https://github.com/githubuser/hasql-notifications + location: https://github.com/diogob/hasql-notifications From 32429b066dbd49802574ca6f3f1914378c51852b Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 16 Mar 2020 20:49:27 -0400 Subject: [PATCH 0599/1204] Add hackage build matrix badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb33c8fd73..c1f7dd2d20 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # hasql-notifications -[![CircleCI](https://circleci.com/gh/diogob/hasql-notifications.svg?style=svg)](https://circleci.com/gh/diogob/hasql-notifications) +[![CircleCI](https://circleci.com/gh/diogob/hasql-notifications.svg?style=svg)](https://circleci.com/gh/diogob/hasql-notifications) [![Hackage Matrix CI](https://matrix.hackage.haskell.org/api/v2/packages/postgres-websockets/badge)](https://matrix.hackage.haskell.org/package/postgres-websockets) TBD \ No newline at end of file From dba4e53c5f80eb881e7e3d4b944fc4eff574c851 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 16 Mar 2020 20:51:41 -0400 Subject: [PATCH 0600/1204] Change homepage on cabal metadata --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 3f763d0b73..a48c074bc3 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -2,7 +2,7 @@ name: hasql-notifications version: 0.1.0.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. -homepage: https://github.com/githubuser/hasql-notifications#readme +homepage: https://github.com/diogob/hasql-notifications license: BSD3 license-file: LICENSE author: Diogo Biazus From dc62905f89553c4ee3c0af48f8c18a8a7be9e089 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 17 Mar 2020 18:37:48 -0400 Subject: [PATCH 0601/1204] Add links to hackage on README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c1f7dd2d20..16fac2ec8c 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ [![CircleCI](https://circleci.com/gh/diogob/hasql-notifications.svg?style=svg)](https://circleci.com/gh/diogob/hasql-notifications) [![Hackage Matrix CI](https://matrix.hackage.haskell.org/api/v2/packages/postgres-websockets/badge)](https://matrix.hackage.haskell.org/package/postgres-websockets) -TBD \ No newline at end of file +See documentation for the module [Hasql.Notifications](https://hackage.haskell.org/package/hasql-notifications/docs/Hasql-Notifications.html) on the [Hackage page](https://hackage.haskell.org/package/hasql-notifications). From 9d43aa2b2e86c11110dcd9042c978764eb324717 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 17 Mar 2020 19:02:31 -0400 Subject: [PATCH 0602/1204] Add link to hasql-notifications to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3595dcf865..615df8b38b 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. +* ["hasql-notifications"](https://github.com/diogob/hasql-notifications) - Support for PostgreSQL asynchronous notifications. + * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. * ["hasql-implicits"](https://github.com/nikita-volkov/hasql-implicits) - implicit definitions, such as default codecs for standard types. From 3de214198ad1cd183b01234246d99aae0494af6a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Mar 2020 20:48:16 +0300 Subject: [PATCH 0603/1204] Fix the compatibility issues in benchmarks and tests --- benchmarks/Main.hs | 4 ++-- profiling/Main.hs | 4 ++-- tasty/Main/Prelude.hs | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 7ec6572ad7..78742c21ce 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -51,7 +51,7 @@ sessionWithManyLargeResults :: B.Session [Vector (Int64, Int64)] sessionWithManyLargeResults = replicateM 1000 (B.statement () statementWithManyRowsInVector) -sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) +sessionWithSingleLargeResultInList :: B.Session [(Int64, Int64)] sessionWithSingleLargeResultInList = B.statement () statementWithManyRowsInList @@ -102,6 +102,6 @@ statementWithManyRowsInVector :: C.Statement () (Vector (Int64, Int64)) statementWithManyRowsInVector = statementWithManyRows D.rowVector -statementWithManyRowsInList :: C.Statement () (List (Int64, Int64)) +statementWithManyRowsInList :: C.Statement () [(Int64, Int64)] statementWithManyRowsInList = statementWithManyRows D.rowList diff --git a/profiling/Main.hs b/profiling/Main.hs index 55bbf34a95..fa63fd3049 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -42,7 +42,7 @@ sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = B.statement () statementWithManyRowsInVector -sessionWithSingleLargeResultInList :: B.Session (List (Int64, Int64)) +sessionWithSingleLargeResultInList :: B.Session [(Int64, Int64)] sessionWithSingleLargeResultInList = B.statement () statementWithManyRowsInList @@ -93,6 +93,6 @@ statementWithManyRowsInVector :: C.Statement () (Vector (Int64, Int64)) statementWithManyRowsInVector = statementWithManyRows D.rowVector -statementWithManyRowsInList :: C.Statement () (List (Int64, Int64)) +statementWithManyRowsInList :: C.Statement () [(Int64, Int64)] statementWithManyRowsInList = statementWithManyRows D.rowList diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index ac88b09fa5..b832261098 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -1,6 +1,7 @@ module Main.Prelude ( module Exports, + mapLeft, ) where @@ -8,3 +9,8 @@ where -- rerebase ------------------------- import Prelude as Exports + +{-# INLINE mapLeft #-} +mapLeft :: (a -> c) -> Either a b -> Either c b +mapLeft f = + either (Left . f) Right From f5781654912b44cd57239faca2f4f7bb28e138d6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Mar 2020 20:54:13 +0300 Subject: [PATCH 0604/1204] Add refineResult --- library/Hasql/Private/Decoders.hs | 3 +++ library/Hasql/Private/Decoders/Results.hs | 5 +++++ library/Hasql/Private/Decoders/Row.hs | 2 +- library/Hasql/Private/Prelude.hs | 2 +- library/Hasql/Statement.hs | 13 +++++++++++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 60ed6db8a7..ea115c9ab1 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -50,6 +50,9 @@ Will raise the 'Hasql.Errors.UnexpectedAmountOfRows' error if it's any other. singleRow :: Row a -> Result a singleRow (Row row) = Result (Results.single (Result.single row)) +refineResult :: (a -> Either Text b) -> Result a -> Result b +refineResult refiner (Result results) = Result (Results.refine refiner results) + -- ** Multi-row traversers ------------------------- diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index cf0cb56169..9af2bba9ac 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -82,3 +82,8 @@ dropRemainders = where checkErrors = ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) + +refine :: (a -> Either Text b) -> Results a -> Results b +refine refiner results = Results $ ReaderT $ \ env -> ExceptT $ do + resultEither <- run results env + return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 9584a77b3b..d13875531f 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -1,6 +1,6 @@ module Hasql.Private.Decoders.Row where -import Hasql.Private.Prelude +import Hasql.Private.Prelude hiding (error) import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified PostgreSQL.Binary.Decoding as A diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index b4a8127e6c..7973576a01 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -17,7 +17,7 @@ where -- base-prelude ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, fromLeft, fromRight, error, (<>), First(..), Last(..), new) +import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, fromLeft, fromRight, (<>), First(..), Last(..), new) -- transformers ------------------------- diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 28272e19c4..82f40162e1 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -1,6 +1,7 @@ module Hasql.Statement ( Statement(..), + refineResult, -- * Recipies -- ** Insert many @@ -14,6 +15,7 @@ where import Hasql.Private.Prelude import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders +import qualified Hasql.Private.Decoders as Decoders {-| Specification of a strictly single-statement query, which can be parameterized and prepared. @@ -60,6 +62,17 @@ instance Profunctor Statement where dimap f1 f2 (Statement template encoder decoder preparable) = Statement template (contramap f1 encoder) (fmap f2 decoder) preparable +{-| +Refine a result of a statement, +causing the running session to fail with the `UnexpectedResult` error in case of refinement failure. + +This function is especially useful for refining the results of statements produced with +. +-} +refineResult :: (a -> Either Text b) -> Statement params a -> Statement params b +refineResult refiner (Statement template encoder decoder preparable) = + Statement template encoder (Decoders.refineResult refiner decoder) preparable + {- $insertMany From e6ffbb62c246b3ca37b78dfac4b360b183fefa92 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 21 Mar 2020 20:54:48 +0300 Subject: [PATCH 0605/1204] Set the version to 1.4.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 1707618fa5..b0f37efa82 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.1 +version: 1.4.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From d25249f4bd4b8c2c46f61be7746eca0ed3cd8865 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 26 Mar 2020 14:04:02 +0100 Subject: [PATCH 0606/1204] ResourcePool: destroy resource on exception Before this change, IO-based exceptions in the session (`act`) caused the connection to "used" indefinitely; not returning capacity to the pool, eventually depleting the pool. --- library/Hasql/Pool/ResourcePool.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pool/ResourcePool.hs b/library/Hasql/Pool/ResourcePool.hs index 7895477171..1a22d6be36 100644 --- a/library/Hasql/Pool/ResourcePool.hs +++ b/library/Hasql/Pool/ResourcePool.hs @@ -11,7 +11,7 @@ import Data.Pool withResourceOnEither :: Pool resource -> (resource -> IO (Either failure success)) -> IO (Either failure success) withResourceOnEither pool act = mask_ $ do (resource, localPool) <- takeResource pool - failureOrSuccess <- act resource + failureOrSuccess <- act resource `onException` destroyResource pool localPool resource case failureOrSuccess of Right success -> do putResource localPool resource From 46b836796e2ea5d0467db6fdde2d7500ced3982f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 Apr 2020 21:06:38 +0300 Subject: [PATCH 0607/1204] Ditch mapLeft --- .travis.yml | 8 ++------ tasty/Main/Prelude.hs | 6 ------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index b8132a3a16..9e8e1da531 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,8 @@ env: - ghc=8.0.2 - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.5 benchmarks=1 tests=1 - - ghc=8.8.1 - -jobs: - allow_failures: - - env: ghc=8.8.1 + - ghc=8.6.5 + - ghc=8.8.3 benchmarks=1 tests=1 services: - postgresql diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index b832261098..ac88b09fa5 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -1,7 +1,6 @@ module Main.Prelude ( module Exports, - mapLeft, ) where @@ -9,8 +8,3 @@ where -- rerebase ------------------------- import Prelude as Exports - -{-# INLINE mapLeft #-} -mapLeft :: (a -> c) -> Either a b -> Either c b -mapLeft f = - either (Left . f) Right From 2c9c2377e1ccbda4619c0650d9d014b4b568f565 Mon Sep 17 00:00:00 2001 From: Renzo Carbonara Date: Sat, 9 May 2020 18:12:42 +0300 Subject: [PATCH 0608/1204] Add MonadFail instance for Row --- library/Hasql/Private/Decoders.hs | 4 ++-- library/Hasql/Private/Decoders/Row.hs | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index ea115c9ab1..162e320a5c 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -113,7 +113,7 @@ x = (,,) '<$>' ('column' . 'nullable') 'int8' '<*>' ('column' . 'nonNullable') ' @ -} newtype Row a = Row (Row.Row a) - deriving (Functor, Applicative, Monad) + deriving (Functor, Applicative, Monad, MonadFail) {-| Lift an individual non-nullable value decoder to a composable row decoder. @@ -268,7 +268,7 @@ time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) {-| Decoder of the @TIMETZ@ values. -Unlike in case of @TIMESTAMPTZ@, +Unlike in case of @TIMESTAMPTZ@, Postgres does store the timezone information for @TIMETZ@. However the Haskell's \"time\" library does not contain any composite type, that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index d13875531f..0bc80f08f1 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -3,14 +3,19 @@ module Hasql.Private.Decoders.Row where import Hasql.Private.Prelude hiding (error) import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Data.Text as T import qualified PostgreSQL.Binary.Decoding as A import qualified Hasql.Private.Decoders.Value as Value +import Control.Monad.Fail (MonadFail(..)) newtype Row a = Row (ReaderT Env (ExceptT RowError IO) a) deriving (Functor, Applicative, Monad) +instance MonadFail Row where + fail = error . ValueError . T.pack + data Env = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) @@ -35,14 +40,14 @@ error x = {-# INLINE value #-} value :: Value.Value a -> Row (Maybe a) value valueDec = - {-# SCC "value" #-} + {-# SCC "value" #-} Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do col <- readIORef columnRef writeIORef columnRef (succ col) if col < columnsAmount then do valueMaybe <- {-# SCC "getvalue'" #-} LibPQ.getvalue' result row col - pure $ + pure $ case valueMaybe of Nothing -> Right Nothing @@ -56,5 +61,5 @@ value valueDec = {-# INLINE nonNullValue #-} nonNullValue :: Value.Value a -> Row a nonNullValue valueDec = - {-# SCC "nonNullValue" #-} + {-# SCC "nonNullValue" #-} value valueDec >>= maybe (error UnexpectedNull) pure From 2645e9b365b28f597503a8f15f8e6b9a3513c4ff Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 15 May 2020 12:58:49 +0300 Subject: [PATCH 0609/1204] Update Travis --- .travis.yml | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2982791b87..7fedc4fd4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,21 @@ +if: tag IS blank + env: - - ghc=8.0.2 - - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.1 benchmarks=1 tests=1 + - ghc=8.6.5 + - ghc=8.8.1 benchmarks=1 tests=1 + - ghc=8.10.1 + +matrix: + allow_failures: + - env: ghc=8.10.1 + +services: + - postgresql install: # Set up the Shell to treat the semicolon as && - - set -o pipefail && set -e + - set -eo pipefail # Install GHC and Cabal - cabal=${cabal=2.4}; @@ -15,7 +24,7 @@ install: travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; # Update the Cabal database - - cabal update + - cabal v1-update # Switch to the distro: - export pkg_name=$(cabal info . | awk '{print $2;exit}'); @@ -30,24 +39,26 @@ install: constraint_options=( ); fi; + # Install executables + - cabal v1-install happy + - cabal v1-install doctest # Install the library dependencies - - cabal install --only-dependencies --reorder-goals --force-reinstalls + - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls ${constraint_options[@]} $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") # Build the library - - cabal build + - cabal v1-build # Configure and build the remaining stuff - - cabal configure + - cabal v1-configure $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") -f doctest - - cabal build + - cabal v1-build script: - | if [ "$tests" = "1" ]; then - cabal clean; - cabal test --show-details=always; + cabal v1-test --show-details=always; fi; From 0164715871f84afa55086f2b3ff3ed111e78ed19 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 15 May 2020 15:32:51 +0300 Subject: [PATCH 0610/1204] Set the version to 0.5.2 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c07d2c0d73..646c55f043 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.1 + 0.5.2 category: Hasql, Database, PostgreSQL synopsis: From 0fe7f0ccd74c41424521fe4621f3b294be9e0623 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 30 May 2020 11:43:14 +0300 Subject: [PATCH 0611/1204] Avoid crashing on absent code or message (#119) --- library/Hasql/Private/Decoders/Result.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 11acf7727f..12d53de179 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -69,10 +69,10 @@ serverError :: Result () serverError = Result $ ReaderT $ \(_, result) -> ExceptT $ do code <- - fmap (fromMaybe ($bug "No code")) $ + fmap fold $ LibPQ.resultErrorField result LibPQ.DiagSqlstate message <- - fmap (fromMaybe ($bug "No message")) $ + fmap fold $ LibPQ.resultErrorField result LibPQ.DiagMessagePrimary detail <- LibPQ.resultErrorField result LibPQ.DiagMessageDetail From 809604683ff8bd19c077a84e43d1ba3b1edfedd1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 30 May 2020 11:44:35 +0300 Subject: [PATCH 0612/1204] Set the version to 1.4.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index b0f37efa82..3901f7e93e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.2 +version: 1.4.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 736652c354158990cb7bb3b9a0a0abf36286a6d1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 7 Jun 2020 11:40:52 +0300 Subject: [PATCH 0613/1204] Restore the old code, giving a comparison with hasql-th --- README.md | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 615df8b38b..c26108347d 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,11 @@ import Prelude import Data.Int import Data.Functor.Contravariant import Hasql.Session (Session) -import Hasql.Statement (Statement) +import Hasql.Statement (Statement(..)) import qualified Hasql.Session as Session +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders import qualified Hasql.Connection as Connection -import qualified Hasql.TH as TH -- from "hasql-th" main :: IO () @@ -98,12 +99,34 @@ sumAndDivModSession a b c = do -- -- It's recommended to define statements in a dedicated 'Statements' -- submodule of your project. --- --- In the following code we use the extension library "hasql-th", --- which generates statement definitions from SQL, --- compile-time checking the syntax on the way. ------------------------- +sumStatement :: Statement (Int64, Int64) Int64 +sumStatement = Statement sql encoder decoder True where + sql = "select $1 + $2" + encoder = + (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> + (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + +divModStatement :: Statement (Int64, Int64) (Int64, Int64) +divModStatement = Statement sql encoder decoder True where + sql = "select $1 / $2, $1 % $2" + encoder = + (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> + (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) + decoder = Decoders.singleRow row where + row = + (,) <$> + Decoders.column (Decoders.nonNullable Decoders.int8) <*> + Decoders.column (Decoders.nonNullable Decoders.int8) +``` + +For the general use-case it is advised to prefer declaring statements using the "hasql-th" library, which validates the statements at compile-time and generates codecs automatically. So the above two statements could be implemented the following way: + +```haskell +import qualified Hasql.TH as TH -- from "hasql-th" + sumStatement :: Statement (Int64, Int64) Int64 sumStatement = [TH.singletonStatement| From 06b465a92a6aeceb533930b08a87c0b6025de5e3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 13 Jun 2020 13:23:09 +0300 Subject: [PATCH 0614/1204] Set the version to 1.4.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 3901f7e93e..dd479fef3a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.3 +version: 1.4.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 644abe99caf801a4459d6d5c3d664394c0ea91db Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 13 Jun 2020 13:32:29 +0300 Subject: [PATCH 0615/1204] Update the deps --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index dd479fef3a..23c007a32b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -56,7 +56,7 @@ library build-depends: attoparsec >=0.10 && <0.14, base >=4.9 && <5, - base-prelude >=0.1.19 && <2, + base-prelude >=1.4 && <2, bytestring >=0.10 && <0.11, bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, @@ -67,7 +67,7 @@ library loch-th ==0.2.*, mtl >=2 && <3, placeholders ==0.1.*, - postgresql-binary >=0.12.2 && <0.13, + postgresql-binary >=0.12.3 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, text >=1 && <2, From 64c3a0eed15f41043c492f6895ada892c8158b9f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 13 Jun 2020 13:32:53 +0300 Subject: [PATCH 0616/1204] Refactor Row's MonadFail --- library/Hasql/Private/Decoders/Row.hs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 0bc80f08f1..f3853a0c55 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -3,10 +3,8 @@ module Hasql.Private.Decoders.Row where import Hasql.Private.Prelude hiding (error) import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Data.Text as T import qualified PostgreSQL.Binary.Decoding as A import qualified Hasql.Private.Decoders.Value as Value -import Control.Monad.Fail (MonadFail(..)) newtype Row a = @@ -14,7 +12,7 @@ newtype Row a = deriving (Functor, Applicative, Monad) instance MonadFail Row where - fail = error . ValueError . T.pack + fail = error . ValueError . fromString data Env = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) From 33fc524e57bbd7aafa53dfeda2d5a5e44a82e1fe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 13 Jun 2020 13:33:02 +0300 Subject: [PATCH 0617/1204] Add MonadFail for Composite --- library/Hasql/Private/Decoders.hs | 2 +- library/Hasql/Private/Decoders/Composite.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 162e320a5c..bd3daf2389 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -458,7 +458,7 @@ element = \ case Composable decoder of composite values (rows, records). -} newtype Composite a = Composite (Composite.Composite a) - deriving (Functor, Applicative, Monad) + deriving (Functor, Applicative, Monad, MonadFail) {-| Lift a 'Value' decoder into a 'Composite' decoder for parsing of component values. diff --git a/library/Hasql/Private/Decoders/Composite.hs b/library/Hasql/Private/Decoders/Composite.hs index 3bebc9078e..8d40237458 100644 --- a/library/Hasql/Private/Decoders/Composite.hs +++ b/library/Hasql/Private/Decoders/Composite.hs @@ -6,7 +6,7 @@ import qualified PostgreSQL.Binary.Decoding as A newtype Composite a = Composite (ReaderT Bool A.Composite a) - deriving (Functor, Applicative, Monad) + deriving (Functor, Applicative, Monad, MonadFail) {-# INLINE run #-} run :: Composite a -> Bool -> A.Value a From 3353968895e120e0dffbdf9776f62f5a20379291 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 11:51:43 +0300 Subject: [PATCH 0618/1204] Reproduce #2 --- test/Main.hs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/Main.hs b/test/Main.hs index dbf2fcb17c..912909d28d 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -14,6 +14,9 @@ import qualified Hasql.Session as Session import qualified Hasql.Connection as Connection import qualified Hasql.DynamicStatements.Snippet as Snippet import qualified Hasql.DynamicStatements.Session as Session +import qualified Hasql.DynamicStatements.Statement as Statement +import qualified Data.ByteString as ByteString +import qualified Data.ByteString.Char8 as ByteStringChar8 main = @@ -36,6 +39,19 @@ tree = assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) (Just 3) assertEqual "" (Right (Right "abc")) =<< sample "abcd" Nothing (Just 3) assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) Nothing + , + testGroup "Regression" [ + testCase "Missing $ for 1000th parameter string #2" $ let + snippet = + "SELECT 1 " <> (foldMap @[] ("," <>) $ replicate 1001 $ Snippet.param (10::Int64)) + statement = + Statement.dynamicallyParameterized snippet Decoders.noResult + sql = + case statement of + Statement.Statement x _ _ _ -> x + in do + assertBool (ByteStringChar8.unpack sql) (isJust (ByteString.findSubstring "$1000" sql)) + ] ] runSession :: Session.Session a -> IO (Either Connection.ConnectionError (Either Session.QueryError a)) From 29515e3df13b4a586b63c60ba8583ca12ee4d3a2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 12:40:18 +0300 Subject: [PATCH 0619/1204] Fix #2 by updating to a fixed version of "ptr" --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 6d771a6e4d..02913c51fa 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -38,7 +38,7 @@ library containers >=0.6 && <0.7, hasql >=1.4 && <1.5, hasql-implicits >=0.1 && <0.2, - ptr >=0.16.6 && <0.17 + ptr >=0.16.7.2 && <0.17 test-suite test type: exitcode-stdio-1.0 From f3a197319e0a815f5713e52a3ff3410de5e86798 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 12:48:48 +0300 Subject: [PATCH 0620/1204] Update Travis --- .travis.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc9c071509..9e8e1da531 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,14 @@ if: tag IS blank env: - - ghc=8.6.5 benchmarks=1 tests=1 - - ghc=8.8.1 + - ghc=8.0.2 + - ghc=8.2.2 + - ghc=8.4.2 + - ghc=8.6.5 + - ghc=8.8.3 benchmarks=1 tests=1 -matrix: - allow_failures: - - env: ghc=8.8.1 +services: + - postgresql install: # Set up the Shell to treat the semicolon as && From c25f1fd08f435d57a777c2ff3cccd5383cf68c27 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 12:51:26 +0300 Subject: [PATCH 0621/1204] Set the version to 0.2.0.2 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 02913c51fa..2653ea73ce 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.2.0.1 +version: 0.2.0.2 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From f31967526e603253b0fd4a68e5c6af18b02c34a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 12:53:31 +0300 Subject: [PATCH 0622/1204] Remove the older GHCs --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9e8e1da531..7d5e6046b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,6 @@ if: tag IS blank env: - - ghc=8.0.2 - - ghc=8.2.2 - - ghc=8.4.2 - ghc=8.6.5 - ghc=8.8.3 benchmarks=1 tests=1 From d93fd86dd8fb6ea09db1a50a239131c67711f26b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 13:07:38 +0300 Subject: [PATCH 0623/1204] Update the dlist dep --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 23c007a32b..12640c4d44 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -61,7 +61,7 @@ library bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, - dlist >=0.7 && <0.9, + dlist >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, loch-th ==0.2.*, From 8dc3944ea74d8cf8c5a284a3236e4b2019be0d4a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 13:54:23 +0300 Subject: [PATCH 0624/1204] Set the version to 1.4.4.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 12640c4d44..fe0e7ce688 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.4 +version: 1.4.4.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 5a79b7ef4f65256cf8461551fbbf11c77c531d37 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 14:22:11 +0300 Subject: [PATCH 0625/1204] Set the version to 1.4.4.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index fe0e7ce688..51dc5dcfc0 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.4.1 +version: 1.4.4.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From fdb58ec30eadc263ac7800e0d7b1a1d8ae3165a3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 14:22:23 +0300 Subject: [PATCH 0626/1204] Update the dlist bounds --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 51dc5dcfc0..0135e2560a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -61,7 +61,7 @@ library bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, - dlist >=1 && <2, + dlist ==0.8.* || >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, loch-th ==0.2.*, From 181d6ece104f6684b151c4eee9d4ae6943355715 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 14:33:57 +0300 Subject: [PATCH 0627/1204] Set the version to 0.1.0.2 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index ef95995c69..a1433a3575 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.0.1 +version: 0.1.0.2 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues From bb138a35401a71894a97f7818a8574a24c7ebd7e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jul 2020 14:34:10 +0300 Subject: [PATCH 0628/1204] Ditch the redundant dep --- hasql-implicits.cabal | 1 - 1 file changed, 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index a1433a3575..fa5de83ecf 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -31,7 +31,6 @@ library containers >=0.6 && <0.7, hasql >=1.4 && <1.5, network-ip >=0.2 && <1, - ptr >=0.16.6 && <0.17, scientific >=0.2 && <0.4, text >=1 && <2, time >=1.4 && <2, From fca5c87112f714fe86ed84c4f8887afe46de23ba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 20 Sep 2020 19:34:43 +0300 Subject: [PATCH 0629/1204] Reimplement without resource-pool --- hasql-pool.cabal | 21 ++-- library/Hasql/Pool.hs | 148 +++++++++++++++++++++++------ library/Hasql/Pool/Prelude.hs | 104 +++++++++++++++++++- library/Hasql/Pool/ResourcePool.hs | 21 ---- 4 files changed, 229 insertions(+), 65 deletions(-) delete mode 100644 library/Hasql/Pool/ResourcePool.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 646c55f043..9ef67adaa8 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -41,20 +41,16 @@ library Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 - other-modules: - Hasql.Pool.Prelude - Hasql.Pool.ResourcePool exposed-modules: Hasql.Pool + other-modules: + Hasql.Pool.Prelude build-depends: - -- resources: - resource-pool >= 0.2 && < 0.3, - -- database: - hasql >= 1.3 && < 1.5, - -- data: - time >= 1.5 && < 2, - -- general: - base-prelude >= 1 && < 2 + base >=4.12 && <5, + hasql >=1.3 && <1.5, + stm >=2.5 && <3, + time >=1.5 && <2, + transformers >=0.5 && <0.6 test-suite test @@ -72,4 +68,5 @@ test-suite test base-prelude, hasql, hasql-pool, - hspec >= 2.6 && < 3 + stm >=2.5 && <3, + hspec >=2.6 && <3 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b215fd1583..b48abe996c 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -10,17 +10,78 @@ module Hasql.Pool where import Hasql.Pool.Prelude -import qualified Hasql.Connection -import qualified Hasql.Session -import qualified Data.Pool as ResourcePool -import qualified Hasql.Pool.ResourcePool as ResourcePool +import Hasql.Connection (Connection) +import Hasql.Session (Session) +import qualified Hasql.Connection as Connection +import qualified Hasql.Session as Session -- | -- A pool of connections to DB. -newtype Pool = - Pool (ResourcePool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) - deriving (Show) +data Pool = + Pool + Int + {-^ Max connections. -} + Int + {-^ Connection timeout in milliseconds. -} + Connection.Settings + {-^ Connection settings. -} + (TQueue ActiveConnection) + {-^ Queue of active connections. -} + (TVar Int) + {-^ Queue size. -} + (TVar Bool) + {-^ Flag signaling whether pool's alive. -} + +data ActiveConnection = + ActiveConnection { + {-| Timestamp of last use. -} + activeConnectionLastTimestamp :: Int, + activeConnectionConnection :: Connection + } + +loopCollectingGarbage :: Int -> TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () +loopCollectingGarbage timeout queue queueSizeVar aliveVar = + decide + where + decide = + do + ts <- getMillisecondsSinceEpoch + join $ atomically $ do + alive <- readTVar aliveVar + if alive + then do + queueSize <- readTVar queueSizeVar + if queueSize == 0 + then return (sleep (ts + timeout)) + else let + collect !queueSize !list = + do + entry@(ActiveConnection entryTs connection) <- readTQueue queue + if entryTs < ts + then collect (pred queueSize) (connection : list) + else do + writeTQueue queue entry + return (entryTs, queueSize, list) + in do + (ts, newQueueSize, list) <- collect queueSize [] + writeTVar queueSizeVar newQueueSize + return (release list *> sleep ts *> decide) + else do + list <- flushTQueue queue + writeTVar queueSizeVar 0 + return (release (fmap activeConnectionConnection list)) + sleep untilTs = + do + ts <- getMillisecondsSinceEpoch + let + diff = + untilTs - ts + in if diff > 0 + then threadDelay (diff * 1000) + else return () + release = + traverse_ Connection.release -- | -- Settings of the connection pool. Consist of: @@ -28,48 +89,77 @@ newtype Pool = -- * Pool-size. -- -- * Timeout. --- An amount of time for which an unused resource is kept open. --- The smallest acceptable value is 0.5 seconds. +-- An amount of time in milliseconds for which the unused connections are kept open. -- -- * Connection settings. -- type Settings = - (Int, NominalDiffTime, Hasql.Connection.Settings) + (Int, Int, Connection.Settings) -- | -- Given the pool-size, timeout and connection settings -- create a connection-pool. acquire :: Settings -> IO Pool acquire (size, timeout, connectionSettings) = - fmap Pool $ - ResourcePool.createPool acquire release stripes timeout size - where - acquire = - Hasql.Connection.acquire connectionSettings - release = - either (const (pure ())) Hasql.Connection.release - stripes = - 1 + do + queue <- newTQueueIO + queueSizeVar <- newTVarIO 0 + aliveVar <- newTVarIO (size > 0) + return (Pool size timeout connectionSettings queue queueSizeVar aliveVar) -- | -- Release the connection-pool. release :: Pool -> IO () -release (Pool pool) = - ResourcePool.destroyAllResources pool +release (Pool _ _ _ _ _ aliveVar) = + atomically (writeTVar aliveVar False) -- | -- A union over the connection establishment error and the session error. data UsageError = - ConnectionError Hasql.Connection.ConnectionError | - SessionError Hasql.Session.QueryError + ConnectionUsageError Connection.ConnectionError | + SessionUsageError Session.QueryError | + PoolIsReleasedUsageError deriving (Show, Eq) -- | -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. -use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) -use (Pool pool) session = - fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ - ResourcePool.withResourceOnEither pool $ - traverse $ - Hasql.Session.run session +use :: Pool -> Session.Session a -> IO (Either UsageError a) +use (Pool _ _ connectionSettings queue queueSizeVar aliveVar) session = + join $ atomically $ do + alive <- readTVar aliveVar + if alive + then do + queueSize <- readTVar queueSizeVar + if queueSize > 0 + then do + ActiveConnection _ connection <- readTQueue queue + let + !newQueueSize = + succ queueSize + in do + writeTVar queueSizeVar newQueueSize + return (useConnectionThenPutItToQueue connection) + else return acquireConnectionThenUseThenPutItToQueue + else return (return (Left PoolIsReleasedUsageError)) + where + acquireConnectionThenUseThenPutItToQueue = + do + res <- Connection.acquire connectionSettings + case res of + Left acquisitionError -> return (Left (ConnectionUsageError acquisitionError)) + Right connection -> useConnectionThenPutItToQueue connection + useConnectionThenPutItToQueue connection = + do + res <- Session.run session connection + case res of + Left queryError -> do + Connection.release connection + return (Left (SessionUsageError queryError)) + Right res -> do + ts <- getMillisecondsSinceEpoch + atomically $ do + writeTQueue queue (ActiveConnection ts connection) + modifyTVar' queueSizeVar succ + return (Right res) + diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index a28cf8b738..c85e6f5719 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -1,14 +1,112 @@ module Hasql.Pool.Prelude -( +( module Exports, + getMillisecondsSinceEpoch, ) where +-- base +------------------------- +import Control.Applicative as Exports hiding (WrappedArrow(..)) +import Control.Arrow as Exports hiding (first, second) +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) +import Control.Monad.IO.Class as Exports +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.ST as Exports +import Data.Bifunctor as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports +import Data.Functor.Compose as Exports +import Data.Functor.Contravariant as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.List.NonEmpty as Exports (NonEmpty(..)) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Alt) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Void as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports +import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) +import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith) +import GHC.Generics as Exports (Generic) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports (Handle, hClose) +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (printf, hPrintf) +import Text.Read as Exports (Read(..), readMaybe, readEither) +import Unsafe.Coerce as Exports --- base-prelude +-- stm ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) +import Control.Concurrent.STM as Exports hiding (orElse) + +-- -- text +-- ------------------------- +-- import Data.Text as Exports (Text) + +-- -- bytestring +-- ------------------------- +-- import Data.ByteString as Exports (ByteString) -- time ------------------------- import Data.Time as Exports +import Data.Time.Clock.POSIX as Exports +import Data.Time.Clock.System as Exports + +-- transformers +------------------------- +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) +import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) + + +getMillisecondsSinceEpoch :: IO Int +getMillisecondsSinceEpoch = + fmap (fromIntegral . systemTimeToMicros) getSystemTime + where + systemTimeToMicros (MkSystemTime s ns) = + s * 1000 + fromIntegral (div ns 1000000) diff --git a/library/Hasql/Pool/ResourcePool.hs b/library/Hasql/Pool/ResourcePool.hs deleted file mode 100644 index 1a22d6be36..0000000000 --- a/library/Hasql/Pool/ResourcePool.hs +++ /dev/null @@ -1,21 +0,0 @@ -{-| -Extras for the resource-pool library. --} -module Hasql.Pool.ResourcePool -where - -import Hasql.Pool.Prelude -import Data.Pool - - -withResourceOnEither :: Pool resource -> (resource -> IO (Either failure success)) -> IO (Either failure success) -withResourceOnEither pool act = mask_ $ do - (resource, localPool) <- takeResource pool - failureOrSuccess <- act resource `onException` destroyResource pool localPool resource - case failureOrSuccess of - Right success -> do - putResource localPool resource - return (Right success) - Left failure -> do - destroyResource pool localPool resource - return (Left failure) From 988dcee853b7bc6c0b8741726f49adad0e256a5f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Oct 2020 11:36:47 +0300 Subject: [PATCH 0630/1204] Add missing GC loop --- library/Hasql/Pool.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b48abe996c..764020c579 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -105,6 +105,7 @@ acquire (size, timeout, connectionSettings) = queue <- newTQueueIO queueSizeVar <- newTVarIO 0 aliveVar <- newTVarIO (size > 0) + forkIO $ loopCollectingGarbage timeout queue queueSizeVar aliveVar return (Pool size timeout connectionSettings queue queueSizeVar aliveVar) -- | From b94b925f849d8a38d7b6844d43af7af74477c165 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Oct 2020 12:58:46 +0300 Subject: [PATCH 0631/1204] Correct things --- library/Hasql/Pool.hs | 143 ++++++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 54 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 764020c579..36d41c3d30 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -20,28 +20,25 @@ import qualified Hasql.Session as Session -- A pool of connections to DB. data Pool = Pool - Int - {-^ Max connections. -} Int {-^ Connection timeout in milliseconds. -} Connection.Settings {-^ Connection settings. -} (TQueue ActiveConnection) - {-^ Queue of active connections. -} + {-^ Queue of established connections. -} (TVar Int) - {-^ Queue size. -} + {-^ Slots available for establishing new connections. -} (TVar Bool) {-^ Flag signaling whether pool's alive. -} data ActiveConnection = ActiveConnection { - {-| Timestamp of last use. -} - activeConnectionLastTimestamp :: Int, + activeConnectionOutdatingTimestamp :: Int, activeConnectionConnection :: Connection } -loopCollectingGarbage :: Int -> TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () -loopCollectingGarbage timeout queue queueSizeVar aliveVar = +loopCollectingGarbage :: TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () +loopCollectingGarbage establishedQueue slotsAvailVar aliveVar = decide where decide = @@ -50,26 +47,43 @@ loopCollectingGarbage timeout queue queueSizeVar aliveVar = join $ atomically $ do alive <- readTVar aliveVar if alive - then do - queueSize <- readTVar queueSizeVar - if queueSize == 0 - then return (sleep (ts + timeout)) - else let - collect !queueSize !list = - do - entry@(ActiveConnection entryTs connection) <- readTQueue queue - if entryTs < ts - then collect (pred queueSize) (connection : list) - else do - writeTQueue queue entry - return (entryTs, queueSize, list) - in do - (ts, newQueueSize, list) <- collect queueSize [] - writeTVar queueSizeVar newQueueSize - return (release list *> sleep ts *> decide) + then let + tryToRelease = + tryReadTQueue establishedQueue >>= \ case + -- The queue is empty. Just wait for changes in the state. + Nothing -> + retry + Just entry@(ActiveConnection outdatingTs connection) -> + -- Check whether it's outdated. + if outdatingTs < ts + -- Fetch the current value of available slots and + -- release this one and other connections. + then do + slotsAvail <- readTVar slotsAvailVar + collectAndRelease slotsAvail [connection] outdatingTs + -- Return it to the front of the queue and + -- wait until it's outdating time. + else do + unGetTQueue establishedQueue entry + return (sleep outdatingTs *> decide) + collectAndRelease !slotsAvail !outdatedList outdatingTs = + tryReadTQueue establishedQueue >>= \ case + Nothing -> + finalizeAndRelease slotsAvail outdatedList outdatingTs + Just entry@(ActiveConnection outdatingTs connection) -> + if outdatingTs < ts + then do + unGetTQueue establishedQueue entry + finalizeAndRelease slotsAvail outdatedList outdatingTs + else + collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs + finalizeAndRelease slotsAvail outdatedList outdatingTs = + do + writeTVar slotsAvailVar slotsAvail + return (release outdatedList *> sleep outdatingTs *> decide) + in tryToRelease else do - list <- flushTQueue queue - writeTVar queueSizeVar 0 + list <- flushTQueue establishedQueue return (release (fmap activeConnectionConnection list)) sleep untilTs = do @@ -102,16 +116,16 @@ type Settings = acquire :: Settings -> IO Pool acquire (size, timeout, connectionSettings) = do - queue <- newTQueueIO - queueSizeVar <- newTVarIO 0 + establishedQueue <- newTQueueIO + slotsAvailVar <- newTVarIO size aliveVar <- newTVarIO (size > 0) - forkIO $ loopCollectingGarbage timeout queue queueSizeVar aliveVar - return (Pool size timeout connectionSettings queue queueSizeVar aliveVar) + forkIO $ loopCollectingGarbage establishedQueue slotsAvailVar aliveVar + return (Pool timeout connectionSettings establishedQueue slotsAvailVar aliveVar) -- | -- Release the connection-pool. release :: Pool -> IO () -release (Pool _ _ _ _ _ aliveVar) = +release (Pool _ _ _ _ aliveVar) = atomically (writeTVar aliveVar False) -- | @@ -126,41 +140,62 @@ data UsageError = -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use (Pool _ _ connectionSettings queue queueSizeVar aliveVar) session = +use (Pool timeout connectionSettings establishedQueue slotsAvailVar aliveVar) session = join $ atomically $ do alive <- readTVar aliveVar if alive - then do - queueSize <- readTVar queueSizeVar - if queueSize > 0 - then do - ActiveConnection _ connection <- readTQueue queue - let - !newQueueSize = - succ queueSize - in do - writeTVar queueSizeVar newQueueSize - return (useConnectionThenPutItToQueue connection) - else return acquireConnectionThenUseThenPutItToQueue - else return (return (Left PoolIsReleasedUsageError)) + then + tryReadTQueue establishedQueue >>= \ case + -- No established connection avail at the moment. + Nothing -> do + slotsAvail <- readTVar slotsAvailVar + -- Do we have any slots left for establishing new connections? + if slotsAvail > 0 + -- Reduce the available slots var and instruct to + -- establish and use a new connection. + then do + writeTVar slotsAvailVar $! pred slotsAvail + return acquireConnectionThenUseThenPutItToQueue + -- Wait until the state changes and retry. + else + retry + Just (ActiveConnection _ connection) -> + return (useConnectionThenPutItToQueue connection) + else + return (return (Left PoolIsReleasedUsageError)) where acquireConnectionThenUseThenPutItToQueue = do res <- Connection.acquire connectionSettings case res of - Left acquisitionError -> return (Left (ConnectionUsageError acquisitionError)) - Right connection -> useConnectionThenPutItToQueue connection + -- Failed to acquire, so release an availability slot, + -- returning the error details. + Left acquisitionError -> do + atomically $ modifyTVar' slotsAvailVar succ + return (Left (ConnectionUsageError acquisitionError)) + Right connection -> + useConnectionThenPutItToQueue connection useConnectionThenPutItToQueue connection = do res <- Session.run session connection case res of Left queryError -> do - Connection.release connection + -- Check whether the error is on client-side, + -- and in that case release the connection. + case queryError of + Session.QueryError _ _ (Session.ClientError _) -> + releaseConnection connection + _ -> + putConnectionToPool connection return (Left (SessionUsageError queryError)) Right res -> do - ts <- getMillisecondsSinceEpoch - atomically $ do - writeTQueue queue (ActiveConnection ts connection) - modifyTVar' queueSizeVar succ + putConnectionToPool connection return (Right res) - + putConnectionToPool connection = + do + ts <- getMillisecondsSinceEpoch + atomically $ writeTQueue establishedQueue (ActiveConnection (ts + timeout) connection) + releaseConnection connection = + do + atomically $ modifyTVar' slotsAvailVar succ + Connection.release connection From a5aa4e06556a2197f03d0118768700b41f230905 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Oct 2020 13:04:21 +0300 Subject: [PATCH 0632/1204] Take timeout out of pool --- library/Hasql/Pool.hs | 66 +++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 36d41c3d30..937de6e280 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -20,8 +20,6 @@ import qualified Hasql.Session as Session -- A pool of connections to DB. data Pool = Pool - Int - {-^ Connection timeout in milliseconds. -} Connection.Settings {-^ Connection settings. -} (TQueue ActiveConnection) @@ -33,12 +31,12 @@ data Pool = data ActiveConnection = ActiveConnection { - activeConnectionOutdatingTimestamp :: Int, + activeConnectionLastUseTimestamp :: Int, activeConnectionConnection :: Connection } -loopCollectingGarbage :: TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () -loopCollectingGarbage establishedQueue slotsAvailVar aliveVar = +loopCollectingGarbage :: Int -> TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () +loopCollectingGarbage timeout establishedQueue slotsAvailVar aliveVar = decide where decide = @@ -53,30 +51,38 @@ loopCollectingGarbage establishedQueue slotsAvailVar aliveVar = -- The queue is empty. Just wait for changes in the state. Nothing -> retry - Just entry@(ActiveConnection outdatingTs connection) -> - -- Check whether it's outdated. - if outdatingTs < ts - -- Fetch the current value of available slots and - -- release this one and other connections. - then do - slotsAvail <- readTVar slotsAvailVar - collectAndRelease slotsAvail [connection] outdatingTs - -- Return it to the front of the queue and - -- wait until it's outdating time. - else do - unGetTQueue establishedQueue entry - return (sleep outdatingTs *> decide) + Just entry@(ActiveConnection lastUseTs connection) -> + let + outdatingTs = + lastUseTs + timeout + in + -- Check whether it's outdated. + if outdatingTs < ts + -- Fetch the current value of available slots and + -- release this one and other connections. + then do + slotsAvail <- readTVar slotsAvailVar + collectAndRelease slotsAvail [connection] outdatingTs + -- Return it to the front of the queue and + -- wait until it's outdating time. + else do + unGetTQueue establishedQueue entry + return (sleep outdatingTs *> decide) collectAndRelease !slotsAvail !outdatedList outdatingTs = tryReadTQueue establishedQueue >>= \ case Nothing -> finalizeAndRelease slotsAvail outdatedList outdatingTs - Just entry@(ActiveConnection outdatingTs connection) -> - if outdatingTs < ts - then do - unGetTQueue establishedQueue entry - finalizeAndRelease slotsAvail outdatedList outdatingTs - else - collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs + Just entry@(ActiveConnection lastUseTs connection) -> + let + outdatingTs = + lastUseTs + timeout + in + if outdatingTs < ts + then do + unGetTQueue establishedQueue entry + finalizeAndRelease slotsAvail outdatedList outdatingTs + else + collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs finalizeAndRelease slotsAvail outdatedList outdatingTs = do writeTVar slotsAvailVar slotsAvail @@ -119,13 +125,13 @@ acquire (size, timeout, connectionSettings) = establishedQueue <- newTQueueIO slotsAvailVar <- newTVarIO size aliveVar <- newTVarIO (size > 0) - forkIO $ loopCollectingGarbage establishedQueue slotsAvailVar aliveVar - return (Pool timeout connectionSettings establishedQueue slotsAvailVar aliveVar) + forkIO $ loopCollectingGarbage timeout establishedQueue slotsAvailVar aliveVar + return (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) -- | -- Release the connection-pool. release :: Pool -> IO () -release (Pool _ _ _ _ aliveVar) = +release (Pool _ _ _ aliveVar) = atomically (writeTVar aliveVar False) -- | @@ -140,7 +146,7 @@ data UsageError = -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use (Pool timeout connectionSettings establishedQueue slotsAvailVar aliveVar) session = +use (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) session = join $ atomically $ do alive <- readTVar aliveVar if alive @@ -194,7 +200,7 @@ use (Pool timeout connectionSettings establishedQueue slotsAvailVar aliveVar) se putConnectionToPool connection = do ts <- getMillisecondsSinceEpoch - atomically $ writeTQueue establishedQueue (ActiveConnection (ts + timeout) connection) + atomically $ writeTQueue establishedQueue (ActiveConnection ts connection) releaseConnection connection = do atomically $ modifyTVar' slotsAvailVar succ From 482bc42ce221ba8842ecd9dcdd83dfecdeea70cb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 6 Oct 2020 13:54:25 +0300 Subject: [PATCH 0633/1204] Relieve the "base" dep --- .travis.yml | 8 ++------ hasql-pool.cabal | 2 +- library/Hasql/Pool/Prelude.hs | 1 - 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7fedc4fd4e..afc7d3b244 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,8 @@ if: tag IS blank env: - ghc=8.4.2 - ghc=8.6.5 - - ghc=8.8.1 benchmarks=1 tests=1 - - ghc=8.10.1 - -matrix: - allow_failures: - - env: ghc=8.10.1 + - ghc=8.8.1 + - ghc=8.10.1 benchmarks=1 tests=1 services: - postgresql diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 9ef67adaa8..038cb88ce7 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -46,7 +46,7 @@ library other-modules: Hasql.Pool.Prelude build-depends: - base >=4.12 && <5, + base >=4.11 && <5, hasql >=1.3 && <1.5, stm >=2.5 && <3, time >=1.5 && <2, diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index c85e6f5719..6de55bcc05 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -31,7 +31,6 @@ import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports import Data.Functor.Compose as Exports -import Data.Functor.Contravariant as Exports import Data.Int as Exports import Data.IORef as Exports import Data.Ix as Exports From 3eaaf155b897e6773bf893aa1026557cf1b65ebb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Oct 2020 12:39:41 +0300 Subject: [PATCH 0634/1204] Correct a doc --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index d0760355e5..87f55d5ece 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -10,7 +10,7 @@ Composable SQL snippet with parameters injected. Abstracts over placeholders and matching of encoders. It has an instance of `IsString`, so having the @OverloadedStrings@ extension enabled -you can use string literals to construct it from string. +you can construct it directly from string literals. Here's an example: From b919a5e246beb6583cf3f3413a6195426424fe00 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Oct 2020 12:42:52 +0300 Subject: [PATCH 0635/1204] Correct a doc --- library/Hasql/DynamicStatements/Snippet/Defs.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index 87f55d5ece..c28fcc0c83 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -26,7 +26,7 @@ selectSubstring string from to = Having a decoder you can lift it into 'Hasql.Statement.Statement' using 'Hasql.DynamicStatements.Statement.dynamicallyParameterized' or directly execute it in 'Hasql.Session.Session' using -'Hasql.DynamicStatements.Session.snippet'. +'Hasql.DynamicStatements.Session.dynamicallyParameterizedStatement'. -} newtype Snippet = Snippet (Seq SnippetChunk) From 43b457e32181fec9c666296c629007ac74c24186 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 9 Oct 2020 12:43:24 +0300 Subject: [PATCH 0636/1204] Set the version to 0.2.0.3 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 2653ea73ce..7733cbbabc 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.2.0.2 +version: 0.2.0.3 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 709adab53cdcff9b44cac7cb8e2f87ec324ec948 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 10 Oct 2020 04:08:21 +0300 Subject: [PATCH 0637/1204] Relieve the bytestring dep --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 7733cbbabc..6ec01d3906 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -34,7 +34,7 @@ library Hasql.DynamicStatements.Snippet.Defs build-depends: base >=4.12 && <5, - bytestring >=0.10 && <0.11, + bytestring >=0.10 && <0.12, containers >=0.6 && <0.7, hasql >=1.4 && <1.5, hasql-implicits >=0.1 && <0.2, From 8840639fc1956e2d09ce6360854eb04f2caa0e34 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 10 Oct 2020 04:25:20 +0300 Subject: [PATCH 0638/1204] Expose the preparation flag --- library/Hasql/DynamicStatements/Session.hs | 5 +++-- library/Hasql/DynamicStatements/Statement.hs | 14 ++++++++------ test/Main.hs | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs index ae495ca133..13de708f68 100644 --- a/library/Hasql/DynamicStatements/Session.hs +++ b/library/Hasql/DynamicStatements/Session.hs @@ -15,5 +15,6 @@ This is merely a shortcut, which immediately embeds in @Session@. For details see the docs on that function. -} -dynamicallyParameterizedStatement :: SnippetDefs.Snippet -> Decoders.Result result -> Session result -dynamicallyParameterizedStatement snippet decoder = Session.statement () (Statement.dynamicallyParameterized snippet decoder) +dynamicallyParameterizedStatement :: SnippetDefs.Snippet -> Decoders.Result result -> Bool -> Session result +dynamicallyParameterizedStatement snippet decoder prepared = + Session.statement () (Statement.dynamicallyParameterized snippet decoder prepared) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 6be1042195..f441945dda 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -8,9 +8,11 @@ import qualified Hasql.Encoders as Encoders import qualified Ptr.Poking as Poking import qualified Ptr.ByteString as ByteString + {-| Construct a statement dynamically, specifying the parameters in-place -in the declaration of snippet and providing a result decoder. +in the declaration of snippet and providing a result decoder and +specifying whether the statement should be prepared. The injection of the parameters is handled automatically, generating parametric statements with binary encoders under the hood. @@ -27,7 +29,7 @@ selectSubstring string from to = let foldMap (mappend " for " . Snippet.'SnippetDefs.param') to <> ")" decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' (Decoders.'Decoders.nonNullable' Decoders.'Decoders.text')) - in 'dynamicallyParameterized' snippet decoder + in 'dynamicallyParameterized' snippet decoder True @ Without the Snippet API you would have had to implement the same functionality thus: @@ -45,14 +47,14 @@ selectSubstring' string from to = let foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) from <> foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) to decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') - in Statement sql encoder decoder False + in Statement sql encoder decoder True @ As you can see, the Snippet API abstracts over placeholders and matching encoder generation, thus also protecting you from all sorts of related bugs. -} -dynamicallyParameterized :: SnippetDefs.Snippet -> Decoders.Result result -> Statement () result -dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder = let +dynamicallyParameterized :: SnippetDefs.Snippet -> Decoders.Result result -> Bool -> Statement () result +dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder prepared = let step (!paramId, !poking, !encoder) = \ case SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) SnippetDefs.ParamSnippetChunk paramEncoder -> let @@ -61,4 +63,4 @@ dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder = let newEncoder = encoder <> paramEncoder in (newParamId, newPoking, newEncoder) in case foldl' step (1, mempty, mempty) chunks of - (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder False + (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder prepared diff --git a/test/Main.hs b/test/Main.hs index 912909d28d..fa38bb1105 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -33,7 +33,7 @@ tree = foldMap (mappend " for " . Snippet.param @Int32) to <> ")" decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.text)) - in runSession (Session.dynamicallyParameterizedStatement snippet decoder) + in runSession (Session.dynamicallyParameterizedStatement snippet decoder True) in do assertEqual "" (Right (Right "bc")) =<< sample "abcd" (Just 2) (Just 2) assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) (Just 3) @@ -45,7 +45,7 @@ tree = snippet = "SELECT 1 " <> (foldMap @[] ("," <>) $ replicate 1001 $ Snippet.param (10::Int64)) statement = - Statement.dynamicallyParameterized snippet Decoders.noResult + Statement.dynamicallyParameterized snippet Decoders.noResult True sql = case statement of Statement.Statement x _ _ _ -> x From 524d790a4594936ae262ab38bf90335139367ed8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 10 Oct 2020 04:28:10 +0300 Subject: [PATCH 0639/1204] Set the version to 0.3 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 6ec01d3906..470425ec50 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.2.0.3 +version: 0.3 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From ff67eed89ae00af7ca49f68e140ef353cfe5eb21 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Oct 2020 08:37:43 +0300 Subject: [PATCH 0640/1204] Expose "sql" --- library/Hasql/DynamicStatements/Snippet.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs index 982607f1df..2a31c588f9 100644 --- a/library/Hasql/DynamicStatements/Snippet.hs +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -3,6 +3,7 @@ module Hasql.DynamicStatements.Snippet Snippet, param, encoderAndParam, + sql, ) where From 7f141fc6244bc7df19c1330f63f467a04179cbab Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Oct 2020 08:39:53 +0300 Subject: [PATCH 0641/1204] Ditch the use of deprecated findSubstring --- test/Main.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Main.hs b/test/Main.hs index fa38bb1105..d68225d530 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -50,7 +50,7 @@ tree = case statement of Statement.Statement x _ _ _ -> x in do - assertBool (ByteStringChar8.unpack sql) (isJust (ByteString.findSubstring "$1000" sql)) + assertBool (ByteStringChar8.unpack sql) (ByteString.isInfixOf "$1000" sql) ] ] From a4fc92c3b9d51ce79cbedf565bc25716e4bc1dc1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Oct 2020 08:40:08 +0300 Subject: [PATCH 0642/1204] Set the version to 0.3.1 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 470425ec50..b7a96db524 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3 +version: 0.3.1 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 35435c0e017211f4bd90c6b291c2deef1706c0de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 15:06:42 +0300 Subject: [PATCH 0643/1204] Update the deps --- .travis.yml | 21 +++--- benchmarks/Main.hs | 2 +- hasql.cabal | 11 +-- library/Hasql/Private/Encoders/Value.hs | 2 +- library/Hasql/Private/Prelude.hs | 95 ++++++++++++++++++------- profiling/Main.hs | 5 +- 6 files changed, 86 insertions(+), 50 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9e8e1da531..df2150c632 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,18 @@ if: tag IS blank env: - - ghc=8.0.2 - - ghc=8.2.2 - ghc=8.4.2 - - ghc=8.6.5 - - ghc=8.8.3 benchmarks=1 tests=1 + - ghc=8.6.1 + - ghc=8.8.1 + - ghc=8.10.2 + - ghc=9.0.1 benchmarks=1 tests=1 services: - postgresql install: # Set up the Shell to treat the semicolon as && - - set -o pipefail && set -e + - set -eo pipefail # Install GHC and Cabal - cabal=${cabal=2.4}; @@ -37,23 +37,22 @@ install: ); fi; # Install the library dependencies - - cabal install --only-dependencies --reorder-goals --force-reinstalls + - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls ${constraint_options[@]} $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") # Build the library - - cabal build + - cabal v1-build # Configure and build the remaining stuff - - cabal configure + - cabal v1-configure $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") -f doctest - - cabal build + - cabal v1-build script: - | if [ "$tests" = "1" ]; then - cabal clean; - cabal test --show-details=always; + cabal v1-test --show-details=always; fi; diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 78742c21ce..4f73f62cb7 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -33,7 +33,7 @@ main = where sessionBench :: NFData a => String -> B.Session a -> Benchmark sessionBench name session = - bench name (nfIO (fmap (either ($bug "") id) (B.run session connection))) + bench name (nfIO (fmap (either (error "") id) (B.run session connection))) -- * Sessions diff --git a/hasql.cabal b/hasql.cabal index 0135e2560a..0c6dc6303e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -54,19 +54,16 @@ library Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params build-depends: - attoparsec >=0.10 && <0.14, - base >=4.9 && <5, - base-prelude >=1.4 && <2, + attoparsec >=0.10 && <0.15, + base >=4.11 && <5, bytestring >=0.10 && <0.11, bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, - dlist ==0.8.* || >=1 && <2, + dlist >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, - loch-th ==0.2.*, mtl >=2 && <3, - placeholders ==0.1.*, postgresql-binary >=0.12.3 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, @@ -126,7 +123,6 @@ benchmark benchmarks -rtsopts -funbox-strict-fields build-depends: - bug ==1.*, criterion >=1.1 && <2, hasql, rerebase <2 @@ -142,6 +138,5 @@ test-suite profiling -threaded -rtsopts build-depends: - bug ==1.*, hasql, rerebase ==1.* diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index 586779468b..ee9b2a93a7 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -17,7 +17,7 @@ instance Contravariant Value where {-# INLINE unsafePTI #-} unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.Builder) -> Value a unsafePTI pti = - Value (PTI.ptiOID pti) (fromMaybe ($bug "No array OID") (PTI.ptiArrayOID pti)) + Value (PTI.ptiOID pti) (fromMaybe (error "No array OID") (PTI.ptiArrayOID pti)) {-# INLINE unsafePTIWithShow #-} unsafePTIWithShow :: Show a => PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 7973576a01..10c0df257a 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -5,8 +5,6 @@ module Hasql.Private.Prelude ByteStringBuilder, LazyText, TextBuilder, - bug, - bottom, forMToZero_, forMFromZero_, strictCons, @@ -15,9 +13,76 @@ module Hasql.Private.Prelude where --- base-prelude +-- base ------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, fromLeft, fromRight, (<>), First(..), Last(..), new) +import Control.Applicative as Exports hiding (WrappedArrow(..)) +import Control.Arrow as Exports hiding (first, second) +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) +import Control.Monad.IO.Class as Exports +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.ST as Exports +import Data.Bifunctor as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports +import Data.Functor.Compose as Exports +import Data.Functor.Contravariant as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.List.NonEmpty as Exports (NonEmpty(..)) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Alt, (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports hiding (First(..), Last(..)) +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Void as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports +import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) +import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith) +import GHC.Generics as Exports (Generic) +import GHC.IO.Exception as Exports +import GHC.OverloadedLabels as Exports +import Numeric as Exports +import Prelude as Exports hiding (Read, fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports (Handle, hClose) +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (printf, hPrintf) +import Unsafe.Coerce as Exports -- transformers ------------------------- @@ -42,17 +107,12 @@ import Data.Profunctor.Unsafe as Exports -- contravariant ------------------------- -import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports -- contravariant-extras ------------------------- import Contravariant.Extras as Exports --- semigroups -------------------------- -import Data.Semigroup as Exports - -- hashable ------------------------- import Data.Hashable as Exports (Hashable(..)) @@ -73,21 +133,12 @@ import Data.Vector as Exports (Vector) ------------------------- import Data.DList as Exports (DList) --- placeholders -------------------------- -import Development.Placeholders as Exports - --- loch-th -------------------------- -import Debug.Trace.LocationTH as Exports - -- postgresql-binary ------------------------- import PostgreSQL.Binary.Data as Exports (UUID) -- custom ------------------------- -import qualified Debug.Trace.LocationTH import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder import qualified Data.ByteString.Lazy @@ -106,14 +157,6 @@ type LazyText = type TextBuilder = Data.Text.Lazy.Builder.Builder -bug = - [e| $(Debug.Trace.LocationTH.failure) . (msg <>) |] - where - msg = "A \"hasql\" package bug: " :: String - -bottom = - [e| $bug "Bottom evaluated" |] - {-# INLINE forMToZero_ #-} forMToZero_ :: Applicative m => Int -> (Int -> m a) -> m () forMToZero_ !startN f = diff --git a/profiling/Main.hs b/profiling/Main.hs index fa63fd3049..38ca8ec7ca 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -1,7 +1,6 @@ module Main where import Prelude -import Bug import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Statement as C @@ -36,7 +35,7 @@ main = sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () sessionWithManySmallParameters = - $(todo "sessionWithManySmallParameters") + error "TODO: sessionWithManySmallParameters" sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = @@ -56,7 +55,7 @@ sessionWithManySmallResults = statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () statementWithManyParameters = - $(todo "statementWithManyParameters") + error "TODO: statementWithManyParameters" statementWithSingleRow :: C.Statement () (Int64, Int64) statementWithSingleRow = From c502108e1fa73b35f6f6fca575ab52d90bb0d15f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 15:06:59 +0300 Subject: [PATCH 0644/1204] Bump the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 0c6dc6303e..07eed3c4e1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.4.2 +version: 1.4.4.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From c398715a3a76ca8d70a4a600575e33147448f23a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 15:35:48 +0300 Subject: [PATCH 0645/1204] Update travis --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index df2150c632..9d7e2a66d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,12 @@ env: - ghc=8.4.2 - ghc=8.6.1 - ghc=8.8.1 - - ghc=8.10.2 - - ghc=9.0.1 benchmarks=1 tests=1 + - ghc=8.10.2 benchmarks=1 tests=1 + - ghc=9.0.1 + +matrix: + allow_failures: + - ghc=9.0.1 services: - postgresql From 2de0bf4ddb60e968404b1f720686484524599a67 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 15:36:30 +0300 Subject: [PATCH 0646/1204] Update bytestring --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 07eed3c4e1..f63d6ce06c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -56,7 +56,7 @@ library build-depends: attoparsec >=0.10 && <0.15, base >=4.11 && <5, - bytestring >=0.10 && <0.11, + bytestring >=0.10 && <0.12, bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, From 3941628285eac2de8674fe491a5ccd12e5b4b7e8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 16:16:06 +0300 Subject: [PATCH 0647/1204] Fix the benchmarks --- benchmarks/Main.hs | 9 ++++----- hasql.cabal | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 4f73f62cb7..a2743a25e2 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -1,9 +1,8 @@ module Main where import Prelude -import Bug -import Criterion -import Criterion.Main +import Gauge +import Gauge.Main import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Statement as C @@ -41,7 +40,7 @@ main = sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () sessionWithManySmallParameters = - $(todo "sessionWithManySmallParameters") + error "TODO: sessionWithManySmallParameters" sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = @@ -65,7 +64,7 @@ sessionWithManySmallResults = statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () statementWithManyParameters = - $(todo "statementWithManyParameters") + error "TODO: statementWithManyParameters" statementWithSingleRow :: C.Statement () (Int64, Int64) statementWithSingleRow = diff --git a/hasql.cabal b/hasql.cabal index f63d6ce06c..dc58bba1aa 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -123,7 +123,7 @@ benchmark benchmarks -rtsopts -funbox-strict-fields build-depends: - criterion >=1.1 && <2, + gauge >=0.2.5 && <0.3, hasql, rerebase <2 From 8819697474b9cc37b26614eec5a2a0b77f53e2e6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Mar 2021 16:32:54 +0300 Subject: [PATCH 0648/1204] Update travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9d7e2a66d0..0866e9a10b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ env: matrix: allow_failures: - - ghc=9.0.1 + - env: ghc=9.0.1 services: - postgresql From d7fa056e041b836f53aa44c0895eaf518e18cea3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 10:15:14 +0300 Subject: [PATCH 0649/1204] Allow dlist 0.8 Due to https://github.com/commercialhaskell/stackage/issues/5961 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index dc58bba1aa..b2504e4af4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -60,7 +60,7 @@ library bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, contravariant-extras ==0.3.*, - dlist >=1 && <2, + dlist ==0.8.* || >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, mtl >=2 && <3, From 39abdd9a02fd2bf917371b371f93f3e6ed491419 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 10:24:12 +0300 Subject: [PATCH 0650/1204] Enforce Value decoder's result to have a representational role Fixes #137 --- .travis.yml | 1 - hasql.cabal | 14 +++++++------- library/Hasql/Private/Decoders.hs | 4 +++- library/Hasql/Private/Decoders/Value.hs | 10 ++++------ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0866e9a10b..6c4882d893 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ if: tag IS blank env: - - ghc=8.4.2 - ghc=8.6.1 - ghc=8.8.1 - ghc=8.10.2 benchmarks=1 tests=1 diff --git a/hasql.cabal b/hasql.cabal index b2504e4af4..5246aa02a8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -24,7 +24,7 @@ source-repository head library hs-source-dirs: library - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 exposed-modules: Hasql.Decoders @@ -55,7 +55,7 @@ library Hasql.Private.Encoders.Params build-depends: attoparsec >=0.10 && <0.15, - base >=4.11 && <5, + base >=4.12 && <5, bytestring >=0.10 && <0.12, bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, @@ -64,7 +64,7 @@ library hashable >=1.2 && <2, hashtables >=1.1 && <2, mtl >=2 && <3, - postgresql-binary >=0.12.3 && <0.13, + postgresql-binary >=0.12.4 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, text >=1 && <2, @@ -76,7 +76,7 @@ test-suite tasty type: exitcode-stdio-1.0 hs-source-dirs: tasty main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: Main.DSL @@ -97,7 +97,7 @@ test-suite threads-test hs-source-dirs: threads-test main-is: Main.hs default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: @@ -114,7 +114,7 @@ benchmark benchmarks type: exitcode-stdio-1.0 hs-source-dirs: benchmarks main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 ghc-options: -O2 @@ -131,7 +131,7 @@ test-suite profiling type: exitcode-stdio-1.0 hs-source-dirs: profiling main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples + default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 ghc-options: -O2 diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index bd3daf2389..ff88a25740 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -157,6 +157,8 @@ Decoder of a value. newtype Value a = Value (Value.Value a) deriving (Functor) +type role Value representational + {-| Decoder of the @BOOL@ values. -} @@ -339,7 +341,7 @@ Refine a value decoder, lifting the possible error to the session level. -} {-# INLINABLE refine #-} refine :: (a -> Either Text b) -> Value a -> Value b -refine fn (Value v) = Value (Value.Value (ask >>= \b -> lift (A.refine fn (Value.run v b)))) +refine fn (Value v) = Value (Value.Value (\b -> A.refine fn (Value.run v b))) {-| A generic decoder of @HSTORE@ values. diff --git a/library/Hasql/Private/Decoders/Value.hs b/library/Hasql/Private/Decoders/Value.hs index 351d0804f1..2b8e1f98c8 100644 --- a/library/Hasql/Private/Decoders/Value.hs +++ b/library/Hasql/Private/Decoders/Value.hs @@ -5,23 +5,21 @@ import qualified PostgreSQL.Binary.Decoding as A newtype Value a = - Value (ReaderT Bool A.Value a) + Value (Bool -> A.Value a) deriving (Functor) - {-# INLINE run #-} run :: Value a -> Bool -> A.Value a run (Value imp) integerDatetimes = - runReaderT imp integerDatetimes + imp integerDatetimes {-# INLINE decoder #-} decoder :: (Bool -> A.Value a) -> Value a decoder = {-# SCC "decoder" #-} - Value . ReaderT + Value {-# INLINE decoderFn #-} decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a decoderFn fn = - Value $ ReaderT $ \integerDatetimes -> A.fn $ fn integerDatetimes - + Value $ \integerDatetimes -> A.fn $ fn integerDatetimes From 1f85017a4ea0f7f2200efdefe3d82f5117402304 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 10:26:27 +0300 Subject: [PATCH 0651/1204] Bump the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 5246aa02a8..58ccdb352e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.4.3 +version: 1.4.5 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 8f51c36dfce1ce1315f106335821e02e6c7d476c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 16:38:39 +0300 Subject: [PATCH 0652/1204] Ditch a redundant dep --- hasql.cabal | 1 - library/Hasql/Private/Prelude.hs | 4 ---- 2 files changed, 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 58ccdb352e..c9f9a8586d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -59,7 +59,6 @@ library bytestring >=0.10 && <0.12, bytestring-strict-builder >=0.4.5.1 && <0.5, contravariant >=1.3 && <2, - contravariant-extras ==0.3.*, dlist ==0.8.* || >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 10c0df257a..0daf34a1e7 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -109,10 +109,6 @@ import Data.Profunctor.Unsafe as Exports ------------------------- import Data.Functor.Contravariant.Divisible as Exports --- contravariant-extras -------------------------- -import Contravariant.Extras as Exports - -- hashable ------------------------- import Data.Hashable as Exports (Hashable(..)) From fb5b48c46abdb99fee516f3a79bdab53eaa019f0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 16:41:07 +0300 Subject: [PATCH 0653/1204] Make the tests compatible with the rerebase 1.11 --- hasql.cabal | 3 ++- tasty/Main.hs | 1 + threads-test/Main.hs | 2 +- threads-test/Main/Statements.hs | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index c9f9a8586d..af519c829c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -83,6 +83,7 @@ test-suite tasty Main.Statements Main.Prelude build-depends: + contravariant-extras >=0.3.5.2 && <0.4, hasql, QuickCheck >=2.8.1 && <3, quickcheck-instances >=0.3.11 && <0.4, @@ -107,7 +108,7 @@ test-suite threads-test "-with-rtsopts=-N" build-depends: hasql, - rebase + rerebase benchmark benchmarks type: exitcode-stdio-1.0 diff --git a/tasty/Main.hs b/tasty/Main.hs index c7772ca297..92ee9d362d 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -6,6 +6,7 @@ import Test.Tasty import Test.Tasty.Runners import Test.Tasty.HUnit import Test.Tasty.QuickCheck +import Contravariant.Extras import qualified Test.QuickCheck as QuickCheck import qualified Main.Statements as Statements import qualified Main.DSL as DSL diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 044719559e..4be6230e20 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -1,6 +1,6 @@ module Main where -import Rebase.Prelude +import Prelude import qualified Hasql.Connection import qualified Hasql.Statement import qualified Hasql.Encoders diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index a2f53d522a..d64a0c08c9 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -1,6 +1,6 @@ module Main.Statements where -import Rebase.Prelude +import Prelude import Hasql.Statement import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D From 7a53a069605d951f07c516553d0933b5adc48b00 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 16:41:25 +0300 Subject: [PATCH 0654/1204] Bump the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index af519c829c..ed6b528ac7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.5 +version: 1.4.5.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 2e87ddc2b279ff7a54779e69230296b7a1119004 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Wed, 24 Mar 2021 22:18:27 +0800 Subject: [PATCH 0655/1204] Fix compatibility with rebase 1.11 --- conflicts-test/Main/Statements.hs | 1 + hasql-transaction.cabal | 1 + 2 files changed, 2 insertions(+) diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index 8604d29573..63f8b361f9 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,6 +1,7 @@ module Main.Statements where import Rebase.Prelude +import Contravariant.Extras import Hasql.Statement import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index df51e4c686..4c690c3c7e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -54,6 +54,7 @@ test-suite conflicts-test -threaded "-with-rtsopts=-N" build-depends: + contravariant-extras >=0.3 && <0.4, hasql-transaction, hasql, async >=2.1 && <3, From 608d78eea46f8a90f9b2792f7cf5da3f5950003c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 19:24:11 +0300 Subject: [PATCH 0656/1204] Update the deps --- .travis.yml | 26 ++++++++++++++------------ conflicts-test/Main.hs | 2 +- conflicts-test/Main/Statements.hs | 2 +- conflicts-test/Main/Transactions.hs | 2 +- hasql-transaction.cabal | 14 +++++++------- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index b241e37130..6c4882d893 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,21 @@ if: tag IS blank env: - - ghc=8.0.2 - - ghc=8.2.2 - - ghc=8.4.2 - - ghc=8.6.5 - - ghc=8.8.1 benchmarks=1 tests=1 + - ghc=8.6.1 + - ghc=8.8.1 + - ghc=8.10.2 benchmarks=1 tests=1 + - ghc=9.0.1 + +matrix: + allow_failures: + - env: ghc=9.0.1 services: - postgresql install: # Set up the Shell to treat the semicolon as && - - set -o pipefail && set -e + - set -eo pipefail # Install GHC and Cabal - cabal=${cabal=2.4}; @@ -37,23 +40,22 @@ install: ); fi; # Install the library dependencies - - cabal install --only-dependencies --reorder-goals --force-reinstalls + - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls ${constraint_options[@]} $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") # Build the library - - cabal build + - cabal v1-build # Configure and build the remaining stuff - - cabal configure + - cabal v1-configure $([ "$tests" = "1" ] && echo "--enable-tests") $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") -f doctest - - cabal build + - cabal v1-build script: - | if [ "$tests" = "1" ]; then - cabal clean; - cabal test --show-details=always; + cabal v1-test --show-details=always; fi; diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 7e2837e3f3..4ac6101d91 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -1,6 +1,6 @@ module Main where -import Rebase.Prelude +import Prelude import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Transaction as C diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index 63f8b361f9..406675cb27 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,6 +1,6 @@ module Main.Statements where -import Rebase.Prelude +import Prelude import Contravariant.Extras import Hasql.Statement import qualified Hasql.Encoders as E diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index 3cc1d1c4f1..b58ada3999 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -1,6 +1,6 @@ module Main.Transactions where -import Rebase.Prelude +import Prelude import Hasql.Transaction import qualified Main.Statements as A diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 4c690c3c7e..8084f33b9f 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -31,14 +31,14 @@ library Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Transaction build-depends: - base >=4.9 && <5, - bytestring >=0.10 && <0.11, - bytestring-tree-builder >=0.1 && <0.3, + base >=4.12 && <5, + bytestring >=0.10 && <0.12, + bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, - hasql >=1.4 && <1.5, - mtl >=2 && <3, - transformers >=0.3 && <0.6 + hasql >=1.4.5 && <1.5, + mtl >=2.2 && <3, + transformers >=0.5 && <0.6 test-suite conflicts-test type: exitcode-stdio-1.0 @@ -58,4 +58,4 @@ test-suite conflicts-test hasql-transaction, hasql, async >=2.1 && <3, - rebase <2 + rerebase >=1.11 && <2 From b0a4354f0e5b4d9213ec6acc804517d7924b8d80 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 24 Mar 2021 19:24:40 +0300 Subject: [PATCH 0657/1204] Bump the version --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 8084f33b9f..67ccd79c79 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.0.1 +version: 1.0.0.2 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From 018edb9dffd63c8f31d676cf21ff75c81e8d8cc5 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 26 Mar 2021 21:47:13 -0400 Subject: [PATCH 0658/1204] upgrade stackage version --- src/Hasql/Notifications.hs | 18 +++++++++--------- stack.yaml | 2 +- stack.yaml.lock | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index ee77823451..383f7ca601 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -33,8 +33,8 @@ import Control.Monad (void, forever) import Control.Concurrent (threadWaitRead) import Control.Exception (Exception, throw) --- | A wrapped bytestring that represents a properly escaped and quoted PostgreSQL identifier -newtype PgIdentifier = PgIdentifier ByteString deriving (Show) +-- | A wrapped text that represents a properly escaped and quoted PostgreSQL identifier +newtype PgIdentifier = PgIdentifier Text deriving (Show) -- | Uncatchable exceptions thrown and never caught. newtype FatalError = FatalError { fatalErrorMessage :: String } @@ -42,14 +42,14 @@ newtype FatalError = FatalError { fatalErrorMessage :: String } instance Exception FatalError --- | Given a PgIdentifier returns the wrapped bytestring -fromPgIdentifier :: PgIdentifier -> ByteString +-- | Given a PgIdentifier returns the wrapped text +fromPgIdentifier :: PgIdentifier -> Text fromPgIdentifier (PgIdentifier bs) = bs --- | Given a bytestring returns a properly quoted and escaped PgIdentifier +-- | Given a text returns a properly quoted and escaped PgIdentifier toPgIdentifier :: Text -> PgIdentifier toPgIdentifier x = - PgIdentifier $ "\"" <> T.encodeUtf8 (strictlyReplaceQuotes x) <> "\"" + PgIdentifier $ "\"" <> strictlyReplaceQuotes x <> "\"" where strictlyReplaceQuotes :: Text -> Text strictlyReplaceQuotes = T.replace "\"" ("\"\"" :: Text) @@ -71,7 +71,7 @@ notify :: Connection -- ^ Connection to be used to send the NOTIFY command -> Text -- ^ Payload to be sent with the notification -> IO (Either S.QueryError ()) notify con channel mesg = - run (sql ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> T.encodeUtf8 mesg <> "'")) con + run (sql $ T.encodeUtf8 ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> mesg <> "'")) con {-| Given a Hasql Connection and a channel sends a listen command to the database. @@ -103,7 +103,7 @@ listen :: Connection -- ^ Connection to be used to send the LISTEN command listen con channel = void $ withLibPQConnection con execListen where - execListen pqCon = void $ PQ.exec pqCon $ "LISTEN " <> fromPgIdentifier channel + execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel -- | Given a Hasql Connection and a channel sends a unlisten command to the database unlisten :: Connection -- ^ Connection currently registerd by a previous 'listen' call @@ -112,7 +112,7 @@ unlisten :: Connection -- ^ Connection currently registerd by a previous 'listen unlisten con channel = void $ withLibPQConnection con execListen where - execListen pqCon = void $ PQ.exec pqCon $ "UNLISTEN " <> fromPgIdentifier channel + execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel {-| diff --git a/stack.yaml b/stack.yaml index af3517453d..6f10d3434d 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-14.27 +resolver: lts-17.7 packages: - . diff --git a/stack.yaml.lock b/stack.yaml.lock index e24dcac6b1..d4d1cc5296 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -6,7 +6,7 @@ packages: [] snapshots: - completed: - size: 524996 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/14/27.yaml - sha256: 7ea31a280c56bf36ff591a7397cc384d0dff622e7f9e4225b47d8980f019a0f0 - original: lts-14.27 + size: 565715 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/7.yaml + sha256: 1b5e4124989399e60e7a7901f0cefd910beea546131fb07a13a7208c4cc8b7ee + original: lts-17.7 From ebfee454fd0338e4ce5ac6ee8543e4b32f9ced83 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 26 Mar 2021 21:47:44 -0400 Subject: [PATCH 0659/1204] Replace Circle config with github actions --- .circleci/build.sh | 2 -- .circleci/config.yml | 49 --------------------------------- .circleci/lint.sh | 2 -- .circleci/setupenv.sh | 3 -- .circleci/test.sh | 2 -- .github/workflows/ci.yml | 59 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 59 insertions(+), 58 deletions(-) delete mode 100755 .circleci/build.sh delete mode 100644 .circleci/config.yml delete mode 100755 .circleci/lint.sh delete mode 100755 .circleci/setupenv.sh delete mode 100755 .circleci/test.sh create mode 100644 .github/workflows/ci.yml diff --git a/.circleci/build.sh b/.circleci/build.sh deleted file mode 100755 index 575e340fa0..0000000000 --- a/.circleci/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -stack --stack-yaml=stack.yaml build --no-terminal --system-ghc diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index db13150afc..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: 2 -jobs: - build: - docker: - - image: fpco/stack-build:lts-14.27 - environment: - PGHOST: 127.0.0.1 - PGUSER: root - - - image: postgres:12-alpine - environment: - POSTGRES_DB: hasql_notifications_test - POSTGRES_USER: root - POSTGRES_HOST_AUTH_METHOD: trust - - working_directory: /home/stackage/project - - environment: - TEST_RESULTS: /tmp/test-results - - steps: - - checkout - - restore_cache: - key: stack-hasql-notifications-{{ checksum "stack.yaml" }} - - restore_cache: - key: stack-hasql-notifications-final-{{ checksum "stack.yaml" }} - - run: .circleci/setupenv.sh - - run: stack build --only-dependencies -j1 - - save_cache: - key: stack-hasql-notifications-{{ checksum "stack.yaml" }} - paths: - - ~/.stack - - .stack-work - - ~/.local - - run: .circleci/build.sh - - run: .circleci/test.sh - - save_cache: - key: stack-hasql-notifications-final-{{ checksum "stack.yaml" }} - paths: - - ~/.stack - - .stack-work - - ~/.local - - run: .circleci/lint.sh - -workflows: - version: 2 - build-and-deploy: - jobs: - - build diff --git a/.circleci/lint.sh b/.circleci/lint.sh deleted file mode 100755 index 8f1d2e493c..0000000000 --- a/.circleci/lint.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -git ls-files . | grep -e '.*\.hs' | grep -v -e "test" | xargs hlint "$@" diff --git a/.circleci/setupenv.sh b/.circleci/setupenv.sh deleted file mode 100755 index dc46338d97..0000000000 --- a/.circleci/setupenv.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -apt -y update -apt -y install hlint postgresql-client diff --git a/.circleci/test.sh b/.circleci/test.sh deleted file mode 100755 index 3093e9b5a3..0000000000 --- a/.circleci/test.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -stack test --no-terminal --system-ghc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..72abb77a4b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,59 @@ +name: CI + +# Trigger the workflow on push or pull request, but only for the main branch +on: + pull_request: + push: + branches: [main] + +jobs: + stack: + name: stack / ${{ matrix.os }} / ghc ${{ matrix.ghc }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + stack: ["2.5.1"] + ghc: ["8.10.4"] + + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: roottoor + POSTGRES_USER: postgres + POSTGRES_DB: hasql_notifications_test + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v2 + if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' + + - uses: haskell/actions/setup@v1 + name: Setup Haskell Stack + with: + ghc-version: ${{ matrix.ghc }} + stack-version: ${{ matrix.stack }} + + - uses: actions/cache@v2.1.3 + name: Cache ~/.stack + with: + path: ~/.stack + key: ${{ matrix.os }}-${{ matrix.ghc }}-stack-v3 + + - name: Build Dependencies + run: | + stack build --system-ghc --test --no-run-tests --only-dependencies + + - name: Build + run: | + stack build --system-ghc --test --no-run-tests + + # - name: Test + # run: | + # stack test --system-ghc From 62992e974aad524049ced05a1481992a2b94d535 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 26 Mar 2021 22:20:24 -0400 Subject: [PATCH 0660/1204] Add user and password to connection string in tests so we can connect to the CI database --- test/Hasql/NotificationsSpec.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Hasql/NotificationsSpec.hs b/test/Hasql/NotificationsSpec.hs index 91a57da8cf..113fe32324 100644 --- a/test/Hasql/NotificationsSpec.hs +++ b/test/Hasql/NotificationsSpec.hs @@ -22,7 +22,7 @@ spec = do describe "send and receive notification" $ describe "when I send a notification to channel my handler is listening to" $ it "should call our notification handler" $ do - dbOrError <- acquire "postgres://localhost/hasql_notifications_test" + dbOrError <- acquire "postgres://postgres:roottoor@localhost/hasql_notifications_test" case dbOrError of Right db -> do let channelToListen = toPgIdentifier "test-channel" From 00b3ac2bd531e2af2b8f35efe5c415fe5251559d Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 26 Mar 2021 22:29:30 -0400 Subject: [PATCH 0661/1204] Bump major version number since we are changing the interface of toPgIdentifier --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index a48c074bc3..64b6a8e1eb 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.1.0.0 +version: 0.2.0.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From b34b60971b7bdb00807fea0954fdf92b4e5aa4df Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 26 Mar 2021 22:31:03 -0400 Subject: [PATCH 0662/1204] Change README badge to use Github action --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 16fac2ec8c..7e2f69d24c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # hasql-notifications -[![CircleCI](https://circleci.com/gh/diogob/hasql-notifications.svg?style=svg)](https://circleci.com/gh/diogob/hasql-notifications) [![Hackage Matrix CI](https://matrix.hackage.haskell.org/api/v2/packages/postgres-websockets/badge)](https://matrix.hackage.haskell.org/package/postgres-websockets) +![CI](https://github.com/diogob/hasql-notifications/actions/workflows/ci.yml/badge.svg) +[![Hackage Matrix CI](https://matrix.hackage.haskell.org/api/v2/packages/postgres-websockets/badge)](https://matrix.hackage.haskell.org/package/postgres-websockets) See documentation for the module [Hasql.Notifications](https://hackage.haskell.org/package/hasql-notifications/docs/Hasql-Notifications.html) on the [Hackage page](https://hackage.haskell.org/package/hasql-notifications). From 6f3bf9f5fa30cf20440d3b297e3c95b91325537f Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 27 Mar 2021 11:15:22 -0400 Subject: [PATCH 0663/1204] Prune unused dependency contravariant --- hasql-notifications.cabal | 1 - 1 file changed, 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 64b6a8e1eb..1aa7fc3a49 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -23,7 +23,6 @@ library , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 - , contravariant >= 1.5.2 && < 1.6 default-language: Haskell2010 ghc-options: -Wall From c18d58a0c844282601e4c17b9f237de62cef2e7a Mon Sep 17 00:00:00 2001 From: Laurence Isla Date: Fri, 2 Jul 2021 19:39:59 -0500 Subject: [PATCH 0664/1204] Add function to execute transactions with optional prepared statements on tcl commands --- library/Hasql/Transaction/Private/Sessions.hs | 22 +++++++++---------- .../Hasql/Transaction/Private/Statements.hs | 18 +++++++-------- .../Hasql/Transaction/Private/Transaction.hs | 6 ++--- library/Hasql/Transaction/Sessions.hs | 14 +++++++++++- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 3a9fcc5d12..619ada03fe 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -12,31 +12,31 @@ We may want to do one transaction retry in case of the 23505 error, and fail if an identical error is seen. -} -inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session a -inRetryingTransaction level mode session = +inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session a +inRetryingTransaction level mode session preparable = fix $ \ retry -> do - attemptRes <- tryTransaction level mode session + attemptRes <- tryTransaction level mode session preparable case attemptRes of Just a -> return a Nothing -> retry -tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session (Maybe a) -tryTransaction level mode body = do +tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session (Maybe a) +tryTransaction level mode body preparable = do - statement () (Statements.beginTransaction level mode) + statement () (Statements.beginTransaction level mode preparable) bodyRes <- catchError (fmap Just body) $ \ error -> do - statement () Statements.abortTransaction + statement () (Statements.abortTransaction preparable) handleTransactionError error $ return Nothing case bodyRes of - Just (res, commit) -> catchError (commitOrAbort commit $> Just res) $ \ error -> do + Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \ error -> do handleTransactionError error $ return Nothing Nothing -> return Nothing -commitOrAbort commit = if commit - then statement () Statements.commitTransaction - else statement () Statements.abortTransaction +commitOrAbort commit preparable = if commit + then statement () (Statements.commitTransaction preparable) + else statement () (Statements.abortTransaction preparable) handleTransactionError error onTransactionError = case error of QueryError _ _ (ResultError (ServerError "40001" _ _ _)) -> onTransactionError diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 40492e0f93..234562999e 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -12,17 +12,17 @@ import qualified Hasql.Transaction.Private.SQL as D -- * Transactions ------------------------- -beginTransaction :: IsolationLevel -> Mode -> A.Statement () () -beginTransaction isolation mode = - A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult True +beginTransaction :: IsolationLevel -> Mode -> Bool -> A.Statement () () +beginTransaction isolation mode preparable = + A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult preparable -commitTransaction :: A.Statement () () -commitTransaction = - A.Statement "COMMIT" B.noParams C.noResult True +commitTransaction :: Bool -> A.Statement () () +commitTransaction preparable = + A.Statement "COMMIT" B.noParams C.noResult preparable -abortTransaction :: A.Statement () () -abortTransaction = - A.Statement "ABORT" B.noParams C.noResult True +abortTransaction :: Bool -> A.Statement () () +abortTransaction preparable = + A.Statement "ABORT" B.noParams C.noResult preparable -- * Streaming diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 2bfddc8559..672a7e6d82 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -29,9 +29,9 @@ instance Monoid a => Monoid (Transaction a) where -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> B.Session a -run (Transaction session) isolation mode = - D.inRetryingTransaction isolation mode (runStateT session True) +run :: Transaction a -> IsolationLevel -> Mode -> Bool -> B.Session a +run (Transaction session) isolation mode preparable = + D.inRetryingTransaction isolation mode (runStateT session True) preparable -- | -- Possibly a multi-statement query, diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 2f96f572a8..797a47173b 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,12 +1,14 @@ module Hasql.Transaction.Sessions ( transaction, + transactionPreparable, -- * Transaction settings C.Mode(..), C.IsolationLevel(..), ) where +import Data.Bool import qualified Hasql.Transaction.Private.Transaction as A import qualified Hasql.Session as B import qualified Hasql.Transaction.Private.Model as C @@ -17,4 +19,14 @@ import qualified Hasql.Transaction.Private.Model as C {-# INLINE transaction #-} transaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a transaction isolation mode transaction = - A.run transaction isolation mode + A.run transaction isolation mode True + +-- | +-- Execute the transaction using the provided isolation level and mode, +-- and specifying if the BEGIN, COMMIT and ABORT statements should be prepared or not. +-- +-- Helps with transaction pooling due to its incompatibility with prepared statements. +{-# INLINE transactionPreparable #-} +transactionPreparable :: C.IsolationLevel -> C.Mode -> A.Transaction a -> Bool -> B.Session a +transactionPreparable isolation mode transaction preparable = + A.run transaction isolation mode preparable \ No newline at end of file From 1a85bdc09988dc2f1128e938c0fc678de77b16d8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Jul 2021 19:52:34 +0300 Subject: [PATCH 0665/1204] Rename and remove the parameter of unpreparedTransaction --- library/Hasql/Transaction/Sessions.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 797a47173b..0cde4f28af 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,7 +1,7 @@ module Hasql.Transaction.Sessions ( transaction, - transactionPreparable, + unpreparedTransaction, -- * Transaction settings C.Mode(..), C.IsolationLevel(..), @@ -23,10 +23,10 @@ transaction isolation mode transaction = -- | -- Execute the transaction using the provided isolation level and mode, --- and specifying if the BEGIN, COMMIT and ABORT statements should be prepared or not. +-- and specifying that the generated BEGIN, COMMIT and ABORT statements should not be prepared. -- -- Helps with transaction pooling due to its incompatibility with prepared statements. -{-# INLINE transactionPreparable #-} -transactionPreparable :: C.IsolationLevel -> C.Mode -> A.Transaction a -> Bool -> B.Session a -transactionPreparable isolation mode transaction preparable = - A.run transaction isolation mode preparable \ No newline at end of file +{-# INLINE unpreparedTransaction #-} +unpreparedTransaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a +unpreparedTransaction isolation mode transaction = + A.run transaction isolation mode False \ No newline at end of file From 9a492dddebe167094c7902ca4b45268eed8b7ddc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 Jul 2021 19:52:53 +0300 Subject: [PATCH 0666/1204] Bump the version --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 67ccd79c79..ee2236080e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.0.2 +version: 1.0.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From f3cc8542ca5c3fc673fffaacb1c8307a1adc50de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 Sep 2021 10:56:29 +0300 Subject: [PATCH 0667/1204] Fix the strictness of the foldl decoder (#140) --- library/Hasql/Private/Decoders/Result.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 12d53de179..475bca7425 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -164,7 +164,7 @@ foldl step init rowDec = rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) - Right !x -> modifyIORef accRef (\acc -> step acc x) + Right !x -> modifyIORef' accRef (\acc -> step acc x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef Just x -> pure (Left x) From c9baa431371b85ec9ce8ecc869a04a0363784773 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 17 Sep 2021 10:56:52 +0300 Subject: [PATCH 0668/1204] Bump the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index ed6b528ac7..667d4dc122 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.5.1 +version: 1.4.5.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 623a1ccf3b24704ec459d8d816b6ed69e21656e9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Oct 2021 04:09:06 +0300 Subject: [PATCH 0669/1204] Correct a doc --- library/Hasql/Private/Decoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index ff88a25740..15b89543cd 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -116,7 +116,7 @@ newtype Row a = Row (Row.Row a) deriving (Functor, Applicative, Monad, MonadFail) {-| -Lift an individual non-nullable value decoder to a composable row decoder. +Lift an individual value decoder to a composable row decoder. -} {-# INLINABLE column #-} column :: NullableOrNot Value a -> Row a From d9bf8c8cea56bc7288e506374b364ab2871e3288 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 22 Oct 2021 04:13:52 +0300 Subject: [PATCH 0670/1204] Migrate to new text-builder --- hasql.cabal | 2 +- library/Hasql/Private/Encoders.hs | 2 +- library/Hasql/Private/Encoders/Array.hs | 8 ++++---- library/Hasql/Private/Encoders/Params.hs | 4 ++-- library/Hasql/Private/Encoders/Value.hs | 6 +++--- stack.yaml | 4 ++++ 6 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 stack.yaml diff --git a/hasql.cabal b/hasql.cabal index 667d4dc122..25881efee2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -67,7 +67,7 @@ library postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, text >=1 && <2, - text-builder >=0.6.1.2 && <0.7, + text-builder >=0.7 && <0.8, transformers >=0.3 && <0.6, vector >=0.10 && <0.13 diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index e61849c425..20f5030f32 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -7,7 +7,7 @@ where import Hasql.Private.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoding as A import qualified PostgreSQL.Binary.Data as B -import qualified Text.Builder as C +import qualified TextBuilder as C import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.Encoders.Array as Array diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index b8a3ea1928..bdc1878613 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -3,23 +3,23 @@ module Hasql.Private.Encoders.Array where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Hasql.Private.PTI as B -import qualified Text.Builder as C +import qualified TextBuilder as C data Array a = - Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) + Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.TextBuilder) instance Contravariant Array where contramap fn (Array valueOid arrayOid encoder renderer) = Array valueOid arrayOid (\ intDateTimes -> encoder intDateTimes . fn) (renderer . fn) {-# INLINE value #-} -value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a +value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array a value valueOID arrayOID encoder = Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} -nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array (Maybe a) +nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array (Maybe a) nullableValue valueOID arrayOID encoder renderer = let maybeEncoder params = diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index fcc61f8797..408e5d96ca 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -5,7 +5,7 @@ import qualified Database.PostgreSQL.LibPQ as A import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.Encoders.Value as C import qualified Hasql.Private.PTI as D -import qualified Text.Builder as E +import qualified TextBuilder as E -- | @@ -27,5 +27,5 @@ nullableValue (C.Value valueOID arrayOID encode render) = encoder env = fmap (B.encodingBytes . encode env) input rendering = - maybe "null" (E.run . render) input + maybe "null" (E.buildText . render) input in pure (pqOid, format, encoder, rendering) diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index ee9b2a93a7..1051a903ca 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -3,11 +3,11 @@ module Hasql.Private.Encoders.Value where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.PTI as PTI -import qualified Text.Builder as C +import qualified TextBuilder as C data Value a = - Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) + Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.TextBuilder) instance Contravariant Value where {-# INLINE contramap #-} @@ -15,7 +15,7 @@ instance Contravariant Value where Value valueOID arrayOID (\integerDatetimes input -> encode integerDatetimes (f input)) (render . f) {-# INLINE unsafePTI #-} -unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.Builder) -> Value a +unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.TextBuilder) -> Value a unsafePTI pti = Value (PTI.ptiOID pti) (fromMaybe (error "No array OID") (PTI.ptiArrayOID pti)) diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..abdd685a67 --- /dev/null +++ b/stack.yaml @@ -0,0 +1,4 @@ +resolver: nightly-2021-10-18 +extra-deps: + - git: https://github.com/nikita-volkov/text-builder + commit: c13872edc976fac70231af5cc3bd13763c001f20 From 0a1eef918c46247cd739d6d1f3076113cbefc85e Mon Sep 17 00:00:00 2001 From: Viktor Dukhovni Date: Mon, 1 Nov 2021 20:07:33 +0000 Subject: [PATCH 0671/1204] Deal with removed deprecated ByteString modules The ByteString 0.11 package included with GHC 9.2 droppped a few long deprecated modules and functions. --- library/Hasql/Private/Commands.hs | 3 +-- library/Hasql/Private/Settings.hs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Private/Commands.hs b/library/Hasql/Private/Commands.hs index 9fd393a4e5..ef3a34dc38 100644 --- a/library/Hasql/Private/Commands.hs +++ b/library/Hasql/Private/Commands.hs @@ -9,8 +9,7 @@ where import Hasql.Private.Prelude import qualified Data.ByteString as B -import qualified Data.ByteString.Lazy.Builder as BB -import qualified Data.ByteString.Lazy.Builder.ASCII as BB +import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL diff --git a/library/Hasql/Private/Settings.hs b/library/Hasql/Private/Settings.hs index 80c1cf620d..f960e211af 100644 --- a/library/Hasql/Private/Settings.hs +++ b/library/Hasql/Private/Settings.hs @@ -2,8 +2,7 @@ module Hasql.Private.Settings where import Hasql.Private.Prelude import qualified Data.ByteString as B -import qualified Data.ByteString.Lazy.Builder as BB -import qualified Data.ByteString.Lazy.Builder.ASCII as BB +import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL From 7f1c0cfb9b0e00f7b8af36bf4fe88519a2b6e69b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 2 Nov 2021 10:26:35 +0300 Subject: [PATCH 0672/1204] Revert "Migrate to new text-builder" This reverts commit d9bf8c8cea56bc7288e506374b364ab2871e3288. --- hasql.cabal | 2 +- library/Hasql/Private/Encoders.hs | 2 +- library/Hasql/Private/Encoders/Array.hs | 8 ++++---- library/Hasql/Private/Encoders/Params.hs | 4 ++-- library/Hasql/Private/Encoders/Value.hs | 6 +++--- stack.yaml | 4 ---- 6 files changed, 11 insertions(+), 15 deletions(-) delete mode 100644 stack.yaml diff --git a/hasql.cabal b/hasql.cabal index 25881efee2..667d4dc122 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -67,7 +67,7 @@ library postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, text >=1 && <2, - text-builder >=0.7 && <0.8, + text-builder >=0.6.1.2 && <0.7, transformers >=0.3 && <0.6, vector >=0.10 && <0.13 diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 20f5030f32..e61849c425 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -7,7 +7,7 @@ where import Hasql.Private.Prelude hiding (bool) import qualified PostgreSQL.Binary.Encoding as A import qualified PostgreSQL.Binary.Data as B -import qualified TextBuilder as C +import qualified Text.Builder as C import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.Encoders.Array as Array diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index bdc1878613..b8a3ea1928 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -3,23 +3,23 @@ module Hasql.Private.Encoders.Array where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Hasql.Private.PTI as B -import qualified TextBuilder as C +import qualified Text.Builder as C data Array a = - Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.TextBuilder) + Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) instance Contravariant Array where contramap fn (Array valueOid arrayOid encoder renderer) = Array valueOid arrayOid (\ intDateTimes -> encoder intDateTimes . fn) (renderer . fn) {-# INLINE value #-} -value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array a +value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a value valueOID arrayOID encoder = Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} -nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array (Maybe a) +nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array (Maybe a) nullableValue valueOID arrayOID encoder renderer = let maybeEncoder params = diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index 408e5d96ca..fcc61f8797 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -5,7 +5,7 @@ import qualified Database.PostgreSQL.LibPQ as A import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.Encoders.Value as C import qualified Hasql.Private.PTI as D -import qualified TextBuilder as E +import qualified Text.Builder as E -- | @@ -27,5 +27,5 @@ nullableValue (C.Value valueOID arrayOID encode render) = encoder env = fmap (B.encodingBytes . encode env) input rendering = - maybe "null" (E.buildText . render) input + maybe "null" (E.run . render) input in pure (pqOid, format, encoder, rendering) diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index 1051a903ca..ee9b2a93a7 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -3,11 +3,11 @@ module Hasql.Private.Encoders.Value where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.PTI as PTI -import qualified TextBuilder as C +import qualified Text.Builder as C data Value a = - Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.TextBuilder) + Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) instance Contravariant Value where {-# INLINE contramap #-} @@ -15,7 +15,7 @@ instance Contravariant Value where Value valueOID arrayOID (\integerDatetimes input -> encode integerDatetimes (f input)) (render . f) {-# INLINE unsafePTI #-} -unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.TextBuilder) -> Value a +unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.Builder) -> Value a unsafePTI pti = Value (PTI.ptiOID pti) (fromMaybe (error "No array OID") (PTI.ptiArrayOID pti)) diff --git a/stack.yaml b/stack.yaml deleted file mode 100644 index abdd685a67..0000000000 --- a/stack.yaml +++ /dev/null @@ -1,4 +0,0 @@ -resolver: nightly-2021-10-18 -extra-deps: - - git: https://github.com/nikita-volkov/text-builder - commit: c13872edc976fac70231af5cc3bd13763c001f20 From 9931a98a26cb8c3a12fe2c0844d6a480b81d0a14 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 2 Nov 2021 10:27:05 +0300 Subject: [PATCH 0673/1204] Bump the version --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 667d4dc122..910f791233 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.5.2 +version: 1.4.5.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 9d186f5e8c77ccd83e9456d4685d0ca1ee266325 Mon Sep 17 00:00:00 2001 From: guaraqe Date: Sun, 12 Dec 2021 21:02:25 +0500 Subject: [PATCH 0674/1204] Add column index to RowError constructor --- library/Hasql/Private/Decoders/Result.hs | 12 +++++++----- library/Hasql/Private/Decoders/Row.hs | 9 +++++++-- library/Hasql/Private/Errors.hs | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 475bca7425..c75fa343b6 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -93,7 +93,8 @@ maybe rowDec = 0 -> return (Right Nothing) 1 -> do maxCols <- LibPQ.nfields result - fmap (fmap Just . mapLeft (RowError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + let fromRowError (col, err) = RowError 0 col err + fmap (fmap Just . mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -113,7 +114,8 @@ single rowDec = case maxRows of 1 -> do maxCols <- LibPQ.nfields result - fmap (mapLeft (RowError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + let fromRowError (col, err) = RowError 0 col err + fmap (mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -136,7 +138,7 @@ vector rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> MutableVector.unsafeWrite mvector rowIndex x readIORef failureRef >>= \case Nothing -> Right <$> Vector.unsafeFreeze mvector @@ -163,7 +165,7 @@ foldl step init rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> modifyIORef' accRef (\acc -> step acc x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef @@ -190,7 +192,7 @@ foldr step init rowDec = forMToZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !x -> writeIORef failureRef (Just (RowError rowIndex x)) + Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> modifyIORef accRef (\acc -> step x acc) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index f3853a0c55..140a50d1d6 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -22,11 +22,16 @@ data Env = ------------------------- {-# INLINE run #-} -run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either RowError a) +run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either (Int, RowError) a) run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 - runExceptT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) + runExceptT (runReaderT impl (Env result row columnsAmount integerDatetimes columnRef)) >>= \case + Left e -> do + LibPQ.Col col <- readIORef columnRef + -- -1 because succ is applied before the error is returned + pure $ Left (fromIntegral col - 1, e) + Right x -> pure $ Right x {-# INLINE error #-} error :: RowError -> Row a diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 4edd78fb11..470f8d6fa8 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -67,8 +67,8 @@ data ResultError = -- Indicates an improper statement or a schema mismatch. UnexpectedResult Text | -- | - -- An error of the row reader, preceded by the index of the row. - RowError Int RowError | + -- An error of the row reader, preceded by the indexes of the row and column. + RowError Int Int RowError | -- | -- An unexpected amount of rows. UnexpectedAmountOfRows Int From 4ca01dd4113fb8e454e9ed63321c6b5e1eafbe06 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Jan 2022 19:24:28 +0300 Subject: [PATCH 0675/1204] Update stack --- stack.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 stack.yaml diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..3188c65c0e --- /dev/null +++ b/stack.yaml @@ -0,0 +1 @@ +resolver: nightly-2021-11-19 From 128026e416c62ba5c6be9dbb81760b128d63676c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Jan 2022 19:27:38 +0300 Subject: [PATCH 0676/1204] Add MonadReader --- library/Hasql/Private/Prelude.hs | 3 ++- library/Hasql/Private/Session.hs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 0daf34a1e7..a152d963ba 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -91,7 +91,7 @@ import Control.Monad.Trans.Class as Exports import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT, throwE, catchE) import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, ask, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) +import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) import Data.Functor.Compose as Exports @@ -100,6 +100,7 @@ import Data.Functor.Identity as Exports -- mtl ------------------------- import Control.Monad.Error.Class as Exports (MonadError (..)) +import Control.Monad.Reader.Class as Exports (MonadReader (..)) -- profunctors ------------------------- diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index d9dafb2f7c..851fe50ac4 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -18,7 +18,7 @@ import qualified Hasql.Private.Connection as Connection -- A batch of actions to be executed in the context of a database connection. newtype Session a = Session (ReaderT Connection.Connection (ExceptT QueryError IO) a) - deriving (Functor, Applicative, Monad, MonadError QueryError, MonadIO) + deriving (Functor, Applicative, Monad, MonadError QueryError, MonadIO, MonadReader Connection.Connection) -- | -- Executes a bunch of commands on the provided connection. From b59db53aa280ea4d1217f0f8132c89382f133984 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Jan 2022 19:30:36 +0300 Subject: [PATCH 0677/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 910f791233..5265738179 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.4.5.3 +version: 1.5 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 5db8a5c17695206894d5735cd801491ae403d523 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:33:41 +0300 Subject: [PATCH 0678/1204] Allow newer transformers --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 5265738179..8123297123 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -68,7 +68,7 @@ library profunctors >=5.1 && <6, text >=1 && <2, text-builder >=0.6.1.2 && <0.7, - transformers >=0.3 && <0.6, + transformers >=0.3 && <0.7, vector >=0.10 && <0.13 test-suite tasty From 44d2925c7a9bfbad3c8a44e195f2a9f7a2369dc9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:36:39 +0300 Subject: [PATCH 0679/1204] Add changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..ba7a7c73ab --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +# 1.5 + +- Added column number to `RowError` (breaking change). +- Added `MonadReader Connection` instance for Session. From c2f0b406af216a8721415a577120d85405719666 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:37:04 +0300 Subject: [PATCH 0680/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8123297123..2d9be80a60 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5 +version: 1.5.0.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From b581b5a523857ab5ba19479433602bd5d8948243 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:38:38 +0300 Subject: [PATCH 0681/1204] Allow text-2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 2d9be80a60..727bd6392f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -66,7 +66,7 @@ library postgresql-binary >=0.12.4 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, - text >=1 && <2, + text >=1 && <3, text-builder >=0.6.1.2 && <0.7, transformers >=0.3 && <0.7, vector >=0.10 && <0.13 From d4dcb4f62714ca82ff1c77472420f1205bc48340 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:40:55 +0300 Subject: [PATCH 0682/1204] Add changelog and readme to extra-source-files --- hasql.cabal | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hasql.cabal b/hasql.cabal index 727bd6392f..c821a444ee 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -17,6 +17,9 @@ license: MIT license-file: LICENSE build-type: Simple cabal-version: >=1.10 +extra-source-files: + CHANGELOG.md + README.md source-repository head type: git From c19c96ae96d0ed68ce392ec7b31019e9d9c1bdcc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:41:23 +0300 Subject: [PATCH 0683/1204] Update the deps --- hasql-transaction.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ee2236080e..44d2ec5b5a 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -36,9 +36,9 @@ library bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, - hasql >=1.4.5 && <1.5, + hasql >=1.4.5 && <1.6, mtl >=2.2 && <3, - transformers >=0.5 && <0.6 + transformers >=0.5 && <0.7 test-suite conflicts-test type: exitcode-stdio-1.0 From 84f0b50d46e7a678b928b31f807518c4656ae20d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:41:38 +0300 Subject: [PATCH 0684/1204] Bump --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 44d2ec5b5a..b87fa42556 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.1 +version: 1.0.1.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction From 978b86e292c972893d539cb736f05cecd55aa883 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:43:00 +0300 Subject: [PATCH 0685/1204] Update the deps --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 038cb88ce7..7e09e6b180 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -47,10 +47,10 @@ library Hasql.Pool.Prelude build-depends: base >=4.11 && <5, - hasql >=1.3 && <1.5, + hasql >=1.3 && <1.6, stm >=2.5 && <3, time >=1.5 && <2, - transformers >=0.5 && <0.6 + transformers >=0.5 && <0.7 test-suite test From fc02b289cac3cd7e4aac8c44fd7ae0c6f0a18d50 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:43:17 +0300 Subject: [PATCH 0686/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 7e09e6b180..222f28dd8d 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.2 + 0.5.2.1 category: Hasql, Database, PostgreSQL synopsis: From 66562e2f51a230be96b30dc753f0410c5d51162e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:43:00 +0300 Subject: [PATCH 0687/1204] Update the deps --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 646c55f043..d714622e6d 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -50,7 +50,7 @@ library -- resources: resource-pool >= 0.2 && < 0.3, -- database: - hasql >= 1.3 && < 1.5, + hasql >= 1.3 && < 1.6, -- data: time >= 1.5 && < 2, -- general: From b01441d973f1824fbc5cf8a63b3d6ca67a48cc7d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:45:54 +0300 Subject: [PATCH 0688/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index d714622e6d..11a7fd9679 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.2 + 0.5.2.2 category: Hasql, Database, PostgreSQL synopsis: From 0d5fe2ea913dd48f35498bb5c08ae0aebd7f0abc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 10 Feb 2022 12:44:26 +0300 Subject: [PATCH 0689/1204] Correct docs --- library/Hasql/Statement.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 82f40162e1..dadb674965 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -32,8 +32,8 @@ with any non-ASCII characters of the template encoded using UTF-8. According to the format, parameters must be referred to using a positional notation, as in the following: @$1@, @$2@, @$3@ and etc. -Those references must be used in accordance to the order in which the according -value encoders are specified in 'Encoders.Params'. +Those references must be used in accordance with the order in which +the value encoders are specified in 'Encoders.Params'. Following is an example of a declaration of a prepared statement with its associated codecs. @@ -43,7 +43,7 @@ selectSum = 'Statement' sql encoder decoder True where sql = "select ($1 + $2)" encoder = ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' - ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nullable' Encoders.'Hasql.Encoders.text')) + ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) @ From f105af323886c77ec863d62d07ded9b94f1eead4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 10 Feb 2022 12:45:16 +0300 Subject: [PATCH 0690/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index c821a444ee..3e2660c6fa 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.0.1 +version: 1.5.0.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From bb4060a297ac2b4be1b7dae090b801796af1d926 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Thu, 24 Mar 2022 00:53:41 +0800 Subject: [PATCH 0691/1204] Allow hasql 1.5 Tested to build fine. --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index fa5de83ecf..57e1f2abd8 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -29,7 +29,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.11, containers >=0.6 && <0.7, - hasql >=1.4 && <1.5, + hasql >=1.4 && <1.6, network-ip >=0.2 && <1, scientific >=0.2 && <0.4, text >=1 && <2, From 679a42f7a6d9707ead470a0f56458670b866da40 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Thu, 24 Mar 2022 00:55:31 +0800 Subject: [PATCH 0692/1204] Allow hasql 1.5 Builds fine and all tests pass. Requires https://github.com/nikita-volkov/hasql-implicits/pull/3 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index b7a96db524..89cf3bd88e 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -36,7 +36,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.12, containers >=0.6 && <0.7, - hasql >=1.4 && <1.5, + hasql >=1.4 && <1.6, hasql-implicits >=0.1 && <0.2, ptr >=0.16.7.2 && <0.17 From 1c2a73f9e34d7cbb437f2de5714b88dcc3adb398 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Mar 2022 20:40:57 +0300 Subject: [PATCH 0693/1204] Relax deps --- hasql-implicits.cabal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 57e1f2abd8..19019feedd 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -25,14 +25,14 @@ library other-modules: Hasql.Implicits.Prelude build-depends: - aeson >=1 && <2, + aeson >=1 && <3, base >=4.12 && <5, - bytestring >=0.10 && <0.11, + bytestring >=0.10 && <0.12, containers >=0.6 && <0.7, hasql >=1.4 && <1.6, network-ip >=0.2 && <1, scientific >=0.2 && <0.4, - text >=1 && <2, + text >=1 && <3, time >=1.4 && <2, uuid >=1.3 && <1.4, vector >=0.10 && <0.13 From 1673c564b6c1462d46e0c49ab3314555635bfb59 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Mar 2022 20:41:22 +0300 Subject: [PATCH 0694/1204] Bump --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 19019feedd..589b91f1c2 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.0.2 +version: 0.1.0.3 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues From aa7f14d295b48dd17390dc619a3000c0d1cb7fd4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Mar 2022 20:43:28 +0300 Subject: [PATCH 0695/1204] Bump --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 89cf3bd88e..3b000125a4 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3.1 +version: 0.3.1.1 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 7430eae90e50e33c272da0514675a1ade8193cac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 30 May 2022 12:25:40 +0300 Subject: [PATCH 0696/1204] Fix docs --- library/Hasql/Private/Decoders.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 15b89543cd..e1e692dd8b 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -14,6 +14,7 @@ import qualified Hasql.Private.Decoders.Row as Row import qualified Hasql.Private.Decoders.Value as Value import qualified Hasql.Private.Decoders.Array as Array import qualified Hasql.Private.Decoders.Composite as Composite +import qualified Hasql.Private.Errors as Errors import qualified Hasql.Private.Prelude as Prelude import qualified Data.Vector.Generic as GenericVector @@ -44,7 +45,7 @@ rowsAffected = Result (Results.single Result.rowsAffected) {-| Exactly one row. -Will raise the 'Hasql.Errors.UnexpectedAmountOfRows' error if it's any other. +Will raise the 'Errors.UnexpectedAmountOfRows' error if it's any other. -} {-# INLINABLE singleRow #-} singleRow :: Row a -> Result a From ea1161dfa5a37120bc8192462eaf45b3b2fc9258 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 30 May 2022 12:25:51 +0300 Subject: [PATCH 0697/1204] Bump deps --- stack.yaml | 2 +- stack.yaml.lock | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 stack.yaml.lock diff --git a/stack.yaml b/stack.yaml index 3188c65c0e..0a83d83b5f 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1 @@ -resolver: nightly-2021-11-19 +resolver: nightly-2022-05-29 diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..0d696b8812 --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + sha256: a7d2c450e7578825f80601b9d244f2107d9cc708430e070d2978e15a97b5c6dc + size: 590822 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/29.yaml + original: nightly-2022-05-29 From 6b40eec82a28c2b0be445dee61819a2033ca2c14 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 30 May 2022 12:27:52 +0300 Subject: [PATCH 0698/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 3e2660c6fa..df5e005f7d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.0.2 +version: 1.5.0.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 2a881133fae4e268c40e23c847747a26e71d725e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 02:40:59 +0300 Subject: [PATCH 0699/1204] Simplify the implementation and change the api a bit --- build.bash | 50 +++++++ hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 254 ++++++++++------------------------ library/Hasql/Pool/Prelude.hs | 73 ++++------ stack.yaml | 1 + stack.yaml.lock | 12 ++ test/Main.hs | 31 ++--- 7 files changed, 177 insertions(+), 246 deletions(-) create mode 100755 build.bash create mode 100644 stack.yaml create mode 100644 stack.yaml.lock diff --git a/build.bash b/build.bash new file mode 100755 index 0000000000..6d6e68bf5d --- /dev/null +++ b/build.bash @@ -0,0 +1,50 @@ +#!/bin/bash +set -eo pipefail + +function format { + ormolu --mode inplace -ce \ + $(find . -name "*.hs" \ + -not -path "./.git/*" \ + -not -path "./*.stack-work/*" \ + -not -path "./samples/*" \ + -not -path "./sketches/*" \ + -not -path "./output/*" \ + -not -path "./ideas/*" \ + -not -path "./refs/*" \ + -not -path "./temp/*") +} + +function build_and_test { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" +} + +function build_and_test_by_pattern { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --ta "-p \"$1\"" +} + +function build { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --fast +} + +function build_failing_on_incomplete_patterns { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -Werror=incomplete-patterns" \ + --fast +} + +function install { + stack \ + --work-dir ".install.stack-work" \ + install \ + --ghc-options "-j +RTS -A128m -n2m -RTS" +} + +format +build_and_test diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 222f28dd8d..f6f614c235 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.2.1 + 0.6 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 937de6e280..3ce78664c8 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,207 +1,99 @@ module Hasql.Pool -( - Pool, - Settings(..), - acquire, - release, - UsageError(..), - use, -) + ( Pool, + acquire, + release, + UsageError (..), + use, + ) where -import Hasql.Pool.Prelude import Hasql.Connection (Connection) -import Hasql.Session (Session) import qualified Hasql.Connection as Connection +import Hasql.Pool.Prelude +import Hasql.Session (Session) import qualified Hasql.Session as Session - -- | -- A pool of connections to DB. -data Pool = - Pool - Connection.Settings - {-^ Connection settings. -} - (TQueue ActiveConnection) - {-^ Queue of established connections. -} - (TVar Int) - {-^ Slots available for establishing new connections. -} - (TVar Bool) - {-^ Flag signaling whether pool's alive. -} - -data ActiveConnection = - ActiveConnection { - activeConnectionLastUseTimestamp :: Int, - activeConnectionConnection :: Connection +data Pool = Pool + { -- | Connection settings. + poolConnectionSettings :: Connection.Settings, + -- | Avail connections. + poolConnectionQueue :: TQueue Connection, + -- | Capacity. + poolCapacity :: TVar Int, + -- | Alive. + poolAlive :: TVar Bool } -loopCollectingGarbage :: Int -> TQueue ActiveConnection -> TVar Int -> TVar Bool -> IO () -loopCollectingGarbage timeout establishedQueue slotsAvailVar aliveVar = - decide - where - decide = - do - ts <- getMillisecondsSinceEpoch - join $ atomically $ do - alive <- readTVar aliveVar - if alive - then let - tryToRelease = - tryReadTQueue establishedQueue >>= \ case - -- The queue is empty. Just wait for changes in the state. - Nothing -> - retry - Just entry@(ActiveConnection lastUseTs connection) -> - let - outdatingTs = - lastUseTs + timeout - in - -- Check whether it's outdated. - if outdatingTs < ts - -- Fetch the current value of available slots and - -- release this one and other connections. - then do - slotsAvail <- readTVar slotsAvailVar - collectAndRelease slotsAvail [connection] outdatingTs - -- Return it to the front of the queue and - -- wait until it's outdating time. - else do - unGetTQueue establishedQueue entry - return (sleep outdatingTs *> decide) - collectAndRelease !slotsAvail !outdatedList outdatingTs = - tryReadTQueue establishedQueue >>= \ case - Nothing -> - finalizeAndRelease slotsAvail outdatedList outdatingTs - Just entry@(ActiveConnection lastUseTs connection) -> - let - outdatingTs = - lastUseTs + timeout - in - if outdatingTs < ts - then do - unGetTQueue establishedQueue entry - finalizeAndRelease slotsAvail outdatedList outdatingTs - else - collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs - finalizeAndRelease slotsAvail outdatedList outdatingTs = - do - writeTVar slotsAvailVar slotsAvail - return (release outdatedList *> sleep outdatingTs *> decide) - in tryToRelease - else do - list <- flushTQueue establishedQueue - return (release (fmap activeConnectionConnection list)) - sleep untilTs = - do - ts <- getMillisecondsSinceEpoch - let - diff = - untilTs - ts - in if diff > 0 - then threadDelay (diff * 1000) - else return () - release = - traverse_ Connection.release - --- | --- Settings of the connection pool. Consist of: --- --- * Pool-size. --- --- * Timeout. --- An amount of time in milliseconds for which the unused connections are kept open. --- --- * Connection settings. --- -type Settings = - (Int, Int, Connection.Settings) - --- | --- Given the pool-size, timeout and connection settings --- create a connection-pool. -acquire :: Settings -> IO Pool -acquire (size, timeout, connectionSettings) = - do - establishedQueue <- newTQueueIO - slotsAvailVar <- newTVarIO size - aliveVar <- newTVarIO (size > 0) - forkIO $ loopCollectingGarbage timeout establishedQueue slotsAvailVar aliveVar - return (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) +-- | Given the pool-size and connection settings create a connection-pool. +acquire :: Int -> Connection.Settings -> IO Pool +acquire poolSize connectionSettings = do + Pool connectionSettings + <$> newTQueueIO + <*> newTVarIO poolSize + <*> newTVarIO True -- | --- Release the connection-pool. +-- Release all the connections in the pool. release :: Pool -> IO () -release (Pool _ _ _ aliveVar) = - atomically (writeTVar aliveVar False) +release Pool {..} = do + connections <- atomically $ do + writeTVar poolAlive False + flushTQueue poolConnectionQueue + forM_ connections Connection.release -- | -- A union over the connection establishment error and the session error. -data UsageError = - ConnectionUsageError Connection.ConnectionError | - SessionUsageError Session.QueryError | - PoolIsReleasedUsageError +data UsageError + = ConnectionUsageError Connection.ConnectionError + | SessionUsageError Session.QueryError + | PoolIsReleasedUsageError deriving (Show, Eq) -- | -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) session = - join $ atomically $ do - alive <- readTVar aliveVar +use Pool {..} sess = + join . atomically $ do + alive <- readTVar poolAlive if alive then - tryReadTQueue establishedQueue >>= \ case - -- No established connection avail at the moment. - Nothing -> do - slotsAvail <- readTVar slotsAvailVar - -- Do we have any slots left for establishing new connections? - if slotsAvail > 0 - -- Reduce the available slots var and instruct to - -- establish and use a new connection. - then do - writeTVar slotsAvailVar $! pred slotsAvail - return acquireConnectionThenUseThenPutItToQueue - -- Wait until the state changes and retry. - else - retry - Just (ActiveConnection _ connection) -> - return (useConnectionThenPutItToQueue connection) - else - return (return (Left PoolIsReleasedUsageError)) + asum + [ readTQueue poolConnectionQueue <&> onConn, + do + capVal <- readTVar poolCapacity + if capVal > 0 + then do + writeTVar poolCapacity $! pred capVal + return onNewConn + else retry + ] + else return . return . Left $ PoolIsReleasedUsageError where - acquireConnectionThenUseThenPutItToQueue = - do - res <- Connection.acquire connectionSettings - case res of - -- Failed to acquire, so release an availability slot, - -- returning the error details. - Left acquisitionError -> do - atomically $ modifyTVar' slotsAvailVar succ - return (Left (ConnectionUsageError acquisitionError)) - Right connection -> - useConnectionThenPutItToQueue connection - useConnectionThenPutItToQueue connection = - do - res <- Session.run session connection - case res of - Left queryError -> do - -- Check whether the error is on client-side, - -- and in that case release the connection. - case queryError of - Session.QueryError _ _ (Session.ClientError _) -> - releaseConnection connection - _ -> - putConnectionToPool connection - return (Left (SessionUsageError queryError)) - Right res -> do - putConnectionToPool connection - return (Right res) - putConnectionToPool connection = - do - ts <- getMillisecondsSinceEpoch - atomically $ writeTQueue establishedQueue (ActiveConnection ts connection) - releaseConnection connection = - do - atomically $ modifyTVar' slotsAvailVar succ - Connection.release connection + onNewConn = do + connRes <- Connection.acquire poolConnectionSettings + case connRes of + Left connErr -> do + atomically $ modifyTVar' poolCapacity succ + return $ Left $ ConnectionUsageError connErr + Right conn -> onConn conn + onConn conn = do + sessRes <- Session.run sess conn + case sessRes of + Left err -> case err of + Session.QueryError _ _ (Session.ClientError _) -> do + atomically $ modifyTVar' poolCapacity succ + return $ Left $ SessionUsageError err + _ -> do + returnConn + return $ Left $ SessionUsageError err + Right res -> do + returnConn + return $ Right res + where + returnConn = do + atomically $ do + alive <- readTVar poolAlive + when alive $ writeTQueue poolConnectionQueue conn diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 6de55bcc05..6f4d8687d3 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -1,22 +1,27 @@ module Hasql.Pool.Prelude -( - module Exports, - getMillisecondsSinceEpoch, -) + ( module Exports, + getMillisecondsSinceEpoch, + ) where --- base -------------------------- -import Control.Applicative as Exports hiding (WrappedArrow(..)) +import Control.Applicative as Exports hiding (WrappedArrow (..)) import Control.Arrow as Exports hiding (first, second) import Control.Category as Exports import Control.Concurrent as Exports +import Control.Concurrent.STM as Exports hiding (orElse) import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), except, mapExcept, mapExceptT, runExcept, runExceptT, withExcept, withExceptT) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, WriterT (..), execWriter, execWriterT, mapWriter, mapWriterT, runWriter) import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports @@ -31,11 +36,11 @@ import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports import Data.Functor.Compose as Exports -import Data.Int as Exports import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') -import Data.List.NonEmpty as Exports (NonEmpty(..)) +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) +import Data.List.NonEmpty as Exports (NonEmpty (..)) import Data.Maybe as Exports import Data.Monoid as Exports hiding (Alt) import Data.Ord as Exports @@ -43,6 +48,9 @@ import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports import Data.String as Exports +import Data.Time as Exports +import Data.Time.Clock.POSIX as Exports +import Data.Time.Clock.System as Exports import Data.Traversable as Exports import Data.Tuple as Exports import Data.Unique as Exports @@ -54,12 +62,11 @@ import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports import Foreign.Storable as Exports -import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith) +import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic) import GHC.IO.Exception as Exports import Numeric as Exports -import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports (Handle, hClose) @@ -69,39 +76,11 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) -import Text.Read as Exports (Read(..), readMaybe, readEither) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports - --- stm -------------------------- -import Control.Concurrent.STM as Exports hiding (orElse) - --- -- text --- ------------------------- --- import Data.Text as Exports (Text) - --- -- bytestring --- ------------------------- --- import Data.ByteString as Exports (ByteString) - --- time -------------------------- -import Data.Time as Exports -import Data.Time.Clock.POSIX as Exports -import Data.Time.Clock.System as Exports - --- transformers -------------------------- -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) -import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT) -import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) -import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) -import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) - +import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) getMillisecondsSinceEpoch :: IO Int getMillisecondsSinceEpoch = diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..c3fd390e5e --- /dev/null +++ b/stack.yaml @@ -0,0 +1 @@ +resolver: nightly-2022-05-31 diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..24d692d72f --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + sha256: c92a0359aa608c8528e0a6a3f952e7b8501c7fac946b8b0e037125e1ab271423 + size: 590824 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/31.yaml + original: nightly-2022-05-31 diff --git a/test/Main.hs b/test/Main.hs index 7a8c434453..1b235667b4 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,29 +1,26 @@ module Main where import BasePrelude -import Test.Hspec -import Hasql.Pool import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders +import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement - +import Test.Hspec main = hspec $ do describe "Hasql.Pool.use" $ do it "releases a spot in the pool when there is an error" $ do - pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") - let - statement = Statement.Statement "" Encoders.noParams Decoders.noResult True - session = Session.statement () statement - in do - use pool session `shouldNotReturn` (Right ()) - let - session = let - statement = let - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - in Statement.Statement "SELECT 1" Encoders.noParams decoder True - in Session.statement () statement - in do - use pool session `shouldReturn` (Right 1) + pool <- acquire 1 "host=localhost port=5432 user=postgres dbname=postgres" + let statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + session = Session.statement () statement + in do + use pool session `shouldNotReturn` (Right ()) + let session = + let statement = + let decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + in Statement.Statement "SELECT 1" Encoders.noParams decoder True + in Session.statement () statement + in do + use pool session `shouldReturn` (Right 1) From a33168b8d90ef9bd947ff318bd0654bfec3b9b13 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 03:05:50 +0300 Subject: [PATCH 0700/1204] Sketch new tests --- hasql-pool.cabal | 6 ++-- test/Main.hs | 72 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index f6f614c235..f01e111fdd 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -65,8 +65,8 @@ test-suite test default-language: Haskell2010 build-depends: - base-prelude, hasql, hasql-pool, - stm >=2.5 && <3, - hspec >=2.6 && <3 + hspec >=2.6 && <3, + rerebase >=1.15 && <2, + stm >=2.5 && <3 diff --git a/test/Main.hs b/test/Main.hs index 1b235667b4..97e7b77f22 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,6 +1,5 @@ module Main where -import BasePrelude import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders @@ -8,19 +7,62 @@ import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import Test.Hspec +import Prelude main = hspec $ do - describe "Hasql.Pool.use" $ do - it "releases a spot in the pool when there is an error" $ do - pool <- acquire 1 "host=localhost port=5432 user=postgres dbname=postgres" - let statement = Statement.Statement "" Encoders.noParams Decoders.noResult True - session = Session.statement () statement - in do - use pool session `shouldNotReturn` (Right ()) - let session = - let statement = - let decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - in Statement.Statement "SELECT 1" Encoders.noParams decoder True - in Session.statement () statement - in do - use pool session `shouldReturn` (Right 1) + describe "" $ do + it "Releases a spot in the pool when there is a query error" $ do + pool <- acquire 1 connectionSettings + use pool badQuerySession `shouldNotReturn` (Right ()) + use pool selectOneSession `shouldReturn` (Right 1) + it "Simulation of connection error works" $ do + pool <- acquire 3 connectionSettings + res <- use pool $ closeConnSession >> selectOneSession + shouldSatisfy res $ \case + Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True + _ -> False + it "Connection errors cause eviction of connection" $ do + pool <- acquire 3 connectionSettings + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after normal use" $ do + pool <- acquire 3 connectionSettings + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after non-connection error" $ do + pool <- acquire 3 connectionSettings + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + +connectionSettings :: Connection.Settings +connectionSettings = + "host=localhost port=5432 user=postgres dbname=postgres" + +selectOneSession :: Session.Session Int64 +selectOneSession = + Session.statement () statement + where + statement = Statement.Statement "SELECT 1" Encoders.noParams decoder True + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + +badQuerySession :: Session.Session () +badQuerySession = + Session.statement () statement + where + statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + +closeConnSession :: Session.Session () +closeConnSession = do + conn <- ask + liftIO $ Connection.release conn From 0b1132b6fd29aa57f0538d862f0143b17fe460e0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 03:54:32 +0300 Subject: [PATCH 0701/1204] Modernize --- build.bash | 50 ++++++++ library/Hasql/Pool.hs | 211 ++++++++++++++++------------------ library/Hasql/Pool/Prelude.hs | 73 +++++------- stack.yaml | 1 + stack.yaml.lock | 12 ++ 5 files changed, 190 insertions(+), 157 deletions(-) create mode 100755 build.bash create mode 100644 stack.yaml create mode 100644 stack.yaml.lock diff --git a/build.bash b/build.bash new file mode 100755 index 0000000000..6d6e68bf5d --- /dev/null +++ b/build.bash @@ -0,0 +1,50 @@ +#!/bin/bash +set -eo pipefail + +function format { + ormolu --mode inplace -ce \ + $(find . -name "*.hs" \ + -not -path "./.git/*" \ + -not -path "./*.stack-work/*" \ + -not -path "./samples/*" \ + -not -path "./sketches/*" \ + -not -path "./output/*" \ + -not -path "./ideas/*" \ + -not -path "./refs/*" \ + -not -path "./temp/*") +} + +function build_and_test { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" +} + +function build_and_test_by_pattern { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --ta "-p \"$1\"" +} + +function build { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --fast +} + +function build_failing_on_incomplete_patterns { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -Werror=incomplete-patterns" \ + --fast +} + +function install { + stack \ + --work-dir ".install.stack-work" \ + install \ + --ghc-options "-j +RTS -A128m -n2m -RTS" +} + +format +build_and_test diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 937de6e280..b9eb111c67 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,37 +1,34 @@ module Hasql.Pool -( - Pool, - Settings(..), - acquire, - release, - UsageError(..), - use, -) + ( Pool, + Settings (..), + acquire, + release, + UsageError (..), + use, + ) where -import Hasql.Pool.Prelude import Hasql.Connection (Connection) -import Hasql.Session (Session) import qualified Hasql.Connection as Connection +import Hasql.Pool.Prelude +import Hasql.Session (Session) import qualified Hasql.Session as Session - -- | -- A pool of connections to DB. -data Pool = - Pool - Connection.Settings - {-^ Connection settings. -} - (TQueue ActiveConnection) - {-^ Queue of established connections. -} - (TVar Int) - {-^ Slots available for establishing new connections. -} - (TVar Bool) - {-^ Flag signaling whether pool's alive. -} +data Pool + = Pool + Connection.Settings + -- ^ Connection settings. + (TQueue ActiveConnection) + -- ^ Queue of established connections. + (TVar Int) + -- ^ Slots available for establishing new connections. + (TVar Bool) + -- ^ Flag signaling whether pool's alive. -data ActiveConnection = - ActiveConnection { - activeConnectionLastUseTimestamp :: Int, +data ActiveConnection = ActiveConnection + { activeConnectionLastUseTimestamp :: Int, activeConnectionConnection :: Connection } @@ -42,77 +39,71 @@ loopCollectingGarbage timeout establishedQueue slotsAvailVar aliveVar = decide = do ts <- getMillisecondsSinceEpoch - join $ atomically $ do - alive <- readTVar aliveVar - if alive - then let - tryToRelease = - tryReadTQueue establishedQueue >>= \ case - -- The queue is empty. Just wait for changes in the state. - Nothing -> - retry - Just entry@(ActiveConnection lastUseTs connection) -> - let - outdatingTs = - lastUseTs + timeout - in - -- Check whether it's outdated. - if outdatingTs < ts - -- Fetch the current value of available slots and - -- release this one and other connections. - then do - slotsAvail <- readTVar slotsAvailVar - collectAndRelease slotsAvail [connection] outdatingTs - -- Return it to the front of the queue and - -- wait until it's outdating time. - else do - unGetTQueue establishedQueue entry - return (sleep outdatingTs *> decide) - collectAndRelease !slotsAvail !outdatedList outdatingTs = - tryReadTQueue establishedQueue >>= \ case - Nothing -> - finalizeAndRelease slotsAvail outdatedList outdatingTs - Just entry@(ActiveConnection lastUseTs connection) -> - let - outdatingTs = - lastUseTs + timeout - in - if outdatingTs < ts - then do - unGetTQueue establishedQueue entry - finalizeAndRelease slotsAvail outdatedList outdatingTs - else - collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs - finalizeAndRelease slotsAvail outdatedList outdatingTs = - do - writeTVar slotsAvailVar slotsAvail - return (release outdatedList *> sleep outdatingTs *> decide) - in tryToRelease - else do - list <- flushTQueue establishedQueue - return (release (fmap activeConnectionConnection list)) + join $ + atomically $ do + alive <- readTVar aliveVar + if alive + then + let tryToRelease = + tryReadTQueue establishedQueue >>= \case + -- The queue is empty. Just wait for changes in the state. + Nothing -> + retry + Just entry@(ActiveConnection lastUseTs connection) -> + let outdatingTs = + lastUseTs + timeout + in -- Check whether it's outdated. + if outdatingTs < ts + then -- Fetch the current value of available slots and + -- release this one and other connections. + do + slotsAvail <- readTVar slotsAvailVar + collectAndRelease slotsAvail [connection] outdatingTs + else -- Return it to the front of the queue and + -- wait until it's outdating time. + do + unGetTQueue establishedQueue entry + return (sleep outdatingTs *> decide) + collectAndRelease !slotsAvail !outdatedList outdatingTs = + tryReadTQueue establishedQueue >>= \case + Nothing -> + finalizeAndRelease slotsAvail outdatedList outdatingTs + Just entry@(ActiveConnection lastUseTs connection) -> + let outdatingTs = + lastUseTs + timeout + in if outdatingTs < ts + then do + unGetTQueue establishedQueue entry + finalizeAndRelease slotsAvail outdatedList outdatingTs + else collectAndRelease (succ slotsAvail) (connection : outdatedList) outdatingTs + finalizeAndRelease slotsAvail outdatedList outdatingTs = + do + writeTVar slotsAvailVar slotsAvail + return (release outdatedList *> sleep outdatingTs *> decide) + in tryToRelease + else do + list <- flushTQueue establishedQueue + return (release (fmap activeConnectionConnection list)) sleep untilTs = do ts <- getMillisecondsSinceEpoch - let - diff = - untilTs - ts - in if diff > 0 - then threadDelay (diff * 1000) - else return () + let diff = + untilTs - ts + in if diff > 0 + then threadDelay (diff * 1000) + else return () release = traverse_ Connection.release -- | -- Settings of the connection pool. Consist of: --- +-- -- * Pool-size. --- --- * Timeout. +-- +-- * Timeout. -- An amount of time in milliseconds for which the unused connections are kept open. --- +-- -- * Connection settings. --- type Settings = (Int, Int, Connection.Settings) @@ -136,10 +127,10 @@ release (Pool _ _ _ aliveVar) = -- | -- A union over the connection establishment error and the session error. -data UsageError = - ConnectionUsageError Connection.ConnectionError | - SessionUsageError Session.QueryError | - PoolIsReleasedUsageError +data UsageError + = ConnectionUsageError Connection.ConnectionError + | SessionUsageError Session.QueryError + | PoolIsReleasedUsageError deriving (Show, Eq) -- | @@ -147,28 +138,28 @@ data UsageError = -- return the connection to the pool, when finished. use :: Pool -> Session.Session a -> IO (Either UsageError a) use (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) session = - join $ atomically $ do - alive <- readTVar aliveVar - if alive - then - tryReadTQueue establishedQueue >>= \ case - -- No established connection avail at the moment. - Nothing -> do - slotsAvail <- readTVar slotsAvailVar - -- Do we have any slots left for establishing new connections? - if slotsAvail > 0 - -- Reduce the available slots var and instruct to - -- establish and use a new connection. - then do - writeTVar slotsAvailVar $! pred slotsAvail - return acquireConnectionThenUseThenPutItToQueue - -- Wait until the state changes and retry. - else - retry - Just (ActiveConnection _ connection) -> - return (useConnectionThenPutItToQueue connection) - else - return (return (Left PoolIsReleasedUsageError)) + join $ + atomically $ do + alive <- readTVar aliveVar + if alive + then + tryReadTQueue establishedQueue >>= \case + -- No established connection avail at the moment. + Nothing -> do + slotsAvail <- readTVar slotsAvailVar + -- Do we have any slots left for establishing new connections? + if slotsAvail > 0 + then -- Reduce the available slots var and instruct to + -- establish and use a new connection. + do + writeTVar slotsAvailVar $! pred slotsAvail + return acquireConnectionThenUseThenPutItToQueue + else -- Wait until the state changes and retry. + + retry + Just (ActiveConnection _ connection) -> + return (useConnectionThenPutItToQueue connection) + else return (return (Left PoolIsReleasedUsageError)) where acquireConnectionThenUseThenPutItToQueue = do diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 6de55bcc05..6f4d8687d3 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -1,22 +1,27 @@ module Hasql.Pool.Prelude -( - module Exports, - getMillisecondsSinceEpoch, -) + ( module Exports, + getMillisecondsSinceEpoch, + ) where --- base -------------------------- -import Control.Applicative as Exports hiding (WrappedArrow(..)) +import Control.Applicative as Exports hiding (WrappedArrow (..)) import Control.Arrow as Exports hiding (first, second) import Control.Category as Exports import Control.Concurrent as Exports +import Control.Concurrent.STM as Exports hiding (orElse) import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), except, mapExcept, mapExceptT, runExcept, runExceptT, withExcept, withExceptT) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, WriterT (..), execWriter, execWriterT, mapWriter, mapWriterT, runWriter) import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports @@ -31,11 +36,11 @@ import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports import Data.Functor.Compose as Exports -import Data.Int as Exports import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') -import Data.List.NonEmpty as Exports (NonEmpty(..)) +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) +import Data.List.NonEmpty as Exports (NonEmpty (..)) import Data.Maybe as Exports import Data.Monoid as Exports hiding (Alt) import Data.Ord as Exports @@ -43,6 +48,9 @@ import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports import Data.String as Exports +import Data.Time as Exports +import Data.Time.Clock.POSIX as Exports +import Data.Time.Clock.System as Exports import Data.Traversable as Exports import Data.Tuple as Exports import Data.Unique as Exports @@ -54,12 +62,11 @@ import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports import Foreign.Storable as Exports -import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith) +import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic) import GHC.IO.Exception as Exports import Numeric as Exports -import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports (Handle, hClose) @@ -69,39 +76,11 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) -import Text.Read as Exports (Read(..), readMaybe, readEither) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports - --- stm -------------------------- -import Control.Concurrent.STM as Exports hiding (orElse) - --- -- text --- ------------------------- --- import Data.Text as Exports (Text) - --- -- bytestring --- ------------------------- --- import Data.ByteString as Exports (ByteString) - --- time -------------------------- -import Data.Time as Exports -import Data.Time.Clock.POSIX as Exports -import Data.Time.Clock.System as Exports - --- transformers -------------------------- -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) -import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT) -import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) -import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) -import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) - +import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) getMillisecondsSinceEpoch :: IO Int getMillisecondsSinceEpoch = diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..c3fd390e5e --- /dev/null +++ b/stack.yaml @@ -0,0 +1 @@ +resolver: nightly-2022-05-31 diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..24d692d72f --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + sha256: c92a0359aa608c8528e0a6a3f952e7b8501c7fac946b8b0e037125e1ab271423 + size: 590824 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/31.yaml + original: nightly-2022-05-31 From cf76787818bdf124386868c23cfe26f20c384328 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 03:55:53 +0300 Subject: [PATCH 0702/1204] Add tests --- hasql-pool.cabal | 6 ++-- test/Main.hs | 79 ++++++++++++++++++++++++++++++++++++------------ 2 files changed, 62 insertions(+), 23 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 222f28dd8d..2a6b11154d 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -65,8 +65,8 @@ test-suite test default-language: Haskell2010 build-depends: - base-prelude, hasql, hasql-pool, - stm >=2.5 && <3, - hspec >=2.6 && <3 + hspec >=2.6 && <3, + rerebase >=1.15 && <2, + stm >=2.5 && <3 diff --git a/test/Main.hs b/test/Main.hs index 7a8c434453..168ebe0ce3 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,29 +1,68 @@ module Main where -import BasePrelude -import Test.Hspec -import Hasql.Pool import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders +import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement - +import Test.Hspec +import Prelude main = hspec $ do - describe "Hasql.Pool.use" $ do - it "releases a spot in the pool when there is an error" $ do - pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") - let - statement = Statement.Statement "" Encoders.noParams Decoders.noResult True - session = Session.statement () statement - in do - use pool session `shouldNotReturn` (Right ()) - let - session = let - statement = let - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - in Statement.Statement "SELECT 1" Encoders.noParams decoder True - in Session.statement () statement - in do - use pool session `shouldReturn` (Right 1) + describe "" $ do + it "Releases a spot in the pool when there is a query error" $ do + pool <- acquire (1, 1, connectionSettings) + use pool badQuerySession `shouldNotReturn` (Right ()) + use pool selectOneSession `shouldReturn` (Right 1) + it "Simulation of connection error works" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ closeConnSession >> selectOneSession + shouldSatisfy res $ \case + Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True + _ -> False + it "Connection errors cause eviction of connection" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after normal use" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after non-connection error" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + +connectionSettings :: Connection.Settings +connectionSettings = + "host=localhost port=5432 user=postgres dbname=postgres" + +selectOneSession :: Session.Session Int64 +selectOneSession = + Session.statement () statement + where + statement = Statement.Statement "SELECT 1" Encoders.noParams decoder True + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + +badQuerySession :: Session.Session () +badQuerySession = + Session.statement () statement + where + statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + +closeConnSession :: Session.Session () +closeConnSession = do + conn <- ask + liftIO $ Connection.release conn From dcf4fa97bd93c634cd8211d27bd8b3482cf399e5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 03:57:24 +0300 Subject: [PATCH 0703/1204] Modernize --- build.bash | 50 ++++++++++++++++++++++++++++++ library/Hasql/Pool.hs | 49 ++++++++++++++--------------- library/Hasql/Pool/Prelude.hs | 13 ++------ library/Hasql/Pool/ResourcePool.hs | 11 +++---- stack.yaml | 1 + stack.yaml.lock | 12 +++++++ test/Main.hs | 29 ++++++++--------- 7 files changed, 106 insertions(+), 59 deletions(-) create mode 100755 build.bash create mode 100644 stack.yaml create mode 100644 stack.yaml.lock diff --git a/build.bash b/build.bash new file mode 100755 index 0000000000..6d6e68bf5d --- /dev/null +++ b/build.bash @@ -0,0 +1,50 @@ +#!/bin/bash +set -eo pipefail + +function format { + ormolu --mode inplace -ce \ + $(find . -name "*.hs" \ + -not -path "./.git/*" \ + -not -path "./*.stack-work/*" \ + -not -path "./samples/*" \ + -not -path "./sketches/*" \ + -not -path "./output/*" \ + -not -path "./ideas/*" \ + -not -path "./refs/*" \ + -not -path "./temp/*") +} + +function build_and_test { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" +} + +function build_and_test_by_pattern { + stack build \ + --fast --test \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --ta "-p \"$1\"" +} + +function build { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ + --fast +} + +function build_failing_on_incomplete_patterns { + stack build \ + --ghc-options "-j +RTS -A128m -n2m -RTS -Werror=incomplete-patterns" \ + --fast +} + +function install { + stack \ + --work-dir ".install.stack-work" \ + install \ + --ghc-options "-j +RTS -A128m -n2m -RTS" +} + +format +build_and_test diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b215fd1583..7ab3b4b527 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,38 +1,35 @@ module Hasql.Pool -( - Pool, - Settings(..), - acquire, - release, - UsageError(..), - use, -) + ( Pool, + Settings (..), + acquire, + release, + UsageError (..), + use, + ) where -import Hasql.Pool.Prelude -import qualified Hasql.Connection -import qualified Hasql.Session import qualified Data.Pool as ResourcePool +import qualified Hasql.Connection +import Hasql.Pool.Prelude import qualified Hasql.Pool.ResourcePool as ResourcePool - +import qualified Hasql.Session -- | -- A pool of connections to DB. -newtype Pool = - Pool (ResourcePool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) +newtype Pool + = Pool (ResourcePool.Pool (Either Hasql.Connection.ConnectionError Hasql.Connection.Connection)) deriving (Show) -- | -- Settings of the connection pool. Consist of: --- +-- -- * Pool-size. --- --- * Timeout. +-- +-- * Timeout. -- An amount of time for which an unused resource is kept open. -- The smallest acceptable value is 0.5 seconds. --- +-- -- * Connection settings. --- type Settings = (Int, NominalDiffTime, Hasql.Connection.Settings) @@ -42,7 +39,7 @@ type Settings = acquire :: Settings -> IO Pool acquire (size, timeout, connectionSettings) = fmap Pool $ - ResourcePool.createPool acquire release stripes timeout size + ResourcePool.createPool acquire release stripes timeout size where acquire = Hasql.Connection.acquire connectionSettings @@ -59,9 +56,9 @@ release (Pool pool) = -- | -- A union over the connection establishment error and the session error. -data UsageError = - ConnectionError Hasql.Connection.ConnectionError | - SessionError Hasql.Session.QueryError +data UsageError + = ConnectionError Hasql.Connection.ConnectionError + | SessionError Hasql.Session.QueryError deriving (Show, Eq) -- | @@ -70,6 +67,6 @@ data UsageError = use :: Pool -> Hasql.Session.Session a -> IO (Either UsageError a) use (Pool pool) session = fmap (either (Left . ConnectionError) (either (Left . SessionError) Right)) $ - ResourcePool.withResourceOnEither pool $ - traverse $ - Hasql.Session.run session + ResourcePool.withResourceOnEither pool $ + traverse $ + Hasql.Session.run session diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index a28cf8b738..5d717b8f88 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -1,14 +1,7 @@ module Hasql.Pool.Prelude -( - module Exports, -) + ( module Exports, + ) where - --- base-prelude -------------------------- -import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error) - --- time -------------------------- +import BasePrelude as Exports hiding (assert, error, isLeft, isRight, left, right) import Data.Time as Exports diff --git a/library/Hasql/Pool/ResourcePool.hs b/library/Hasql/Pool/ResourcePool.hs index 1a22d6be36..eb25341be1 100644 --- a/library/Hasql/Pool/ResourcePool.hs +++ b/library/Hasql/Pool/ResourcePool.hs @@ -1,12 +1,9 @@ -{-| -Extras for the resource-pool library. --} -module Hasql.Pool.ResourcePool -where +-- | +-- Extras for the resource-pool library. +module Hasql.Pool.ResourcePool where -import Hasql.Pool.Prelude import Data.Pool - +import Hasql.Pool.Prelude withResourceOnEither :: Pool resource -> (resource -> IO (Either failure success)) -> IO (Either failure success) withResourceOnEither pool act = mask_ $ do diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..c3fd390e5e --- /dev/null +++ b/stack.yaml @@ -0,0 +1 @@ +resolver: nightly-2022-05-31 diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..24d692d72f --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + sha256: c92a0359aa608c8528e0a6a3f952e7b8501c7fac946b8b0e037125e1ab271423 + size: 590824 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/31.yaml + original: nightly-2022-05-31 diff --git a/test/Main.hs b/test/Main.hs index 7a8c434453..860ba1085b 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,29 +1,26 @@ module Main where import BasePrelude -import Test.Hspec -import Hasql.Pool import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders +import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement - +import Test.Hspec main = hspec $ do describe "Hasql.Pool.use" $ do it "releases a spot in the pool when there is an error" $ do pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") - let - statement = Statement.Statement "" Encoders.noParams Decoders.noResult True - session = Session.statement () statement - in do - use pool session `shouldNotReturn` (Right ()) - let - session = let - statement = let - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - in Statement.Statement "SELECT 1" Encoders.noParams decoder True - in Session.statement () statement - in do - use pool session `shouldReturn` (Right 1) + let statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + session = Session.statement () statement + in do + use pool session `shouldNotReturn` (Right ()) + let session = + let statement = + let decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + in Statement.Statement "SELECT 1" Encoders.noParams decoder True + in Session.statement () statement + in do + use pool session `shouldReturn` (Right 1) From cf0f62158ecdc209308948d41db009a156c817aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 04:01:09 +0300 Subject: [PATCH 0704/1204] Add tests --- hasql-pool.cabal | 5 ++-- test/Main.hs | 72 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 60 insertions(+), 17 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 11a7fd9679..b30454b7e9 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -69,7 +69,8 @@ test-suite test default-language: Haskell2010 build-depends: - base-prelude, hasql, hasql-pool, - hspec >= 2.6 && < 3 + hspec >=2.6 && <3, + rerebase >=1.15 && <2, + stm >=2.5 && <3 diff --git a/test/Main.hs b/test/Main.hs index 860ba1085b..bf311bbf1d 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,6 +1,5 @@ module Main where -import BasePrelude import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders @@ -8,19 +7,62 @@ import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import Test.Hspec +import Prelude main = hspec $ do - describe "Hasql.Pool.use" $ do - it "releases a spot in the pool when there is an error" $ do - pool <- acquire (1, 1, "host=localhost port=5432 user=postgres dbname=postgres") - let statement = Statement.Statement "" Encoders.noParams Decoders.noResult True - session = Session.statement () statement - in do - use pool session `shouldNotReturn` (Right ()) - let session = - let statement = - let decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - in Statement.Statement "SELECT 1" Encoders.noParams decoder True - in Session.statement () statement - in do - use pool session `shouldReturn` (Right 1) + describe "" $ do + it "Releases a spot in the pool when there is a query error" $ do + pool <- acquire (1, 1, connectionSettings) + use pool badQuerySession `shouldNotReturn` (Right ()) + use pool selectOneSession `shouldReturn` (Right 1) + it "Simulation of connection error works" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ closeConnSession >> selectOneSession + shouldSatisfy res $ \case + Left (SessionError (Session.QueryError _ _ (Session.ClientError _))) -> True + _ -> False + it "Connection errors cause eviction of connection" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ closeConnSession >> selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after normal use" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + it "Connection gets returned to the pool after non-connection error" $ do + pool <- acquire (3, 1, connectionSettings) + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ badQuerySession + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight + +connectionSettings :: Connection.Settings +connectionSettings = + "host=localhost port=5432 user=postgres dbname=postgres" + +selectOneSession :: Session.Session Int64 +selectOneSession = + Session.statement () statement + where + statement = Statement.Statement "SELECT 1" Encoders.noParams decoder True + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) + +badQuerySession :: Session.Session () +badQuerySession = + Session.statement () statement + where + statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + +closeConnSession :: Session.Session () +closeConnSession = do + conn <- ask + liftIO $ Connection.release conn From e6966840ba15e3795e9d2e81b1007e7b0cb32708 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 04:18:22 +0300 Subject: [PATCH 0705/1204] Add docs --- library/Hasql/Pool.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b9eb111c67..9ca5dbc4ae 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -128,14 +128,17 @@ release (Pool _ _ _ aliveVar) = -- | -- A union over the connection establishment error and the session error. data UsageError - = ConnectionUsageError Connection.ConnectionError - | SessionUsageError Session.QueryError - | PoolIsReleasedUsageError + = -- | Error during an attempt to connect. + ConnectionUsageError Connection.ConnectionError + | -- | Error during session execution. + SessionUsageError Session.QueryError + | -- | Pool has been released and can no longer be used. + PoolIsReleasedUsageError deriving (Show, Eq) --- | --- Use a connection from the pool to run a session and --- return the connection to the pool, when finished. +-- | Use a connection from the pool to run a session and return the connection +-- to the pool, when finished. If the session fails +-- with 'Session.ClientError' the connection gets reestablished. use :: Pool -> Session.Session a -> IO (Either UsageError a) use (Pool connectionSettings establishedQueue slotsAvailVar aliveVar) session = join $ From b3337355d94050a6e89b49a7a64b634ad525a489 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 04:18:40 +0300 Subject: [PATCH 0706/1204] Bump and add changelog --- CHANGELOG.md | 8 ++++++++ hasql-pool.cabal | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..e8549a39e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# 0.6 + +Moved away from "resource-pool" and fixed the handling of lost connections. + +Breaking: + +- Changed the suffix of `UsageError` constructors from `Error` to `UsageError` +- Added `PoolIsReleasedUsageError` diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 8161f43d8e..001e76fe88 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.5.2.2 + 0.6 category: Hasql, Database, PostgreSQL synopsis: @@ -24,6 +24,8 @@ build-type: Simple cabal-version: >=1.10 +extra-source-files: + CHANGELOG.md source-repository head From 4b90263f8b7c454609930264658bf24a121cf73a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 04:25:05 +0300 Subject: [PATCH 0707/1204] Prepare for release --- CHANGELOG.md | 8 ++++++++ hasql-pool.cabal | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8549a39e9..603bfac146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 0.7 + +Simplified the implementation a lot by removing the notion of timeout. + +Breaking: +- Removed the `Settings` type +- Changed the signature of `acquire` + # 0.6 Moved away from "resource-pool" and fixed the handling of lost connections. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 001e76fe88..bfc1241620 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.6 + 0.7 category: Hasql, Database, PostgreSQL synopsis: From 5cf58056bb9e5b6a29e0c1a72ddff45211f17417 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 31 May 2022 23:55:31 -0400 Subject: [PATCH 0708/1204] Update stackage version --- stack.yaml | 2 +- stack.yaml.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stack.yaml b/stack.yaml index 6f10d3434d..fdd5a1a203 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-17.7 +resolver: lts-19.9 packages: - . diff --git a/stack.yaml.lock b/stack.yaml.lock index d4d1cc5296..d463584446 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -6,7 +6,7 @@ packages: [] snapshots: - completed: - size: 565715 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/7.yaml - sha256: 1b5e4124989399e60e7a7901f0cefd910beea546131fb07a13a7208c4cc8b7ee - original: lts-17.7 + size: 618507 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/9.yaml + sha256: 190a93d09d9d7bccc78a0f00d6fc0350eed76bc533611e5971202800805dd00e + original: lts-19.9 From c51bb7f0895a0a50d47788305b854c163650ec92 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 1 Jun 2022 00:12:32 -0400 Subject: [PATCH 0709/1204] Relax hasql-pool upper bound since the library compiles and the tests are green with 0.7 --- hasql-notifications.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 1aa7fc3a49..f16bbc9185 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.0 +version: 0.2.0.1 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 1.2.3.1 && < 1.3 - , hasql-pool >= 0.4 && < 0.6 + , hasql-pool >= 0.4 && < 0.8 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 From ebd1c6cd6841138ca3d401846a4d096bfa9aaec2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 1 Jun 2022 10:45:47 +0300 Subject: [PATCH 0710/1204] Add Exception instance for UsageError Addresses #13. --- CHANGELOG.md | 4 ++++ hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 603bfac146..412ad51dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.7.1 + +Added `Exception` for `UsageError`. + # 0.7 Simplified the implementation a lot by removing the notion of timeout. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index bfc1241620..726d962898 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7 + 0.7.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 3ce78664c8..dbf874ad0b 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -51,6 +51,8 @@ data UsageError | PoolIsReleasedUsageError deriving (Show, Eq) +instance Exception UsageError + -- | -- Use a connection from the pool to run a session and -- return the connection to the pool, when finished. From 7e75c9504c89cafddaed490632e8bf28db9edec3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Jun 2022 09:25:51 +0300 Subject: [PATCH 0711/1204] Update docs and polish --- hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 36 +++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 726d962898..25be65b1ea 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7.1 + 0.7.1.1 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index dbf874ad0b..2891b21493 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,9 +1,11 @@ module Hasql.Pool - ( Pool, + ( -- * -- + Pool, acquire, release, - UsageError (..), use, + -- * -- + UsageError (..), ) where @@ -43,19 +45,13 @@ release Pool {..} = do flushTQueue poolConnectionQueue forM_ connections Connection.release --- | --- A union over the connection establishment error and the session error. -data UsageError - = ConnectionUsageError Connection.ConnectionError - | SessionUsageError Session.QueryError - | PoolIsReleasedUsageError - deriving (Show, Eq) - -instance Exception UsageError - --- | --- Use a connection from the pool to run a session and --- return the connection to the pool, when finished. +-- | Use a connection from the pool to run a session and return the connection +-- to the pool, when finished. +-- +-- Session failing with a 'Session.ClientError' get interpreted as a loss of +-- connection. In such case the connection does not get returned to the pool +-- and a slot gets freed up for a new connection to be established the next +-- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = join . atomically $ do @@ -99,3 +95,13 @@ use Pool {..} sess = atomically $ do alive <- readTVar poolAlive when alive $ writeTQueue poolConnectionQueue conn + +-- | +-- A union over the connection establishment error and the session error. +data UsageError + = ConnectionUsageError Connection.ConnectionError + | SessionUsageError Session.QueryError + | PoolIsReleasedUsageError + deriving (Show, Eq) + +instance Exception UsageError From f1ed452a8f66942d75676a22bbf87e1ae5b23684 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Jun 2022 09:53:14 +0300 Subject: [PATCH 0712/1204] Update the docs --- library/Hasql/Pool.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 2891b21493..28302ffcd8 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,10 +1,11 @@ module Hasql.Pool - ( -- * -- + ( -- * Pool Pool, acquire, release, use, - -- * -- + + -- * Errors UsageError (..), ) where @@ -29,6 +30,9 @@ data Pool = Pool } -- | Given the pool-size and connection settings create a connection-pool. +-- +-- No connections actually get established by this function. It is delegated +-- to 'use'. acquire :: Int -> Connection.Settings -> IO Pool acquire poolSize connectionSettings = do Pool connectionSettings @@ -36,8 +40,7 @@ acquire poolSize connectionSettings = do <*> newTVarIO poolSize <*> newTVarIO True --- | --- Release all the connections in the pool. +-- | Release all the connections in the pool. release :: Pool -> IO () release Pool {..} = do connections <- atomically $ do @@ -47,7 +50,7 @@ release Pool {..} = do -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. --- +-- -- Session failing with a 'Session.ClientError' get interpreted as a loss of -- connection. In such case the connection does not get returned to the pool -- and a slot gets freed up for a new connection to be established the next From b9068666192fcf54631c6e7c5691be7805eea432 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Jun 2022 09:53:36 +0300 Subject: [PATCH 0713/1204] Actually release the connections from the pool when sessions are done --- library/Hasql/Pool.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 28302ffcd8..443e91692c 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -94,10 +94,12 @@ use Pool {..} sess = returnConn return $ Right res where - returnConn = do - atomically $ do + returnConn = + join . atomically $ do alive <- readTVar poolAlive - when alive $ writeTQueue poolConnectionQueue conn + if alive + then writeTQueue poolConnectionQueue conn $> return () + else return $ Connection.release conn -- | -- A union over the connection establishment error and the session error. From 49a51e88e9da6e93416a91ecfc98ef59bbf87939 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Jun 2022 09:54:14 +0300 Subject: [PATCH 0714/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 25be65b1ea..b51b8a5734 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7.1.1 + 0.7.1.2 category: Hasql, Database, PostgreSQL synopsis: From 2c688e3f9f22744ef4b279efa0e6ec415c29b99a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 4 Jun 2022 11:36:50 +0300 Subject: [PATCH 0715/1204] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 412ad51dd4..cadb40c68e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.7.1.2 + +Fixed connections not being released if they were in use during the call to `release`. + # 0.7.1 Added `Exception` for `UsageError`. From eb0732fecc965a3d7d81e2d6d383b9b3f8db11cc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 4 Jun 2022 11:37:00 +0300 Subject: [PATCH 0716/1204] Update the docs --- hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index b51b8a5734..bcd1164034 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7.1.2 + 0.7.1.3 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 443e91692c..b9b749368a 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -16,8 +16,7 @@ import Hasql.Pool.Prelude import Hasql.Session (Session) import qualified Hasql.Session as Session --- | --- A pool of connections to DB. +-- | A pool of connections to DB. data Pool = Pool { -- | Connection settings. poolConnectionSettings :: Connection.Settings, @@ -51,7 +50,7 @@ release Pool {..} = do -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. -- --- Session failing with a 'Session.ClientError' get interpreted as a loss of +-- Session failing with a 'Session.ClientError' gets interpreted as a loss of -- connection. In such case the connection does not get returned to the pool -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. @@ -101,12 +100,14 @@ use Pool {..} sess = then writeTQueue poolConnectionQueue conn $> return () else return $ Connection.release conn --- | --- A union over the connection establishment error and the session error. +-- | Union over all errors that 'use' can result in. data UsageError - = ConnectionUsageError Connection.ConnectionError - | SessionUsageError Session.QueryError - | PoolIsReleasedUsageError + = -- | Attempt to establish a connection failed. + ConnectionUsageError Connection.ConnectionError + | -- | Session execution failed. + SessionUsageError Session.QueryError + | -- | Attempt to use a pool, which has already been called 'release' upon. + PoolIsReleasedUsageError deriving (Show, Eq) instance Exception UsageError From 84c1b8c17471d5fa056900f2160580808819d7d7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 14 Jun 2022 22:28:24 +0300 Subject: [PATCH 0717/1204] Add support for dynamic connection configuration See #11. --- CHANGELOG.md | 4 ++++ hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 22 ++++++++++++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cadb40c68e..96e35c2154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.7.2 + +Added support for dynamic connection configuration ([issue #11](https://github.com/nikita-volkov/hasql-pool/issues/11)). + # 0.7.1.2 Fixed connections not being released if they were in use during the call to `release`. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index bcd1164034..8f8422a2dd 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7.1.3 + 0.7.2 category: Hasql, Database, PostgreSQL synopsis: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b9b749368a..ac91e3be84 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -2,6 +2,7 @@ module Hasql.Pool ( -- * Pool Pool, acquire, + acquireDynamically, release, use, @@ -19,7 +20,7 @@ import qualified Hasql.Session as Session -- | A pool of connections to DB. data Pool = Pool { -- | Connection settings. - poolConnectionSettings :: Connection.Settings, + poolFetchConnectionSettings :: IO Connection.Settings, -- | Avail connections. poolConnectionQueue :: TQueue Connection, -- | Capacity. @@ -33,8 +34,20 @@ data Pool = Pool -- No connections actually get established by this function. It is delegated -- to 'use'. acquire :: Int -> Connection.Settings -> IO Pool -acquire poolSize connectionSettings = do - Pool connectionSettings +acquire poolSize connectionSettings = + acquireDynamically poolSize (pure connectionSettings) + +-- | Given the pool-size and connection settings constructor action +-- create a connection-pool. +-- +-- No connections actually get established by this function. It is delegated +-- to 'use'. +-- +-- In difference to 'acquire' new settings get fetched each time a connection +-- is created. This may be useful for some security models. +acquireDynamically :: Int -> IO Connection.Settings -> IO Pool +acquireDynamically poolSize fetchConnectionSettings = do + Pool fetchConnectionSettings <$> newTQueueIO <*> newTVarIO poolSize <*> newTVarIO True @@ -73,7 +86,8 @@ use Pool {..} sess = else return . return . Left $ PoolIsReleasedUsageError where onNewConn = do - connRes <- Connection.acquire poolConnectionSettings + settings <- poolFetchConnectionSettings + connRes <- Connection.acquire settings case connRes of Left connErr -> do atomically $ modifyTVar' poolCapacity succ From 5d34ef6a46c0f08cf78fa81ee04c0b5c8252f52a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jun 2022 13:42:30 +0300 Subject: [PATCH 0718/1204] Allow vector-0.13 --- hasql-implicits.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 589b91f1c2..0adf99cfe0 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.0.3 +version: 0.1.0.4 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues @@ -35,4 +35,4 @@ library text >=1 && <3, time >=1.4 && <2, uuid >=1.3 && <1.4, - vector >=0.10 && <0.13 + vector >=0.10 && <0.14 From e2852d42fb934d7ece0af2f2861b9f1fb05ffcd6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jun 2022 13:54:07 +0300 Subject: [PATCH 0719/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index df5e005f7d..45845716bf 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.0.3 +version: 1.5.0.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From b64a7015a1f374c9beedbb575354f60e4b3e5931 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jun 2022 13:54:54 +0300 Subject: [PATCH 0720/1204] Format with ormolu --- benchmarks/Main.hs | 27 +- library/Hasql/Connection.hs | 17 +- library/Hasql/Decoders.hs | 131 +-- library/Hasql/Encoders.hs | 97 +- library/Hasql/Private/Commands.hs | 18 +- library/Hasql/Private/Connection.hs | 12 +- library/Hasql/Private/Decoders.hs | 514 +++++------ library/Hasql/Private/Decoders/Array.hs | 6 +- library/Hasql/Private/Decoders/Composite.hs | 6 +- library/Hasql/Private/Decoders/Result.hs | 178 ++-- library/Hasql/Private/Decoders/Results.hs | 60 +- library/Hasql/Private/Decoders/Row.hs | 47 +- library/Hasql/Private/Decoders/Value.hs | 7 +- library/Hasql/Private/Encoders.hs | 446 ++++----- library/Hasql/Private/Encoders/Array.hs | 49 +- library/Hasql/Private/Encoders/Params.hs | 27 +- library/Hasql/Private/Encoders/Value.hs | 7 +- library/Hasql/Private/Errors.hs | 120 ++- library/Hasql/Private/IO.hs | 62 +- library/Hasql/Private/PTI.hs | 214 +++-- library/Hasql/Private/Prelude.hs | 128 +-- .../Private/PreparedStatementRegistry.hs | 29 +- library/Hasql/Private/Session.hs | 57 +- library/Hasql/Private/Settings.hs | 42 +- library/Hasql/Session.hs | 21 +- library/Hasql/Statement.hs | 197 ++-- profiling/Main.hs | 13 +- tasty/Main.hs | 870 ++++++++---------- tasty/Main/Connection.hs | 8 +- tasty/Main/DSL.hs | 30 +- tasty/Main/Prelude.hs | 8 +- tasty/Main/Statements.hs | 12 +- threads-test/Main.hs | 15 +- threads-test/Main/Statements.hs | 9 +- 34 files changed, 1668 insertions(+), 1816 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index a2743a25e2..71a5000167 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -1,15 +1,14 @@ module Main where -import Prelude +import qualified Data.Vector as F import Gauge import Gauge.Main import qualified Hasql.Connection as A -import qualified Hasql.Session as B -import qualified Hasql.Statement as C import qualified Hasql.Decoders as D import qualified Hasql.Encoders as E -import qualified Data.Vector as F - +import qualified Hasql.Session as B +import qualified Hasql.Statement as C +import Prelude main = do @@ -20,22 +19,18 @@ main = A.acquire "" useConnection connection = defaultMain - [ - sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector - , - sessionBench "largeResultInList" sessionWithSingleLargeResultInList - , - sessionBench "manyLargeResults" sessionWithManyLargeResults - , - sessionBench "manySmallResults" sessionWithManySmallResults - ] + [ sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector, + sessionBench "largeResultInList" sessionWithSingleLargeResultInList, + sessionBench "manyLargeResults" sessionWithManyLargeResults, + sessionBench "manySmallResults" sessionWithManySmallResults + ] where sessionBench :: NFData a => String -> B.Session a -> Benchmark sessionBench name session = bench name (nfIO (fmap (either (error "") id) (B.run session connection))) - -- * Sessions + ------------------------- sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () @@ -58,8 +53,8 @@ sessionWithManySmallResults :: B.Session [(Int64, Int64)] sessionWithManySmallResults = replicateM 1000 (B.statement () statementWithSingleRow) - -- * Statements + ------------------------- statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 1e70b6a257..c295e02927 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -1,15 +1,14 @@ -- | -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection -( - Connection, - ConnectionError(..), - acquire, - release, - Settings, - settings, - withLibPQConnection -) + ( Connection, + ConnectionError (..), + acquire, + release, + Settings, + settings, + withLibPQConnection, + ) where import Hasql.Private.Connection diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 6e65501d5e..f8f3ee559d 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -1,67 +1,72 @@ -{-| -A DSL for declaration of result decoders. --} +-- | +-- A DSL for declaration of result decoders. module Hasql.Decoders -( - -- * Result - Result, - noResult, - rowsAffected, - singleRow, - -- ** Specialized multi-row results - rowMaybe, - rowVector, - rowList, - -- ** Multi-row traversers - foldlRows, - foldrRows, - -- * Row - Row, - column, - -- * Nullability - NullableOrNot, - nonNullable, - nullable, - -- * Value - Value, - bool, - int2, - int4, - int8, - float4, - float8, - numeric, - char, - text, - bytea, - date, - timestamp, - timestamptz, - time, - timetz, - interval, - uuid, - inet, - json, - jsonBytes, - jsonb, - jsonbBytes, - array, - listArray, - vectorArray, - composite, - hstore, - enum, - custom, - refine, - -- * Array - Array, - dimension, - element, - -- * Composite - Composite, - field, -) + ( -- * Result + Result, + noResult, + rowsAffected, + singleRow, + + -- ** Specialized multi-row results + rowMaybe, + rowVector, + rowList, + + -- ** Multi-row traversers + foldlRows, + foldrRows, + + -- * Row + Row, + column, + + -- * Nullability + NullableOrNot, + nonNullable, + nullable, + + -- * Value + Value, + bool, + int2, + int4, + int8, + float4, + float8, + numeric, + char, + text, + bytea, + date, + timestamp, + timestamptz, + time, + timetz, + interval, + uuid, + inet, + json, + jsonBytes, + jsonb, + jsonbBytes, + array, + listArray, + vectorArray, + composite, + hstore, + enum, + custom, + refine, + + -- * Array + Array, + dimension, + element, + + -- * Composite + Composite, + field, + ) where import Hasql.Private.Decoders diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 42fcfb690e..f0b2742861 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -1,52 +1,53 @@ -{-| -A DSL for declaration of statement parameter encoders. - -For compactness of names all the types defined here imply being an encoder. -E.g., the `Array` type is an __encoder__ of arrays, not the data-structure itself. --} +-- | +-- A DSL for declaration of statement parameter encoders. +-- +-- For compactness of names all the types defined here imply being an encoder. +-- E.g., the `Array` type is an __encoder__ of arrays, not the data-structure itself. module Hasql.Encoders -( - -- * Parameters product - Params, - noParams, - param, - -- * Nullability - NullableOrNot, - nonNullable, - nullable, - -- * Value - Value, - bool, - int2, - int4, - int8, - float4, - float8, - numeric, - char, - text, - bytea, - date, - timestamp, - timestamptz, - time, - timetz, - interval, - uuid, - inet, - json, - jsonBytes, - jsonb, - jsonbBytes, - enum, - unknown, - array, - foldableArray, - -- * Array - Array, - element, - dimension, -) + ( -- * Parameters product + Params, + noParams, + param, + + -- * Nullability + NullableOrNot, + nonNullable, + nullable, + + -- * Value + Value, + bool, + int2, + int4, + int8, + float4, + float8, + numeric, + char, + text, + bytea, + date, + timestamp, + timestamptz, + time, + timetz, + interval, + uuid, + inet, + json, + jsonBytes, + jsonb, + jsonbBytes, + enum, + unknown, + array, + foldableArray, + + -- * Array + Array, + element, + dimension, + ) where import Hasql.Private.Encoders diff --git a/library/Hasql/Private/Commands.hs b/library/Hasql/Private/Commands.hs index ef3a34dc38..29c9904e4f 100644 --- a/library/Hasql/Private/Commands.hs +++ b/library/Hasql/Private/Commands.hs @@ -1,20 +1,18 @@ module Hasql.Private.Commands -( - Commands, - asBytes, - setEncodersToUTF8, - setMinClientMessagesToWarning, -) + ( Commands, + asBytes, + setEncodersToUTF8, + setMinClientMessagesToWarning, + ) where -import Hasql.Private.Prelude import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL +import Hasql.Private.Prelude - -newtype Commands = - Commands (DList BB.Builder) +newtype Commands + = Commands (DList BB.Builder) deriving (Semigroup, Monoid) asBytes :: Commands -> ByteString diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Private/Connection.hs index 5207dca056..3d1af26ec1 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Private/Connection.hs @@ -1,19 +1,17 @@ -- | -- This module provides a low-level effectful API dealing with the connections to the database. -module Hasql.Private.Connection -where +module Hasql.Private.Connection where -import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Private.IO as IO +import Hasql.Private.Prelude +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Private.Settings as Settings - -- | -- A single connection to the database. -data Connection = - Connection !(MVar LibPQ.Connection) !Bool !PreparedStatementRegistry.PreparedStatementRegistry +data Connection + = Connection !(MVar LibPQ.Connection) !Bool !PreparedStatementRegistry.PreparedStatementRegistry -- | -- Possible details of the connection acquistion error. diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index e1e692dd8b..8ae6f2e2af 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -1,53 +1,48 @@ -{-| -A DSL for declaration of result decoders. --} -module Hasql.Private.Decoders -where +-- | +-- A DSL for declaration of result decoders. +module Hasql.Private.Decoders where -import Hasql.Private.Prelude hiding (maybe, bool) import qualified Data.Vector as Vector -import qualified PostgreSQL.Binary.Decoding as A -import qualified PostgreSQL.Binary.Data as B -import qualified Hasql.Private.Decoders.Results as Results +import qualified Data.Vector.Generic as GenericVector +import qualified Hasql.Private.Decoders.Array as Array +import qualified Hasql.Private.Decoders.Composite as Composite import qualified Hasql.Private.Decoders.Result as Result +import qualified Hasql.Private.Decoders.Results as Results import qualified Hasql.Private.Decoders.Row as Row import qualified Hasql.Private.Decoders.Value as Value -import qualified Hasql.Private.Decoders.Array as Array -import qualified Hasql.Private.Decoders.Composite as Composite import qualified Hasql.Private.Errors as Errors +import Hasql.Private.Prelude hiding (bool, maybe) import qualified Hasql.Private.Prelude as Prelude -import qualified Data.Vector.Generic as GenericVector +import qualified PostgreSQL.Binary.Data as B +import qualified PostgreSQL.Binary.Decoding as A -- * Result + ------------------------- -{-| -Decoder of a query result. --} +-- | +-- Decoder of a query result. newtype Result a = Result (Results.Results a) deriving (Functor) -{-| -Decode no value from the result. - -Useful for statements like @INSERT@ or @CREATE@. --} -{-# INLINABLE noResult #-} +-- | +-- Decode no value from the result. +-- +-- Useful for statements like @INSERT@ or @CREATE@. +{-# INLINEABLE noResult #-} noResult :: Result () noResult = Result (Results.single Result.noResult) -{-| -Get the amount of rows affected by such statements as -@UPDATE@ or @DELETE@. --} -{-# INLINABLE rowsAffected #-} +-- | +-- Get the amount of rows affected by such statements as +-- @UPDATE@ or @DELETE@. +{-# INLINEABLE rowsAffected #-} rowsAffected :: Result Int64 rowsAffected = Result (Results.single Result.rowsAffected) -{-| -Exactly one row. -Will raise the 'Errors.UnexpectedAmountOfRows' error if it's any other. --} -{-# INLINABLE singleRow #-} +-- | +-- Exactly one row. +-- Will raise the 'Errors.UnexpectedAmountOfRows' error if it's any other. +{-# INLINEABLE singleRow #-} singleRow :: Row a -> Result a singleRow (Row row) = Result (Results.single (Result.single row)) @@ -55,418 +50,375 @@ refineResult :: (a -> Either Text b) -> Result a -> Result b refineResult refiner (Result results) = Result (Results.refine refiner results) -- ** Multi-row traversers + ------------------------- -{-| -Foldl multiple rows. --} -{-# INLINABLE foldlRows #-} +-- | +-- Foldl multiple rows. +{-# INLINEABLE foldlRows #-} foldlRows :: (a -> b -> a) -> a -> Row b -> Result a foldlRows step init (Row row) = Result (Results.single (Result.foldl step init row)) -{-| -Foldr multiple rows. --} -{-# INLINABLE foldrRows #-} +-- | +-- Foldr multiple rows. +{-# INLINEABLE foldrRows #-} foldrRows :: (b -> a -> a) -> a -> Row b -> Result a foldrRows step init (Row row) = Result (Results.single (Result.foldr step init row)) -- ** Specialized multi-row results + ------------------------- -{-| -Maybe one row or none. --} -{-# INLINABLE rowMaybe #-} +-- | +-- Maybe one row or none. +{-# INLINEABLE rowMaybe #-} rowMaybe :: Row a -> Result (Maybe a) rowMaybe (Row row) = Result (Results.single (Result.maybe row)) -{-| -Zero or more rows packed into the vector. - -It's recommended to prefer this function to 'rowList', -since it performs notably better. --} -{-# INLINABLE rowVector #-} +-- | +-- Zero or more rows packed into the vector. +-- +-- It's recommended to prefer this function to 'rowList', +-- since it performs notably better. +{-# INLINEABLE rowVector #-} rowVector :: Row a -> Result (Vector a) rowVector (Row row) = Result (Results.single (Result.vector row)) -{-| -Zero or more rows packed into the list. --} -{-# INLINABLE rowList #-} +-- | +-- Zero or more rows packed into the list. +{-# INLINEABLE rowList #-} rowList :: Row a -> Result [a] rowList = foldrRows strictCons [] - -- * Row -------------------------- - -{-| -Decoder of an individual row, -which gets composed of column value decoders. -E.g.: +------------------------- -@ -x :: 'Row' (Maybe Int64, Text, TimeOfDay) -x = (,,) '<$>' ('column' . 'nullable') 'int8' '<*>' ('column' . 'nonNullable') 'text' '<*>' ('column' . 'nonNullable') 'time' -@ --} +-- | +-- Decoder of an individual row, +-- which gets composed of column value decoders. +-- +-- E.g.: +-- +-- @ +-- x :: 'Row' (Maybe Int64, Text, TimeOfDay) +-- x = (,,) '<$>' ('column' . 'nullable') 'int8' '<*>' ('column' . 'nonNullable') 'text' '<*>' ('column' . 'nonNullable') 'time' +-- @ newtype Row a = Row (Row.Row a) deriving (Functor, Applicative, Monad, MonadFail) -{-| -Lift an individual value decoder to a composable row decoder. --} -{-# INLINABLE column #-} +-- | +-- Lift an individual value decoder to a composable row decoder. +{-# INLINEABLE column #-} column :: NullableOrNot Value a -> Row a -column = \ case +column = \case NonNullable (Value imp) -> Row (Row.nonNullValue imp) Nullable (Value imp) -> Row (Row.value imp) - -- * Nullability + ------------------------- -{-| -Extensional specification of nullability over a generic decoder. --} +-- | +-- Extensional specification of nullability over a generic decoder. data NullableOrNot decoder a where NonNullable :: decoder a -> NullableOrNot decoder a Nullable :: decoder a -> NullableOrNot decoder (Maybe a) -{-| -Specify that a decoder produces a non-nullable value. --} +-- | +-- Specify that a decoder produces a non-nullable value. nonNullable :: decoder a -> NullableOrNot decoder a nonNullable = NonNullable -{-| -Specify that a decoder produces a nullable value. --} +-- | +-- Specify that a decoder produces a nullable value. nullable :: decoder a -> NullableOrNot decoder (Maybe a) nullable = Nullable - -- * Value + ------------------------- -{-| -Decoder of a value. --} +-- | +-- Decoder of a value. newtype Value a = Value (Value.Value a) deriving (Functor) type role Value representational -{-| -Decoder of the @BOOL@ values. --} -{-# INLINABLE bool #-} +-- | +-- Decoder of the @BOOL@ values. +{-# INLINEABLE bool #-} bool :: Value Bool bool = Value (Value.decoder (const A.bool)) -{-| -Decoder of the @INT2@ values. --} -{-# INLINABLE int2 #-} +-- | +-- Decoder of the @INT2@ values. +{-# INLINEABLE int2 #-} int2 :: Value Int16 int2 = Value (Value.decoder (const A.int)) -{-| -Decoder of the @INT4@ values. --} -{-# INLINABLE int4 #-} +-- | +-- Decoder of the @INT4@ values. +{-# INLINEABLE int4 #-} int4 :: Value Int32 int4 = Value (Value.decoder (const A.int)) -{-| -Decoder of the @INT8@ values. --} -{-# INLINABLE int8 #-} +-- | +-- Decoder of the @INT8@ values. +{-# INLINEABLE int8 #-} int8 :: Value Int64 -int8 = {-# SCC "int8" #-} +int8 = + {-# SCC "int8" #-} Value (Value.decoder (const ({-# SCC "int8.int" #-} A.int))) -{-| -Decoder of the @FLOAT4@ values. --} -{-# INLINABLE float4 #-} +-- | +-- Decoder of the @FLOAT4@ values. +{-# INLINEABLE float4 #-} float4 :: Value Float float4 = Value (Value.decoder (const A.float4)) -{-| -Decoder of the @FLOAT8@ values. --} -{-# INLINABLE float8 #-} +-- | +-- Decoder of the @FLOAT8@ values. +{-# INLINEABLE float8 #-} float8 :: Value Double float8 = Value (Value.decoder (const A.float8)) -{-| -Decoder of the @NUMERIC@ values. --} -{-# INLINABLE numeric #-} +-- | +-- Decoder of the @NUMERIC@ values. +{-# INLINEABLE numeric #-} numeric :: Value B.Scientific numeric = Value (Value.decoder (const A.numeric)) -{-| -Decoder of the @CHAR@ values. -Note that it supports Unicode values. --} -{-# INLINABLE char #-} +-- | +-- Decoder of the @CHAR@ values. +-- Note that it supports Unicode values. +{-# INLINEABLE char #-} char :: Value Char char = Value (Value.decoder (const A.char)) -{-| -Decoder of the @TEXT@ values. --} -{-# INLINABLE text #-} +-- | +-- Decoder of the @TEXT@ values. +{-# INLINEABLE text #-} text :: Value Text text = Value (Value.decoder (const A.text_strict)) -{-| -Decoder of the @BYTEA@ values. --} -{-# INLINABLE bytea #-} +-- | +-- Decoder of the @BYTEA@ values. +{-# INLINEABLE bytea #-} bytea :: Value ByteString bytea = Value (Value.decoder (const A.bytea_strict)) -{-| -Decoder of the @DATE@ values. --} -{-# INLINABLE date #-} +-- | +-- Decoder of the @DATE@ values. +{-# INLINEABLE date #-} date :: Value B.Day date = Value (Value.decoder (const A.date)) -{-| -Decoder of the @TIMESTAMP@ values. --} -{-# INLINABLE timestamp #-} +-- | +-- Decoder of the @TIMESTAMP@ values. +{-# INLINEABLE timestamp #-} timestamp :: Value B.LocalTime timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) -{-| -Decoder of the @TIMESTAMPTZ@ values. - -/NOTICE/ - -Postgres does not store the timezone information of @TIMESTAMPTZ@. -Instead it stores a UTC value and performs silent conversions -to the currently set timezone, when dealt with in the text format. -However this library bypasses the silent conversions -and communicates with Postgres using the UTC values directly. --} -{-# INLINABLE timestamptz #-} +-- | +-- Decoder of the @TIMESTAMPTZ@ values. +-- +-- /NOTICE/ +-- +-- Postgres does not store the timezone information of @TIMESTAMPTZ@. +-- Instead it stores a UTC value and performs silent conversions +-- to the currently set timezone, when dealt with in the text format. +-- However this library bypasses the silent conversions +-- and communicates with Postgres using the UTC values directly. +{-# INLINEABLE timestamptz #-} timestamptz :: Value B.UTCTime timestamptz = Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) -{-| -Decoder of the @TIME@ values. --} -{-# INLINABLE time #-} +-- | +-- Decoder of the @TIME@ values. +{-# INLINEABLE time #-} time :: Value B.TimeOfDay time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -{-| -Decoder of the @TIMETZ@ values. - -Unlike in case of @TIMESTAMPTZ@, -Postgres does store the timezone information for @TIMETZ@. -However the Haskell's \"time\" library does not contain any composite type, -that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' -to represent a value on the Haskell's side. --} -{-# INLINABLE timetz #-} +-- | +-- Decoder of the @TIMETZ@ values. +-- +-- Unlike in case of @TIMESTAMPTZ@, +-- Postgres does store the timezone information for @TIMETZ@. +-- However the Haskell's \"time\" library does not contain any composite type, +-- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' +-- to represent a value on the Haskell's side. +{-# INLINEABLE timetz #-} timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) -{-| -Decoder of the @INTERVAL@ values. --} -{-# INLINABLE interval #-} +-- | +-- Decoder of the @INTERVAL@ values. +{-# INLINEABLE interval #-} interval :: Value B.DiffTime interval = Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) -{-| -Decoder of the @UUID@ values. --} -{-# INLINABLE uuid #-} +-- | +-- Decoder of the @UUID@ values. +{-# INLINEABLE uuid #-} uuid :: Value B.UUID uuid = Value (Value.decoder (const A.uuid)) -{-| -Decoder of the @INET@ values. --} -{-# INLINABLE inet #-} +-- | +-- Decoder of the @INET@ values. +{-# INLINEABLE inet #-} inet :: Value (B.NetAddr B.IP) inet = Value (Value.decoder (const A.inet)) -{-| -Decoder of the @JSON@ values into a JSON AST. --} -{-# INLINABLE json #-} +-- | +-- Decoder of the @JSON@ values into a JSON AST. +{-# INLINEABLE json #-} json :: Value B.Value json = Value (Value.decoder (const A.json_ast)) -{-| -Decoder of the @JSON@ values into a raw JSON 'ByteString'. --} -{-# INLINABLE jsonBytes #-} +-- | +-- Decoder of the @JSON@ values into a raw JSON 'ByteString'. +{-# INLINEABLE jsonBytes #-} jsonBytes :: (ByteString -> Either Text a) -> Value a jsonBytes fn = Value (Value.decoder (const (A.json_bytes fn))) -{-| -Decoder of the @JSONB@ values into a JSON AST. --} -{-# INLINABLE jsonb #-} +-- | +-- Decoder of the @JSONB@ values into a JSON AST. +{-# INLINEABLE jsonb #-} jsonb :: Value B.Value jsonb = Value (Value.decoder (const A.jsonb_ast)) -{-| -Decoder of the @JSONB@ values into a raw JSON 'ByteString'. --} -{-# INLINABLE jsonbBytes #-} +-- | +-- Decoder of the @JSONB@ values into a raw JSON 'ByteString'. +{-# INLINEABLE jsonbBytes #-} jsonbBytes :: (ByteString -> Either Text a) -> Value a jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) -{-| -Lift a custom value decoder function to a 'Value' decoder. --} -{-# INLINABLE custom #-} +-- | +-- Lift a custom value decoder function to a 'Value' decoder. +{-# INLINEABLE custom #-} custom :: (Bool -> ByteString -> Either Text a) -> Value a custom fn = Value (Value.decoderFn fn) -{-| -Refine a value decoder, lifting the possible error to the session level. --} -{-# INLINABLE refine #-} +-- | +-- Refine a value decoder, lifting the possible error to the session level. +{-# INLINEABLE refine #-} refine :: (a -> Either Text b) -> Value a -> Value b refine fn (Value v) = Value (Value.Value (\b -> A.refine fn (Value.run v b))) -{-| -A generic decoder of @HSTORE@ values. - -Here's how you can use it to construct a specific value: - -@ -x :: Value [(Text, Maybe Text)] -x = hstore 'replicateM' -@ --} -{-# INLINABLE hstore #-} +-- | +-- A generic decoder of @HSTORE@ values. +-- +-- Here's how you can use it to construct a specific value: +-- +-- @ +-- x :: Value [(Text, Maybe Text)] +-- x = hstore 'replicateM' +-- @ +{-# INLINEABLE hstore #-} hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a hstore replicateM = Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) -{-| -Given a partial mapping from text to value, -produces a decoder of that value. --} +-- | +-- Given a partial mapping from text to value, +-- produces a decoder of that value. enum :: (Text -> Maybe a) -> Value a enum mapping = Value (Value.decoder (const (A.enum mapping))) -{-| -Lift an 'Array' decoder to a 'Value' decoder. --} -{-# INLINABLE array #-} +-- | +-- Lift an 'Array' decoder to a 'Value' decoder. +{-# INLINEABLE array #-} array :: Array a -> Value a array (Array imp) = Value (Value.decoder (Array.run imp)) -{-| -Lift a value decoder of element into a unidimensional array decoder producing a list. - -This function is merely a shortcut to the following expression: - -@ -('array' . 'dimension' Control.Monad.'replicateM' . 'element') -@ - -Please notice that in case of multidimensional arrays nesting 'listArray' decoder -won't work. You have to explicitly construct the array decoder using 'array'. --} +-- | +-- Lift a value decoder of element into a unidimensional array decoder producing a list. +-- +-- This function is merely a shortcut to the following expression: +-- +-- @ +-- ('array' . 'dimension' Control.Monad.'replicateM' . 'element') +-- @ +-- +-- Please notice that in case of multidimensional arrays nesting 'listArray' decoder +-- won't work. You have to explicitly construct the array decoder using 'array'. {-# INLINE listArray #-} listArray :: NullableOrNot Value element -> Value [element] listArray = array . dimension replicateM . element -{-| -Lift a value decoder of element into a unidimensional array decoder producing a generic vector. - -This function is merely a shortcut to the following expression: - -@ -('array' . 'dimension' Data.Vector.Generic.'GenericVector.replicateM' . 'element') -@ - -Please notice that in case of multidimensional arrays nesting 'vectorArray' decoder -won't work. You have to explicitly construct the array decoder using 'array'. --} +-- | +-- Lift a value decoder of element into a unidimensional array decoder producing a generic vector. +-- +-- This function is merely a shortcut to the following expression: +-- +-- @ +-- ('array' . 'dimension' Data.Vector.Generic.'GenericVector.replicateM' . 'element') +-- @ +-- +-- Please notice that in case of multidimensional arrays nesting 'vectorArray' decoder +-- won't work. You have to explicitly construct the array decoder using 'array'. {-# INLINE vectorArray #-} vectorArray :: GenericVector.Vector vector element => NullableOrNot Value element -> Value (vector element) vectorArray = array . dimension GenericVector.replicateM . element -{-| -Lift a 'Composite' decoder to a 'Value' decoder. --} -{-# INLINABLE composite #-} +-- | +-- Lift a 'Composite' decoder to a 'Value' decoder. +{-# INLINEABLE composite #-} composite :: Composite a -> Value a composite (Composite imp) = Value (Value.decoder (Composite.run imp)) - -- * Array decoders -------------------------- - -{-| -A generic array decoder. -Here's how you can use it to produce a specific array value decoder: +------------------------- -@ -x :: 'Value' [[Text]] -x = 'array' ('dimension' 'replicateM' ('dimension' 'replicateM' ('element' ('nonNullable' 'text')))) -@ --} +-- | +-- A generic array decoder. +-- +-- Here's how you can use it to produce a specific array value decoder: +-- +-- @ +-- x :: 'Value' [[Text]] +-- x = 'array' ('dimension' 'replicateM' ('dimension' 'replicateM' ('element' ('nonNullable' 'text')))) +-- @ newtype Array a = Array (Array.Array a) deriving (Functor) -{-| -A function for parsing a dimension of an array. -Provides support for multi-dimensional arrays. - -Accepts: - -* An implementation of the @replicateM@ function -(@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), -which determines the output value. - -* A decoder of its components, which can be either another 'dimension' or 'element'. --} -{-# INLINABLE dimension #-} +-- | +-- A function for parsing a dimension of an array. +-- Provides support for multi-dimensional arrays. +-- +-- Accepts: +-- +-- * An implementation of the @replicateM@ function +-- (@Control.Monad.'Control.Monad.replicateM'@, @Data.Vector.'Data.Vector.replicateM'@), +-- which determines the output value. +-- +-- * A decoder of its components, which can be either another 'dimension' or 'element'. +{-# INLINEABLE dimension #-} dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b dimension replicateM (Array imp) = Array (Array.dimension replicateM imp) -{-| -Lift a 'Value' decoder into an 'Array' decoder for parsing of leaf values. --} -{-# INLINABLE element #-} +-- | +-- Lift a 'Value' decoder into an 'Array' decoder for parsing of leaf values. +{-# INLINEABLE element #-} element :: NullableOrNot Value a -> Array a -element = \ case +element = \case NonNullable (Value imp) -> Array (Array.nonNullValue (Value.run imp)) Nullable (Value imp) -> Array (Array.value (Value.run imp)) - -- * Composite decoders + ------------------------- -{-| -Composable decoder of composite values (rows, records). --} +-- | +-- Composable decoder of composite values (rows, records). newtype Composite a = Composite (Composite.Composite a) deriving (Functor, Applicative, Monad, MonadFail) -{-| -Lift a 'Value' decoder into a 'Composite' decoder for parsing of component values. --} +-- | +-- Lift a 'Value' decoder into a 'Composite' decoder for parsing of component values. field :: NullableOrNot Value a -> Composite a -field = \ case +field = \case NonNullable (Value imp) -> Composite (Composite.nonNullValue (Value.run imp)) Nullable (Value imp) -> Composite (Composite.value (Value.run imp)) diff --git a/library/Hasql/Private/Decoders/Array.hs b/library/Hasql/Private/Decoders/Array.hs index 01c5b3218f..711154697f 100644 --- a/library/Hasql/Private/Decoders/Array.hs +++ b/library/Hasql/Private/Decoders/Array.hs @@ -3,9 +3,8 @@ module Hasql.Private.Decoders.Array where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Decoding as A - -newtype Array a = - Array (ReaderT Bool A.Array a) +newtype Array a + = Array (ReaderT Bool A.Array a) deriving (Functor) {-# INLINE run #-} @@ -27,4 +26,3 @@ value decoder' = nonNullValue :: (Bool -> A.Value a) -> Array a nonNullValue decoder' = Array $ ReaderT $ A.valueArray . decoder' - diff --git a/library/Hasql/Private/Decoders/Composite.hs b/library/Hasql/Private/Decoders/Composite.hs index 8d40237458..308869c5e4 100644 --- a/library/Hasql/Private/Decoders/Composite.hs +++ b/library/Hasql/Private/Decoders/Composite.hs @@ -3,9 +3,8 @@ module Hasql.Private.Decoders.Composite where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Decoding as A - -newtype Composite a = - Composite (ReaderT Bool A.Composite a) +newtype Composite a + = Composite (ReaderT Bool A.Composite a) deriving (Functor, Applicative, Monad, MonadFail) {-# INLINE run #-} @@ -22,4 +21,3 @@ value decoder' = nonNullValue :: (Bool -> A.Value a) -> Composite a nonNullValue decoder' = Composite $ ReaderT $ A.valueComposite . decoder' - diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index c75fa343b6..dc7e03f431 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -1,18 +1,17 @@ module Hasql.Private.Decoders.Result where -import Hasql.Private.Prelude hiding (maybe, many) -import Hasql.Private.Errors -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Decoders.Row as Row import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString -import qualified Hasql.Private.Prelude as Prelude import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MutableVector +import qualified Database.PostgreSQL.LibPQ as LibPQ +import qualified Hasql.Private.Decoders.Row as Row +import Hasql.Private.Errors +import Hasql.Private.Prelude hiding (many, maybe) +import qualified Hasql.Private.Prelude as Prelude - -newtype Result a = - Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) +newtype Result a + = Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) deriving (Functor, Applicative, Monad) {-# INLINE run #-} @@ -35,8 +34,10 @@ rowsAffected = checkExecStatus $ \case LibPQ.CommandOk -> True _ -> False - Result $ ReaderT $ \(_, result) -> ExceptT $ - LibPQ.cmdTuples result & fmap cmdTuplesReader + Result $ + ReaderT $ \(_, result) -> + ExceptT $ + LibPQ.cmdTuples result & fmap cmdTuplesReader where cmdTuplesReader = notNothing >=> notEmpty >=> decimal @@ -49,36 +50,37 @@ rowsAffected = else Right bytes decimal bytes = mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ - Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes + Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} checkExecStatus :: (LibPQ.ExecStatus -> Bool) -> Result () checkExecStatus predicate = - {-# SCC "checkExecStatus" #-} + {-# SCC "checkExecStatus" #-} do status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result unless (predicate status) $ do case status of - LibPQ.BadResponse -> serverError + LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError - LibPQ.FatalError -> serverError + LibPQ.FatalError -> serverError _ -> Result $ lift $ ExceptT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) {-# INLINE serverError #-} serverError :: Result () serverError = - Result $ ReaderT $ \(_, result) -> ExceptT $ do - code <- - fmap fold $ - LibPQ.resultErrorField result LibPQ.DiagSqlstate - message <- - fmap fold $ - LibPQ.resultErrorField result LibPQ.DiagMessagePrimary - detail <- - LibPQ.resultErrorField result LibPQ.DiagMessageDetail - hint <- - LibPQ.resultErrorField result LibPQ.DiagMessageHint - pure $ Left $ ServerError code message detail hint + Result $ + ReaderT $ \(_, result) -> ExceptT $ do + code <- + fmap fold $ + LibPQ.resultErrorField result LibPQ.DiagSqlstate + message <- + fmap fold $ + LibPQ.resultErrorField result LibPQ.DiagMessagePrimary + detail <- + LibPQ.resultErrorField result LibPQ.DiagMessageDetail + hint <- + LibPQ.resultErrorField result LibPQ.DiagMessageHint + pure $ Left $ ServerError code message detail hint {-# INLINE maybe #-} maybe :: Row.Row a -> Result (Maybe a) @@ -87,15 +89,16 @@ maybe rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do - maxRows <- LibPQ.ntuples result - case maxRows of - 0 -> return (Right Nothing) - 1 -> do - maxCols <- LibPQ.nfields result - let fromRowError (col, err) = RowError 0 col err - fmap (fmap Just . mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + Result $ + ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + maxRows <- LibPQ.ntuples result + case maxRows of + 0 -> return (Right Nothing) + 1 -> do + maxCols <- LibPQ.nfields result + let fromRowError (col, err) = RowError 0 col err + fmap (fmap Just . mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -109,14 +112,15 @@ single rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do - maxRows <- LibPQ.ntuples result - case maxRows of - 1 -> do - maxCols <- LibPQ.nfields result - let fromRowError (col, err) = RowError 0 col err - fmap (mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + Result $ + ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + maxRows <- LibPQ.ntuples result + case maxRows of + 1 -> do + maxCols <- LibPQ.nfields result + let fromRowError (col, err) = RowError 0 col err + fmap (mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -130,19 +134,20 @@ vector rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do - maxRows <- LibPQ.ntuples result - maxCols <- LibPQ.nfields result - mvector <- MutableVector.unsafeNew (rowToInt maxRows) - failureRef <- newIORef Nothing - forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) - case rowResult of - Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) - Right !x -> MutableVector.unsafeWrite mvector rowIndex x - readIORef failureRef >>= \case - Nothing -> Right <$> Vector.unsafeFreeze mvector - Just x -> pure (Left x) + Result $ + ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + mvector <- MutableVector.unsafeNew (rowToInt maxRows) + failureRef <- newIORef Nothing + forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Right !x -> MutableVector.unsafeWrite mvector rowIndex x + readIORef failureRef >>= \case + Nothing -> Right <$> Vector.unsafeFreeze mvector + Just x -> pure (Left x) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -152,24 +157,28 @@ vector rowDec = {-# INLINE foldl #-} foldl :: (a -> b -> a) -> a -> Row.Row b -> Result a foldl step init rowDec = - {-# SCC "foldl" #-} + {-# SCC "foldl" #-} do checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ {-# SCC "traversal" #-} do - maxRows <- LibPQ.ntuples result - maxCols <- LibPQ.nfields result - accRef <- newIORef init - failureRef <- newIORef Nothing - forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) - case rowResult of - Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) - Right !x -> modifyIORef' accRef (\acc -> step acc x) - readIORef failureRef >>= \case - Nothing -> Right <$> readIORef accRef - Just x -> pure (Left x) + Result $ + ReaderT $ \(integerDatetimes, result) -> + ExceptT $ + {-# SCC "traversal" #-} + do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + accRef <- newIORef init + failureRef <- newIORef Nothing + forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Right !x -> modifyIORef' accRef (\acc -> step acc x) + readIORef failureRef >>= \case + Nothing -> Right <$> readIORef accRef + Just x -> pure (Left x) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -179,24 +188,25 @@ foldl step init rowDec = {-# INLINE foldr #-} foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a foldr step init rowDec = - {-# SCC "foldr" #-} + {-# SCC "foldr" #-} do checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do - maxRows <- LibPQ.ntuples result - maxCols <- LibPQ.nfields result - accRef <- newIORef init - failureRef <- newIORef Nothing - forMToZero_ (rowToInt maxRows) $ \rowIndex -> do - rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) - case rowResult of - Left !(!colIndex,!x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) - Right !x -> modifyIORef accRef (\acc -> step x acc) - readIORef failureRef >>= \case - Nothing -> Right <$> readIORef accRef - Just x -> pure (Left x) + Result $ + ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + maxRows <- LibPQ.ntuples result + maxCols <- LibPQ.nfields result + accRef <- newIORef init + failureRef <- newIORef Nothing + forMToZero_ (rowToInt maxRows) $ \rowIndex -> do + rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) + case rowResult of + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Right !x -> modifyIORef accRef (\acc -> step x acc) + readIORef failureRef >>= \case + Nothing -> Right <$> readIORef accRef + Just x -> pure (Left x) where rowToInt (LibPQ.Row n) = fromIntegral n diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index 9af2bba9ac..af36034468 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -1,29 +1,26 @@ -- | -- An API for retrieval of multiple results. -- Can be used to handle: --- +-- -- * A single result, --- +-- -- * Individual results of a multi-statement query -- with the help of "Applicative" and "Monad", --- +-- -- * Row-by-row fetching. --- module Hasql.Private.Decoders.Results where -import Hasql.Private.Prelude hiding (maybe, many) -import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Prelude as Prelude import qualified Hasql.Private.Decoders.Result as Result import qualified Hasql.Private.Decoders.Row as Row +import Hasql.Private.Errors +import Hasql.Private.Prelude hiding (many, maybe) +import qualified Hasql.Private.Prelude as Prelude - -newtype Results a = - Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) +newtype Results a + = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) deriving (Functor, Applicative, Monad) - {-# INLINE run #-} run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either CommandError a) run (Results stack) env = @@ -32,32 +29,36 @@ run (Results stack) env = {-# INLINE clientError #-} clientError :: Results a clientError = - Results $ ReaderT $ \(_, connection) -> ExceptT $ - fmap (Left . ClientError) (LibPQ.errorMessage connection) + Results $ + ReaderT $ \(_, connection) -> + ExceptT $ + fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | -- Parse a single result. {-# INLINE single #-} single :: Result.Result a -> Results a single resultDec = - Results $ ReaderT $ \(integerDatetimes, connection) -> ExceptT $ do - resultMaybe <- LibPQ.getResult connection - case resultMaybe of - Just result -> - mapLeft ResultError <$> Result.run resultDec (integerDatetimes, result) - Nothing -> - fmap (Left . ClientError) (LibPQ.errorMessage connection) + Results $ + ReaderT $ \(integerDatetimes, connection) -> ExceptT $ do + resultMaybe <- LibPQ.getResult connection + case resultMaybe of + Just result -> + mapLeft ResultError <$> Result.run resultDec (integerDatetimes, result) + Nothing -> + fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. {-# INLINE getResult #-} getResult :: Results LibPQ.Result getResult = - Results $ ReaderT $ \(_, connection) -> ExceptT $ do - resultMaybe <- LibPQ.getResult connection - case resultMaybe of - Just result -> pure (Right result) - Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) + Results $ + ReaderT $ \(_, connection) -> ExceptT $ do + resultMaybe <- LibPQ.getResult connection + case resultMaybe of + Just result -> pure (Right result) + Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. @@ -69,7 +70,7 @@ getResultMaybe = {-# INLINE dropRemainders #-} dropRemainders :: Results () dropRemainders = - {-# SCC "dropRemainders" #-} + {-# SCC "dropRemainders" #-} Results $ ReaderT $ \(integerDatetimes, connection) -> loop integerDatetimes connection where loop integerDatetimes connection = @@ -84,6 +85,7 @@ dropRemainders = ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) refine :: (a -> Either Text b) -> Results a -> Results b -refine refiner results = Results $ ReaderT $ \ env -> ExceptT $ do - resultEither <- run results env - return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner +refine refiner results = Results $ + ReaderT $ \env -> ExceptT $ do + resultEither <- run results env + return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 140a50d1d6..540cd8afa9 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -1,24 +1,23 @@ module Hasql.Private.Decoders.Row where -import Hasql.Private.Prelude hiding (error) -import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified PostgreSQL.Binary.Decoding as A import qualified Hasql.Private.Decoders.Value as Value +import Hasql.Private.Errors +import Hasql.Private.Prelude hiding (error) +import qualified PostgreSQL.Binary.Decoding as A - -newtype Row a = - Row (ReaderT Env (ExceptT RowError IO) a) +newtype Row a + = Row (ReaderT Env (ExceptT RowError IO) a) deriving (Functor, Applicative, Monad) instance MonadFail Row where fail = error . ValueError . fromString -data Env = - Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) - +data Env + = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) -- * Functions + ------------------------- {-# INLINE run #-} @@ -44,20 +43,22 @@ error x = value :: Value.Value a -> Row (Maybe a) value valueDec = {-# SCC "value" #-} - Row $ ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do - col <- readIORef columnRef - writeIORef columnRef (succ col) - if col < columnsAmount - then do - valueMaybe <- {-# SCC "getvalue'" #-} LibPQ.getvalue' result row col - pure $ - case valueMaybe of - Nothing -> - Right Nothing - Just value -> - fmap Just $ mapLeft ValueError $ - {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value - else pure (Left EndOfInput) + Row $ + ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do + col <- readIORef columnRef + writeIORef columnRef (succ col) + if col < columnsAmount + then do + valueMaybe <- {-# SCC "getvalue'" #-} LibPQ.getvalue' result row col + pure $ + case valueMaybe of + Nothing -> + Right Nothing + Just value -> + fmap Just $ + mapLeft ValueError $ + {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value + else pure (Left EndOfInput) -- | -- Next value, decoded using the provided value decoder. diff --git a/library/Hasql/Private/Decoders/Value.hs b/library/Hasql/Private/Decoders/Value.hs index 2b8e1f98c8..cab735124a 100644 --- a/library/Hasql/Private/Decoders/Value.hs +++ b/library/Hasql/Private/Decoders/Value.hs @@ -3,9 +3,8 @@ module Hasql.Private.Decoders.Value where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Decoding as A - -newtype Value a = - Value (Bool -> A.Value a) +newtype Value a + = Value (Bool -> A.Value a) deriving (Functor) {-# INLINE run #-} @@ -16,7 +15,7 @@ run (Value imp) integerDatetimes = {-# INLINE decoder #-} decoder :: (Bool -> A.Value a) -> Value a decoder = - {-# SCC "decoder" #-} + {-# SCC "decoder" #-} Value {-# INLINE decoderFn #-} diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index e61849c425..07a6552d6a 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -1,371 +1,333 @@ -{-| -A DSL for declaration of query parameter encoders. --} -module Hasql.Private.Encoders -where +-- | +-- A DSL for declaration of query parameter encoders. +module Hasql.Private.Encoders where -import Hasql.Private.Prelude hiding (bool) -import qualified PostgreSQL.Binary.Encoding as A -import qualified PostgreSQL.Binary.Data as B -import qualified Text.Builder as C +import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value -import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.PTI as PTI +import Hasql.Private.Prelude hiding (bool) import qualified Hasql.Private.Prelude as Prelude - +import qualified PostgreSQL.Binary.Data as B +import qualified PostgreSQL.Binary.Encoding as A +import qualified Text.Builder as C -- * Parameters Product Encoder + ------------------------- -{-| -Encoder of some representation of a parameters product. - -Has instances of 'Contravariant', 'Divisible' and 'Monoid', -which you can use to compose multiple parameters together. -E.g., - -@ -someParamsEncoder :: 'Params' (Int64, Maybe Text) -someParamsEncoder = - ('fst' '>$<' 'param' ('nonNullable' 'int8')) '<>' - ('snd' '>$<' 'param' ('nullable' 'text')) -@ - -As a general solution for tuples of any arity, instead of 'fst' and 'snd', -consider the functions of the @contrazip@ family -from the \"contravariant-extras\" package. -E.g., here's how you can achieve the same as the above: - -@ -someParamsEncoder :: 'Params' (Int64, Maybe Text) -someParamsEncoder = - 'contrazip2' ('param' ('nonNullable' 'int8')) ('param' ('nullable' 'text')) -@ - -Here's how you can implement encoders for custom composite types: - -@ -data Person = Person { name :: Text, gender :: Gender, age :: Int } - -data Gender = Male | Female - -personParams :: 'Params' Person -personParams = - (name '>$<' 'param' ('nonNullable' 'text')) '<>' - (gender '>$<' 'param' ('nonNullable' genderValue)) '<>' - ('fromIntegral' . age '>$<' 'param' ('nonNullable' 'int8')) - -genderValue :: 'Value' Gender -genderValue = 'enum' genderText 'text' where - genderText gender = case gender of - Male -> "male" - Female -> "female" -@ --} +-- | +-- Encoder of some representation of a parameters product. +-- +-- Has instances of 'Contravariant', 'Divisible' and 'Monoid', +-- which you can use to compose multiple parameters together. +-- E.g., +-- +-- @ +-- someParamsEncoder :: 'Params' (Int64, Maybe Text) +-- someParamsEncoder = +-- ('fst' '>$<' 'param' ('nonNullable' 'int8')) '<>' +-- ('snd' '>$<' 'param' ('nullable' 'text')) +-- @ +-- +-- As a general solution for tuples of any arity, instead of 'fst' and 'snd', +-- consider the functions of the @contrazip@ family +-- from the \"contravariant-extras\" package. +-- E.g., here's how you can achieve the same as the above: +-- +-- @ +-- someParamsEncoder :: 'Params' (Int64, Maybe Text) +-- someParamsEncoder = +-- 'contrazip2' ('param' ('nonNullable' 'int8')) ('param' ('nullable' 'text')) +-- @ +-- +-- Here's how you can implement encoders for custom composite types: +-- +-- @ +-- data Person = Person { name :: Text, gender :: Gender, age :: Int } +-- +-- data Gender = Male | Female +-- +-- personParams :: 'Params' Person +-- personParams = +-- (name '>$<' 'param' ('nonNullable' 'text')) '<>' +-- (gender '>$<' 'param' ('nonNullable' genderValue)) '<>' +-- ('fromIntegral' . age '>$<' 'param' ('nonNullable' 'int8')) +-- +-- genderValue :: 'Value' Gender +-- genderValue = 'enum' genderText 'text' where +-- genderText gender = case gender of +-- Male -> "male" +-- Female -> "female" +-- @ newtype Params a = Params (Params.Params a) deriving (Contravariant, Divisible, Decidable, Monoid, Semigroup) -{-| -No parameters. Same as `mempty` and `conquered`. --} +-- | +-- No parameters. Same as `mempty` and `conquered`. noParams :: Params () noParams = mempty -{-| -Lift a single parameter encoder, with its nullability specified, -associating it with a single placeholder. --} +-- | +-- Lift a single parameter encoder, with its nullability specified, +-- associating it with a single placeholder. param :: NullableOrNot Value a -> Params a -param = \ case +param = \case NonNullable (Value valueEnc) -> Params (Params.value valueEnc) Nullable (Value valueEnc) -> Params (Params.nullableValue valueEnc) - -- * Nullability + ------------------------- -{-| -Extensional specification of nullability over a generic encoder. --} +-- | +-- Extensional specification of nullability over a generic encoder. data NullableOrNot encoder a where NonNullable :: encoder a -> NullableOrNot encoder a Nullable :: encoder a -> NullableOrNot encoder (Maybe a) -{-| -Specify that an encoder produces a non-nullable value. --} +-- | +-- Specify that an encoder produces a non-nullable value. nonNullable :: encoder a -> NullableOrNot encoder a nonNullable = NonNullable -{-| -Specify that an encoder produces a nullable value. --} +-- | +-- Specify that an encoder produces a nullable value. nullable :: encoder a -> NullableOrNot encoder (Maybe a) nullable = Nullable - -- * Value + ------------------------- -{-| -Value encoder. --} +-- | +-- Value encoder. newtype Value a = Value (Value.Value a) deriving (Contravariant) -{-| -Encoder of @BOOL@ values. --} -{-# INLINABLE bool #-} +-- | +-- Encoder of @BOOL@ values. +{-# INLINEABLE bool #-} bool :: Value Bool bool = Value (Value.unsafePTIWithShow PTI.bool (const A.bool)) -{-| -Encoder of @INT2@ values. --} -{-# INLINABLE int2 #-} +-- | +-- Encoder of @INT2@ values. +{-# INLINEABLE int2 #-} int2 :: Value Int16 int2 = Value (Value.unsafePTIWithShow PTI.int2 (const A.int2_int16)) -{-| -Encoder of @INT4@ values. --} -{-# INLINABLE int4 #-} +-- | +-- Encoder of @INT4@ values. +{-# INLINEABLE int4 #-} int4 :: Value Int32 int4 = Value (Value.unsafePTIWithShow PTI.int4 (const A.int4_int32)) -{-| -Encoder of @INT8@ values. --} -{-# INLINABLE int8 #-} +-- | +-- Encoder of @INT8@ values. +{-# INLINEABLE int8 #-} int8 :: Value Int64 int8 = Value (Value.unsafePTIWithShow PTI.int8 (const A.int8_int64)) -{-| -Encoder of @FLOAT4@ values. --} -{-# INLINABLE float4 #-} +-- | +-- Encoder of @FLOAT4@ values. +{-# INLINEABLE float4 #-} float4 :: Value Float float4 = Value (Value.unsafePTIWithShow PTI.float4 (const A.float4)) -{-| -Encoder of @FLOAT8@ values. --} -{-# INLINABLE float8 #-} +-- | +-- Encoder of @FLOAT8@ values. +{-# INLINEABLE float8 #-} float8 :: Value Double float8 = Value (Value.unsafePTIWithShow PTI.float8 (const A.float8)) -{-| -Encoder of @NUMERIC@ values. --} -{-# INLINABLE numeric #-} +-- | +-- Encoder of @NUMERIC@ values. +{-# INLINEABLE numeric #-} numeric :: Value B.Scientific numeric = Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) -{-| -Encoder of @CHAR@ values. - -Note that it supports Unicode values and -identifies itself under the @TEXT@ OID because of that. --} -{-# INLINABLE char #-} +-- | +-- Encoder of @CHAR@ values. +-- +-- Note that it supports Unicode values and +-- identifies itself under the @TEXT@ OID because of that. +{-# INLINEABLE char #-} char :: Value Char char = Value (Value.unsafePTIWithShow PTI.text (const A.char_utf8)) -{-| -Encoder of @TEXT@ values. --} -{-# INLINABLE text #-} +-- | +-- Encoder of @TEXT@ values. +{-# INLINEABLE text #-} text :: Value Text text = Value (Value.unsafePTIWithShow PTI.text (const A.text_strict)) -{-| -Encoder of @BYTEA@ values. --} -{-# INLINABLE bytea #-} +-- | +-- Encoder of @BYTEA@ values. +{-# INLINEABLE bytea #-} bytea :: Value ByteString bytea = Value (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) -{-| -Encoder of @DATE@ values. --} -{-# INLINABLE date #-} +-- | +-- Encoder of @DATE@ values. +{-# INLINEABLE date #-} date :: Value B.Day date = Value (Value.unsafePTIWithShow PTI.date (const A.date)) -{-| -Encoder of @TIMESTAMP@ values. --} -{-# INLINABLE timestamp #-} +-- | +-- Encoder of @TIMESTAMP@ values. +{-# INLINEABLE timestamp #-} timestamp :: Value B.LocalTime timestamp = Value (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) -{-| -Encoder of @TIMESTAMPTZ@ values. --} -{-# INLINABLE timestamptz #-} +-- | +-- Encoder of @TIMESTAMPTZ@ values. +{-# INLINEABLE timestamptz #-} timestamptz :: Value B.UTCTime timestamptz = Value (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) -{-| -Encoder of @TIME@ values. --} -{-# INLINABLE time #-} +-- | +-- Encoder of @TIME@ values. +{-# INLINEABLE time #-} time :: Value B.TimeOfDay time = Value (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) -{-| -Encoder of @TIMETZ@ values. --} -{-# INLINABLE timetz #-} +-- | +-- Encoder of @TIMETZ@ values. +{-# INLINEABLE timetz #-} timetz :: Value (B.TimeOfDay, B.TimeZone) timetz = Value (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) -{-| -Encoder of @INTERVAL@ values. --} -{-# INLINABLE interval #-} +-- | +-- Encoder of @INTERVAL@ values. +{-# INLINEABLE interval #-} interval :: Value B.DiffTime interval = Value (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) -{-| -Encoder of @UUID@ values. --} -{-# INLINABLE uuid #-} +-- | +-- Encoder of @UUID@ values. +{-# INLINEABLE uuid #-} uuid :: Value B.UUID uuid = Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) -{-| -Encoder of @INET@ values. --} -{-# INLINABLE inet #-} +-- | +-- Encoder of @INET@ values. +{-# INLINEABLE inet #-} inet :: Value (B.NetAddr B.IP) inet = Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) -{-| -Encoder of @JSON@ values from JSON AST. --} -{-# INLINABLE json #-} +-- | +-- Encoder of @JSON@ values from JSON AST. +{-# INLINEABLE json #-} json :: Value B.Value json = Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) -{-| -Encoder of @JSON@ values from raw JSON. --} -{-# INLINABLE jsonBytes #-} +-- | +-- Encoder of @JSON@ values from raw JSON. +{-# INLINEABLE jsonBytes #-} jsonBytes :: Value ByteString jsonBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) -{-| -Encoder of @JSONB@ values from JSON AST. --} -{-# INLINABLE jsonb #-} +-- | +-- Encoder of @JSONB@ values from JSON AST. +{-# INLINEABLE jsonb #-} jsonb :: Value B.Value jsonb = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) -{-| -Encoder of @JSONB@ values from raw JSON. --} -{-# INLINABLE jsonbBytes #-} +-- | +-- Encoder of @JSONB@ values from raw JSON. +{-# INLINEABLE jsonbBytes #-} jsonbBytes :: Value ByteString jsonbBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) -{-| -Given a function, -which maps a value into a textual enum label used on the DB side, -produces an encoder of that value. --} -{-# INLINABLE enum #-} +-- | +-- Given a function, +-- which maps a value into a textual enum label used on the DB side, +-- produces an encoder of that value. +{-# INLINEABLE enum #-} enum :: (a -> Text) -> Value a enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) -{-| -Identifies the value with the PostgreSQL's \"unknown\" type, -thus leaving it up to Postgres to infer the actual type of the value. - -The value transimitted is any value encoded in the Postgres' Text data format. -For reference, see the - -section of the Postgres' documentation. --} -{-# INLINABLE unknown #-} +-- | +-- Identifies the value with the PostgreSQL's \"unknown\" type, +-- thus leaving it up to Postgres to infer the actual type of the value. +-- +-- The value transimitted is any value encoded in the Postgres' Text data format. +-- For reference, see the +-- +-- section of the Postgres' documentation. +{-# INLINEABLE unknown #-} unknown :: Value ByteString unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) -{-| -Lift an array encoder into a parameter encoder. --} +-- | +-- Lift an array encoder into a parameter encoder. array :: Array a -> Value a -array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let - encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) - in Value (Value.Value arrayOID arrayOID encoder renderer) - -{-| -Lift a value encoder of element into a unidimensional array encoder of a foldable value. - -This function is merely a shortcut to the following expression: - -@ -('array' . 'dimension' 'foldl'' . 'element') -@ - -You can use it like this: - -@ -vectorOfInts :: Value (Vector Int64) -vectorOfInts = 'foldableArray' ('nonNullable' 'int8') -@ - -Please notice that in case of multidimensional arrays nesting 'foldableArray' encoder -won't work. You have to explicitly construct the array encoder using 'array'. --} +array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = + let encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) + in Value (Value.Value arrayOID arrayOID encoder renderer) + +-- | +-- Lift a value encoder of element into a unidimensional array encoder of a foldable value. +-- +-- This function is merely a shortcut to the following expression: +-- +-- @ +-- ('array' . 'dimension' 'foldl'' . 'element') +-- @ +-- +-- You can use it like this: +-- +-- @ +-- vectorOfInts :: Value (Vector Int64) +-- vectorOfInts = 'foldableArray' ('nonNullable' 'int8') +-- @ +-- +-- Please notice that in case of multidimensional arrays nesting 'foldableArray' encoder +-- won't work. You have to explicitly construct the array encoder using 'array'. {-# INLINE foldableArray #-} foldableArray :: Foldable foldable => NullableOrNot Value element -> Value (foldable element) foldableArray = array . dimension foldl' . element - -- * Array -------------------------- - -{-| -Generic array encoder. - -Here's an example of its usage: -@ -someParamsEncoder :: 'Params' [[Int64]] -someParamsEncoder = 'param' ('nonNullable' ('array' ('dimension' 'foldl'' ('dimension' 'foldl'' ('element' ('nonNullable' 'int8')))))) -@ +------------------------- -Please note that the PostgreSQL @IN@ keyword does not accept an array, but rather a syntactical list of -values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condition instead. --} +-- | +-- Generic array encoder. +-- +-- Here's an example of its usage: +-- +-- @ +-- someParamsEncoder :: 'Params' [[Int64]] +-- someParamsEncoder = 'param' ('nonNullable' ('array' ('dimension' 'foldl'' ('dimension' 'foldl'' ('element' ('nonNullable' 'int8')))))) +-- @ +-- +-- Please note that the PostgreSQL @IN@ keyword does not accept an array, but rather a syntactical list of +-- values, thus this encoder is not suited for that. Use a @value = ANY($1)@ condition instead. newtype Array a = Array (Array.Array a) deriving (Contravariant) -{-| -Lifts a 'Value' encoder into an 'Array' encoder. --} +-- | +-- Lifts a 'Value' encoder into an 'Array' encoder. element :: NullableOrNot Value a -> Array a -element = \ case +element = \case NonNullable (Value (Value.Value elementOID arrayOID encoder renderer)) -> Array (Array.value elementOID arrayOID encoder renderer) Nullable (Value (Value.Value elementOID arrayOID encoder renderer)) -> Array (Array.nullableValue elementOID arrayOID encoder renderer) -{-| -Encoder of an array dimension, -which thus provides support for multidimensional arrays. - -Accepts: - -* An implementation of the left-fold operation, -such as @Data.Foldable.'foldl''@, -which determines the input value. - -* A component encoder, which can be either another 'dimension' or 'element'. --} -{-# INLINABLE dimension #-} +-- | +-- Encoder of an array dimension, +-- which thus provides support for multidimensional arrays. +-- +-- Accepts: +-- +-- * An implementation of the left-fold operation, +-- such as @Data.Foldable.'foldl''@, +-- which determines the input value. +-- +-- * A component encoder, which can be either another 'dimension' or 'element'. +{-# INLINEABLE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c dimension foldl (Array imp) = Array (Array.dimension foldl imp) diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Private/Encoders/Array.hs index b8a3ea1928..6201c8535c 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Private/Encoders/Array.hs @@ -1,17 +1,16 @@ module Hasql.Private.Encoders.Array where +import qualified Hasql.Private.PTI as B import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as A -import qualified Hasql.Private.PTI as B import qualified Text.Builder as C - -data Array a = - Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) +data Array a + = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) instance Contravariant Array where contramap fn (Array valueOid arrayOid encoder renderer) = - Array valueOid arrayOid (\ intDateTimes -> encoder intDateTimes . fn) (renderer . fn) + Array valueOid arrayOid (\intDateTimes -> encoder intDateTimes . fn) (renderer . fn) {-# INLINE value #-} value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a @@ -21,29 +20,25 @@ value valueOID arrayOID encoder = {-# INLINE nullableValue #-} nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array (Maybe a) nullableValue valueOID arrayOID encoder renderer = - let - maybeEncoder params = - maybe A.nullArray (A.encodingArray . encoder params) - maybeRenderer = - maybe (C.string "null") renderer - in Array valueOID arrayOID maybeEncoder maybeRenderer + let maybeEncoder params = + maybe A.nullArray (A.encodingArray . encoder params) + maybeRenderer = + maybe (C.string "null") renderer + in Array valueOID arrayOID maybeEncoder maybeRenderer {-# INLINE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c dimension fold (Array valueOID arrayOID elEncoder elRenderer) = - let - encoder el = - A.dimensionArray fold (elEncoder el) - renderer els = - let - folded = - let - step builder el = - if C.null builder - then C.char '[' <> elRenderer el - else builder <> C.string ", " <> elRenderer el - in fold step mempty els - in if C.null folded - then C.string "[]" - else folded <> C.char ']' - in Array valueOID arrayOID encoder renderer + let encoder el = + A.dimensionArray fold (elEncoder el) + renderer els = + let folded = + let step builder el = + if C.null builder + then C.char '[' <> elRenderer el + else builder <> C.string ", " <> elRenderer el + in fold step mempty els + in if C.null folded + then C.string "[]" + else folded <> C.char ']' + in Array valueOID arrayOID encoder renderer diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index fcc61f8797..fb4d68aaec 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -1,17 +1,16 @@ module Hasql.Private.Encoders.Params where -import Hasql.Private.Prelude import qualified Database.PostgreSQL.LibPQ as A -import qualified PostgreSQL.Binary.Encoding as B import qualified Hasql.Private.Encoders.Value as C import qualified Hasql.Private.PTI as D +import Hasql.Private.Prelude +import qualified PostgreSQL.Binary.Encoding as B import qualified Text.Builder as E - -- | -- Encoder of some representation of a parameters product. -newtype Params a = - Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a) +newtype Params a + = Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a) deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid) value :: C.Value a -> Params a @@ -20,12 +19,12 @@ value = nullableValue :: C.Value a -> Params (Maybe a) nullableValue (C.Value valueOID arrayOID encode render) = - Params $ Op $ \ input -> - let - D.OID _ pqOid format = - valueOID - encoder env = - fmap (B.encodingBytes . encode env) input - rendering = - maybe "null" (E.run . render) input - in pure (pqOid, format, encoder, rendering) + Params $ + Op $ \input -> + let D.OID _ pqOid format = + valueOID + encoder env = + fmap (B.encodingBytes . encode env) input + rendering = + maybe "null" (E.run . render) input + in pure (pqOid, format, encoder, rendering) diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index ee9b2a93a7..d87fa381c1 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -1,13 +1,12 @@ module Hasql.Private.Encoders.Value where +import qualified Hasql.Private.PTI as PTI import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as B -import qualified Hasql.Private.PTI as PTI import qualified Text.Builder as C - -data Value a = - Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) +data Value a + = Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) instance Contravariant Value where {-# INLINE contramap #-} diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 470f8d6fa8..3036b1342e 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -1,90 +1,88 @@ -- | -- An API for retrieval of multiple results. -- Can be used to handle: --- +-- -- * A single result, --- +-- -- * Individual results of a multi-statement query -- with the help of "Applicative" and "Monad", --- +-- -- * Row-by-row fetching. --- module Hasql.Private.Errors where import Hasql.Private.Prelude - -- | -- An error during the execution of a query. -- Comes packed with the query template and a textual representation of the provided params. -data QueryError = - QueryError ByteString [Text] CommandError +data QueryError + = QueryError ByteString [Text] CommandError deriving (Show, Eq, Typeable) instance Exception QueryError -- | -- An error of some command in the session. -data CommandError = - -- | - -- An error on the client-side, - -- with a message generated by the \"libpq\" library. - -- Usually indicates problems with connection. - ClientError (Maybe ByteString) | - -- | - -- Some error with a command result. - ResultError ResultError +data CommandError + = -- | + -- An error on the client-side, + -- with a message generated by the \"libpq\" library. + -- Usually indicates problems with connection. + ClientError (Maybe ByteString) + | -- | + -- Some error with a command result. + ResultError ResultError deriving (Show, Eq) -- | -- An error with a command result. -data ResultError = - -- | - -- An error reported by the DB. - -- Consists of the following: Code, message, details, hint. - -- - -- * __Code__. - -- The SQLSTATE code for the error. - -- It's recommended to use - -- - -- to work with those. - -- - -- * __Message__. - -- The primary human-readable error message (typically one line). Always present. - -- - -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. - -- Might run to multiple lines. - ServerError ByteString ByteString (Maybe ByteString) (Maybe ByteString) | - -- | - -- The database returned an unexpected result. - -- Indicates an improper statement or a schema mismatch. - UnexpectedResult Text | - -- | - -- An error of the row reader, preceded by the indexes of the row and column. - RowError Int Int RowError | - -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows Int +data ResultError + = -- | + -- An error reported by the DB. + -- Consists of the following: Code, message, details, hint. + -- + -- * __Code__. + -- The SQLSTATE code for the error. + -- It's recommended to use + -- + -- to work with those. + -- + -- * __Message__. + -- The primary human-readable error message (typically one line). Always present. + -- + -- * __Details__. + -- An optional secondary error message carrying more detail about the problem. + -- Might run to multiple lines. + -- + -- * __Hint__. + -- An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice (potentially inappropriate) + -- rather than hard facts. + -- Might run to multiple lines. + ServerError ByteString ByteString (Maybe ByteString) (Maybe ByteString) + | -- | + -- The database returned an unexpected result. + -- Indicates an improper statement or a schema mismatch. + UnexpectedResult Text + | -- | + -- An error of the row reader, preceded by the indexes of the row and column. + RowError Int Int RowError + | -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows Int deriving (Show, Eq) -- | -- An error during the decoding of a specific row. -data RowError = - -- | - -- Appears on the attempt to parse more columns than there are in the result. - EndOfInput | - -- | - -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNull | - -- | - -- Appears when a wrong value parser is used. - -- Comes with the error details. - ValueError Text +data RowError + = -- | + -- Appears on the attempt to parse more columns than there are in the result. + EndOfInput + | -- | + -- Appears on the attempt to parse a @NULL@ as some value. + UnexpectedNull + | -- | + -- Appears when a wrong value parser is used. + -- Comes with the error details. + ValueError Text deriving (Show, Eq) diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index d51c712a51..abd65bd883 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -1,18 +1,16 @@ -- | -- An API of low-level IO operations. -module Hasql.Private.IO -where +module Hasql.Private.IO where -import Hasql.Private.Prelude -import Hasql.Private.Errors +import qualified Data.DList as DList import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Commands as Commands -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry import qualified Hasql.Private.Decoders.Result as ResultDecoders import qualified Hasql.Private.Decoders.Results as ResultsDecoders import qualified Hasql.Private.Encoders.Params as ParamsEncoders -import qualified Data.DList as DList - +import Hasql.Private.Errors +import Hasql.Private.Prelude +import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry {-# INLINE acquireConnection #-} acquireConnection :: ByteString -> IO LibPQ.Connection @@ -48,7 +46,7 @@ getIntegerDatetimes :: LibPQ.Connection -> IO Bool getIntegerDatetimes c = fmap decodeValue $ LibPQ.parameterStatus c "integer_datetimes" where - decodeValue = + decodeValue = \case Just "on" -> True _ -> False @@ -61,7 +59,7 @@ initConnection c = {-# INLINE getResults #-} getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either CommandError a) getResults connection integerDatetimes decoder = - {-# SCC "getResults" #-} + {-# SCC "getResults" #-} (<*) <$> get <*> dropRemainders where get = @@ -71,11 +69,13 @@ getResults connection integerDatetimes decoder = {-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: - LibPQ.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> - ByteString -> [LibPQ.Oid] -> + LibPQ.Connection -> + PreparedStatementRegistry.PreparedStatementRegistry -> + ByteString -> + [LibPQ.Oid] -> IO (Either CommandError ByteString) getPreparedStatementKey connection registry template oidList = - {-# SCC "getPreparedStatementKey" #-} + {-# SCC "getPreparedStatementKey" #-} PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry where localKey = @@ -86,7 +86,7 @@ getPreparedStatementKey connection registry template oidList = onNewRemoteKey key = do sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - let resultsDecoder = + let resultsDecoder = if sent then ResultsDecoders.single ResultDecoders.noResult else ResultsDecoders.clientError @@ -116,17 +116,15 @@ sendPreparedParametricStatement :: a -> IO (Either CommandError ()) sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = - let - (oidList, valueAndFormatList) = - let - step (oid, format, encoder, _) ~(oidList, bytesAndFormatList) = - (,) - (oid : oidList) - (fmap (\bytes -> (bytes, format)) (encoder integerDatetimes) : bytesAndFormatList) - in foldr step ([], []) (encoderOp input) - in runExceptT $ do - key <- ExceptT $ getPreparedStatementKey connection registry template oidList - ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + let (oidList, valueAndFormatList) = + let step (oid, format, encoder, _) ~(oidList, bytesAndFormatList) = + (,) + (oid : oidList) + (fmap (\bytes -> (bytes, format)) (encoder integerDatetimes) : bytesAndFormatList) + in foldr step ([], []) (encoderOp input) + in runExceptT $ do + key <- ExceptT $ getPreparedStatementKey connection registry template oidList + ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary {-# INLINE sendUnpreparedParametricStatement #-} sendUnpreparedParametricStatement :: @@ -137,18 +135,16 @@ sendUnpreparedParametricStatement :: a -> IO (Either CommandError ()) sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = - let - params = - let - step (oid, format, encoder, _) acc = - ((,,) <$> pure oid <*> encoder integerDatetimes <*> pure format) : acc - in foldr step [] (encoderOp input) - in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary + let params = + let step (oid, format, encoder, _) acc = + ((,,) <$> pure oid <*> encoder integerDatetimes <*> pure format) : acc + in foldr step [] (encoderOp input) + in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary {-# INLINE sendParametricStatement #-} sendParametricStatement :: LibPQ.Connection -> - Bool -> + Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> ParamsEncoders.Params a -> @@ -156,7 +152,7 @@ sendParametricStatement :: a -> IO (Either CommandError ()) sendParametricStatement connection integerDatetimes registry template encoder prepared params = - {-# SCC "sendParametricStatement" #-} + {-# SCC "sendParametricStatement" #-} if prepared then sendPreparedParametricStatement connection registry integerDatetimes template encoder params else sendUnpreparedParametricStatement connection integerDatetimes template encoder params diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/Private/PTI.hs index 2124035ad3..254d03e7de 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -1,14 +1,13 @@ module Hasql.Private.PTI where -import Hasql.Private.Prelude hiding (bool) import qualified Database.PostgreSQL.LibPQ as LibPQ - +import Hasql.Private.Prelude hiding (bool) -- | A Postgresql type info -data PTI = PTI { ptiOID :: !OID, ptiArrayOID :: !(Maybe OID) } +data PTI = PTI {ptiOID :: !OID, ptiArrayOID :: !(Maybe OID)} -- | A Word32 and a LibPQ representation of an OID -data OID = OID { oidWord32 :: !Word32, oidPQ :: !LibPQ.Oid, oidFormat :: !LibPQ.Format } +data OID = OID {oidWord32 :: !Word32, oidPQ :: !LibPQ.Oid, oidFormat :: !LibPQ.Format} mkOID :: LibPQ.Format -> Word32 -> OID mkOID format x = @@ -18,77 +17,144 @@ mkPTI :: LibPQ.Format -> Word32 -> Maybe Word32 -> PTI mkPTI format oid arrayOID = PTI (mkOID format oid) (fmap (mkOID format) arrayOID) - -- * Constants + ------------------------- -abstime = mkPTI LibPQ.Binary 702 (Just 1023) -aclitem = mkPTI LibPQ.Binary 1033 (Just 1034) -bit = mkPTI LibPQ.Binary 1560 (Just 1561) -bool = mkPTI LibPQ.Binary 16 (Just 1000) -box = mkPTI LibPQ.Binary 603 (Just 1020) -bpchar = mkPTI LibPQ.Binary 1042 (Just 1014) -bytea = mkPTI LibPQ.Binary 17 (Just 1001) -char = mkPTI LibPQ.Binary 18 (Just 1002) -cid = mkPTI LibPQ.Binary 29 (Just 1012) -cidr = mkPTI LibPQ.Binary 650 (Just 651) -circle = mkPTI LibPQ.Binary 718 (Just 719) -cstring = mkPTI LibPQ.Binary 2275 (Just 1263) -date = mkPTI LibPQ.Binary 1082 (Just 1182) -daterange = mkPTI LibPQ.Binary 3912 (Just 3913) -float4 = mkPTI LibPQ.Binary 700 (Just 1021) -float8 = mkPTI LibPQ.Binary 701 (Just 1022) -gtsvector = mkPTI LibPQ.Binary 3642 (Just 3644) -inet = mkPTI LibPQ.Binary 869 (Just 1041) -int2 = mkPTI LibPQ.Binary 21 (Just 1005) -int2vector = mkPTI LibPQ.Binary 22 (Just 1006) -int4 = mkPTI LibPQ.Binary 23 (Just 1007) -int4range = mkPTI LibPQ.Binary 3904 (Just 3905) -int8 = mkPTI LibPQ.Binary 20 (Just 1016) -int8range = mkPTI LibPQ.Binary 3926 (Just 3927) -interval = mkPTI LibPQ.Binary 1186 (Just 1187) -json = mkPTI LibPQ.Binary 114 (Just 199) -jsonb = mkPTI LibPQ.Binary 3802 (Just 3807) -line = mkPTI LibPQ.Binary 628 (Just 629) -lseg = mkPTI LibPQ.Binary 601 (Just 1018) -macaddr = mkPTI LibPQ.Binary 829 (Just 1040) -money = mkPTI LibPQ.Binary 790 (Just 791) -name = mkPTI LibPQ.Binary 19 (Just 1003) -numeric = mkPTI LibPQ.Binary 1700 (Just 1231) -numrange = mkPTI LibPQ.Binary 3906 (Just 3907) -oid = mkPTI LibPQ.Binary 26 (Just 1028) -oidvector = mkPTI LibPQ.Binary 30 (Just 1013) -path = mkPTI LibPQ.Binary 602 (Just 1019) -point = mkPTI LibPQ.Binary 600 (Just 1017) -polygon = mkPTI LibPQ.Binary 604 (Just 1027) -record = mkPTI LibPQ.Binary 2249 (Just 2287) -refcursor = mkPTI LibPQ.Binary 1790 (Just 2201) -regclass = mkPTI LibPQ.Binary 2205 (Just 2210) -regconfig = mkPTI LibPQ.Binary 3734 (Just 3735) -regdictionary = mkPTI LibPQ.Binary 3769 (Just 3770) -regoper = mkPTI LibPQ.Binary 2203 (Just 2208) -regoperator = mkPTI LibPQ.Binary 2204 (Just 2209) -regproc = mkPTI LibPQ.Binary 24 (Just 1008) -regprocedure = mkPTI LibPQ.Binary 2202 (Just 2207) -regtype = mkPTI LibPQ.Binary 2206 (Just 2211) -reltime = mkPTI LibPQ.Binary 703 (Just 1024) -text = mkPTI LibPQ.Binary 25 (Just 1009) -tid = mkPTI LibPQ.Binary 27 (Just 1010) -time = mkPTI LibPQ.Binary 1083 (Just 1183) -timestamp = mkPTI LibPQ.Binary 1114 (Just 1115) -timestamptz = mkPTI LibPQ.Binary 1184 (Just 1185) -timetz = mkPTI LibPQ.Binary 1266 (Just 1270) -tinterval = mkPTI LibPQ.Binary 704 (Just 1025) -tsquery = mkPTI LibPQ.Binary 3615 (Just 3645) -tsrange = mkPTI LibPQ.Binary 3908 (Just 3909) -tstzrange = mkPTI LibPQ.Binary 3910 (Just 3911) -tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) -txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) -unknown = mkPTI LibPQ.Text 705 (Just 705) -uuid = mkPTI LibPQ.Binary 2950 (Just 2951) -varbit = mkPTI LibPQ.Binary 1562 (Just 1563) -varchar = mkPTI LibPQ.Binary 1043 (Just 1015) -void = mkPTI LibPQ.Binary 2278 Nothing -xid = mkPTI LibPQ.Binary 28 (Just 1011) -xml = mkPTI LibPQ.Binary 142 (Just 143) +abstime = mkPTI LibPQ.Binary 702 (Just 1023) + +aclitem = mkPTI LibPQ.Binary 1033 (Just 1034) + +bit = mkPTI LibPQ.Binary 1560 (Just 1561) + +bool = mkPTI LibPQ.Binary 16 (Just 1000) + +box = mkPTI LibPQ.Binary 603 (Just 1020) + +bpchar = mkPTI LibPQ.Binary 1042 (Just 1014) + +bytea = mkPTI LibPQ.Binary 17 (Just 1001) + +char = mkPTI LibPQ.Binary 18 (Just 1002) + +cid = mkPTI LibPQ.Binary 29 (Just 1012) + +cidr = mkPTI LibPQ.Binary 650 (Just 651) + +circle = mkPTI LibPQ.Binary 718 (Just 719) + +cstring = mkPTI LibPQ.Binary 2275 (Just 1263) + +date = mkPTI LibPQ.Binary 1082 (Just 1182) + +daterange = mkPTI LibPQ.Binary 3912 (Just 3913) + +float4 = mkPTI LibPQ.Binary 700 (Just 1021) + +float8 = mkPTI LibPQ.Binary 701 (Just 1022) + +gtsvector = mkPTI LibPQ.Binary 3642 (Just 3644) + +inet = mkPTI LibPQ.Binary 869 (Just 1041) + +int2 = mkPTI LibPQ.Binary 21 (Just 1005) + +int2vector = mkPTI LibPQ.Binary 22 (Just 1006) + +int4 = mkPTI LibPQ.Binary 23 (Just 1007) + +int4range = mkPTI LibPQ.Binary 3904 (Just 3905) + +int8 = mkPTI LibPQ.Binary 20 (Just 1016) + +int8range = mkPTI LibPQ.Binary 3926 (Just 3927) + +interval = mkPTI LibPQ.Binary 1186 (Just 1187) + +json = mkPTI LibPQ.Binary 114 (Just 199) + +jsonb = mkPTI LibPQ.Binary 3802 (Just 3807) + +line = mkPTI LibPQ.Binary 628 (Just 629) + +lseg = mkPTI LibPQ.Binary 601 (Just 1018) + +macaddr = mkPTI LibPQ.Binary 829 (Just 1040) + +money = mkPTI LibPQ.Binary 790 (Just 791) + +name = mkPTI LibPQ.Binary 19 (Just 1003) + +numeric = mkPTI LibPQ.Binary 1700 (Just 1231) + +numrange = mkPTI LibPQ.Binary 3906 (Just 3907) + +oid = mkPTI LibPQ.Binary 26 (Just 1028) + +oidvector = mkPTI LibPQ.Binary 30 (Just 1013) + +path = mkPTI LibPQ.Binary 602 (Just 1019) + +point = mkPTI LibPQ.Binary 600 (Just 1017) + +polygon = mkPTI LibPQ.Binary 604 (Just 1027) + +record = mkPTI LibPQ.Binary 2249 (Just 2287) + +refcursor = mkPTI LibPQ.Binary 1790 (Just 2201) + +regclass = mkPTI LibPQ.Binary 2205 (Just 2210) + +regconfig = mkPTI LibPQ.Binary 3734 (Just 3735) + +regdictionary = mkPTI LibPQ.Binary 3769 (Just 3770) + +regoper = mkPTI LibPQ.Binary 2203 (Just 2208) + +regoperator = mkPTI LibPQ.Binary 2204 (Just 2209) + +regproc = mkPTI LibPQ.Binary 24 (Just 1008) + +regprocedure = mkPTI LibPQ.Binary 2202 (Just 2207) + +regtype = mkPTI LibPQ.Binary 2206 (Just 2211) + +reltime = mkPTI LibPQ.Binary 703 (Just 1024) + +text = mkPTI LibPQ.Binary 25 (Just 1009) + +tid = mkPTI LibPQ.Binary 27 (Just 1010) + +time = mkPTI LibPQ.Binary 1083 (Just 1183) + +timestamp = mkPTI LibPQ.Binary 1114 (Just 1115) + +timestamptz = mkPTI LibPQ.Binary 1184 (Just 1185) + +timetz = mkPTI LibPQ.Binary 1266 (Just 1270) + +tinterval = mkPTI LibPQ.Binary 704 (Just 1025) + +tsquery = mkPTI LibPQ.Binary 3615 (Just 3645) + +tsrange = mkPTI LibPQ.Binary 3908 (Just 3909) + +tstzrange = mkPTI LibPQ.Binary 3910 (Just 3911) + +tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) + +txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) + +unknown = mkPTI LibPQ.Text 705 (Just 705) + +uuid = mkPTI LibPQ.Binary 2950 (Just 2951) + +varbit = mkPTI LibPQ.Binary 1562 (Just 1563) + +varchar = mkPTI LibPQ.Binary 1043 (Just 1015) + +void = mkPTI LibPQ.Binary 2278 Nothing + +xid = mkPTI LibPQ.Binary 28 (Just 1011) +xml = mkPTI LibPQ.Binary 142 (Just 143) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index a152d963ba..6d1ea88cd2 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -1,36 +1,45 @@ module Hasql.Private.Prelude -( - module Exports, - LazyByteString, - ByteStringBuilder, - LazyText, - TextBuilder, - forMToZero_, - forMFromZero_, - strictCons, - mapLeft, -) + ( module Exports, + LazyByteString, + ByteStringBuilder, + LazyText, + TextBuilder, + forMToZero_, + forMFromZero_, + strictCons, + mapLeft, + ) where - --- base -------------------------- -import Control.Applicative as Exports hiding (WrappedArrow(..)) +import Control.Applicative as Exports hiding (WrappedArrow (..)) import Control.Arrow as Exports hiding (first, second) import Control.Category as Exports import Control.Concurrent as Exports import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) +import Control.Monad.Error.Class as Exports (MonadError (..)) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports +import Control.Monad.Reader.Class as Exports (MonadReader (..)) import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, WriterT (..), execWriter, execWriterT, mapWriter, mapWriterT, runWriter) import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import qualified Data.ByteString.Builder +import qualified Data.ByteString.Lazy import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports +import Data.DList as Exports (DList) import Data.Data as Exports import Data.Dynamic as Exports import Data.Either as Exports @@ -40,22 +49,30 @@ import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports import Data.Functor.Compose as Exports import Data.Functor.Contravariant as Exports -import Data.Int as Exports +import Data.Functor.Contravariant.Divisible as Exports +import Data.Functor.Identity as Exports +import Data.Hashable as Exports (Hashable (..)) import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') -import Data.List.NonEmpty as Exports (NonEmpty(..)) +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) +import Data.List.NonEmpty as Exports (NonEmpty (..)) import Data.Maybe as Exports import Data.Monoid as Exports hiding (Alt, (<>)) import Data.Ord as Exports +import Data.Profunctor.Unsafe as Exports import Data.Proxy as Exports import Data.Ratio as Exports -import Data.Semigroup as Exports hiding (First(..), Last(..)) import Data.STRef as Exports +import Data.Semigroup as Exports hiding (First (..), Last (..)) import Data.String as Exports +import Data.Text as Exports (Text) +import qualified Data.Text.Lazy +import qualified Data.Text.Lazy.Builder import Data.Traversable as Exports import Data.Tuple as Exports import Data.Unique as Exports +import Data.Vector as Exports (Vector) import Data.Version as Exports import Data.Void as Exports import Data.Word as Exports @@ -64,13 +81,13 @@ import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports import Foreign.Storable as Exports -import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith) +import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic) import GHC.IO.Exception as Exports import GHC.OverloadedLabels as Exports import Numeric as Exports -import Prelude as Exports hiding (Read, fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) +import PostgreSQL.Binary.Data as Exports (UUID) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports (Handle, hClose) @@ -80,67 +97,10 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) import Unsafe.Coerce as Exports - --- transformers -------------------------- -import Control.Monad.IO.Class as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Cont as Exports hiding (shift, callCC) -import Control.Monad.Trans.Except as Exports (ExceptT(ExceptT), Except, except, runExcept, runExceptT, mapExcept, mapExceptT, withExcept, withExceptT, throwE, catchE) -import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, runReader, mapReader, withReader, ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) -import Control.Monad.Trans.State.Strict as Exports (State, runState, evalState, execState, mapState, withState, StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) -import Control.Monad.Trans.Writer.Strict as Exports (Writer, runWriter, execWriter, mapWriter, WriterT(..), execWriterT, mapWriterT) -import Data.Functor.Compose as Exports -import Data.Functor.Identity as Exports - --- mtl -------------------------- -import Control.Monad.Error.Class as Exports (MonadError (..)) -import Control.Monad.Reader.Class as Exports (MonadReader (..)) - --- profunctors -------------------------- -import Data.Profunctor.Unsafe as Exports - --- contravariant -------------------------- -import Data.Functor.Contravariant.Divisible as Exports - --- hashable -------------------------- -import Data.Hashable as Exports (Hashable(..)) - --- text -------------------------- -import Data.Text as Exports (Text) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) - --- vector -------------------------- -import Data.Vector as Exports (Vector) - --- dlist -------------------------- -import Data.DList as Exports (DList) - --- postgresql-binary -------------------------- -import PostgreSQL.Binary.Data as Exports (UUID) - --- custom -------------------------- -import qualified Data.Text.Lazy -import qualified Data.Text.Lazy.Builder -import qualified Data.ByteString.Lazy -import qualified Data.ByteString.Builder - +import Prelude as Exports hiding (Read, all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) type LazyByteString = Data.ByteString.Lazy.ByteString diff --git a/library/Hasql/Private/PreparedStatementRegistry.hs b/library/Hasql/Private/PreparedStatementRegistry.hs index ce672ffb20..1617470f48 100644 --- a/library/Hasql/Private/PreparedStatementRegistry.hs +++ b/library/Hasql/Private/PreparedStatementRegistry.hs @@ -1,26 +1,24 @@ module Hasql.Private.PreparedStatementRegistry -( - PreparedStatementRegistry, - new, - update, - LocalKey(..), -) + ( PreparedStatementRegistry, + new, + update, + LocalKey (..), + ) where -import Hasql.Private.Prelude hiding (lookup) -import qualified Data.HashTable.IO as A import qualified ByteString.StrictBuilder as B +import qualified Data.HashTable.IO as A +import Hasql.Private.Prelude hiding (lookup) +data PreparedStatementRegistry + = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) -data PreparedStatementRegistry = - PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) - -{-# INLINABLE new #-} +{-# INLINEABLE new #-} new :: IO PreparedStatementRegistry new = PreparedStatementRegistry <$> A.new <*> newIORef 0 -{-# INLINABLE update #-} +{-# INLINEABLE update #-} update :: LocalKey -> (ByteString -> IO (Bool, a)) -> (ByteString -> IO a) -> PreparedStatementRegistry -> IO a update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table counter) = lookup >>= maybe new old @@ -43,11 +41,10 @@ update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table c old = onOldRemoteKey - -- | -- Local statement key. -data LocalKey = - LocalKey !ByteString ![Word32] +data LocalKey + = LocalKey !ByteString ![Word32] deriving (Show, Eq) instance Hashable LocalKey where diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 851fe50ac4..c7e815572f 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -1,23 +1,21 @@ -module Hasql.Private.Session -where +module Hasql.Private.Session where -import Hasql.Private.Prelude -import Hasql.Private.Errors import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Decoders.Results as Decoders.Results +import qualified Hasql.Private.Connection as Connection import qualified Hasql.Private.Decoders.Result as Decoders.Result -import qualified Hasql.Private.Encoders.Params as Encoders.Params +import qualified Hasql.Private.Decoders.Results as Decoders.Results import qualified Hasql.Private.Encoders as Encoders -import qualified Hasql.Private.Settings as Settings +import qualified Hasql.Private.Encoders.Params as Encoders.Params +import Hasql.Private.Errors import qualified Hasql.Private.IO as IO +import Hasql.Private.Prelude +import qualified Hasql.Private.Settings as Settings import qualified Hasql.Statement as Statement -import qualified Hasql.Private.Connection as Connection - -- | -- A batch of actions to be executed in the context of a database connection. -newtype Session a = - Session (ReaderT Connection.Connection (ExceptT QueryError IO) a) +newtype Session a + = Session (ReaderT Connection.Connection (ExceptT QueryError IO) a) deriving (Functor, Applicative, Monad, MonadError QueryError, MonadIO, MonadReader Connection.Connection) -- | @@ -25,7 +23,7 @@ newtype Session a = run :: Session a -> Connection.Connection -> IO (Either QueryError a) run (Session impl) connection = runExceptT $ - runReaderT impl connection + runReaderT impl connection -- | -- Possibly a multi-statement query, @@ -33,11 +31,14 @@ run (Session impl) connection = -- nor can any results of it be collected. sql :: ByteString -> Session () sql sql = - Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ fmap (mapLeft (QueryError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendNonparametricStatement pqConnection sql - r2 <- IO.getResults pqConnection integerDatetimes decoder - return $ r1 *> r2 + Session $ + ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT $ + fmap (mapLeft (QueryError sql [])) $ + withMVar pqConnectionRef $ \pqConnection -> do + r1 <- IO.sendNonparametricStatement pqConnection sql + r2 <- IO.getResults pqConnection integerDatetimes decoder + return $ r1 *> r2 where decoder = Decoders.Results.single Decoders.Result.noResult @@ -46,15 +47,17 @@ sql sql = -- Parameters and a specification of a parametric single-statement query to apply them to. statement :: params -> Statement.Statement params result -> Session result statement input (Statement.Statement template (Encoders.Params paramsEncoder) decoder preparable) = - Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ fmap (mapLeft (QueryError template inputReps)) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input - r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) - return $ r1 *> r2 + Session $ + ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT $ + fmap (mapLeft (QueryError template inputReps)) $ + withMVar pqConnectionRef $ \pqConnection -> do + r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input + r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) + return $ r1 *> r2 where inputReps = - let - Encoders.Params.Params (Op encoderOp) = paramsEncoder - step (_, _, _, rendering) acc = - rendering : acc - in foldr step [] (encoderOp input) \ No newline at end of file + let Encoders.Params.Params (Op encoderOp) = paramsEncoder + step (_, _, _, rendering) acc = + rendering : acc + in foldr step [] (encoderOp input) diff --git a/library/Hasql/Private/Settings.hs b/library/Hasql/Private/Settings.hs index f960e211af..5c348dc58b 100644 --- a/library/Hasql/Private/Settings.hs +++ b/library/Hasql/Private/Settings.hs @@ -1,14 +1,12 @@ module Hasql.Private.Settings where -import Hasql.Private.Prelude import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL +import Hasql.Private.Prelude - - --- | --- All settings encoded in a single byte-string according to +-- | +-- All settings encoded in a single byte-string according to -- . type Settings = ByteString @@ -18,21 +16,19 @@ type Settings = {-# INLINE settings #-} settings :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> Settings settings host port user password database = - BL.toStrict $ BB.toLazyByteString $ mconcat $ intersperse (BB.char7 ' ') $ catMaybes $ - [ - mappend (BB.string7 "host=") . BB.byteString <$> - mfilter (not . B.null) (pure host) - , - mappend (BB.string7 "port=") . BB.word16Dec <$> - mfilter (/= 0) (pure port) - , - mappend (BB.string7 "user=") . BB.byteString <$> - mfilter (not . B.null) (pure user) - , - mappend (BB.string7 "password=") . BB.byteString <$> - mfilter (not . B.null) (pure password) - , - mappend (BB.string7 "dbname=") . BB.byteString <$> - mfilter (not . B.null) (pure database) - ] - + BL.toStrict $ + BB.toLazyByteString $ + mconcat $ + intersperse (BB.char7 ' ') $ + catMaybes $ + [ mappend (BB.string7 "host=") . BB.byteString + <$> mfilter (not . B.null) (pure host), + mappend (BB.string7 "port=") . BB.word16Dec + <$> mfilter (/= 0) (pure port), + mappend (BB.string7 "user=") . BB.byteString + <$> mfilter (not . B.null) (pure user), + mappend (BB.string7 "password=") . BB.byteString + <$> mfilter (not . B.null) (pure password), + mappend (BB.string7 "dbname=") . BB.byteString + <$> mfilter (not . B.null) (pure database) + ] diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 539b654d4b..9636d5c1e9 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -1,14 +1,15 @@ module Hasql.Session -( - Session, - sql, - statement, - -- * Execution - run, - -- * Errors - module Hasql.Private.Errors, -) + ( Session, + sql, + statement, + + -- * Execution + run, + + -- * Errors + module Hasql.Private.Errors, + ) where -import Hasql.Private.Session import Hasql.Private.Errors +import Hasql.Private.Session diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index dadb674965..e6f9c0f522 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -1,57 +1,56 @@ module Hasql.Statement -( - Statement(..), - refineResult, - -- * Recipies + ( Statement (..), + refineResult, - -- ** Insert many - -- $insertMany + -- * Recipies - -- ** IN and NOT IN - -- $inAndNotIn -) + -- ** Insert many + -- $insertMany + + -- ** IN and NOT IN + -- $inAndNotIn + ) where -import Hasql.Private.Prelude import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders import qualified Hasql.Private.Decoders as Decoders +import Hasql.Private.Prelude -{-| -Specification of a strictly single-statement query, which can be parameterized and prepared. - -Consists of the following: - -* SQL template, -* params encoder, -* result decoder, -* a flag, determining whether it should be prepared. - -The SQL template must be formatted according to Postgres' standard, -with any non-ASCII characters of the template encoded using UTF-8. -According to the format, -parameters must be referred to using a positional notation, as in the following: -@$1@, @$2@, @$3@ and etc. -Those references must be used in accordance with the order in which -the value encoders are specified in 'Encoders.Params'. - -Following is an example of a declaration of a prepared statement with its associated codecs. - -@ -selectSum :: 'Statement' (Int64, Int64) Int64 -selectSum = 'Statement' sql encoder decoder True where - sql = "select ($1 + $2)" - encoder = - ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' - ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) - decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) -@ - -The statement above accepts a product of two parameters of type 'Int64' -and produces a single result of type 'Int64'. --} -data Statement a b = - Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool +-- | +-- Specification of a strictly single-statement query, which can be parameterized and prepared. +-- +-- Consists of the following: +-- +-- * SQL template, +-- * params encoder, +-- * result decoder, +-- * a flag, determining whether it should be prepared. +-- +-- The SQL template must be formatted according to Postgres' standard, +-- with any non-ASCII characters of the template encoded using UTF-8. +-- According to the format, +-- parameters must be referred to using a positional notation, as in the following: +-- @$1@, @$2@, @$3@ and etc. +-- Those references must be used in accordance with the order in which +-- the value encoders are specified in 'Encoders.Params'. +-- +-- Following is an example of a declaration of a prepared statement with its associated codecs. +-- +-- @ +-- selectSum :: 'Statement' (Int64, Int64) Int64 +-- selectSum = 'Statement' sql encoder decoder True where +-- sql = "select ($1 + $2)" +-- encoder = +-- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' +-- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) +-- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) +-- @ +-- +-- The statement above accepts a product of two parameters of type 'Int64' +-- and produces a single result of type 'Int64'. +data Statement a b + = Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool instance Functor (Statement a) where {-# INLINE fmap #-} @@ -62,63 +61,59 @@ instance Profunctor Statement where dimap f1 f2 (Statement template encoder decoder preparable) = Statement template (contramap f1 encoder) (fmap f2 decoder) preparable -{-| -Refine a result of a statement, -causing the running session to fail with the `UnexpectedResult` error in case of refinement failure. - -This function is especially useful for refining the results of statements produced with -. --} +-- | +-- Refine a result of a statement, +-- causing the running session to fail with the `UnexpectedResult` error in case of refinement failure. +-- +-- This function is especially useful for refining the results of statements produced with +-- . refineResult :: (a -> Either Text b) -> Statement params a -> Statement params b refineResult refiner (Statement template encoder decoder preparable) = Statement template encoder (Decoders.refineResult refiner decoder) preparable - -{- $insertMany - -It is not currently possible to pass in an array of encodable values -to use in an insert many statement. Instead, PostgreSQL's -(9.4 or later) @unnest@ function can be used in an analogous way -to haskell's `zip` function by passing in multiple arrays of values -to be zipped into the rows we want to insert: - -@ -insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () -insertMultipleLocations = 'Statement' sql encoder decoder True where - sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" - encoder = - contramap Vector.'Data.Vector.unzip3' $ - contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') - where - vector = - Encoders.'Encoders.param' . - Encoders.'Encoders.nonNullable' . - Encoders.'Encoders.array' . - Encoders.'Encoders.dimension' 'foldl'' . - Encoders.'Encoders.element' . - Encoders.'Encoders.nonNullable' - decoder = Decoders.'Decoders.noResult' -@ - -This approach is much more efficient than executing a single-row Insert -statement multiple times. --} - -{- $inAndNotIn - -There is a common misconception that Postgresql supports array -as a parameter for the @IN@ operator. -However Postgres only supports a syntactical list of values with it, -i.e., you have to specify each option as an individual parameter -(@something IN ($1, $2, $3)@). - -Clearly it would be much more convenient to provide an array as a single parameter, -but the @IN@ operator does not support that. -Fortunately, Postgres does provide such functionality with other operators: - -* Use @something = ANY($1)@ instead of @something IN ($1)@ -* Use @something <> ALL($1)@ instead of @something NOT IN ($1)@ - -For details see -. --} +-- $insertMany +-- +-- It is not currently possible to pass in an array of encodable values +-- to use in an insert many statement. Instead, PostgreSQL's +-- (9.4 or later) @unnest@ function can be used in an analogous way +-- to haskell's `zip` function by passing in multiple arrays of values +-- to be zipped into the rows we want to insert: +-- +-- @ +-- insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () +-- insertMultipleLocations = 'Statement' sql encoder decoder True where +-- sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" +-- encoder = +-- contramap Vector.'Data.Vector.unzip3' $ +-- contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') +-- where +-- vector = +-- Encoders.'Encoders.param' . +-- Encoders.'Encoders.nonNullable' . +-- Encoders.'Encoders.array' . +-- Encoders.'Encoders.dimension' 'foldl'' . +-- Encoders.'Encoders.element' . +-- Encoders.'Encoders.nonNullable' +-- decoder = Decoders.'Decoders.noResult' +-- @ +-- +-- This approach is much more efficient than executing a single-row Insert +-- statement multiple times. + +-- $inAndNotIn +-- +-- There is a common misconception that Postgresql supports array +-- as a parameter for the @IN@ operator. +-- However Postgres only supports a syntactical list of values with it, +-- i.e., you have to specify each option as an individual parameter +-- (@something IN ($1, $2, $3)@). +-- +-- Clearly it would be much more convenient to provide an array as a single parameter, +-- but the @IN@ operator does not support that. +-- Fortunately, Postgres does provide such functionality with other operators: +-- +-- * Use @something = ANY($1)@ instead of @something IN ($1)@ +-- * Use @something <> ALL($1)@ instead of @something NOT IN ($1)@ +-- +-- For details see +-- . diff --git a/profiling/Main.hs b/profiling/Main.hs index 38ca8ec7ca..eb4d0bb09d 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -1,13 +1,12 @@ module Main where -import Prelude +import qualified Data.Vector as F import qualified Hasql.Connection as A -import qualified Hasql.Session as B -import qualified Hasql.Statement as C import qualified Hasql.Decoders as D import qualified Hasql.Encoders as E -import qualified Data.Vector as F - +import qualified Hasql.Session as B +import qualified Hasql.Statement as C +import Prelude main = do @@ -29,9 +28,7 @@ main = password = "" database = "postgres" - -- * Sessions -------------------------- sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () sessionWithManySmallParameters = @@ -49,9 +46,7 @@ sessionWithManySmallResults :: B.Session (Vector (Int64, Int64)) sessionWithManySmallResults = F.replicateM 1000 (B.statement () statementWithSingleRow) - -- * Statements -------------------------- statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () statementWithManyParameters = diff --git a/tasty/Main.hs b/tasty/Main.hs index 92ee9d362d..cec7442f67 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -1,488 +1,434 @@ module Main where +import Contravariant.Extras +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import qualified Main.Connection as Connection +import qualified Main.DSL as DSL import Main.Prelude hiding (assert) +import qualified Main.Statements as Statements +import qualified Test.QuickCheck as QuickCheck import Test.QuickCheck.Instances import Test.Tasty -import Test.Tasty.Runners import Test.Tasty.HUnit import Test.Tasty.QuickCheck -import Contravariant.Extras -import qualified Test.QuickCheck as QuickCheck -import qualified Main.Statements as Statements -import qualified Main.DSL as DSL -import qualified Main.Connection as Connection -import qualified Hasql.Statement as Statement -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Session as Session +import Test.Tasty.Runners main = defaultMain tree tree = localOption (NumThreads 1) $ - testGroup "All tests" - [ - testGroup "Roundtrips" $ let - roundtrip encoder decoder input = let - session = let - statement = Statement.Statement "select $1" encoder decoder True - in Session.statement input statement - in unsafePerformIO $ do - x <- Connection.with (Session.run session) - return (Right (Right input) === x) - in [ - testProperty "Array" $ let - encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8)))))) - in roundtrip encoder decoder - , - testProperty "2D Array" $ let - encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))))) - in \ list -> list /= [] ==> roundtrip encoder decoder (replicate 3 list) - ] - , - testCase "Failed query" $ - let - statement = - Statement.Statement "select true where 1 = any ($1) and $2" encoder decoder True - where - encoder = - contrazip2 - (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - (Encoders.param (Encoders.nonNullable (Encoders.text))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - Session.statement ([3, 7], "a") statement - in do - x <- Connection.with (Session.run session) - assertBool (show x) $ case x of - Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True - _ -> False - , - testCase "IN simulation" $ - let - statement = - Statement.Statement "select true where 1 = any ($1)" encoder decoder True - where - encoder = - Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - do - result1 <- Session.statement [1, 2] statement - result2 <- Session.statement [2, 3] statement - return (result1, result2) - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (True, False))) x - , - testCase "NOT IN simulation" $ - let - statement = - Statement.Statement "select true where 3 <> all ($1)" encoder decoder True - where - encoder = - Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - do - result1 <- Session.statement [1, 2] statement - result2 <- Session.statement [2, 3] statement - return (result1, result2) - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (True, False))) x - , - testCase "Composite decoding" $ - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select (1, true)" - encoder = - mempty - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.composite ((,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool))) - session = - Session.statement () statement - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (1, True))) x - , - testCase "Complex composite decoding" $ - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select (1, true) as entity1, ('hello', 3) as entity2" - encoder = - mempty - decoder = - Decoders.singleRow $ - (,) <$> (Decoders.column . Decoders.nonNullable) entity1 <*> (Decoders.column . Decoders.nonNullable) entity2 - where - entity1 = - Decoders.composite $ - (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool - entity2 = - Decoders.composite $ - (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.text <*> (Decoders.field . Decoders.nonNullable) Decoders.int8 - session = - Session.statement () statement - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x - , - testCase "Empty array" $ - let - io = - do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right [])) x - where - session = - Session.statement () statement - where - statement = + testGroup + "All tests" + [ testGroup "Roundtrips" $ + let roundtrip encoder decoder input = + let session = + let statement = Statement.Statement "select $1" encoder decoder True + in Session.statement input statement + in unsafePerformIO $ do + x <- Connection.with (Session.run session) + return (Right (Right input) === x) + in [ testProperty "Array" $ + let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8)))))) + in roundtrip encoder decoder, + testProperty "2D Array" $ + let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))))) + in \list -> list /= [] ==> roundtrip encoder decoder (replicate 3 list) + ], + testCase "Failed query" $ + let statement = + Statement.Statement "select true where 1 = any ($1) and $2" encoder decoder True + where + encoder = + contrazip2 + (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + (Encoders.param (Encoders.nonNullable (Encoders.text))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + Session.statement ([3, 7], "a") statement + in do + x <- Connection.with (Session.run session) + assertBool (show x) $ case x of + Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True + _ -> False, + testCase "IN simulation" $ + let statement = + Statement.Statement "select true where 1 = any ($1)" encoder decoder True + where + encoder = + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + do + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x, + testCase "NOT IN simulation" $ + let statement = + Statement.Statement "select true where 3 <> all ($1)" encoder decoder True + where + encoder = + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + do + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x, + testCase "Composite decoding" $ + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select (1, true)" + encoder = + mempty + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.composite ((,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool))) + session = + Session.statement () statement + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (1, True))) x, + testCase "Complex composite decoding" $ + let statement = Statement.Statement sql encoder decoder True where sql = - "select array[]::int8[]" + "select (1, true) as entity1, ('hello', 3) as entity2" encoder = mempty decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))) - in io - , - testCase "Failing prepared statements" $ - let - io = - Connection.with (Session.run session) >>= - (assertBool <$> show <*> resultTest) - where - resultTest = - \case - Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _)))) -> False - _ -> True - session = - catchError session (const (pure ())) *> session - where + Decoders.singleRow $ + (,) <$> (Decoders.column . Decoders.nonNullable) entity1 <*> (Decoders.column . Decoders.nonNullable) entity2 + where + entity1 = + Decoders.composite $ + (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool + entity2 = + Decoders.composite $ + (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.text <*> (Decoders.field . Decoders.nonNullable) Decoders.int8 session = Session.statement () statement + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, + testCase "Empty array" $ + let io = + do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right [])) x where - statement = - Statement.Statement sql encoder decoder True + session = + Session.statement () statement where - sql = - "absurd" - encoder = - mempty - decoder = - Decoders.noResult - in io - , - testCase "Prepared statements after error" $ - let - io = - Connection.with (Session.run session) >>= - \x -> assertBool (show x) (either (const False) isRight x) - where - session = - try *> fail *> try - where - try = - Session.statement 1 statement + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select array[]::int8[]" + encoder = + mempty + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))) + in io, + testCase "Failing prepared statements" $ + let io = + Connection.with (Session.run session) + >>= (assertBool <$> show <*> resultTest) where - statement = - Statement.Statement sql encoder decoder True + resultTest = + \case + Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _)))) -> False + _ -> True + session = + catchError session (const (pure ())) *> session where - sql = - "select $1 :: int8" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) - decoder = - Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 - fail = - catchError (Session.sql "absurd") (const (pure ())) - in io - , - testCase "\"in progress after error\" bugfix" $ - let - sumStatement :: Statement.Statement (Int64, Int64) Int64 - sumStatement = - Statement.Statement sql encoder decoder True - where - sql = - "select ($1 + $2)" - encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) <> - contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) - sumSession :: Session.Session Int64 - sumSession = - Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" - errorSession :: Session.Session () - errorSession = - Session.sql "asldfjsldk" - io = - Connection.with $ \c -> do - Session.run errorSession c - Session.run sumSession c - in io >>= \x -> assertBool (show x) (either (const False) isRight x) - , - testCase "\"another command is already in progress\" bugfix" $ - let - sumStatement :: Statement.Statement (Int64, Int64) Int64 - sumStatement = - Statement.Statement sql encoder decoder True - where - sql = - "select ($1 + $2)" - encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) <> - contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) - session :: Session.Session Int64 - session = - do - Session.sql "begin;" - s <- Session.statement (1,1) sumStatement - Session.sql "end;" - return s - in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x - , - testCase "Executing the same query twice" $ - pure () - , - testCase "Interval Encoding" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1 = interval '10 seconds'" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement - in actualIO >>= \x -> assertEqual (show x) (Right True) x - , - testCase "Interval Decoding" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select interval '10 seconds'" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) - encoder = - Encoders.noParams - in DSL.statement () statement - in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x - , - testCase "Interval Encoding/Decoding" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement - in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x - , - testCase "Unknown" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "drop type if exists mood" - in DSL.statement () statement - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1 = ('ok' :: mood)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.unknown)) - in DSL.statement "ok" statement - in actualIO >>= assertEqual "" (Right True) - , - testCase "Textual Unknown" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" - in DSL.statement () statement - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" - in DSL.statement () statement - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select overloaded($1, $2) || overloaded($3, $4, $5)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) - encoder = - contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) - in DSL.statement ["1", "2", "4", "5", "6"] statement - in actualIO >>= assertEqual "" (Right "3456") - , - testCase "Enum" $ - let - actualIO = - DSL.session $ do - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "drop type if exists mood" - in DSL.statement () statement - let - statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement - let - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select ($1 :: mood)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) - encoder = - Encoders.param (Encoders.nonNullable ((Encoders.enum id))) - in DSL.statement "ok" statement - in actualIO >>= assertEqual "" (Right "ok") - , - testCase "The same prepared statement used on different types" $ - let - actualIO = - DSL.session $ do - let - effect1 = - DSL.statement "ok" statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.text)) - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) - effect2 = - DSL.statement 1 statement - where - statement = - Statement.Statement sql encoder decoder True + session = + Session.statement () statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "absurd" + encoder = + mempty + decoder = + Decoders.noResult + in io, + testCase "Prepared statements after error" $ + let io = + Connection.with (Session.run session) + >>= \x -> assertBool (show x) (either (const False) isRight x) + where + session = + try *> fail *> try + where + try = + Session.statement 1 statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 :: int8" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.int8)) + decoder = + Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 + fail = + catchError (Session.sql "absurd") (const (pure ())) + in io, + testCase "\"in progress after error\" bugfix" $ + let sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) + <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) + sumSession :: Session.Session Int64 + sumSession = + Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" + errorSession :: Session.Session () + errorSession = + Session.sql "asldfjsldk" + io = + Connection.with $ \c -> do + Session.run errorSession c + Session.run sumSession c + in io >>= \x -> assertBool (show x) (either (const False) isRight x), + testCase "\"another command is already in progress\" bugfix" $ + let sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) + <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) + session :: Session.Session Int64 + session = + do + Session.sql "begin;" + s <- Session.statement (1, 1) sumStatement + Session.sql "end;" + return s + in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x, + testCase "Executing the same query twice" $ + pure (), + testCase "Interval Encoding" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 = interval '10 seconds'" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.interval)) + in DSL.statement (10 :: DiffTime) statement + in actualIO >>= \x -> assertEqual (show x) (Right True) x, + testCase "Interval Decoding" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select interval '10 seconds'" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + encoder = + Encoders.noParams + in DSL.statement () statement + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, + testCase "Interval Encoding/Decoding" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.interval)) + in DSL.statement (10 :: DiffTime) statement + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, + testCase "Unknown" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "drop type if exists mood" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 = ('ok' :: mood)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.unknown)) + in DSL.statement "ok" statement + in actualIO >>= assertEqual "" (Right True), + testCase "Textual Unknown" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select overloaded($1, $2) || overloaded($3, $4, $5)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) + encoder = + contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) + in DSL.statement ["1", "2", "4", "5", "6"] statement + in actualIO >>= assertEqual "" (Right "3456"), + testCase "Enum" $ + let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "drop type if exists mood" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 :: mood)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) + encoder = + Encoders.param (Encoders.nonNullable ((Encoders.enum id))) + in DSL.statement "ok" statement + in actualIO >>= assertEqual "" (Right "ok"), + testCase "The same prepared statement used on different types" $ + let actualIO = + DSL.session $ do + let effect1 = + DSL.statement "ok" statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.text)) + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) + effect2 = + DSL.statement 1 statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.int8)) + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + in (,) <$> effect1 <*> effect2 + in actualIO >>= assertEqual "" (Right ("ok", 1)), + testCase "Affected rows counting" $ + replicateM_ 13 $ + let actualIO = + DSL.session $ do + dropTable + createTable + replicateM_ 100 insertRow + deleteRows <* dropTable where - sql = - "select $1" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) - in (,) <$> effect1 <*> effect2 - in actualIO >>= assertEqual "" (Right ("ok", 1)) - , - testCase "Affected rows counting" $ - replicateM_ 13 $ - let - actualIO = - DSL.session $ do - dropTable - createTable - replicateM_ 100 insertRow - deleteRows <* dropTable - where - dropTable = - DSL.statement () $ Statements.plain $ - "drop table if exists a" - createTable = - DSL.statement () $ Statements.plain $ - "create table a (id bigserial not null, name varchar not null, primary key (id))" - insertRow = - DSL.statement () $ Statements.plain $ - "insert into a (name) values ('a')" - deleteRows = - DSL.statement () $ Statement.Statement sql mempty decoder False - where - sql = - "delete from a" - decoder = - Decoders.rowsAffected - in actualIO >>= assertEqual "" (Right 100) - , - testCase "Result of an auto-incremented column" $ - let - actualIO = - DSL.session $ do - DSL.statement () $ Statements.plain $ "drop table if exists a" - DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - DSL.statement () $ Statements.plain $ "drop table if exists a" - pure (id1, id2) - in assertEqual "" (Right (1, 2)) =<< actualIO - , - testCase "List decoding" $ - let - actualIO = - DSL.session $ DSL.statement () $ Statements.selectList - in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO - ] - + dropTable = + DSL.statement () $ + Statements.plain $ + "drop table if exists a" + createTable = + DSL.statement () $ + Statements.plain $ + "create table a (id bigserial not null, name varchar not null, primary key (id))" + insertRow = + DSL.statement () $ + Statements.plain $ + "insert into a (name) values ('a')" + deleteRows = + DSL.statement () $ Statement.Statement sql mempty decoder False + where + sql = + "delete from a" + decoder = + Decoders.rowsAffected + in actualIO >>= assertEqual "" (Right 100), + testCase "Result of an auto-incremented column" $ + let actualIO = + DSL.session $ do + DSL.statement () $ Statements.plain $ "drop table if exists a" + DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" + id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + DSL.statement () $ Statements.plain $ "drop table if exists a" + pure (id1, id2) + in assertEqual "" (Right (1, 2)) =<< actualIO, + testCase "List decoding" $ + let actualIO = + DSL.session $ DSL.statement () $ Statements.selectList + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO + ] diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index 6215615465..e8393dae67 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -1,11 +1,9 @@ -module Main.Connection -where +module Main.Connection where -import Main.Prelude import qualified Hasql.Connection as HC -import qualified Hasql.Statement as HQ import qualified Hasql.Session - +import qualified Hasql.Statement as HQ +import Main.Prelude with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) with handler = diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 95b7bc08e8..5e8bd5a5e1 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -1,27 +1,25 @@ module Main.DSL -( - Session, - SessionError(..), - session, - Hasql.Session.statement, - Hasql.Session.sql, -) + ( Session, + SessionError (..), + session, + Hasql.Session.statement, + Hasql.Session.sql, + ) where -import Main.Prelude import qualified Hasql.Connection as HC -import qualified Hasql.Statement as HQ -import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE import qualified Hasql.Session - +import qualified Hasql.Statement as HQ +import Main.Prelude type Session = Hasql.Session.Session -data SessionError = - ConnectionError (HC.ConnectionError) | - SessionError (Hasql.Session.QueryError) +data SessionError + = ConnectionError (HC.ConnectionError) + | SessionError (Hasql.Session.QueryError) deriving (Show, Eq) session :: Session a -> IO (Either SessionError a) @@ -41,7 +39,7 @@ session session = database = "postgres" use connection = ExceptT $ - fmap (mapLeft SessionError) $ - Hasql.Session.run session connection + fmap (mapLeft SessionError) $ + Hasql.Session.run session connection release connection = lift $ HC.release connection diff --git a/tasty/Main/Prelude.hs b/tasty/Main/Prelude.hs index ac88b09fa5..6d93af5402 100644 --- a/tasty/Main/Prelude.hs +++ b/tasty/Main/Prelude.hs @@ -1,10 +1,6 @@ module Main.Prelude -( - module Exports, -) + ( module Exports, + ) where - --- rerebase -------------------------- import Prelude as Exports diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index ea3cbcc189..1897eec866 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -1,12 +1,11 @@ module Main.Statements where -import Main.Prelude -import qualified Hasql.Statement as HQ -import qualified Hasql.Encoders as HE import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Statement as HQ +import Main.Prelude import qualified Main.Prelude as Prelude - plain :: ByteString -> HQ.Statement () () plain sql = HQ.Statement sql mempty HD.noResult False @@ -19,8 +18,9 @@ dropType name = createEnum :: ByteString -> [ByteString] -> HQ.Statement () () createEnum name values = plain $ - "create type " <> name <> " as enum (" <> - mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) <> ")" + "create type " <> name <> " as enum (" + <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) + <> ")" selectList :: HQ.Statement () ([] (Int64, Int64)) selectList = diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 4be6230e20..020f3947b4 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -1,13 +1,12 @@ module Main where -import Prelude import qualified Hasql.Connection -import qualified Hasql.Statement -import qualified Hasql.Encoders import qualified Hasql.Decoders +import qualified Hasql.Encoders import qualified Hasql.Session +import qualified Hasql.Statement import qualified Main.Statements as Statements - +import Prelude main = acquire >>= use @@ -17,8 +16,8 @@ main = where acquire = join $ - fmap (either (fail . show) return) $ - Hasql.Connection.acquire connectionSettings + fmap (either (fail . show) return) $ + Hasql.Connection.acquire connectionSettings where connectionSettings = Hasql.Connection.settings "localhost" 5432 "postgres" "" "postgres" @@ -41,5 +40,5 @@ main = bool exitFailure exitSuccess . traceShowId =<< takeMVar finishVar where session connection session = - Hasql.Session.run session connection >>= - either (fail . show) return + Hasql.Session.run session connection + >>= either (fail . show) return diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index d64a0c08c9..dcf47159f3 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -1,10 +1,9 @@ module Main.Statements where -import Prelude -import Hasql.Statement -import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D - +import qualified Hasql.Encoders as E +import Hasql.Statement +import Prelude selectSleep :: Statement Double () selectSleep = @@ -16,5 +15,3 @@ selectSleep = E.param (E.nonNullable E.float8) decoder = D.noResult - - From 0dda3e587a4d076b2ca9524b29a3ac4b1863eabe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 20 Jun 2022 13:55:18 +0300 Subject: [PATCH 0721/1204] Allow vector-0.13 --- hasql.cabal | 2 +- stack.yaml | 7 ++++++- stack.yaml.lock | 38 +++++++++++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 45845716bf..7958ea8f7c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -72,7 +72,7 @@ library text >=1 && <3, text-builder >=0.6.1.2 && <0.7, transformers >=0.3 && <0.7, - vector >=0.10 && <0.13 + vector >=0.10 && <0.14 test-suite tasty type: exitcode-stdio-1.0 diff --git a/stack.yaml b/stack.yaml index 0a83d83b5f..0ebfa859e9 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1,6 @@ -resolver: nightly-2022-05-29 +resolver: nightly-2022-06-20 +extra-deps: + - vector-0.13.0.0 + - vector-stream-0.1.0.0 + - aeson-2.1.0.0 + - generically-0.1 diff --git a/stack.yaml.lock b/stack.yaml.lock index 0d696b8812..1a657aa9e8 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,10 +3,38 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: [] +packages: +- completed: + pantry-tree: + sha256: 61263e71050e1c895bb67e4c0f05497419818e8e79b8bff9e3eabf17759e3232 + size: 4092 + hackage: vector-0.13.0.0@sha256:ec337a1371bc306658e8338612e975f37a3f7700716441608b7afb66ae356d4c,8774 + original: + hackage: vector-0.13.0.0 +- completed: + pantry-tree: + sha256: 99de0751367cf53df872999edfb9e3c24207cf946442ccccf7487d74c7f12c1d + size: 325 + hackage: vector-stream-0.1.0.0@sha256:5500b39bd69ba5384638db0b451c8eaf40ef52544355741bd73436b0da9ec3a8,1336 + original: + hackage: vector-stream-0.1.0.0 +- completed: + pantry-tree: + sha256: 416127fd578b11c2bbb3cabdce212d939f040ddf390c54caebf4ceda02222872 + size: 38191 + hackage: aeson-2.1.0.0@sha256:b0bdd457ff05f0924f6055e5265a5a70e8f719f6e92b3c98a6af922495539ef2,5937 + original: + hackage: aeson-2.1.0.0 +- completed: + pantry-tree: + sha256: 302b140ee5ccf6754ab96154486051f9ab989d3cbaa7c9674e1e9f0de7cdd07b + size: 232 + hackage: generically-0.1@sha256:16d54a08bcdf708395c2200a28ffcba55e90479dc96ed617dbb94f0411f7a7af,1024 + original: + hackage: generically-0.1 snapshots: - completed: - sha256: a7d2c450e7578825f80601b9d244f2107d9cc708430e070d2978e15a97b5c6dc - size: 590822 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/29.yaml - original: nightly-2022-05-29 + sha256: 6935ec7d6f8306ab967fd8edcc9d0773dfeee59345103cb021ebedacd19c5c6b + size: 613125 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/6/20.yaml + original: nightly-2022-06-20 From 0f8a24a6821fa6f7acc6094d1125843c871c8e62 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 30 Jun 2022 11:03:55 +0300 Subject: [PATCH 0722/1204] Add a warning --- library/Hasql/Private/Encoders.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 07a6552d6a..814a593858 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -256,6 +256,9 @@ enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) -- For reference, see the -- -- section of the Postgres' documentation. +-- +-- __Warning:__ Do not use this as part of composite encoders like 'array' since +-- it is the only encoder that doesn't use the binary format. {-# INLINEABLE unknown #-} unknown :: Value ByteString unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) From d6ed4e61a9a6e093f82068e34930247074064641 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 30 Jun 2022 11:04:18 +0300 Subject: [PATCH 0723/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7958ea8f7c..4650bfeb10 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.0.4 +version: 1.5.0.5 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From cf6458fe764089656c93fda27d3d0b273f096977 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Jul 2022 10:37:33 +0300 Subject: [PATCH 0724/1204] Format --- library/Hasql/Private/Errors.hs | 40 ++++++++++++++------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 3036b1342e..f62aa3980f 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -37,29 +37,23 @@ data CommandError -- | -- An error with a command result. data ResultError - = -- | - -- An error reported by the DB. - -- Consists of the following: Code, message, details, hint. - -- - -- * __Code__. - -- The SQLSTATE code for the error. - -- It's recommended to use - -- - -- to work with those. - -- - -- * __Message__. - -- The primary human-readable error message (typically one line). Always present. - -- - -- * __Details__. - -- An optional secondary error message carrying more detail about the problem. - -- Might run to multiple lines. - -- - -- * __Hint__. - -- An optional suggestion on what to do about the problem. - -- This is intended to differ from detail in that it offers advice (potentially inappropriate) - -- rather than hard facts. - -- Might run to multiple lines. - ServerError ByteString ByteString (Maybe ByteString) (Maybe ByteString) + = -- | An error reported by the DB. + ServerError + ByteString + -- ^ __Code__. The SQLSTATE code for the error. It's recommended to use + -- to work with those. + ByteString + -- ^ __Message__. The primary human-readable error message(typically one + -- line). Always present. + (Maybe ByteString) + -- ^ __Details__. An optional secondary error message carrying more + -- detail about the problem. Might run to multiple lines. + (Maybe ByteString) + -- ^ __Hint__. An optional suggestion on what to do about the problem. + -- This is intended to differ from detail in that it offers advice + -- (potentially inappropriate) rather than hard facts. Might run to + -- multiple lines. | -- | -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. From 9276d7e2987269f55a968d2f904754ad39bbe86e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 7 Jul 2022 10:47:11 +0300 Subject: [PATCH 0725/1204] Add error position --- library/Hasql/Private/Decoders/Result.hs | 11 ++++++++++- library/Hasql/Private/Errors.hs | 3 +++ tasty/Main.hs | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index dc7e03f431..ed10fc774d 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -80,7 +80,16 @@ serverError = LibPQ.resultErrorField result LibPQ.DiagMessageDetail hint <- LibPQ.resultErrorField result LibPQ.DiagMessageHint - pure $ Left $ ServerError code message detail hint + position <- + parsePosition <$> LibPQ.resultErrorField result LibPQ.DiagStatementPosition + pure $ Left $ ServerError code message detail hint position + where + parsePosition = \case + Nothing -> Nothing + Just pos -> + case Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) pos of + Right pos -> Just pos + _ -> Nothing {-# INLINE maybe #-} maybe :: Row.Row a -> Result (Maybe a) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index f62aa3980f..89a13d4494 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -54,6 +54,9 @@ data ResultError -- This is intended to differ from detail in that it offers advice -- (potentially inappropriate) rather than hard facts. Might run to -- multiple lines. + (Maybe Int) + -- ^ __Position__. Error cursor position as an index into the original + -- statement string. Positions are measured in characters not bytes. | -- | -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. diff --git a/tasty/Main.hs b/tasty/Main.hs index cec7442f67..8e09ef6764 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -153,7 +153,7 @@ tree = where resultTest = \case - Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _)))) -> False + Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session From 55a4564abc9d0f38efd6376ad853b2e52e5c14ff Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:12:13 +0300 Subject: [PATCH 0726/1204] Add handling of empty query response --- library/Hasql/Private/Decoders/Result.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index ed10fc774d..4a6a41b8f3 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -63,6 +63,7 @@ checkExecStatus predicate = LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError LibPQ.FatalError -> serverError + LibPQ.EmptyQuery -> return () _ -> Result $ lift $ ExceptT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) {-# INLINE serverError #-} From fab38ac1016ab1a5f6e50e4111d083943323f830 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:37:31 +0300 Subject: [PATCH 0727/1204] Add handling of EmptyQuery status --- library/Hasql/Private/Decoders/Result.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index dc7e03f431..28f54b49d3 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -63,6 +63,7 @@ checkExecStatus predicate = LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError LibPQ.FatalError -> serverError + LibPQ.EmptyQuery -> return () _ -> Result $ lift $ ExceptT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) {-# INLINE serverError #-} From f4407e120e3842cd86cd9ca4704621f1e3950c0b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:37:55 +0300 Subject: [PATCH 0728/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 4650bfeb10..98715f967e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.0.5 +version: 1.5.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 81381301dc03310cc5b597570b01e38eb786da32 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:47:12 +0300 Subject: [PATCH 0729/1204] Bump and update the changelog --- CHANGELOG.md | 4 ++++ hasql.cabal | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba7a7c73ab..481e8f92fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.6 + +- Added position to `ServerError` (breaking change). + # 1.5 - Added column number to `RowError` (breaking change). diff --git a/hasql.cabal b/hasql.cabal index 98715f967e..f4db6c62f3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.5.1 +version: 1.6 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From dfd8fe27c5a1d47351fd88540689429f483dab20 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:56:43 +0300 Subject: [PATCH 0730/1204] Update the changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 481e8f92fc..3c7f61a006 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 1.6 - Added position to `ServerError` (breaking change). +- Disabled failure on empty query. # 1.5 From dbbcc7d8adb9b4445df0d1cd6572e6bc5b28fe44 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:57:02 +0300 Subject: [PATCH 0731/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index f4db6c62f3..147b094689 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6 +version: 1.6.0.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From e2b9c623af0b922a248f2aed1ad99f2fadac9b97 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:48:24 +0300 Subject: [PATCH 0732/1204] Update hasql --- hasql-pool.cabal | 2 +- stack.yaml | 2 +- stack.yaml.lock | 121 +++++++++++++++++++++++++++++++++++++++++++++-- test/Main.hs | 2 +- 4 files changed, 119 insertions(+), 8 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 8f8422a2dd..e1b2a5ffe3 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -49,7 +49,7 @@ library Hasql.Pool.Prelude build-depends: base >=4.11 && <5, - hasql >=1.3 && <1.6, + hasql >=1.6 && <1.7, stm >=2.5 && <3, time >=1.5 && <2, transformers >=0.5 && <0.7 diff --git a/stack.yaml b/stack.yaml index c3fd390e5e..d696256798 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1 @@ -resolver: nightly-2022-05-31 +resolver: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml diff --git a/stack.yaml.lock b/stack.yaml.lock index 24d692d72f..33135bc714 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,10 +3,121 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: [] +packages: +- completed: + name: coalmine + pantry-tree: + sha256: 8896e428a656c392d25d499f9b024abd0c30459db09e8a78e1645bad43d4fb89 + size: 9564 + commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 + git: https://github.com/nikita-volkov/coalmine + version: 0.1.0.4 + original: + commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 + git: https://github.com/nikita-volkov/coalmine +- completed: + name: moore-machines + pantry-tree: + sha256: 3d1505067d5c8599e9843ed45ec2bc587fa5100c448f558ca5db2c97fb55706f + size: 887 + commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 + git: https://github.com/nikita-volkov/moore-machines + version: '0.1' + original: + commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 + git: https://github.com/nikita-volkov/moore-machines +- completed: + name: structure-kit + pantry-tree: + sha256: b7779ebe935d65c0b4f6e3ea8b5f5011abdabf362b1673826545c93625e050ad + size: 3500 + commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c + git: https://github.com/nikita-volkov/structure-kit + version: 0.1.0.1 + original: + commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c + git: https://github.com/nikita-volkov/structure-kit +- completed: + name: canapi + pantry-tree: + sha256: 54c44986c3d7f8daa4464e4e097f312dc3ac0c02f7eb5fbb8bba3a6e6d19487a + size: 1319 + commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 + git: https://github.com/nikita-volkov/canapi + version: '0.1' + original: + commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 + git: https://github.com/nikita-volkov/canapi +- completed: + name: lean-http-client + pantry-tree: + sha256: 64da0f3390166969e2fe6a140d847c315258f9bcb8fcaf3169fd78b4b25b6f6f + size: 544 + commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 + git: https://github.com/nikita-volkov/lean-http-client + version: '0.1' + original: + commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 + git: https://github.com/nikita-volkov/lean-http-client +- completed: + name: distillery + pantry-tree: + sha256: 03d32965a35914b68bdaa149db48ce66e774783360f5b7d8b18db72de61b7baf + size: 524 + commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a + git: https://github.com/nikita-volkov/distillery + version: '0.1' + original: + commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a + git: https://github.com/nikita-volkov/distillery +- completed: + name: acquire + pantry-tree: + sha256: e194150d070a0e4f07e5f2285e82f177312f328c7490f3a659f361b4f6324d00 + size: 438 + commit: 75194757308ae9340b0e2eda46d8db4d25af7516 + git: https://github.com/metrix-ai/acquire + version: 0.3.1 + original: + commit: 75194757308ae9340b0e2eda46d8db4d25af7516 + git: https://github.com/metrix-ai/acquire +- completed: + pantry-tree: + sha256: 520aa5f59b55c14d27115a801f499f940a563849b0c54876bcd6be41f6450713 + size: 456 + hackage: cereal-data-dword-0.1.1@sha256:a3fa6dfafaeeb3774c5888dfa601d561ce05b0af66f52859970247e58135d47e,1381 + original: + hackage: cereal-data-dword-0.1.1 +- completed: + pantry-tree: + sha256: f2fd5281b8fcea2ffa1f323feca1c84d030914dfec18f61e52be8a60d6939037 + size: 2622 + hackage: hasql-1.6@sha256:78f5fd9e732862cbffb06123015866312bf6f3889c18508018820536490a8460,6624 + original: + hackage: hasql-1.6 +- completed: + pantry-tree: + sha256: 946dbffdad0a92dbdeeaaabb1c7ac2451f3002561407068543fcd860cd860f15 + size: 473 + hackage: punycode-2.0@sha256:dce7f481b5eedc750cf49d21a80b839cb366afd2d29bc506acca5ad9d0c06a8f,1503 + original: + hackage: punycode-2.0 +- completed: + pantry-tree: + sha256: 51dc0ab22269973eec829ae476fb3102cfe155ffde2fd1d039dedf65c7842031 + size: 509 + hackage: timestamp-0.2@sha256:103fe49ce206922d3b14d57d8aff25eaf03c70fef5fcdaeaeb8416aaee163e51,1598 + original: + hackage: timestamp-0.2 snapshots: - completed: - sha256: c92a0359aa608c8528e0a6a3f952e7b8501c7fac946b8b0e037125e1ab271423 - size: 590824 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/5/31.yaml - original: nightly-2022-05-31 + sha256: a4a05670f8e2a2bc108aca4e093c57eb82f562afd6949f299b0116861444f6f6 + size: 887 + url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml + original: + url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml +- completed: + sha256: 6a7d84094bf948100b933f83f8cff586a41633d59cb1adbb89eefc25405fabe8 + size: 616794 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/16.yaml + original: nightly-2022-07-16 diff --git a/test/Main.hs b/test/Main.hs index 97e7b77f22..e7deef2732 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -60,7 +60,7 @@ badQuerySession :: Session.Session () badQuerySession = Session.statement () statement where - statement = Statement.Statement "" Encoders.noParams Decoders.noResult True + statement = Statement.Statement "zzz" Encoders.noParams Decoders.noResult True closeConnSession :: Session.Session () closeConnSession = do From f00ff15d6ef4e5fc3f998fe5a90e7f887b6943f0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 22:59:28 +0300 Subject: [PATCH 0733/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index e1b2a5ffe3..22212aa5d9 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ name: hasql-pool version: - 0.7.2 + 0.7.2.1 category: Hasql, Database, PostgreSQL synopsis: From 6a25fe4cdf0912da1d1a96235913231cae9f4e21 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 23:00:58 +0300 Subject: [PATCH 0734/1204] Allow hasql-1.6 --- hasql-implicits.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 0adf99cfe0..7a31d870f3 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.0.4 +version: 0.1.0.5 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues @@ -29,7 +29,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.12, containers >=0.6 && <0.7, - hasql >=1.4 && <1.6, + hasql >=1.4 && <1.7, network-ip >=0.2 && <1, scientific >=0.2 && <0.4, text >=1 && <3, From d605bab5090b5cc5869fc79840192035f7b1f1ba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 20 Jul 2022 23:02:09 +0300 Subject: [PATCH 0735/1204] Move to hasql-1.6 --- hasql-dynamic-statements.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 3b000125a4..ec85d608b4 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3.1.1 +version: 0.3.1.2 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, @@ -36,7 +36,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <0.12, containers >=0.6 && <0.7, - hasql >=1.4 && <1.6, + hasql >=1.6 && <1.7, hasql-implicits >=0.1 && <0.2, ptr >=0.16.7.2 && <0.17 From 35f33cf7a4381a7cc158309ce8a21efd13d5c8e5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 3 Jan 2022 16:41:38 +0300 Subject: [PATCH 0736/1204] Move to hasql-1.6 --- hasql-transaction.cabal | 4 +- library/Hasql/Transaction/Private/Sessions.hs | 2 +- stack.yaml | 1 + stack.yaml.lock | 123 ++++++++++++++++++ 4 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 stack.yaml create mode 100644 stack.yaml.lock diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index b87fa42556..92bd97bb54 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.1.1 +version: 1.0.1.2 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction @@ -36,7 +36,7 @@ library bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, - hasql >=1.4.5 && <1.6, + hasql >=1.6 && <1.7, mtl >=2.2 && <3, transformers >=0.5 && <0.7 diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 619ada03fe..0161486a78 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -39,5 +39,5 @@ commitOrAbort commit preparable = if commit else statement () (Statements.abortTransaction preparable) handleTransactionError error onTransactionError = case error of - QueryError _ _ (ResultError (ServerError "40001" _ _ _)) -> onTransactionError + QueryError _ _ (ResultError (ServerError "40001" _ _ _ _)) -> onTransactionError error -> throwError error diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000000..d696256798 --- /dev/null +++ b/stack.yaml @@ -0,0 +1 @@ +resolver: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000000..33135bc714 --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,123 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: +- completed: + name: coalmine + pantry-tree: + sha256: 8896e428a656c392d25d499f9b024abd0c30459db09e8a78e1645bad43d4fb89 + size: 9564 + commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 + git: https://github.com/nikita-volkov/coalmine + version: 0.1.0.4 + original: + commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 + git: https://github.com/nikita-volkov/coalmine +- completed: + name: moore-machines + pantry-tree: + sha256: 3d1505067d5c8599e9843ed45ec2bc587fa5100c448f558ca5db2c97fb55706f + size: 887 + commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 + git: https://github.com/nikita-volkov/moore-machines + version: '0.1' + original: + commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 + git: https://github.com/nikita-volkov/moore-machines +- completed: + name: structure-kit + pantry-tree: + sha256: b7779ebe935d65c0b4f6e3ea8b5f5011abdabf362b1673826545c93625e050ad + size: 3500 + commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c + git: https://github.com/nikita-volkov/structure-kit + version: 0.1.0.1 + original: + commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c + git: https://github.com/nikita-volkov/structure-kit +- completed: + name: canapi + pantry-tree: + sha256: 54c44986c3d7f8daa4464e4e097f312dc3ac0c02f7eb5fbb8bba3a6e6d19487a + size: 1319 + commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 + git: https://github.com/nikita-volkov/canapi + version: '0.1' + original: + commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 + git: https://github.com/nikita-volkov/canapi +- completed: + name: lean-http-client + pantry-tree: + sha256: 64da0f3390166969e2fe6a140d847c315258f9bcb8fcaf3169fd78b4b25b6f6f + size: 544 + commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 + git: https://github.com/nikita-volkov/lean-http-client + version: '0.1' + original: + commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 + git: https://github.com/nikita-volkov/lean-http-client +- completed: + name: distillery + pantry-tree: + sha256: 03d32965a35914b68bdaa149db48ce66e774783360f5b7d8b18db72de61b7baf + size: 524 + commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a + git: https://github.com/nikita-volkov/distillery + version: '0.1' + original: + commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a + git: https://github.com/nikita-volkov/distillery +- completed: + name: acquire + pantry-tree: + sha256: e194150d070a0e4f07e5f2285e82f177312f328c7490f3a659f361b4f6324d00 + size: 438 + commit: 75194757308ae9340b0e2eda46d8db4d25af7516 + git: https://github.com/metrix-ai/acquire + version: 0.3.1 + original: + commit: 75194757308ae9340b0e2eda46d8db4d25af7516 + git: https://github.com/metrix-ai/acquire +- completed: + pantry-tree: + sha256: 520aa5f59b55c14d27115a801f499f940a563849b0c54876bcd6be41f6450713 + size: 456 + hackage: cereal-data-dword-0.1.1@sha256:a3fa6dfafaeeb3774c5888dfa601d561ce05b0af66f52859970247e58135d47e,1381 + original: + hackage: cereal-data-dword-0.1.1 +- completed: + pantry-tree: + sha256: f2fd5281b8fcea2ffa1f323feca1c84d030914dfec18f61e52be8a60d6939037 + size: 2622 + hackage: hasql-1.6@sha256:78f5fd9e732862cbffb06123015866312bf6f3889c18508018820536490a8460,6624 + original: + hackage: hasql-1.6 +- completed: + pantry-tree: + sha256: 946dbffdad0a92dbdeeaaabb1c7ac2451f3002561407068543fcd860cd860f15 + size: 473 + hackage: punycode-2.0@sha256:dce7f481b5eedc750cf49d21a80b839cb366afd2d29bc506acca5ad9d0c06a8f,1503 + original: + hackage: punycode-2.0 +- completed: + pantry-tree: + sha256: 51dc0ab22269973eec829ae476fb3102cfe155ffde2fd1d039dedf65c7842031 + size: 509 + hackage: timestamp-0.2@sha256:103fe49ce206922d3b14d57d8aff25eaf03c70fef5fcdaeaeb8416aaee163e51,1598 + original: + hackage: timestamp-0.2 +snapshots: +- completed: + sha256: a4a05670f8e2a2bc108aca4e093c57eb82f562afd6949f299b0116861444f6f6 + size: 887 + url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml + original: + url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml +- completed: + sha256: 6a7d84094bf948100b933f83f8cff586a41633d59cb1adbb89eefc25405fabe8 + size: 616794 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/16.yaml + original: nightly-2022-07-16 From 871319929bf17a9b8aa80acaec89a5792bc02c1a Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 2 Aug 2022 14:45:46 -0400 Subject: [PATCH 0737/1204] Relax text dependencies since tests are green using 2.0. Also update stackage version. --- hasql-notifications.cabal | 2 +- stack.yaml | 2 +- stack.yaml.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index f16bbc9185..e1a395d98f 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -18,7 +18,7 @@ library exposed-modules: Hasql.Notifications build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 - , text >= 1.2.3.1 && < 1.3 + , text >= 1.2.3.1 && < 2.2 , hasql-pool >= 0.4 && < 0.8 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 diff --git a/stack.yaml b/stack.yaml index fdd5a1a203..9e202fb1c3 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-19.9 +resolver: lts-19.17 packages: - . diff --git a/stack.yaml.lock b/stack.yaml.lock index d463584446..9648c3f7f4 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -6,7 +6,7 @@ packages: [] snapshots: - completed: - size: 618507 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/9.yaml - sha256: 190a93d09d9d7bccc78a0f00d6fc0350eed76bc533611e5971202800805dd00e - original: lts-19.9 + size: 619161 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/17.yaml + sha256: 7f47507fd037228a8d23cf830f5844e1f006221acebdd7cb49f2f5fb561e0546 + original: lts-19.17 From 68c15143117cddb283e96d094dbcfa7342f91ab6 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 2 Aug 2022 15:05:10 -0400 Subject: [PATCH 0738/1204] Bump patch version since we now cam compile against text-2.0 --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index e1a395d98f..a32b9f468b 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.1 +version: 0.2.0.2 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 258a1796d90185d9b993c69949ad2a56feb9fb33 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 26 Aug 2022 23:51:30 +0300 Subject: [PATCH 0739/1204] Modernize cabal and update deps --- hasql-pool.cabal | 81 +++++++++++-------------------- stack.yaml | 2 +- stack.yaml.lock | 121 ++--------------------------------------------- 3 files changed, 34 insertions(+), 170 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 22212aa5d9..2da319cece 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,74 +1,49 @@ -name: - hasql-pool -version: - 0.7.2.1 -category: - Hasql, Database, PostgreSQL -synopsis: - A pool of connections for Hasql -homepage: - https://github.com/nikita-volkov/hasql-pool -bug-reports: - https://github.com/nikita-volkov/hasql-pool/issues -author: - Nikita Volkov -maintainer: - Nikita Volkov -copyright: - (c) 2015, Nikita Volkov -license: - MIT -license-file: - LICENSE -build-type: - Simple -cabal-version: - >=1.10 -extra-source-files: - CHANGELOG.md +cabal-version: 3.0 +name: hasql-pool +version: 0.7.2.1 + +category: Hasql, Database, PostgreSQL +synopsis: Pool of connections for Hasql +homepage: https://github.com/nikita-volkov/hasql-pool +bug-reports: https://github.com/nikita-volkov/hasql-pool/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE +extra-source-files: CHANGELOG.md source-repository head - type: - git - location: - git://github.com/nikita-volkov/hasql-pool.git + type: git + location: git://github.com/nikita-volkov/hasql-pool.git +common base-settings + default-extensions: BangPatterns, BlockArguments, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DerivingVia, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, InstanceSigs, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, StrictData, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples + default-language: Haskell2010 library - hs-source-dirs: - library - ghc-options: - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 + import: base-settings + hs-source-dirs: library exposed-modules: Hasql.Pool other-modules: Hasql.Pool.Prelude build-depends: base >=4.11 && <5, - hasql >=1.6 && <1.7, + hasql >=1.6.0.1 && <1.7, stm >=2.5 && <3, time >=1.5 && <2, - transformers >=0.5 && <0.7 - + transformers >=0.5 && <0.7, test-suite test - type: - exitcode-stdio-1.0 - hs-source-dirs: - test - main-is: - Main.hs - default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 + import: base-settings + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs build-depends: hasql, hasql-pool, hspec >=2.6 && <3, rerebase >=1.15 && <2, - stm >=2.5 && <3 + stm >=2.5 && <3, diff --git a/stack.yaml b/stack.yaml index d696256798..799a83cfaa 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1 @@ -resolver: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml +resolver: nightly-2022-08-26 diff --git a/stack.yaml.lock b/stack.yaml.lock index 33135bc714..dcf7c6fd65 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,121 +3,10 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: -- completed: - name: coalmine - pantry-tree: - sha256: 8896e428a656c392d25d499f9b024abd0c30459db09e8a78e1645bad43d4fb89 - size: 9564 - commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 - git: https://github.com/nikita-volkov/coalmine - version: 0.1.0.4 - original: - commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 - git: https://github.com/nikita-volkov/coalmine -- completed: - name: moore-machines - pantry-tree: - sha256: 3d1505067d5c8599e9843ed45ec2bc587fa5100c448f558ca5db2c97fb55706f - size: 887 - commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 - git: https://github.com/nikita-volkov/moore-machines - version: '0.1' - original: - commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 - git: https://github.com/nikita-volkov/moore-machines -- completed: - name: structure-kit - pantry-tree: - sha256: b7779ebe935d65c0b4f6e3ea8b5f5011abdabf362b1673826545c93625e050ad - size: 3500 - commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c - git: https://github.com/nikita-volkov/structure-kit - version: 0.1.0.1 - original: - commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c - git: https://github.com/nikita-volkov/structure-kit -- completed: - name: canapi - pantry-tree: - sha256: 54c44986c3d7f8daa4464e4e097f312dc3ac0c02f7eb5fbb8bba3a6e6d19487a - size: 1319 - commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 - git: https://github.com/nikita-volkov/canapi - version: '0.1' - original: - commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 - git: https://github.com/nikita-volkov/canapi -- completed: - name: lean-http-client - pantry-tree: - sha256: 64da0f3390166969e2fe6a140d847c315258f9bcb8fcaf3169fd78b4b25b6f6f - size: 544 - commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 - git: https://github.com/nikita-volkov/lean-http-client - version: '0.1' - original: - commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 - git: https://github.com/nikita-volkov/lean-http-client -- completed: - name: distillery - pantry-tree: - sha256: 03d32965a35914b68bdaa149db48ce66e774783360f5b7d8b18db72de61b7baf - size: 524 - commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a - git: https://github.com/nikita-volkov/distillery - version: '0.1' - original: - commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a - git: https://github.com/nikita-volkov/distillery -- completed: - name: acquire - pantry-tree: - sha256: e194150d070a0e4f07e5f2285e82f177312f328c7490f3a659f361b4f6324d00 - size: 438 - commit: 75194757308ae9340b0e2eda46d8db4d25af7516 - git: https://github.com/metrix-ai/acquire - version: 0.3.1 - original: - commit: 75194757308ae9340b0e2eda46d8db4d25af7516 - git: https://github.com/metrix-ai/acquire -- completed: - pantry-tree: - sha256: 520aa5f59b55c14d27115a801f499f940a563849b0c54876bcd6be41f6450713 - size: 456 - hackage: cereal-data-dword-0.1.1@sha256:a3fa6dfafaeeb3774c5888dfa601d561ce05b0af66f52859970247e58135d47e,1381 - original: - hackage: cereal-data-dword-0.1.1 -- completed: - pantry-tree: - sha256: f2fd5281b8fcea2ffa1f323feca1c84d030914dfec18f61e52be8a60d6939037 - size: 2622 - hackage: hasql-1.6@sha256:78f5fd9e732862cbffb06123015866312bf6f3889c18508018820536490a8460,6624 - original: - hackage: hasql-1.6 -- completed: - pantry-tree: - sha256: 946dbffdad0a92dbdeeaaabb1c7ac2451f3002561407068543fcd860cd860f15 - size: 473 - hackage: punycode-2.0@sha256:dce7f481b5eedc750cf49d21a80b839cb366afd2d29bc506acca5ad9d0c06a8f,1503 - original: - hackage: punycode-2.0 -- completed: - pantry-tree: - sha256: 51dc0ab22269973eec829ae476fb3102cfe155ffde2fd1d039dedf65c7842031 - size: 509 - hackage: timestamp-0.2@sha256:103fe49ce206922d3b14d57d8aff25eaf03c70fef5fcdaeaeb8416aaee163e51,1598 - original: - hackage: timestamp-0.2 +packages: [] snapshots: - completed: - sha256: a4a05670f8e2a2bc108aca4e093c57eb82f562afd6949f299b0116861444f6f6 - size: 887 - url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml - original: - url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml -- completed: - sha256: 6a7d84094bf948100b933f83f8cff586a41633d59cb1adbb89eefc25405fabe8 - size: 616794 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/16.yaml - original: nightly-2022-07-16 + sha256: 4467e8867668da207eae2bf418100b6e4262374a626586a9e2d0444bd27662d8 + size: 631956 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/8/26.yaml + original: nightly-2022-08-26 From 5b29918beae04a280057a69ec93da9292562dff9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Aug 2022 15:53:27 +0300 Subject: [PATCH 0740/1204] Correct things --- library/Hasql/Pool/Prelude.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 6f4d8687d3..32aa5796f6 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -84,7 +84,7 @@ import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, getMillisecondsSinceEpoch :: IO Int getMillisecondsSinceEpoch = - fmap (fromIntegral . systemTimeToMicros) getSystemTime + fmap systemTimeToMillis getSystemTime where - systemTimeToMicros (MkSystemTime s ns) = - s * 1000 + fromIntegral (div ns 1000000) + systemTimeToMillis (MkSystemTime s ns) = + fromIntegral s * 1000 + fromIntegral (div ns 1000000) From 48d0106cab686d277ed7d4c3ea6a2f26f16d44e7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Aug 2022 15:57:58 +0300 Subject: [PATCH 0741/1204] Isolate the time extras --- hasql-pool.cabal | 2 ++ library/Hasql/Pool/Prelude.hs | 8 -------- library/Hasql/Pool/Time/Conversions.hs | 10 ++++++++++ library/Hasql/Pool/Time/IO.hs | 8 ++++++++ 4 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 library/Hasql/Pool/Time/Conversions.hs create mode 100644 library/Hasql/Pool/Time/IO.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 2da319cece..e793a32d00 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -29,6 +29,8 @@ library Hasql.Pool other-modules: Hasql.Pool.Prelude + Hasql.Pool.Time.IO + Hasql.Pool.Time.Conversions build-depends: base >=4.11 && <5, hasql >=1.6.0.1 && <1.7, diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 32aa5796f6..c923c781b5 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -1,6 +1,5 @@ module Hasql.Pool.Prelude ( module Exports, - getMillisecondsSinceEpoch, ) where @@ -81,10 +80,3 @@ import Text.Printf as Exports (hPrintf, printf) import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) - -getMillisecondsSinceEpoch :: IO Int -getMillisecondsSinceEpoch = - fmap systemTimeToMillis getSystemTime - where - systemTimeToMillis (MkSystemTime s ns) = - fromIntegral s * 1000 + fromIntegral (div ns 1000000) diff --git a/library/Hasql/Pool/Time/Conversions.hs b/library/Hasql/Pool/Time/Conversions.hs new file mode 100644 index 0000000000..1d4c4685db --- /dev/null +++ b/library/Hasql/Pool/Time/Conversions.hs @@ -0,0 +1,10 @@ +module Hasql.Pool.Time.Conversions where + +import Hasql.Pool.Prelude + +class ToMilliseconds a where + toMilliseconds :: a -> Int + +instance ToMilliseconds SystemTime where + toMilliseconds (MkSystemTime s ns) = + fromIntegral s * 1000 + fromIntegral (div ns 1000000) diff --git a/library/Hasql/Pool/Time/IO.hs b/library/Hasql/Pool/Time/IO.hs new file mode 100644 index 0000000000..e4379e3663 --- /dev/null +++ b/library/Hasql/Pool/Time/IO.hs @@ -0,0 +1,8 @@ +module Hasql.Pool.Time.IO where + +import Hasql.Pool.Prelude +import Hasql.Pool.Time.Conversions + +getMillisecondsSinceEpoch :: IO Int +getMillisecondsSinceEpoch = + fmap toMilliseconds getSystemTime From aa44a02864916b8f4a9182d63d1d05f0acaafe32 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Aug 2022 15:58:48 +0300 Subject: [PATCH 0742/1204] Rename Time to TimeExtras --- hasql-pool.cabal | 4 ++-- library/Hasql/Pool/{Time => TimeExtras}/Conversions.hs | 2 +- library/Hasql/Pool/{Time => TimeExtras}/IO.hs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename library/Hasql/Pool/{Time => TimeExtras}/Conversions.hs (82%) rename library/Hasql/Pool/{Time => TimeExtras}/IO.hs (61%) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index e793a32d00..fd4411ea8e 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -29,8 +29,8 @@ library Hasql.Pool other-modules: Hasql.Pool.Prelude - Hasql.Pool.Time.IO - Hasql.Pool.Time.Conversions + Hasql.Pool.TimeExtras.IO + Hasql.Pool.TimeExtras.Conversions build-depends: base >=4.11 && <5, hasql >=1.6.0.1 && <1.7, diff --git a/library/Hasql/Pool/Time/Conversions.hs b/library/Hasql/Pool/TimeExtras/Conversions.hs similarity index 82% rename from library/Hasql/Pool/Time/Conversions.hs rename to library/Hasql/Pool/TimeExtras/Conversions.hs index 1d4c4685db..ae070d30a8 100644 --- a/library/Hasql/Pool/Time/Conversions.hs +++ b/library/Hasql/Pool/TimeExtras/Conversions.hs @@ -1,4 +1,4 @@ -module Hasql.Pool.Time.Conversions where +module Hasql.Pool.TimeExtras.Conversions where import Hasql.Pool.Prelude diff --git a/library/Hasql/Pool/Time/IO.hs b/library/Hasql/Pool/TimeExtras/IO.hs similarity index 61% rename from library/Hasql/Pool/Time/IO.hs rename to library/Hasql/Pool/TimeExtras/IO.hs index e4379e3663..40694ff79d 100644 --- a/library/Hasql/Pool/Time/IO.hs +++ b/library/Hasql/Pool/TimeExtras/IO.hs @@ -1,7 +1,7 @@ -module Hasql.Pool.Time.IO where +module Hasql.Pool.TimeExtras.IO where import Hasql.Pool.Prelude -import Hasql.Pool.Time.Conversions +import Hasql.Pool.TimeExtras.Conversions getMillisecondsSinceEpoch :: IO Int getMillisecondsSinceEpoch = From 8a23ef26588b745fcb763ce34294688ff59cb5e0 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Wed, 24 Aug 2022 14:21:00 +0200 Subject: [PATCH 0743/1204] Make test postgresql connection details configurable by env var --- test/Main.hs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index e7deef2732..5a70a31126 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -8,9 +8,13 @@ import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import Test.Hspec import Prelude +import qualified System.Environment +import qualified Data.ByteString.Char8 as B8 -main = hspec $ do - describe "" $ do +main = do + connectionSettings <- getConnectionSettings + putStrLn $ show connectionSettings + hspec $ describe "" $ do it "Releases a spot in the pool when there is a query error" $ do pool <- acquire 1 connectionSettings use pool badQuerySession `shouldNotReturn` (Right ()) @@ -45,9 +49,20 @@ main = hspec $ do res <- use pool $ selectOneSession shouldSatisfy res $ isRight -connectionSettings :: Connection.Settings -connectionSettings = - "host=localhost port=5432 user=postgres dbname=postgres" +getConnectionSettings :: IO Connection.Settings +getConnectionSettings = B8.unwords . catMaybes <$> sequence + [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost" + , setting "port" $ defaultEnv "POSTGRES_PORT" "5432" + , setting "user" $ defaultEnv "POSTGRES_USER" "postgres" + , setting "password" $ maybeEnv "POSTGRES_PASSWORD" + , setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" + ] + where + maybeEnv env = fmap B8.pack <$> System.Environment.lookupEnv env + defaultEnv env val = Just . fromMaybe val <$> maybeEnv env + setting label getEnv = do + val <- getEnv + return $ (\v -> label <> "=" <> v) <$> val selectOneSession :: Session.Session Int64 selectOneSession = From b30b0edc0b40b40105f244df2fea073642f3600b Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Wed, 24 Aug 2022 13:35:03 +0200 Subject: [PATCH 0744/1204] Set up CI with github actions --- .github/workflows/haskell.yml | 60 +++++++++++++++++++++++++++++++++++ test/Main.hs | 1 - 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/haskell.yml diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml new file mode 100644 index 0000000000..f287ba0326 --- /dev/null +++ b/.github/workflows/haskell.yml @@ -0,0 +1,60 @@ +name: Haskell CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +permissions: + contents: read + +jobs: + build: + strategy: + matrix: + ghc: ['8.10.7', '9.2.4'] + fail-fast: false + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + steps: + - uses: actions/checkout@v3 + - name: ghcup + run: | + ghcup install ghc ${{ matrix.ghc }} + ghcup set ghc ${{ matrix.ghc }} + ghcup install cabal latest + ghcup set cabal latest + + - name: Cache + uses: actions/cache@v3 + with: + path: ~/.cabal + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.ghc }}- + + - name: Install dependencies + run: | + cabal update + cabal build --only-dependencies --enable-tests --enable-benchmarks + - name: Build + run: cabal build --enable-tests --enable-benchmarks all + - name: Run tests + run: | + export POSTGRES_PASSWORD=postgres + cabal test all diff --git a/test/Main.hs b/test/Main.hs index 5a70a31126..70c0657e5a 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -13,7 +13,6 @@ import qualified Data.ByteString.Char8 as B8 main = do connectionSettings <- getConnectionSettings - putStrLn $ show connectionSettings hspec $ describe "" $ do it "Releases a spot in the pool when there is a query error" $ do pool <- acquire 1 connectionSettings From fda45edb6e534c075486209afcc4cd4562be5475 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Wed, 24 Aug 2022 14:34:04 +0200 Subject: [PATCH 0745/1204] Remove travis CI --- .travis.yml | 60 ----------------------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index afc7d3b244..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,60 +0,0 @@ -if: tag IS blank - -env: - - ghc=8.4.2 - - ghc=8.6.5 - - ghc=8.8.1 - - ghc=8.10.1 benchmarks=1 tests=1 - -services: - - postgresql - -install: - # Set up the Shell to treat the semicolon as && - - set -eo pipefail - # Install GHC and Cabal - - - cabal=${cabal=2.4}; - travis_retry sudo add-apt-repository -y ppa:hvr/ghc; - travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; - # Update the Cabal database - - cabal v1-update - # Switch to the distro: - - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - # Install the lower bound dependencies - - - if [ "$lower_bound_dependencies" = "1" ]; - then - constraint_options=( - ); - fi; - # Install executables - - cabal v1-install happy - - cabal v1-install doctest - # Install the library dependencies - - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls - ${constraint_options[@]} - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - # Build the library - - cabal v1-build - # Configure and build the remaining stuff - - cabal v1-configure - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - -f doctest - - cabal v1-build - -script: - - | - if [ "$tests" = "1" ]; - then - cabal v1-test --show-details=always; - fi; From d481750dc384d5159aa6300517e691b52bc023c2 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 8 Aug 2022 14:58:03 +0200 Subject: [PATCH 0746/1204] Extend documentation --- library/Hasql/Pool.hs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index ac91e3be84..f8960cc15e 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -23,7 +23,10 @@ data Pool = Pool poolFetchConnectionSettings :: IO Connection.Settings, -- | Avail connections. poolConnectionQueue :: TQueue Connection, - -- | Capacity. + -- | Remaining capacity. + -- The pool size limits the sum of poolCapacity, the length + -- of length poolConnectionQueue and the number of in-flight + -- connections. poolCapacity :: TVar Int, -- | Alive. poolAlive :: TVar Bool @@ -52,7 +55,9 @@ acquireDynamically poolSize fetchConnectionSettings = do <*> newTVarIO poolSize <*> newTVarIO True --- | Release all the connections in the pool. +-- | Release all the idle connections in the pool and mark the pool as dead. +-- In-use connections will survive this and be closed once they would be returned +-- to the pool. release :: Pool -> IO () release Pool {..} = do connections <- atomically $ do From e7a460ebd500e0d99245946cefa11fe866495c18 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 8 Aug 2022 14:59:03 +0200 Subject: [PATCH 0747/1204] Add some tests for session variables --- test/Main.hs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/Main.hs b/test/Main.hs index e7deef2732..51e5c1e2c8 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -44,6 +44,20 @@ main = hspec $ do res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight + it "Getting and setting session variables works" $ do + pool <- acquire 1 connectionSettings + res <- use pool $ getSettingSession "testing.foo" + res `shouldBe` Right Nothing + res <- use pool $ do + setSettingSession "testing.foo" "hello world" + getSettingSession "testing.foo" + res `shouldBe` Right (Just "hello world") + it "Session variables stay set when a connection gets reused" $ do + pool <- acquire 1 connectionSettings + res <- use pool $ setSettingSession "testing.foo" "hello world" + res `shouldBe` Right () + res2 <- use pool $ getSettingSession "testing.foo" + res2 `shouldBe` Right (Just "hello world") connectionSettings :: Connection.Settings connectionSettings = @@ -66,3 +80,20 @@ closeConnSession :: Session.Session () closeConnSession = do conn <- ask liftIO $ Connection.release conn + +setSettingSession :: Text -> Text -> Session.Session () +setSettingSession name value = do + Session.statement (name, value) statement + where + statement = Statement.Statement "SELECT set_config($1, $2, false)" encoder Decoders.noResult True + encoder = + contramap fst (Encoders.param (Encoders.nonNullable Encoders.text)) + <> contramap snd (Encoders.param (Encoders.nonNullable Encoders.text)) + +getSettingSession :: Text -> Session.Session (Maybe Text) +getSettingSession name = do + Session.statement name statement + where + statement = Statement.Statement "SELECT current_setting($1, true)" encoder decoder True + encoder = Encoders.param (Encoders.nonNullable Encoders.text) + decoder = Decoders.singleRow (Decoders.column (Decoders.nullable Decoders.text)) From 45ec9cd79bd8c71d04c14b1eff2435bf1b5550c4 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 8 Aug 2022 14:59:39 +0200 Subject: [PATCH 0748/1204] Allow flushing the connection pool Connections created before calling 'flush' won't be reused afterwards. --- library/Hasql/Pool.hs | 51 ++++++++++++++++++++++++++++++++----------- test/Main.hs | 13 +++++++++++ 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index f8960cc15e..7424939026 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -3,6 +3,7 @@ module Hasql.Pool Pool, acquire, acquireDynamically, + flush, release, use, @@ -28,8 +29,11 @@ data Pool = Pool -- of length poolConnectionQueue and the number of in-flight -- connections. poolCapacity :: TVar Int, - -- | Alive. - poolAlive :: TVar Bool + -- | Liveness state of the current generation. + -- The pool as a whole is alive if the current generation is alive, + -- while a connection is returned to the pool if the generation it + -- was acquired in is still alive. + poolAlive :: TVar (TVar Bool) } -- | Given the pool-size and connection settings create a connection-pool. @@ -53,7 +57,7 @@ acquireDynamically poolSize fetchConnectionSettings = do Pool fetchConnectionSettings <$> newTQueueIO <*> newTVarIO poolSize - <*> newTVarIO True + <*> (newTVarIO =<< newTVarIO True) -- | Release all the idle connections in the pool and mark the pool as dead. -- In-use connections will survive this and be closed once they would be returned @@ -61,10 +65,28 @@ acquireDynamically poolSize fetchConnectionSettings = do release :: Pool -> IO () release Pool {..} = do connections <- atomically $ do - writeTVar poolAlive False + alive <- readTVar poolAlive + writeTVar alive False flushTQueue poolConnectionQueue forM_ connections Connection.release +-- | Flush the pool, so that using the pool doesn't reuse any connection from +-- before the call. Release all the idle connections in the pool, and mark +-- in-use connections to be closed once they would be returned. +flush :: Pool -> IO () +flush Pool {..} = + join . atomically $ do + prevAlive <- readTVar poolAlive + alive <- readTVar prevAlive + if alive + then do + writeTVar prevAlive False + writeTVar poolAlive =<< newTVar True + conns <- flushTQueue poolConnectionQueue + modifyTVar' poolCapacity (+ (length conns)) + return $ forM_ conns Connection.release + else return (return ()) + -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. -- @@ -75,30 +97,31 @@ release Pool {..} = do use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = join . atomically $ do - alive <- readTVar poolAlive + aliveVar <- readTVar poolAlive + alive <- readTVar aliveVar if alive - then + then do asum - [ readTQueue poolConnectionQueue <&> onConn, + [ readTQueue poolConnectionQueue <&> onConn aliveVar, do capVal <- readTVar poolCapacity if capVal > 0 then do writeTVar poolCapacity $! pred capVal - return onNewConn + return $ onNewConn aliveVar else retry ] else return . return . Left $ PoolIsReleasedUsageError where - onNewConn = do + onNewConn aliveVar = do settings <- poolFetchConnectionSettings connRes <- Connection.acquire settings case connRes of Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onConn conn - onConn conn = do + Right conn -> onConn aliveVar conn + onConn aliveVar conn = do sessRes <- Session.run sess conn case sessRes of Left err -> case err of @@ -114,10 +137,12 @@ use Pool {..} sess = where returnConn = join . atomically $ do - alive <- readTVar poolAlive + alive <- readTVar aliveVar if alive then writeTQueue poolConnectionQueue conn $> return () - else return $ Connection.release conn + else do + modifyTVar' poolCapacity succ + return $ Connection.release conn -- | Union over all errors that 'use' can result in. data UsageError diff --git a/test/Main.hs b/test/Main.hs index 51e5c1e2c8..6f20680ca4 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -58,6 +58,19 @@ main = hspec $ do res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") + it "Flushing the pool resets session variables" $ do + pool <- acquire 1 connectionSettings + res <- use pool $ setSettingSession "testing.foo" "hello world" + res `shouldBe` Right () + flush pool + res <- use pool $ getSettingSession "testing.foo" + res `shouldBe` Right Nothing + it "Flushing a released pool leaves it dead" $ do + pool <- acquire 1 connectionSettings + release pool + flush pool + res <- use pool $ selectOneSession + res `shouldBe` Left PoolIsReleasedUsageError connectionSettings :: Connection.Settings connectionSettings = From ae6da2d796eef8f6caad7ff55b5c68432117b0aa Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 29 Aug 2022 10:08:18 +0200 Subject: [PATCH 0749/1204] make 'release' flush but not destroy the pool instead --- library/Hasql/Pool.hs | 60 ++++++++++++++----------------------------- test/Main.hs | 16 ++++++------ 2 files changed, 27 insertions(+), 49 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 7424939026..d51438cc1f 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -3,7 +3,6 @@ module Hasql.Pool Pool, acquire, acquireDynamically, - flush, release, use, @@ -59,33 +58,18 @@ acquireDynamically poolSize fetchConnectionSettings = do <*> newTVarIO poolSize <*> (newTVarIO =<< newTVarIO True) --- | Release all the idle connections in the pool and mark the pool as dead. --- In-use connections will survive this and be closed once they would be returned --- to the pool. +-- | Release all the idle connections in the pool, and mark the in-use connections +-- to be released on return. Any connections acquired after the call will be +-- newly established. release :: Pool -> IO () -release Pool {..} = do - connections <- atomically $ do - alive <- readTVar poolAlive - writeTVar alive False - flushTQueue poolConnectionQueue - forM_ connections Connection.release - --- | Flush the pool, so that using the pool doesn't reuse any connection from --- before the call. Release all the idle connections in the pool, and mark --- in-use connections to be closed once they would be returned. -flush :: Pool -> IO () -flush Pool {..} = +release Pool {..} = join . atomically $ do prevAlive <- readTVar poolAlive - alive <- readTVar prevAlive - if alive - then do - writeTVar prevAlive False - writeTVar poolAlive =<< newTVar True - conns <- flushTQueue poolConnectionQueue - modifyTVar' poolCapacity (+ (length conns)) - return $ forM_ conns Connection.release - else return (return ()) + writeTVar prevAlive False + writeTVar poolAlive =<< newTVar True + conns <- flushTQueue poolConnectionQueue + modifyTVar' poolCapacity (+ (length conns)) + return $ forM_ conns Connection.release -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -98,20 +82,16 @@ use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = join . atomically $ do aliveVar <- readTVar poolAlive - alive <- readTVar aliveVar - if alive - then do - asum - [ readTQueue poolConnectionQueue <&> onConn aliveVar, - do - capVal <- readTVar poolCapacity - if capVal > 0 - then do - writeTVar poolCapacity $! pred capVal - return $ onNewConn aliveVar - else retry - ] - else return . return . Left $ PoolIsReleasedUsageError + asum + [ readTQueue poolConnectionQueue <&> onConn aliveVar, + do + capVal <- readTVar poolCapacity + if capVal > 0 + then do + writeTVar poolCapacity $! pred capVal + return $ onNewConn aliveVar + else retry + ] where onNewConn aliveVar = do settings <- poolFetchConnectionSettings @@ -150,8 +130,6 @@ data UsageError ConnectionUsageError Connection.ConnectionError | -- | Session execution failed. SessionUsageError Session.QueryError - | -- | Attempt to use a pool, which has already been called 'release' upon. - PoolIsReleasedUsageError deriving (Show, Eq) instance Exception UsageError diff --git a/test/Main.hs b/test/Main.hs index 6f20680ca4..b2efcb96e7 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -44,6 +44,12 @@ main = hspec $ do res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight + it "The pool remains usable after release" $ do + pool <- acquire 1 connectionSettings + res <- use pool $ selectOneSession + release pool + res <- use pool $ selectOneSession + shouldSatisfy res $ isRight it "Getting and setting session variables works" $ do pool <- acquire 1 connectionSettings res <- use pool $ getSettingSession "testing.foo" @@ -58,19 +64,13 @@ main = hspec $ do res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Flushing the pool resets session variables" $ do + it "Releasing the pool resets session variables" $ do pool <- acquire 1 connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () - flush pool + release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing - it "Flushing a released pool leaves it dead" $ do - pool <- acquire 1 connectionSettings - release pool - flush pool - res <- use pool $ selectOneSession - res `shouldBe` Left PoolIsReleasedUsageError connectionSettings :: Connection.Settings connectionSettings = From 31af4fe3a389cb520b8c19b34f08aa8bc133cc6b Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 29 Aug 2022 13:30:06 +0200 Subject: [PATCH 0750/1204] an attempt at naming things a bit more clearly --- library/Hasql/Pool.hs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index d51438cc1f..c3432a32d7 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -17,6 +17,8 @@ import Hasql.Pool.Prelude import Hasql.Session (Session) import qualified Hasql.Session as Session +data ReuseConnection = Keep | Close + -- | A pool of connections to DB. data Pool = Pool { -- | Connection settings. @@ -28,11 +30,8 @@ data Pool = Pool -- of length poolConnectionQueue and the number of in-flight -- connections. poolCapacity :: TVar Int, - -- | Liveness state of the current generation. - -- The pool as a whole is alive if the current generation is alive, - -- while a connection is returned to the pool if the generation it - -- was acquired in is still alive. - poolAlive :: TVar (TVar Bool) + -- | Whether to return a connection to the pool. + poolReuseToggle :: TVar (TVar ReuseConnection) } -- | Given the pool-size and connection settings create a connection-pool. @@ -56,7 +55,7 @@ acquireDynamically poolSize fetchConnectionSettings = do Pool fetchConnectionSettings <$> newTQueueIO <*> newTVarIO poolSize - <*> (newTVarIO =<< newTVarIO True) + <*> (newTVarIO =<< newTVarIO Keep) -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released on return. Any connections acquired after the call will be @@ -64,9 +63,10 @@ acquireDynamically poolSize fetchConnectionSettings = do release :: Pool -> IO () release Pool {..} = join . atomically $ do - prevAlive <- readTVar poolAlive - writeTVar prevAlive False - writeTVar poolAlive =<< newTVar True + prevReuseToggle <- readTVar poolReuseToggle + writeTVar prevReuseToggle Close + newReuseToggle <- newTVar Keep + writeTVar poolReuseToggle newReuseToggle conns <- flushTQueue poolConnectionQueue modifyTVar' poolCapacity (+ (length conns)) return $ forM_ conns Connection.release @@ -81,27 +81,27 @@ release Pool {..} = use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = join . atomically $ do - aliveVar <- readTVar poolAlive + reuseToggle <- readTVar poolReuseToggle asum - [ readTQueue poolConnectionQueue <&> onConn aliveVar, + [ readTQueue poolConnectionQueue <&> onConn reuseToggle, do capVal <- readTVar poolCapacity if capVal > 0 then do writeTVar poolCapacity $! pred capVal - return $ onNewConn aliveVar + return $ onNewConn reuseToggle else retry ] where - onNewConn aliveVar = do + onNewConn reuseToggle = do settings <- poolFetchConnectionSettings connRes <- Connection.acquire settings case connRes of Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onConn aliveVar conn - onConn aliveVar conn = do + Right conn -> onConn reuseToggle conn + onConn reuseToggle conn = do sessRes <- Session.run sess conn case sessRes of Left err -> case err of @@ -117,10 +117,10 @@ use Pool {..} sess = where returnConn = join . atomically $ do - alive <- readTVar aliveVar - if alive - then writeTQueue poolConnectionQueue conn $> return () - else do + reuse <- readTVar reuseToggle + case reuse of + Keep -> writeTQueue poolConnectionQueue conn $> return () + Close -> do modifyTVar' poolCapacity succ return $ Connection.release conn From 946358eebac009b9332ca369d2a9da82937712b0 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Fri, 22 Jul 2022 14:38:39 +0200 Subject: [PATCH 0751/1204] Acquisition timeout --- hasql-pool.cabal | 2 ++ library/Hasql/Pool.hs | 31 +++++++++++++++++++++++-------- test/Main.hs | 33 ++++++++++++++++++++++++--------- 3 files changed, 49 insertions(+), 17 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index fd4411ea8e..40cc7d3d5b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -43,9 +43,11 @@ test-suite test type: exitcode-stdio-1.0 hs-source-dirs: test main-is: Main.hs + ghc-options: -threaded build-depends: hasql, hasql-pool, + async, hspec >=2.6 && <3, rerebase >=1.15 && <2, stm >=2.5 && <3, diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index c3432a32d7..8b74090749 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -23,6 +23,8 @@ data ReuseConnection = Keep | Close data Pool = Pool { -- | Connection settings. poolFetchConnectionSettings :: IO Connection.Settings, + -- | Acquisition timeout, in microseconds. + poolAcquisitionTimeout :: Maybe Int, -- | Avail connections. poolConnectionQueue :: TQueue Connection, -- | Remaining capacity. @@ -38,9 +40,9 @@ data Pool = Pool -- -- No connections actually get established by this function. It is delegated -- to 'use'. -acquire :: Int -> Connection.Settings -> IO Pool -acquire poolSize connectionSettings = - acquireDynamically poolSize (pure connectionSettings) +acquire :: Int -> Maybe Int -> Connection.Settings -> IO Pool +acquire poolSize timeout connectionSettings = + acquireDynamically poolSize timeout (pure connectionSettings) -- | Given the pool-size and connection settings constructor action -- create a connection-pool. @@ -50,9 +52,9 @@ acquire poolSize connectionSettings = -- -- In difference to 'acquire' new settings get fetched each time a connection -- is created. This may be useful for some security models. -acquireDynamically :: Int -> IO Connection.Settings -> IO Pool -acquireDynamically poolSize fetchConnectionSettings = do - Pool fetchConnectionSettings +acquireDynamically :: Int -> Maybe Int -> IO Connection.Settings -> IO Pool +acquireDynamically poolSize timeout fetchConnectionSettings = do + Pool fetchConnectionSettings timeout <$> newTQueueIO <*> newTVarIO poolSize <*> (newTVarIO =<< newTVarIO Keep) @@ -79,7 +81,13 @@ release Pool {..} = -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use Pool {..} sess = +use Pool {..} sess = do + timeout <- case poolAcquisitionTimeout of + Just delta -> do + delay <- registerDelay delta + return $ readTVar delay + Nothing -> + return $ return False join . atomically $ do reuseToggle <- readTVar poolReuseToggle asum @@ -90,7 +98,12 @@ use Pool {..} sess = then do writeTVar poolCapacity $! pred capVal return $ onNewConn reuseToggle - else retry + else retry, + do + timedOut <- timeout + if timedOut + then return . return . Left $ AcquisitionTimeout + else retry ] where onNewConn reuseToggle = do @@ -130,6 +143,8 @@ data UsageError ConnectionUsageError Connection.ConnectionError | -- | Session execution failed. SessionUsageError Session.QueryError + | -- | Timeout acquiring a connection. + AcquisitionTimeout deriving (Show, Eq) instance Exception UsageError diff --git a/test/Main.hs b/test/Main.hs index b2efcb96e7..d80c91a4f7 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -8,28 +8,29 @@ import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import Test.Hspec import Prelude +import Control.Concurrent.Async (race) main = hspec $ do describe "" $ do it "Releases a spot in the pool when there is a query error" $ do - pool <- acquire 1 connectionSettings + pool <- acquire 1 Nothing connectionSettings use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) it "Simulation of connection error works" $ do - pool <- acquire 3 connectionSettings + pool <- acquire 3 Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False it "Connection errors cause eviction of connection" $ do - pool <- acquire 3 connectionSettings + pool <- acquire 3 Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after normal use" $ do - pool <- acquire 3 connectionSettings + pool <- acquire 3 Nothing connectionSettings res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession @@ -37,7 +38,7 @@ main = hspec $ do res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after non-connection error" $ do - pool <- acquire 3 connectionSettings + pool <- acquire 3 Nothing connectionSettings res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession @@ -45,13 +46,13 @@ main = hspec $ do res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "The pool remains usable after release" $ do - pool <- acquire 1 connectionSettings + pool <- acquire 1 Nothing connectionSettings res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Getting and setting session variables works" $ do - pool <- acquire 1 connectionSettings + pool <- acquire 1 Nothing connectionSettings res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do @@ -59,18 +60,32 @@ main = hspec $ do getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") it "Session variables stay set when a connection gets reused" $ do - pool <- acquire 1 connectionSettings + pool <- acquire 1 Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") it "Releasing the pool resets session variables" $ do - pool <- acquire 1 connectionSettings + pool <- acquire 1 Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing + it "Times out connection acquisition" $ do + pool <- acquire 1 (Just 1000) connectionSettings -- 1ms timeout + sleeping <- newEmptyMVar + t0 <- getCurrentTime + res <- race + (use pool $ liftIO $ do + putMVar sleeping () + threadDelay 1000000) -- 1s + (do + takeMVar sleeping + use pool $ selectOneSession) + t1 <- getCurrentTime + res `shouldBe` Right (Left AcquisitionTimeout) + diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s connectionSettings :: Connection.Settings connectionSettings = From 74d2de086369082da43b52b86012d561b88464c9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 15:18:41 +0300 Subject: [PATCH 0752/1204] Remove the build script Since it better be local to the dev environment --- build.bash | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100755 build.bash diff --git a/build.bash b/build.bash deleted file mode 100755 index 6d6e68bf5d..0000000000 --- a/build.bash +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -set -eo pipefail - -function format { - ormolu --mode inplace -ce \ - $(find . -name "*.hs" \ - -not -path "./.git/*" \ - -not -path "./*.stack-work/*" \ - -not -path "./samples/*" \ - -not -path "./sketches/*" \ - -not -path "./output/*" \ - -not -path "./ideas/*" \ - -not -path "./refs/*" \ - -not -path "./temp/*") -} - -function build_and_test { - stack build \ - --fast --test \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" -} - -function build_and_test_by_pattern { - stack build \ - --fast --test \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ - --ta "-p \"$1\"" -} - -function build { - stack build \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ - --fast -} - -function build_failing_on_incomplete_patterns { - stack build \ - --ghc-options "-j +RTS -A128m -n2m -RTS -Werror=incomplete-patterns" \ - --fast -} - -function install { - stack \ - --work-dir ".install.stack-work" \ - install \ - --ghc-options "-j +RTS -A128m -n2m -RTS" -} - -format -build_and_test From 624ffecd9558d22c93f1ef864854f1c9a3cd1de9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 15:45:29 +0300 Subject: [PATCH 0753/1204] Remove the build script Since it better be local to the dev environment --- build.bash | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100755 build.bash diff --git a/build.bash b/build.bash deleted file mode 100755 index 6d6e68bf5d..0000000000 --- a/build.bash +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -set -eo pipefail - -function format { - ormolu --mode inplace -ce \ - $(find . -name "*.hs" \ - -not -path "./.git/*" \ - -not -path "./*.stack-work/*" \ - -not -path "./samples/*" \ - -not -path "./sketches/*" \ - -not -path "./output/*" \ - -not -path "./ideas/*" \ - -not -path "./refs/*" \ - -not -path "./temp/*") -} - -function build_and_test { - stack build \ - --fast --test \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" -} - -function build_and_test_by_pattern { - stack build \ - --fast --test \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ - --ta "-p \"$1\"" -} - -function build { - stack build \ - --ghc-options "-j +RTS -A128m -n2m -RTS -fwarn-incomplete-patterns" \ - --fast -} - -function build_failing_on_incomplete_patterns { - stack build \ - --ghc-options "-j +RTS -A128m -n2m -RTS -Werror=incomplete-patterns" \ - --fast -} - -function install { - stack \ - --work-dir ".install.stack-work" \ - install \ - --ghc-options "-j +RTS -A128m -n2m -RTS" -} - -format -build_and_test From aa8a4e02a0355cfc7af5909249ce15ac2dbe52b0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 15:44:56 +0300 Subject: [PATCH 0754/1204] Format with Ormolu --- test/Main.hs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index 70c0657e5a..f21d3d439c 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,19 +1,19 @@ module Main where +import qualified Data.ByteString.Char8 as B8 import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement +import qualified System.Environment import Test.Hspec import Prelude -import qualified System.Environment -import qualified Data.ByteString.Char8 as B8 main = do connectionSettings <- getConnectionSettings - hspec $ describe "" $ do + hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ do pool <- acquire 1 connectionSettings use pool badQuerySession `shouldNotReturn` (Right ()) @@ -49,13 +49,15 @@ main = do shouldSatisfy res $ isRight getConnectionSettings :: IO Connection.Settings -getConnectionSettings = B8.unwords . catMaybes <$> sequence - [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost" - , setting "port" $ defaultEnv "POSTGRES_PORT" "5432" - , setting "user" $ defaultEnv "POSTGRES_USER" "postgres" - , setting "password" $ maybeEnv "POSTGRES_PASSWORD" - , setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" - ] +getConnectionSettings = + B8.unwords . catMaybes + <$> sequence + [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", + setting "port" $ defaultEnv "POSTGRES_PORT" "5432", + setting "user" $ defaultEnv "POSTGRES_USER" "postgres", + setting "password" $ maybeEnv "POSTGRES_PASSWORD", + setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" + ] where maybeEnv env = fmap B8.pack <$> System.Environment.lookupEnv env defaultEnv env val = Just . fromMaybe val <$> maybeEnv env From 48bac0c2d5b2f9b16f25522dacd81a99cfa47421 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 16:12:22 +0300 Subject: [PATCH 0755/1204] Apply Ormolu formatting and conform error naming to convention --- library/Hasql/Pool.hs | 12 ++++++------ test/Main.hs | 22 +++++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 8b74090749..cbcd687ec9 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -99,11 +99,11 @@ use Pool {..} sess = do writeTVar poolCapacity $! pred capVal return $ onNewConn reuseToggle else retry, - do - timedOut <- timeout - if timedOut - then return . return . Left $ AcquisitionTimeout - else retry + do + timedOut <- timeout + if timedOut + then return . return . Left $ AcquisitionTimeoutUsageError + else retry ] where onNewConn reuseToggle = do @@ -144,7 +144,7 @@ data UsageError | -- | Session execution failed. SessionUsageError Session.QueryError | -- | Timeout acquiring a connection. - AcquisitionTimeout + AcquisitionTimeoutUsageError deriving (Show, Eq) instance Exception UsageError diff --git a/test/Main.hs b/test/Main.hs index d80c91a4f7..bcfae6f378 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,5 +1,6 @@ module Main where +import Control.Concurrent.Async (race) import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders @@ -8,7 +9,6 @@ import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import Test.Hspec import Prelude -import Control.Concurrent.Async (race) main = hspec $ do describe "" $ do @@ -76,15 +76,19 @@ main = hspec $ do pool <- acquire 1 (Just 1000) connectionSettings -- 1ms timeout sleeping <- newEmptyMVar t0 <- getCurrentTime - res <- race - (use pool $ liftIO $ do - putMVar sleeping () - threadDelay 1000000) -- 1s - (do - takeMVar sleeping - use pool $ selectOneSession) + res <- + race + ( use pool $ + liftIO $ do + putMVar sleeping () + threadDelay 1000000 -- 1s + ) + ( do + takeMVar sleeping + use pool $ selectOneSession + ) t1 <- getCurrentTime - res `shouldBe` Right (Left AcquisitionTimeout) + res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s connectionSettings :: Connection.Settings From 387fa5d5fb168fd706d82c997759aebd865de6ff Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 16:16:18 +0300 Subject: [PATCH 0756/1204] Update the docs --- library/Hasql/Pool.hs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index cbcd687ec9..0989bcbfa0 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -36,23 +36,36 @@ data Pool = Pool poolReuseToggle :: TVar (TVar ReuseConnection) } --- | Given the pool-size and connection settings create a connection-pool. +-- | Create a connection-pool. -- -- No connections actually get established by this function. It is delegated -- to 'use'. -acquire :: Int -> Maybe Int -> Connection.Settings -> IO Pool +acquire :: + -- | Pool size. + Int -> + -- | Connection acquisition timeout. + Maybe Int -> + -- | Connection settings. + Connection.Settings -> + IO Pool acquire poolSize timeout connectionSettings = acquireDynamically poolSize timeout (pure connectionSettings) --- | Given the pool-size and connection settings constructor action --- create a connection-pool. --- --- No connections actually get established by this function. It is delegated --- to 'use'. +-- | Create a connection-pool. -- -- In difference to 'acquire' new settings get fetched each time a connection -- is created. This may be useful for some security models. -acquireDynamically :: Int -> Maybe Int -> IO Connection.Settings -> IO Pool +-- +-- No connections actually get established by this function. It is delegated +-- to 'use'. +acquireDynamically :: + -- | Pool size. + Int -> + -- | Connection acquisition timeout. + Maybe Int -> + -- | Action fetching connection settings settings. + IO Connection.Settings -> + IO Pool acquireDynamically poolSize timeout fetchConnectionSettings = do Pool fetchConnectionSettings timeout <$> newTQueueIO From 705ad2a5235de8205f0216c36749052daa5ec7b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 16:26:15 +0300 Subject: [PATCH 0757/1204] Update the changelog and bump --- CHANGELOG.md | 12 ++++++++++++ hasql-pool.cabal | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96e35c2154..8b145e5bfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# 0.8 + +`release` became reusable. You can use it to destroy the whole pool (same as before), but now also you can use it to reset the connections. + +Acquisition timeout added. + +Breaking changes in API: + +- Removed `PoolIsReleasedUsageError` +- `acquire` extended with the acquisition timeout parameter +- `acquireDynamically` extended with the acquisition timeout parameter + # 0.7.2 Added support for dynamic connection configuration ([issue #11](https://github.com/nikita-volkov/hasql-pool/issues/11)). diff --git a/hasql-pool.cabal b/hasql-pool.cabal index b34b10e026..c2ec894e15 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.7.2.1 +version: 0.8 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From 971afa9796b5418caad12a9b180e802d29fdb5b2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 16:56:33 +0300 Subject: [PATCH 0758/1204] Refine docs --- library/Hasql/Pool.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 0989bcbfa0..64be7a1619 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -19,7 +19,7 @@ import qualified Hasql.Session as Session data ReuseConnection = Keep | Close --- | A pool of connections to DB. +-- | Pool of connections to DB. data Pool = Pool { -- | Connection settings. poolFetchConnectionSettings :: IO Connection.Settings, @@ -63,7 +63,7 @@ acquireDynamically :: Int -> -- | Connection acquisition timeout. Maybe Int -> - -- | Action fetching connection settings settings. + -- | Action fetching connection settings. IO Connection.Settings -> IO Pool acquireDynamically poolSize timeout fetchConnectionSettings = do From 49518cb2553ba96d7e7595ea30a6f7c122ffa87a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 29 Aug 2022 16:56:55 +0300 Subject: [PATCH 0759/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c2ec894e15..fdd972b841 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8 +version: 0.8.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From 5383701f2abf5d053a2eda512022726ee628ec4c Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 29 Aug 2022 13:44:14 -0400 Subject: [PATCH 0760/1204] Relax upper bound for hasql-pool and bump patch version --- hasql-notifications.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index a32b9f468b..8d0f59e63a 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.2 +version: 0.2.0.3 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 1.2.3.1 && < 2.2 - , hasql-pool >= 0.4 && < 0.8 + , hasql-pool >= 0.4 && < 0.9 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 From bbdec40300137d3bdb784e4622fc15a11d3986db Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 30 Aug 2022 15:24:15 +0200 Subject: [PATCH 0761/1204] Comment fix --- CHANGELOG.md | 4 ++++ hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b145e5bfd..fb1d8f8b8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.8.0.2 + +Fixed Windows build. + # 0.8 `release` became reusable. You can use it to destroy the whole pool (same as before), but now also you can use it to reset the connections. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index fdd972b841..8bed580a88 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.1 +version: 0.8.0.2 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 64be7a1619..af4b4a3478 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -29,7 +29,7 @@ data Pool = Pool poolConnectionQueue :: TQueue Connection, -- | Remaining capacity. -- The pool size limits the sum of poolCapacity, the length - -- of length poolConnectionQueue and the number of in-flight + -- of poolConnectionQueue and the number of in-flight -- connections. poolCapacity :: TVar Int, -- | Whether to return a connection to the pool. From a0ca8531be780bc0af7abebc00432ee920b85ae4 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 30 Aug 2022 13:26:08 +0200 Subject: [PATCH 0762/1204] Drop ReuseConnection type to avoid name ambiguity, fixing Windows build Somehow, we import GHC.Event.Windows.ConsoleEvent.Close on Windows via Hasql.Pool.Prelude, which conflicts with Close. --- library/Hasql/Pool.hs | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index af4b4a3478..1c705bb3fb 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -17,8 +17,6 @@ import Hasql.Pool.Prelude import Hasql.Session (Session) import qualified Hasql.Session as Session -data ReuseConnection = Keep | Close - -- | Pool of connections to DB. data Pool = Pool { -- | Connection settings. @@ -33,7 +31,7 @@ data Pool = Pool -- connections. poolCapacity :: TVar Int, -- | Whether to return a connection to the pool. - poolReuseToggle :: TVar (TVar ReuseConnection) + poolReuse :: TVar (TVar Bool) } -- | Create a connection-pool. @@ -70,7 +68,7 @@ acquireDynamically poolSize timeout fetchConnectionSettings = do Pool fetchConnectionSettings timeout <$> newTQueueIO <*> newTVarIO poolSize - <*> (newTVarIO =<< newTVarIO Keep) + <*> (newTVarIO =<< newTVarIO True) -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released on return. Any connections acquired after the call will be @@ -78,10 +76,10 @@ acquireDynamically poolSize timeout fetchConnectionSettings = do release :: Pool -> IO () release Pool {..} = join . atomically $ do - prevReuseToggle <- readTVar poolReuseToggle - writeTVar prevReuseToggle Close - newReuseToggle <- newTVar Keep - writeTVar poolReuseToggle newReuseToggle + prevReuse <- readTVar poolReuse + writeTVar prevReuse False + newReuse <- newTVar True + writeTVar poolReuse newReuse conns <- flushTQueue poolConnectionQueue modifyTVar' poolCapacity (+ (length conns)) return $ forM_ conns Connection.release @@ -102,15 +100,15 @@ use Pool {..} sess = do Nothing -> return $ return False join . atomically $ do - reuseToggle <- readTVar poolReuseToggle + reuseVar <- readTVar poolReuse asum - [ readTQueue poolConnectionQueue <&> onConn reuseToggle, + [ readTQueue poolConnectionQueue <&> onConn reuseVar, do capVal <- readTVar poolCapacity if capVal > 0 then do writeTVar poolCapacity $! pred capVal - return $ onNewConn reuseToggle + return $ onNewConn reuseVar else retry, do timedOut <- timeout @@ -119,15 +117,15 @@ use Pool {..} sess = do else retry ] where - onNewConn reuseToggle = do + onNewConn reuseVar = do settings <- poolFetchConnectionSettings connRes <- Connection.acquire settings case connRes of Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onConn reuseToggle conn - onConn reuseToggle conn = do + Right conn -> onConn reuseVar conn + onConn reuseVar conn = do sessRes <- Session.run sess conn case sessRes of Left err -> case err of @@ -143,10 +141,10 @@ use Pool {..} sess = do where returnConn = join . atomically $ do - reuse <- readTVar reuseToggle - case reuse of - Keep -> writeTQueue poolConnectionQueue conn $> return () - Close -> do + reuse <- readTVar reuseVar + if reuse + then writeTQueue poolConnectionQueue conn $> return () + else do modifyTVar' poolCapacity succ return $ Connection.release conn From 7d15a56d641f0247f9a4dd88adde1d3447228328 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 30 Aug 2022 15:27:17 +0200 Subject: [PATCH 0763/1204] Add Windows build to CI --- .github/workflows/haskell.yml | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index f287ba0326..de1075bbe9 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -10,7 +10,7 @@ permissions: contents: read jobs: - build: + build-test: strategy: matrix: ghc: ['8.10.7', '9.2.4'] @@ -58,3 +58,35 @@ jobs: run: | export POSTGRES_PASSWORD=postgres cabal test all + + build-windows: + strategy: + matrix: + ghc: ['8.10.7', '9.2.4'] + fail-fast: false + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + - name: ghcup + run: | + ghcup install ghc ${{ matrix.ghc }} + ghcup set ghc ${{ matrix.ghc }} + ghcup install cabal latest + ghcup set cabal latest + + - name: Cache + uses: actions/cache@v3 + with: + path: ~/.cabal + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.ghc }}- + + - name: Install dependencies + run: | + cabal update + cabal build --only-dependencies --enable-tests --enable-benchmarks + - name: Build + run: cabal build --enable-tests --enable-benchmarks all From 490c196111509e42615ad57c93ef8ba4e6382bb4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 30 Aug 2022 20:10:57 +0300 Subject: [PATCH 0764/1204] Rename jobs --- .github/workflows/haskell.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index de1075bbe9..44debc010c 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -10,7 +10,7 @@ permissions: contents: read jobs: - build-test: + test-on-linux: strategy: matrix: ghc: ['8.10.7', '9.2.4'] @@ -59,7 +59,7 @@ jobs: export POSTGRES_PASSWORD=postgres cabal test all - build-windows: + test-on-windows: strategy: matrix: ghc: ['8.10.7', '9.2.4'] From 54ccc5a4967647387e3b3aea21a4073d229f25c5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 30 Aug 2022 20:11:09 +0300 Subject: [PATCH 0765/1204] Attempt to install pg --- .github/workflows/haskell.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 44debc010c..663a28ed26 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -69,6 +69,7 @@ jobs: steps: - uses: actions/checkout@v3 + - run: Add-Content $env:GITHUB_PATH $env:PGBIN - name: ghcup run: | ghcup install ghc ${{ matrix.ghc }} From 05eefe62954de6591f69a28d487d895a985abcf7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 30 Aug 2022 20:12:50 +0300 Subject: [PATCH 0766/1204] Make CI be triggered on all pushes --- .github/workflows/haskell.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 663a28ed26..4b24cb36b2 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -2,7 +2,6 @@ name: Haskell CI on: push: - branches: [ master ] pull_request: branches: [ master ] From 7dc1e951b82035c39ef1d7d81a62b2fb0d2bd5f2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 1 Sep 2022 16:13:21 +0300 Subject: [PATCH 0767/1204] Polish the docs --- library/Hasql/Pool.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 1c705bb3fb..a0beb92eff 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -41,7 +41,7 @@ data Pool = Pool acquire :: -- | Pool size. Int -> - -- | Connection acquisition timeout. + -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Connection settings. Connection.Settings -> @@ -59,7 +59,7 @@ acquire poolSize timeout connectionSettings = acquireDynamically :: -- | Pool size. Int -> - -- | Connection acquisition timeout. + -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Action fetching connection settings. IO Connection.Settings -> From bb500ca3e04cc5bc503ce01c6440bc81cd9e9237 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 1 Sep 2022 16:13:42 +0300 Subject: [PATCH 0768/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 8bed580a88..dd0073a186 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.2 +version: 0.8.0.3 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From 67e2034f0880e43bddf01079736c45fa3c1aef97 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 7 Sep 2022 21:45:56 +0300 Subject: [PATCH 0769/1204] Remove the stack files Since this is a library project and is supposed to compile against a range of dependencies. --- stack.yaml | 6 ------ stack.yaml.lock | 40 ---------------------------------------- 2 files changed, 46 deletions(-) delete mode 100644 stack.yaml delete mode 100644 stack.yaml.lock diff --git a/stack.yaml b/stack.yaml deleted file mode 100644 index 0ebfa859e9..0000000000 --- a/stack.yaml +++ /dev/null @@ -1,6 +0,0 @@ -resolver: nightly-2022-06-20 -extra-deps: - - vector-0.13.0.0 - - vector-stream-0.1.0.0 - - aeson-2.1.0.0 - - generically-0.1 diff --git a/stack.yaml.lock b/stack.yaml.lock deleted file mode 100644 index 1a657aa9e8..0000000000 --- a/stack.yaml.lock +++ /dev/null @@ -1,40 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files - -packages: -- completed: - pantry-tree: - sha256: 61263e71050e1c895bb67e4c0f05497419818e8e79b8bff9e3eabf17759e3232 - size: 4092 - hackage: vector-0.13.0.0@sha256:ec337a1371bc306658e8338612e975f37a3f7700716441608b7afb66ae356d4c,8774 - original: - hackage: vector-0.13.0.0 -- completed: - pantry-tree: - sha256: 99de0751367cf53df872999edfb9e3c24207cf946442ccccf7487d74c7f12c1d - size: 325 - hackage: vector-stream-0.1.0.0@sha256:5500b39bd69ba5384638db0b451c8eaf40ef52544355741bd73436b0da9ec3a8,1336 - original: - hackage: vector-stream-0.1.0.0 -- completed: - pantry-tree: - sha256: 416127fd578b11c2bbb3cabdce212d939f040ddf390c54caebf4ceda02222872 - size: 38191 - hackage: aeson-2.1.0.0@sha256:b0bdd457ff05f0924f6055e5265a5a70e8f719f6e92b3c98a6af922495539ef2,5937 - original: - hackage: aeson-2.1.0.0 -- completed: - pantry-tree: - sha256: 302b140ee5ccf6754ab96154486051f9ab989d3cbaa7c9674e1e9f0de7cdd07b - size: 232 - hackage: generically-0.1@sha256:16d54a08bcdf708395c2200a28ffcba55e90479dc96ed617dbb94f0411f7a7af,1024 - original: - hackage: generically-0.1 -snapshots: -- completed: - sha256: 6935ec7d6f8306ab967fd8edcc9d0773dfeee59345103cb021ebedacd19c5c6b - size: 613125 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/6/20.yaml - original: nightly-2022-06-20 From 3220655db9ae3f4c86bfb9d248d5f76e4f4275e0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 7 Sep 2022 21:53:39 +0300 Subject: [PATCH 0770/1204] Add lazy variations of bytestring json encoders Addresses #149. --- CHANGELOG.md | 4 ++++ hasql.cabal | 8 ++++---- library/Hasql/Encoders.hs | 2 ++ library/Hasql/Private/Encoders.hs | 13 +++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c7f61a006..3a8ef850d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.6.1 + +- Added `jsonLazyBytes` and `jsonbLazyBytes` + # 1.6 - Added position to `ServerError` (breaking change). diff --git a/hasql.cabal b/hasql.cabal index 147b094689..6659642893 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.0.1 +version: 1.6.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: @@ -64,13 +64,13 @@ library contravariant >=1.3 && <2, dlist ==0.8.* || >=1 && <2, hashable >=1.2 && <2, - hashtables >=1.1 && <2, + hashtables >=1.3 && <2, mtl >=2 && <3, - postgresql-binary >=0.12.4 && <0.13, + postgresql-binary >=0.12.5 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, text >=1 && <3, - text-builder >=0.6.1.2 && <0.7, + text-builder >=0.6.7 && <0.7, transformers >=0.3 && <0.7, vector >=0.10 && <0.14 diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index f0b2742861..91c314237d 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -36,8 +36,10 @@ module Hasql.Encoders inet, json, jsonBytes, + jsonLazyBytes, jsonb, jsonbBytes, + jsonbLazyBytes, enum, unknown, array, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 814a593858..213725a13a 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -2,6 +2,7 @@ -- A DSL for declaration of query parameter encoders. module Hasql.Private.Encoders where +import qualified Data.ByteString.Lazy as LazyByteString import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.Encoders.Params as Params import qualified Hasql.Private.Encoders.Value as Value @@ -228,6 +229,12 @@ json = Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) jsonBytes :: Value ByteString jsonBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) +-- | +-- Encoder of @JSON@ values from raw JSON as lazy ByteString. +{-# INLINEABLE jsonLazyBytes #-} +jsonLazyBytes :: Value ByteString +jsonLazyBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes_lazy)) + -- | -- Encoder of @JSONB@ values from JSON AST. {-# INLINEABLE jsonb #-} @@ -240,6 +247,12 @@ jsonb = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) jsonbBytes :: Value ByteString jsonbBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) +-- | +-- Encoder of @JSONB@ values from raw JSON as lazy ByteString. +{-# INLINEABLE jsonbLazyBytes #-} +jsonbLazyBytes :: Value ByteString +jsonbLazyBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes_lazy)) + -- | -- Given a function, -- which maps a value into a textual enum label used on the DB side, From ef5bb2f58a7b95b553e40f9dbcc381fb02d9b2a3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 8 Sep 2022 14:13:37 +0300 Subject: [PATCH 0771/1204] Fix the build --- hasql.cabal | 2 +- library/Hasql/Private/Encoders.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 6659642893..2948547f8b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.1 +version: 1.6.1.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 213725a13a..7973cc7aab 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -232,7 +232,7 @@ jsonBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes)) -- | -- Encoder of @JSON@ values from raw JSON as lazy ByteString. {-# INLINEABLE jsonLazyBytes #-} -jsonLazyBytes :: Value ByteString +jsonLazyBytes :: Value LazyByteString.ByteString jsonLazyBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes_lazy)) -- | @@ -250,7 +250,7 @@ jsonbBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) -- | -- Encoder of @JSONB@ values from raw JSON as lazy ByteString. {-# INLINEABLE jsonbLazyBytes #-} -jsonbLazyBytes :: Value ByteString +jsonbLazyBytes :: Value LazyByteString.ByteString jsonbLazyBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes_lazy)) -- | From fcadfbee3e18e2c497b5e8f489e2c4fc1fa1be49 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 17 Sep 2022 11:53:13 +0300 Subject: [PATCH 0772/1204] Move to explicit references to data-types In attempt to avoid Haddock redirecting to postgresql-binary for type signatures. --- hasql.cabal | 5 +++++ library/Hasql/Private/Decoders.hs | 25 +++++++++++++------------ library/Hasql/Private/Encoders.hs | 25 +++++++++++++------------ library/Hasql/Private/Prelude.hs | 4 +++- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 2948547f8b..36a41209d1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -57,6 +57,7 @@ library Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params build-depends: + aeson >=2 && <3, attoparsec >=0.10 && <0.15, base >=4.12 && <5, bytestring >=0.10 && <0.12, @@ -66,12 +67,16 @@ library hashable >=1.2 && <2, hashtables >=1.3 && <2, mtl >=2 && <3, + network-ip >=0.3.0.3 && <0.4, postgresql-binary >=0.12.5 && <0.13, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, + scientific >=0.3 && <0.4, text >=1 && <3, text-builder >=0.6.7 && <0.7, + time >=1.9 && <2, transformers >=0.3 && <0.7, + uuid >=1.3 && <2, vector >=0.10 && <0.14 test-suite tasty diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 8ae6f2e2af..fbf78e89e8 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -2,6 +2,7 @@ -- A DSL for declaration of result decoders. module Hasql.Private.Decoders where +import qualified Data.Aeson as Aeson import qualified Data.Vector as Vector import qualified Data.Vector.Generic as GenericVector import qualified Hasql.Private.Decoders.Array as Array @@ -13,7 +14,7 @@ import qualified Hasql.Private.Decoders.Value as Value import qualified Hasql.Private.Errors as Errors import Hasql.Private.Prelude hiding (bool, maybe) import qualified Hasql.Private.Prelude as Prelude -import qualified PostgreSQL.Binary.Data as B +import qualified Network.IP.Addr as NetworkIp import qualified PostgreSQL.Binary.Decoding as A -- * Result @@ -187,7 +188,7 @@ float8 = Value (Value.decoder (const A.float8)) -- | -- Decoder of the @NUMERIC@ values. {-# INLINEABLE numeric #-} -numeric :: Value B.Scientific +numeric :: Value Scientific numeric = Value (Value.decoder (const A.numeric)) -- | @@ -212,13 +213,13 @@ bytea = Value (Value.decoder (const A.bytea_strict)) -- | -- Decoder of the @DATE@ values. {-# INLINEABLE date #-} -date :: Value B.Day +date :: Value Day date = Value (Value.decoder (const A.date)) -- | -- Decoder of the @TIMESTAMP@ values. {-# INLINEABLE timestamp #-} -timestamp :: Value B.LocalTime +timestamp :: Value LocalTime timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int)) -- | @@ -232,13 +233,13 @@ timestamp = Value (Value.decoder (Prelude.bool A.timestamp_float A.timestamp_int -- However this library bypasses the silent conversions -- and communicates with Postgres using the UTC values directly. {-# INLINEABLE timestamptz #-} -timestamptz :: Value B.UTCTime +timestamptz :: Value UTCTime timestamptz = Value (Value.decoder (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | -- Decoder of the @TIME@ values. {-# INLINEABLE time #-} -time :: Value B.TimeOfDay +time :: Value TimeOfDay time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -- | @@ -250,31 +251,31 @@ time = Value (Value.decoder (Prelude.bool A.time_float A.time_int)) -- that fits the task, so we use a pair of 'TimeOfDay' and 'TimeZone' -- to represent a value on the Haskell's side. {-# INLINEABLE timetz #-} -timetz :: Value (B.TimeOfDay, B.TimeZone) +timetz :: Value (TimeOfDay, TimeZone) timetz = Value (Value.decoder (Prelude.bool A.timetz_float A.timetz_int)) -- | -- Decoder of the @INTERVAL@ values. {-# INLINEABLE interval #-} -interval :: Value B.DiffTime +interval :: Value DiffTime interval = Value (Value.decoder (Prelude.bool A.interval_float A.interval_int)) -- | -- Decoder of the @UUID@ values. {-# INLINEABLE uuid #-} -uuid :: Value B.UUID +uuid :: Value UUID uuid = Value (Value.decoder (const A.uuid)) -- | -- Decoder of the @INET@ values. {-# INLINEABLE inet #-} -inet :: Value (B.NetAddr B.IP) +inet :: Value (NetworkIp.NetAddr NetworkIp.IP) inet = Value (Value.decoder (const A.inet)) -- | -- Decoder of the @JSON@ values into a JSON AST. {-# INLINEABLE json #-} -json :: Value B.Value +json :: Value Aeson.Value json = Value (Value.decoder (const A.json_ast)) -- | @@ -286,7 +287,7 @@ jsonBytes fn = Value (Value.decoder (const (A.json_bytes fn))) -- | -- Decoder of the @JSONB@ values into a JSON AST. {-# INLINEABLE jsonb #-} -jsonb :: Value B.Value +jsonb :: Value Aeson.Value jsonb = Value (Value.decoder (const A.jsonb_ast)) -- | diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 7973cc7aab..52c72ad325 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -2,6 +2,7 @@ -- A DSL for declaration of query parameter encoders. module Hasql.Private.Encoders where +import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy as LazyByteString import qualified Hasql.Private.Encoders.Array as Array import qualified Hasql.Private.Encoders.Params as Params @@ -9,7 +10,7 @@ import qualified Hasql.Private.Encoders.Value as Value import qualified Hasql.Private.PTI as PTI import Hasql.Private.Prelude hiding (bool) import qualified Hasql.Private.Prelude as Prelude -import qualified PostgreSQL.Binary.Data as B +import qualified Network.IP.Addr as NetworkIp import qualified PostgreSQL.Binary.Encoding as A import qualified Text.Builder as C @@ -145,7 +146,7 @@ float8 = Value (Value.unsafePTIWithShow PTI.float8 (const A.float8)) -- | -- Encoder of @NUMERIC@ values. {-# INLINEABLE numeric #-} -numeric :: Value B.Scientific +numeric :: Value Scientific numeric = Value (Value.unsafePTIWithShow PTI.numeric (const A.numeric)) -- | @@ -172,55 +173,55 @@ bytea = Value (Value.unsafePTIWithShow PTI.bytea (const A.bytea_strict)) -- | -- Encoder of @DATE@ values. {-# INLINEABLE date #-} -date :: Value B.Day +date :: Value Day date = Value (Value.unsafePTIWithShow PTI.date (const A.date)) -- | -- Encoder of @TIMESTAMP@ values. {-# INLINEABLE timestamp #-} -timestamp :: Value B.LocalTime +timestamp :: Value LocalTime timestamp = Value (Value.unsafePTIWithShow PTI.timestamp (Prelude.bool A.timestamp_float A.timestamp_int)) -- | -- Encoder of @TIMESTAMPTZ@ values. {-# INLINEABLE timestamptz #-} -timestamptz :: Value B.UTCTime +timestamptz :: Value UTCTime timestamptz = Value (Value.unsafePTIWithShow PTI.timestamptz (Prelude.bool A.timestamptz_float A.timestamptz_int)) -- | -- Encoder of @TIME@ values. {-# INLINEABLE time #-} -time :: Value B.TimeOfDay +time :: Value TimeOfDay time = Value (Value.unsafePTIWithShow PTI.time (Prelude.bool A.time_float A.time_int)) -- | -- Encoder of @TIMETZ@ values. {-# INLINEABLE timetz #-} -timetz :: Value (B.TimeOfDay, B.TimeZone) +timetz :: Value (TimeOfDay, TimeZone) timetz = Value (Value.unsafePTIWithShow PTI.timetz (Prelude.bool A.timetz_float A.timetz_int)) -- | -- Encoder of @INTERVAL@ values. {-# INLINEABLE interval #-} -interval :: Value B.DiffTime +interval :: Value DiffTime interval = Value (Value.unsafePTIWithShow PTI.interval (Prelude.bool A.interval_float A.interval_int)) -- | -- Encoder of @UUID@ values. {-# INLINEABLE uuid #-} -uuid :: Value B.UUID +uuid :: Value UUID uuid = Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) -- | -- Encoder of @INET@ values. {-# INLINEABLE inet #-} -inet :: Value (B.NetAddr B.IP) +inet :: Value (NetworkIp.NetAddr NetworkIp.IP) inet = Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) -- | -- Encoder of @JSON@ values from JSON AST. {-# INLINEABLE json #-} -json :: Value B.Value +json :: Value Aeson.Value json = Value (Value.unsafePTIWithShow PTI.json (const A.json_ast)) -- | @@ -238,7 +239,7 @@ jsonLazyBytes = Value (Value.unsafePTIWithShow PTI.json (const A.json_bytes_lazy -- | -- Encoder of @JSONB@ values from JSON AST. {-# INLINEABLE jsonb #-} -jsonb :: Value B.Value +jsonb :: Value Aeson.Value jsonb = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_ast)) -- | diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 6d1ea88cd2..90bf3a9f97 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -64,13 +64,16 @@ import Data.Profunctor.Unsafe as Exports import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports +import Data.Scientific as Exports (Scientific) import Data.Semigroup as Exports hiding (First (..), Last (..)) import Data.String as Exports import Data.Text as Exports (Text) import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder +import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports +import Data.UUID as Exports (UUID) import Data.Unique as Exports import Data.Vector as Exports (Vector) import Data.Version as Exports @@ -87,7 +90,6 @@ import GHC.Generics as Exports (Generic) import GHC.IO.Exception as Exports import GHC.OverloadedLabels as Exports import Numeric as Exports -import PostgreSQL.Binary.Data as Exports (UUID) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports (Handle, hClose) From 554f097702c1500e885f714f224883f5563078a2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 17 Sep 2022 11:53:33 +0300 Subject: [PATCH 0773/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 36a41209d1..bf0b7ffb9b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.1.1 +version: 1.6.1.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From bb2a7d17696201d0c152192e621e7eac21384c50 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 17 Sep 2022 13:17:57 +0300 Subject: [PATCH 0774/1204] Move to postgresql-binary without the Data module --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index bf0b7ffb9b..b251d9bab3 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.1.2 +version: 1.6.1.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: @@ -68,7 +68,7 @@ library hashtables >=1.3 && <2, mtl >=2 && <3, network-ip >=0.3.0.3 && <0.4, - postgresql-binary >=0.12.5 && <0.13, + postgresql-binary >=0.13 && <0.14, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, From 9e57753e3317bf2c51f05a910e1bd0e0ac7e3aa9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 20 Sep 2022 15:30:26 +0300 Subject: [PATCH 0775/1204] Update summary and status --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c26108347d..2a9069a18f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ -# What Hasql is +# Summary + +Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet flexible mapping API. It targets both the users, who need maximum control, and the users who face the typical tasks of DB-powered applications, providing them with higher-level APIs. Currently it is known to be [the fastest driver](https://nikita-volkov.github.io/hasql-benchmarks/) in the Haskell ecosystem. + +Hasql also is one of the supported targets of the [pGenie](https://pgenie.io) code generator, which empowers it with schema and query validation, and relieves you from boilerplate. + +# Status [![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) [![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) -Hasql is a highly efficient PostgreSQL driver and a mapping API. It targets both the users, who need a low level of abstraction, and the users, who face the typical tasks of DB-powered applications, providing them with higher-level APIs. - +Hasql is production-ready, actively maintained and the API is pretty stable. It's used by many companies and most notably by the [Postgrest](https://postgrest.org/) project. -## Ecosystem +# Ecosystem Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. From 75ffa3f13cfdbc3960d902e5022d6d582787deaa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Sep 2022 15:27:40 +0300 Subject: [PATCH 0776/1204] Format --- benchmarks/Main.hs | 4 ---- library/Hasql/Private/Decoders.hs | 16 ---------------- library/Hasql/Private/Decoders/Row.hs | 2 -- library/Hasql/Private/Encoders.hs | 8 -------- library/Hasql/Private/PTI.hs | 2 -- 5 files changed, 32 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 71a5000167..600f37bb5e 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -31,8 +31,6 @@ main = -- * Sessions -------------------------- - sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () sessionWithManySmallParameters = error "TODO: sessionWithManySmallParameters" @@ -55,8 +53,6 @@ sessionWithManySmallResults = -- * Statements -------------------------- - statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () statementWithManyParameters = error "TODO: statementWithManyParameters" diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index fbf78e89e8..bb3b63b819 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -19,8 +19,6 @@ import qualified PostgreSQL.Binary.Decoding as A -- * Result -------------------------- - -- | -- Decoder of a query result. newtype Result a = Result (Results.Results a) deriving (Functor) @@ -52,8 +50,6 @@ refineResult refiner (Result results) = Result (Results.refine refiner results) -- ** Multi-row traversers -------------------------- - -- | -- Foldl multiple rows. {-# INLINEABLE foldlRows #-} @@ -68,8 +64,6 @@ foldrRows step init (Row row) = Result (Results.single (Result.foldr step init r -- ** Specialized multi-row results -------------------------- - -- | -- Maybe one row or none. {-# INLINEABLE rowMaybe #-} @@ -93,8 +87,6 @@ rowList = foldrRows strictCons [] -- * Row -------------------------- - -- | -- Decoder of an individual row, -- which gets composed of column value decoders. @@ -118,8 +110,6 @@ column = \case -- * Nullability -------------------------- - -- | -- Extensional specification of nullability over a generic decoder. data NullableOrNot decoder a where @@ -138,8 +128,6 @@ nullable = Nullable -- * Value -------------------------- - -- | -- Decoder of a value. newtype Value a = Value (Value.Value a) @@ -371,8 +359,6 @@ composite (Composite imp) = Value (Value.decoder (Composite.run imp)) -- * Array decoders -------------------------- - -- | -- A generic array decoder. -- @@ -410,8 +396,6 @@ element = \case -- * Composite decoders -------------------------- - -- | -- Composable decoder of composite values (rows, records). newtype Composite a = Composite (Composite.Composite a) diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 540cd8afa9..9a0c0a70b5 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -18,8 +18,6 @@ data Env -- * Functions -------------------------- - {-# INLINE run #-} run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either (Int, RowError) a) run (Row impl) (result, row, columnsAmount, integerDatetimes) = diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 52c72ad325..6addf8a110 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -16,8 +16,6 @@ import qualified Text.Builder as C -- * Parameters Product Encoder -------------------------- - -- | -- Encoder of some representation of a parameters product. -- @@ -80,8 +78,6 @@ param = \case -- * Nullability -------------------------- - -- | -- Extensional specification of nullability over a generic encoder. data NullableOrNot encoder a where @@ -100,8 +96,6 @@ nullable = Nullable -- * Value -------------------------- - -- | -- Value encoder. newtype Value a = Value (Value.Value a) @@ -308,8 +302,6 @@ foldableArray = array . dimension foldl' . element -- * Array -------------------------- - -- | -- Generic array encoder. -- diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/Private/PTI.hs index 254d03e7de..e6a6569918 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -19,8 +19,6 @@ mkPTI format oid arrayOID = -- * Constants -------------------------- - abstime = mkPTI LibPQ.Binary 702 (Just 1023) aclitem = mkPTI LibPQ.Binary 1033 (Just 1034) From a5d4b702e6e1a30d44a0efab00f63776b03540e2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Sep 2022 15:42:48 +0300 Subject: [PATCH 0777/1204] Implement composite encoder --- hasql.cabal | 2 +- library/Hasql/Encoders.hs | 5 +++ library/Hasql/Private/Encoders.hs | 61 ++++++++++++++++++++++++++++++- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index b251d9bab3..a53975cbbc 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -68,7 +68,7 @@ library hashtables >=1.3 && <2, mtl >=2 && <3, network-ip >=0.3.0.3 && <0.4, - postgresql-binary >=0.13 && <0.14, + postgresql-binary >=0.13.1 && <0.14, postgresql-libpq ==0.9.*, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 91c314237d..f16b199f0b 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -44,11 +44,16 @@ module Hasql.Encoders unknown, array, foldableArray, + composite, -- * Array Array, element, dimension, + + -- * Composite + Composite, + field, ) where diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 6addf8a110..0970b536a9 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -272,12 +272,23 @@ unknown :: Value ByteString unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) -- | --- Lift an array encoder into a parameter encoder. +-- Lift an array encoder into a value encoder. array :: Array a -> Value a array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input) in Value (Value.Value arrayOID arrayOID encoder renderer) +-- | +-- Lift a composite encoder into a value encoder. +composite :: Composite a -> Value a +composite (Composite encode print) = + Value (Value.unsafePTI PTI.unknown encodeValue printValue) + where + encodeValue idt val = + A.composite $ encode val idt + printValue val = + "ROW (" <> C.intercalate ", " (print val) <> ")" + -- | -- Lift a value encoder of element into a unidimensional array encoder of a foldable value. -- @@ -340,3 +351,51 @@ element = \case {-# INLINEABLE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c dimension foldl (Array imp) = Array (Array.dimension foldl imp) + +-- * Composite + +-- | +-- Composite or row-types encoder. +data Composite a + = Composite + (a -> Bool -> A.Composite) + (a -> [C.Builder]) + +instance Contravariant Composite where + contramap f (Composite encode print) = + Composite (encode . f) (print . f) + +instance Divisible Composite where + divide f (Composite encodeL printL) (Composite encodeR printR) = + Composite + (\val idt -> case f val of (lVal, rVal) -> encodeL lVal idt <> encodeR rVal idt) + (\val -> case f val of (lVal, rVal) -> printL lVal <> printR rVal) + conquer = mempty + +instance Semigroup (Composite a) where + Composite encodeL printL <> Composite encodeR printR = + Composite + (\val idt -> encodeL val idt <> encodeR val idt) + (\val -> printL val <> printR val) + +instance Monoid (Composite a) where + mempty = Composite mempty mempty + +-- | Single field of a row-type. +field :: NullableOrNot Value a -> Composite a +field = \case + NonNullable (Value (Value.Value elementOID arrayOID encode print)) -> + Composite + (\val idt -> A.field (PTI.oidWord32 elementOID) (encode idt val)) + (\val -> [print val]) + Nullable (Value (Value.Value elementOID arrayOID encode print)) -> + Composite + ( \val idt -> case val of + Nothing -> A.nullField (PTI.oidWord32 elementOID) + Just val -> A.field (PTI.oidWord32 elementOID) (encode idt val) + ) + ( \val -> + case val of + Nothing -> ["NULL"] + Just val -> [print val] + ) From 5fb8cf278e557742fc3122e5145a67ddc927746a Mon Sep 17 00:00:00 2001 From: jkachmar Date: Tue, 27 Sep 2022 18:38:19 -0400 Subject: [PATCH 0778/1204] Relax lower bound on hashtables --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index a53975cbbc..b8212e32d1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -65,7 +65,7 @@ library contravariant >=1.3 && <2, dlist ==0.8.* || >=1 && <2, hashable >=1.2 && <2, - hashtables >=1.3 && <2, + hashtables >=1.1 && <2, mtl >=2 && <3, network-ip >=0.3.0.3 && <0.4, postgresql-binary >=0.13.1 && <0.14, From ad652549a1e408b5057d4e957e16668b9984589e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 28 Sep 2022 13:04:16 +0300 Subject: [PATCH 0779/1204] Bump --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index b8212e32d1..117f24eb27 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.1.3 +version: 1.6.1.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 6bc5a7d9b28c7b505ba6cd5071945d319eaf1bcf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Oct 2022 11:17:09 +0300 Subject: [PATCH 0780/1204] Update the docs on release --- library/Hasql/Pool.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index a0beb92eff..04b80a5809 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -71,8 +71,12 @@ acquireDynamically poolSize timeout fetchConnectionSettings = do <*> (newTVarIO =<< newTVarIO True) -- | Release all the idle connections in the pool, and mark the in-use connections --- to be released on return. Any connections acquired after the call will be --- newly established. +-- to be released after use. Any connections acquired after the call will be +-- freshly established. +-- +-- The pool remains usable after this action. +-- So you can use this function to reset the connections in the pool. +-- Naturally, you can also use it to release the resources. release :: Pool -> IO () release Pool {..} = join . atomically $ do From febd8dd94fa307d96b921f4cf167bc79e2a7b629 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Oct 2022 11:17:18 +0300 Subject: [PATCH 0781/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index dd0073a186..a3cde5a4c9 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.3 +version: 0.8.0.4 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From 05ced1a7117b6a9783d44e6b436af55a7de1fec7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 15 Oct 2022 12:54:25 +0300 Subject: [PATCH 0782/1204] Add a failing test on array of composites --- tasty/Main.hs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tasty/Main.hs b/tasty/Main.hs index 8e09ef6764..7fdf56b095 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -127,6 +127,26 @@ tree = in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, + testCase "Array of composites" $ do + let value = + (123, Just "abc") + res <- + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + encoder = + Encoders.param . Encoders.nonNullable . Encoders.composite . mconcat $ + [ contramap fst . Encoders.field . Encoders.nonNullable $ Encoders.int4, + contramap snd . Encoders.field . Encoders.nullable $ Encoders.text + ] + decoder = + Decoders.singleRow $ + (,) <$> (Decoders.column . Decoders.nonNullable) Decoders.int4 + <*> (Decoders.column . Decoders.nullable) Decoders.text + in Connection.with $ Session.run $ Session.statement value statement + assertEqual "" (Right (Right value)) res, testCase "Empty array" $ let io = do From e3dd430e2effdb52284e3ed870ff5ad918dd14cf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 17 Oct 2022 23:34:08 +0300 Subject: [PATCH 0783/1204] Fix the binary encoder to specify binary format --- library/Hasql/Private/Encoders.hs | 4 ++-- library/Hasql/Private/PTI.hs | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 0970b536a9..eb3c372868 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -269,7 +269,7 @@ enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) -- it is the only encoder that doesn't use the binary format. {-# INLINEABLE unknown #-} unknown :: Value ByteString -unknown = Value (Value.unsafePTIWithShow PTI.unknown (const A.bytea_strict)) +unknown = Value (Value.unsafePTIWithShow PTI.textUnknown (const A.bytea_strict)) -- | -- Lift an array encoder into a value encoder. @@ -282,7 +282,7 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = -- Lift a composite encoder into a value encoder. composite :: Composite a -> Value a composite (Composite encode print) = - Value (Value.unsafePTI PTI.unknown encodeValue printValue) + Value (Value.unsafePTI PTI.binaryUnknown encodeValue printValue) where encodeValue idt val = A.composite $ encode val idt diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/Private/PTI.hs index e6a6569918..531f2d1283 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -143,7 +143,9 @@ tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) -unknown = mkPTI LibPQ.Text 705 (Just 705) +textUnknown = mkPTI LibPQ.Text 705 (Just 705) + +binaryUnknown = mkPTI LibPQ.Binary 705 (Just 705) uuid = mkPTI LibPQ.Binary 2950 (Just 2951) From 78a0be8fcf5400c4f6b404a93cd673dc72fa843e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 17 Oct 2022 23:34:30 +0300 Subject: [PATCH 0784/1204] Fix the tests and add name and oid types --- library/Hasql/Encoders.hs | 2 ++ library/Hasql/Private/Encoders.hs | 12 ++++++++++++ tasty/Main.hs | 21 ++++++++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index f16b199f0b..af1a07af32 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -16,6 +16,8 @@ module Hasql.Encoders -- * Value Value, + name, + oid, bool, int2, int4, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index eb3c372868..1c5a4c5462 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -101,6 +101,18 @@ nullable = Nullable newtype Value a = Value (Value.Value a) deriving (Contravariant) +-- | +-- Encoder of @OID@ values. +{-# INLINEABLE oid #-} +oid :: Value Int32 +oid = Value (Value.unsafePTIWithShow PTI.oid (const A.int4_int32)) + +-- | +-- Encoder of @NAME@ values. +{-# INLINEABLE name #-} +name :: Value Text +name = Value (Value.unsafePTIWithShow PTI.name (const A.text_strict)) + -- | -- Encoder of @BOOL@ values. {-# INLINEABLE bool #-} diff --git a/tasty/Main.hs b/tasty/Main.hs index 7fdf56b095..15bb3b03d7 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -127,24 +127,31 @@ tree = in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, - testCase "Array of composites" $ do + testCase "Composite encoding" $ do let value = - (123, Just "abc") + (123, 456, 789, "abc") res <- let statement = Statement.Statement sql encoder decoder True where sql = - "select $1" + "select $1 :: pg_enum" encoder = Encoders.param . Encoders.nonNullable . Encoders.composite . mconcat $ - [ contramap fst . Encoders.field . Encoders.nonNullable $ Encoders.int4, - contramap snd . Encoders.field . Encoders.nullable $ Encoders.text + [ contramap (\(a, _, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, + contramap (\(_, a, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, + contramap (\(_, _, a, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.float4, + contramap (\(_, _, _, a) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.name ] decoder = Decoders.singleRow $ - (,) <$> (Decoders.column . Decoders.nonNullable) Decoders.int4 - <*> (Decoders.column . Decoders.nullable) Decoders.text + (Decoders.column . Decoders.nonNullable . Decoders.composite) + ( (,,,) + <$> (Decoders.field . Decoders.nonNullable) Decoders.int4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.int4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.float4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.text + ) in Connection.with $ Session.run $ Session.statement value statement assertEqual "" (Right (Right value)) res, testCase "Empty array" $ From 81acb959a07cafac490da57047013f73b9aef3eb Mon Sep 17 00:00:00 2001 From: Drew Haven Date: Mon, 17 Oct 2022 15:11:48 -0700 Subject: [PATCH 0785/1204] Catches session exceptions --- library/Hasql/Pool.hs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 04b80a5809..7603e59032 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -129,19 +129,27 @@ use Pool {..} sess = do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr Right conn -> onConn reuseVar conn - onConn reuseVar conn = do - sessRes <- Session.run sess conn - case sessRes of - Left err -> case err of - Session.QueryError _ _ (Session.ClientError _) -> do - atomically $ modifyTVar' poolCapacity succ - return $ Left $ SessionUsageError err - _ -> do - returnConn - return $ Left $ SessionUsageError err - Right res -> do - returnConn - return $ Right res + onConn reuseVar conn = + catch + (do + sessRes <- + Session.run sess conn + `catch` (\(e :: Session.QueryError) -> pure $ Left e) + case sessRes of + Left err -> case err of + Session.QueryError _ _ (Session.ClientError _) -> do + atomically $ modifyTVar' poolCapacity succ + return $ Left $ SessionUsageError err + _ -> do + returnConn + return $ Left $ SessionUsageError err + Right res -> do + returnConn + return $ Right res) + (\(err :: SomeException ) -> do + atomically $ modifyTVar' poolCapacity succ + throw err + ) where returnConn = join . atomically $ do From b573b1e9ebdbdd9be2b52c97572fbc95fc1e2051 Mon Sep 17 00:00:00 2001 From: Drew Haven Date: Mon, 17 Oct 2022 16:17:40 -0700 Subject: [PATCH 0786/1204] bumps version --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index a3cde5a4c9..20669c7380 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.4 +version: 0.8.0.5 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From c1b5f00f197054daddf6621349664e8c1fbb7eb8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Oct 2022 15:05:06 +0300 Subject: [PATCH 0787/1204] Reorder things --- library/Hasql/Encoders.hs | 4 ++-- library/Hasql/Private/Encoders.hs | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index af1a07af32..aecf34c322 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -16,8 +16,6 @@ module Hasql.Encoders -- * Value Value, - name, - oid, bool, int2, int4, @@ -42,6 +40,8 @@ module Hasql.Encoders jsonb, jsonbBytes, jsonbLazyBytes, + name, + oid, enum, unknown, array, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 1c5a4c5462..a3f4c44b85 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -101,18 +101,6 @@ nullable = Nullable newtype Value a = Value (Value.Value a) deriving (Contravariant) --- | --- Encoder of @OID@ values. -{-# INLINEABLE oid #-} -oid :: Value Int32 -oid = Value (Value.unsafePTIWithShow PTI.oid (const A.int4_int32)) - --- | --- Encoder of @NAME@ values. -{-# INLINEABLE name #-} -name :: Value Text -name = Value (Value.unsafePTIWithShow PTI.name (const A.text_strict)) - -- | -- Encoder of @BOOL@ values. {-# INLINEABLE bool #-} @@ -260,6 +248,18 @@ jsonbBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes)) jsonbLazyBytes :: Value LazyByteString.ByteString jsonbLazyBytes = Value (Value.unsafePTIWithShow PTI.jsonb (const A.jsonb_bytes_lazy)) +-- | +-- Encoder of @OID@ values. +{-# INLINEABLE oid #-} +oid :: Value Int32 +oid = Value (Value.unsafePTIWithShow PTI.oid (const A.int4_int32)) + +-- | +-- Encoder of @NAME@ values. +{-# INLINEABLE name #-} +name :: Value Text +name = Value (Value.unsafePTIWithShow PTI.name (const A.text_strict)) + -- | -- Given a function, -- which maps a value into a textual enum label used on the DB side, From fa707dd7931390538cc1f67f86e49ef90a758ec4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 18 Oct 2022 15:05:31 +0300 Subject: [PATCH 0788/1204] Bump and update changelog --- CHANGELOG.md | 5 +++++ hasql.cabal | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a8ef850d2..ae3553c233 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.6.2 + +- Added composite encoder +- Added `oid` and `name` encoders + # 1.6.1 - Added `jsonLazyBytes` and `jsonbLazyBytes` diff --git a/hasql.cabal b/hasql.cabal index 117f24eb27..284c2eedce 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.1.4 +version: 1.6.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From d1e7672b921e5170d753c011a3f204c4b5996530 Mon Sep 17 00:00:00 2001 From: Drew Haven Date: Tue, 18 Oct 2022 14:54:09 -0700 Subject: [PATCH 0789/1204] Simplifies catching logic. --- library/Hasql/Pool.hs | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 7603e59032..7d1757e2c6 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -130,26 +130,24 @@ use Pool {..} sess = do return $ Left $ ConnectionUsageError connErr Right conn -> onConn reuseVar conn onConn reuseVar conn = - catch - (do - sessRes <- - Session.run sess conn - `catch` (\(e :: Session.QueryError) -> pure $ Left e) - case sessRes of - Left err -> case err of - Session.QueryError _ _ (Session.ClientError _) -> do + do + sessRes <- + Session.run sess conn + `catch` + (\(err :: SomeException ) -> do atomically $ modifyTVar' poolCapacity succ - return $ Left $ SessionUsageError err - _ -> do - returnConn - return $ Left $ SessionUsageError err - Right res -> do + throw err) + case sessRes of + Left err -> case err of + Session.QueryError _ _ (Session.ClientError _) -> do + atomically $ modifyTVar' poolCapacity succ + return $ Left $ SessionUsageError err + _ -> do returnConn - return $ Right res) - (\(err :: SomeException ) -> do - atomically $ modifyTVar' poolCapacity succ - throw err - ) + return $ Left $ SessionUsageError err + Right res -> do + returnConn + return $ Right res where returnConn = join . atomically $ do From 4c692ae0e8d8fb5115823f16dfe54615127eae35 Mon Sep 17 00:00:00 2001 From: Drew Haven Date: Tue, 18 Oct 2022 14:55:39 -0700 Subject: [PATCH 0790/1204] Formatting. --- library/Hasql/Pool.hs | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 7d1757e2c6..b0f666e63b 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -129,25 +129,24 @@ use Pool {..} sess = do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr Right conn -> onConn reuseVar conn - onConn reuseVar conn = - do - sessRes <- - Session.run sess conn - `catch` - (\(err :: SomeException ) -> do - atomically $ modifyTVar' poolCapacity succ - throw err) - case sessRes of - Left err -> case err of - Session.QueryError _ _ (Session.ClientError _) -> do + onConn reuseVar conn = do + sessRes <- + Session.run sess conn + `catch` + (\(err :: SomeException ) -> do atomically $ modifyTVar' poolCapacity succ - return $ Left $ SessionUsageError err - _ -> do - returnConn - return $ Left $ SessionUsageError err - Right res -> do + throw err) + case sessRes of + Left err -> case err of + Session.QueryError _ _ (Session.ClientError _) -> do + atomically $ modifyTVar' poolCapacity succ + return $ Left $ SessionUsageError err + _ -> do returnConn - return $ Right res + return $ Left $ SessionUsageError err + Right res -> do + returnConn + return $ Right res where returnConn = join . atomically $ do From 5878810b07c378e25e8ee242fff5e629137fb87c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 19 Oct 2022 08:40:37 +0300 Subject: [PATCH 0791/1204] Format and apply Ormolu --- library/Hasql/Pool.hs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index b0f666e63b..94179e449a 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -73,7 +73,7 @@ acquireDynamically poolSize timeout fetchConnectionSettings = do -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be -- freshly established. --- +-- -- The pool remains usable after this action. -- So you can use this function to reset the connections in the pool. -- Naturally, you can also use it to release the resources. @@ -131,11 +131,10 @@ use Pool {..} sess = do Right conn -> onConn reuseVar conn onConn reuseVar conn = do sessRes <- - Session.run sess conn - `catch` - (\(err :: SomeException ) -> do - atomically $ modifyTVar' poolCapacity succ - throw err) + catch (Session.run sess conn) $ \(err :: SomeException) -> do + atomically $ modifyTVar' poolCapacity succ + throw err + case sessRes of Left err -> case err of Session.QueryError _ _ (Session.ClientError _) -> do From cc186c93b23ad70a59d92b5eadd120a0e8e1823a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 19 Oct 2022 15:43:53 +0300 Subject: [PATCH 0792/1204] Ditch the no longer needed "time" stuff --- hasql-pool.cabal | 3 --- library/Hasql/Pool/Prelude.hs | 3 --- library/Hasql/Pool/TimeExtras/Conversions.hs | 10 ---------- library/Hasql/Pool/TimeExtras/IO.hs | 8 -------- 4 files changed, 24 deletions(-) delete mode 100644 library/Hasql/Pool/TimeExtras/Conversions.hs delete mode 100644 library/Hasql/Pool/TimeExtras/IO.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 20669c7380..62c55d594a 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -29,13 +29,10 @@ library Hasql.Pool other-modules: Hasql.Pool.Prelude - Hasql.Pool.TimeExtras.IO - Hasql.Pool.TimeExtras.Conversions build-depends: base >=4.11 && <5, hasql >=1.6.0.1 && <1.7, stm >=2.5 && <3, - time >=1.5 && <2, transformers >=0.5 && <0.7, test-suite test diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index c923c781b5..07d0b8ace5 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -47,9 +47,6 @@ import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports import Data.String as Exports -import Data.Time as Exports -import Data.Time.Clock.POSIX as Exports -import Data.Time.Clock.System as Exports import Data.Traversable as Exports import Data.Tuple as Exports import Data.Unique as Exports diff --git a/library/Hasql/Pool/TimeExtras/Conversions.hs b/library/Hasql/Pool/TimeExtras/Conversions.hs deleted file mode 100644 index ae070d30a8..0000000000 --- a/library/Hasql/Pool/TimeExtras/Conversions.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Hasql.Pool.TimeExtras.Conversions where - -import Hasql.Pool.Prelude - -class ToMilliseconds a where - toMilliseconds :: a -> Int - -instance ToMilliseconds SystemTime where - toMilliseconds (MkSystemTime s ns) = - fromIntegral s * 1000 + fromIntegral (div ns 1000000) diff --git a/library/Hasql/Pool/TimeExtras/IO.hs b/library/Hasql/Pool/TimeExtras/IO.hs deleted file mode 100644 index 40694ff79d..0000000000 --- a/library/Hasql/Pool/TimeExtras/IO.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Hasql.Pool.TimeExtras.IO where - -import Hasql.Pool.Prelude -import Hasql.Pool.TimeExtras.Conversions - -getMillisecondsSinceEpoch :: IO Int -getMillisecondsSinceEpoch = - fmap toMilliseconds getSystemTime From 03b95b1ba4192b8cd1efef6bb9ab334ed44125b6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 19 Oct 2022 15:44:09 +0300 Subject: [PATCH 0793/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 62c55d594a..ce2eb3fc62 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.5 +version: 0.8.0.6 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From 31c553bd849d80b2704b25bfd9894f8d886ddaf2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Nov 2022 22:44:56 +0300 Subject: [PATCH 0794/1204] Add unkown enum --- library/Hasql/Encoders.hs | 1 + library/Hasql/Private/Encoders.hs | 16 ++++++++++++++++ tasty/Main.hs | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index aecf34c322..03a790f322 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -43,6 +43,7 @@ module Hasql.Encoders name, oid, enum, + unknownEnum, unknown, array, foldableArray, diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index a3f4c44b85..58527c3709 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -268,6 +268,22 @@ name = Value (Value.unsafePTIWithShow PTI.name (const A.text_strict)) enum :: (a -> Text) -> Value a enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) (C.text . mapping)) +-- | +-- Variation of 'enum' with unknown OID. +-- This function does not identify the type to Postgres, +-- so Postgres must be able to derive the type from context. +-- +-- Some queries do not contain enough context, e.g., +-- +-- > SELECT $1 +-- +-- In such cases you need to disambiguate the type on the query side like this: +-- +-- > SELECT $1 :: your_enum_type +{-# INLINEABLE unknownEnum #-} +unknownEnum :: (a -> Text) -> Value a +unknownEnum mapping = Value (Value.unsafePTI PTI.binaryUnknown (const (A.text_strict . mapping)) (C.text . mapping)) + -- | -- Identifies the value with the PostgreSQL's \"unknown\" type, -- thus leaving it up to Postgres to infer the actual type of the value. diff --git a/tasty/Main.hs b/tasty/Main.hs index 15bb3b03d7..77396933d5 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -127,6 +127,34 @@ tree = in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, + testGroup "unknownEnum" $ + [ testCase "" $ do + res <- DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "drop type if exists mood" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.unknownEnum id)) + in DSL.statement "ok" statement + + assertEqual "" (Right "ok") res + ], testCase "Composite encoding" $ do let value = (123, 456, 789, "abc") From cbb108941cd3e8c5eb0928f1e8e0cf948655b65a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Nov 2022 22:59:27 +0300 Subject: [PATCH 0795/1204] Update the docs --- library/Hasql/Private/Encoders.hs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 58527c3709..a97d3c141f 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -272,14 +272,8 @@ enum mapping = Value (Value.unsafePTI PTI.text (const (A.text_strict . mapping)) -- Variation of 'enum' with unknown OID. -- This function does not identify the type to Postgres, -- so Postgres must be able to derive the type from context. --- --- Some queries do not contain enough context, e.g., --- --- > SELECT $1 --- --- In such cases you need to disambiguate the type on the query side like this: --- --- > SELECT $1 :: your_enum_type +-- When you find yourself in such situation just provide an explicit type in the query +-- using the :: operator. {-# INLINEABLE unknownEnum #-} unknownEnum :: (a -> Text) -> Value a unknownEnum mapping = Value (Value.unsafePTI PTI.binaryUnknown (const (A.text_strict . mapping)) (C.text . mapping)) From bd5cc3dc0fe556703a758def844a369f7d6f5756 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 21 Nov 2022 23:22:45 +0300 Subject: [PATCH 0796/1204] Prepare a release --- CHANGELOG.md | 4 ++++ hasql.cabal | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae3553c233..b9f4f7bc7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.6.3 + +- Added `unknownEnum` encoder + # 1.6.2 - Added composite encoder diff --git a/hasql.cabal b/hasql.cabal index 284c2eedce..5e1781c9c4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,5 +1,5 @@ name: hasql -version: 1.6.2 +version: 1.6.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From d4bcbb5bdb361b828717962bab085f95b5feb60d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 23 Nov 2022 20:22:52 +0300 Subject: [PATCH 0797/1204] Format and isolate config --- conflicts-test/Main.hs | 15 +-- conflicts-test/Main/Statements.hs | 8 +- conflicts-test/Main/Transactions.hs | 9 +- hasql-transaction.cabal | 2 +- library/Hasql/Transaction.hs | 15 +-- .../{Private/Model.hs => Config.hs} | 28 ++-- library/Hasql/Transaction/Private/Prelude.hs | 70 ++++------ library/Hasql/Transaction/Private/SQL.hs | 10 +- library/Hasql/Transaction/Private/Sessions.hs | 22 ++-- .../Hasql/Transaction/Private/Statements.hs | 15 +-- .../Hasql/Transaction/Private/Transaction.hs | 16 +-- library/Hasql/Transaction/Sessions.hs | 21 ++- stack.yaml | 2 +- stack.yaml.lock | 121 +----------------- 14 files changed, 99 insertions(+), 255 deletions(-) rename library/Hasql/Transaction/{Private/Model.hs => Config.hs} (52%) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 4ac6101d91..b12fbb6493 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -1,14 +1,13 @@ module Main where -import Prelude +import qualified Control.Concurrent.Async as F import qualified Hasql.Connection as A import qualified Hasql.Session as B import qualified Hasql.Transaction as C import qualified Hasql.Transaction.Sessions as G import qualified Main.Statements as D import qualified Main.Transactions as E -import qualified Control.Concurrent.Async as F - +import Prelude main = bracket acquire release use @@ -18,8 +17,8 @@ main = where acquire = join $ - fmap (either (fail . show) return) $ - A.acquire connectionSettings + fmap (either (fail . show) return) $ + A.acquire connectionSettings where connectionSettings = A.settings "localhost" 5432 "postgres" "" "postgres" @@ -42,15 +41,13 @@ main = tests = [readAndWriteTransactionsTest, transactionsTest, transactionAndQueryTest] - session connection session = - B.run session connection >>= - either (fail . show) return + B.run session connection + >>= either (fail . show) return transaction connection transaction = session connection (G.transaction G.RepeatableRead G.Write transaction) - type Test = A.Connection -> A.Connection -> IO Bool diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index 406675cb27..d7c0b6fd0f 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,11 +1,10 @@ module Main.Statements where -import Prelude import Contravariant.Extras -import Hasql.Statement -import qualified Hasql.Encoders as E import qualified Hasql.Decoders as D - +import qualified Hasql.Encoders as E +import Hasql.Statement +import Prelude createAccountTable :: Statement () () createAccountTable = @@ -45,4 +44,3 @@ getBalance = ((E.param . E.nonNullable) E.int8) (D.rowMaybe ((D.column . D.nonNullable) D.numeric)) True - diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index b58ada3999..8e0001c72f 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -1,9 +1,8 @@ module Main.Transactions where -import Prelude import Hasql.Transaction import qualified Main.Statements as A - +import Prelude createSchema :: Transaction () createSchema = @@ -20,10 +19,8 @@ transfer id1 id2 amount = do success <- statement (id1, amount) A.modifyBalance if success - then - statement (id2, negate amount) A.modifyBalance - else - return False + then statement (id2, negate amount) A.modifyBalance + else return False transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction () transferTimes times id1 id2 amount = diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 92bd97bb54..8d4fc1c98e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -24,8 +24,8 @@ library Hasql.Transaction Hasql.Transaction.Sessions other-modules: + Hasql.Transaction.Config Hasql.Transaction.Private.Prelude - Hasql.Transaction.Private.Model Hasql.Transaction.Private.SQL Hasql.Transaction.Private.Statements Hasql.Transaction.Private.Sessions diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index ad5d4e4ba9..b6bc42411e 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -1,14 +1,13 @@ -- | -- An API for declaration of transactions. module Hasql.Transaction -( - -- * Transaction monad - Transaction, - condemn, - sql, - statement, -) + ( -- * Transaction monad + Transaction, + condemn, + sql, + statement, + ) where +import Hasql.Transaction.Config import Hasql.Transaction.Private.Transaction -import Hasql.Transaction.Private.Model diff --git a/library/Hasql/Transaction/Private/Model.hs b/library/Hasql/Transaction/Config.hs similarity index 52% rename from library/Hasql/Transaction/Private/Model.hs rename to library/Hasql/Transaction/Config.hs index 484ea205b3..fac010ed94 100644 --- a/library/Hasql/Transaction/Private/Model.hs +++ b/library/Hasql/Transaction/Config.hs @@ -1,25 +1,21 @@ -module Hasql.Transaction.Private.Model -where +module Hasql.Transaction.Config where import Hasql.Transaction.Private.Prelude --- | --- -data Mode = - -- | - -- Read-only. No writes possible. - Read | - -- | - -- Write and commit. - Write +data Mode + = -- | + -- Read-only. No writes possible. + Read + | -- | + -- Write and commit. + Write deriving (Show, Eq, Ord, Enum, Bounded) -- | -- For reference see -- . --- -data IsolationLevel = - ReadCommitted | - RepeatableRead | - Serializable +data IsolationLevel + = ReadCommitted + | RepeatableRead + | Serializable deriving (Show, Eq, Ord, Enum, Bounded) diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs index 9c54666553..79bf394c8b 100644 --- a/library/Hasql/Transaction/Private/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -1,25 +1,28 @@ module Hasql.Transaction.Private.Prelude -( - module Exports, - tryError, -) + ( module Exports, + tryError, + ) where - --- base -------------------------- +import Contravariant.Extras as Exports import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports import Control.Concurrent as Exports import Control.Exception as Exports -import Control.Monad as Exports hiding (join, fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, join, mapM, mapM_, msum, sequence, sequence_) +import Control.Monad.Error.Class as Exports (MonadError (..)) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) import Data.Bits as Exports import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports @@ -30,18 +33,20 @@ import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports import Data.Functor.Identity as Exports -import Data.Int as Exports import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) import Data.Maybe as Exports -import Data.Monoid as Exports hiding (Last(..), First(..), (<>), Alt) +import Data.Monoid as Exports hiding (Alt, First (..), Last (..), (<>)) import Data.Ord as Exports import Data.Proxy as Exports import Data.Ratio as Exports -import Data.Semigroup as Exports import Data.STRef as Exports +import Data.Semigroup as Exports import Data.String as Exports import Data.Traversable as Exports import Data.Tuple as Exports @@ -52,13 +57,12 @@ import Debug.Trace as Exports import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (sizeOf, alignment) -import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import Foreign.Storable as Exports hiding (alignment, sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports import Numeric as Exports -import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports @@ -68,35 +72,11 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) -import Text.Read as Exports (Read(..), readMaybe, readEither) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports - --- transformers -------------------------- -import Control.Monad.IO.Class as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) - --- mtl -------------------------- -import Control.Monad.Error.Class as Exports (MonadError (..)) - --- contravariant -------------------------- -import Data.Functor.Contravariant as Exports -import Data.Functor.Contravariant.Divisible as Exports - --- contravariant-extras -------------------------- -import Contravariant.Extras as Exports - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) +import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) tryError :: MonadError e m => m a -> m (Either e a) tryError m = diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs index 5ac490220d..5776d3998a 100644 --- a/library/Hasql/Transaction/Private/SQL.hs +++ b/library/Hasql/Transaction/Private/SQL.hs @@ -1,10 +1,8 @@ -module Hasql.Transaction.Private.SQL -where +module Hasql.Transaction.Private.SQL where -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Model import qualified ByteString.TreeBuilder as D - +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude beginTransaction :: IsolationLevel -> Mode -> ByteString beginTransaction isolation mode = @@ -26,4 +24,4 @@ beginTransaction isolation mode = declareCursor :: ByteString -> ByteString -> ByteString declareCursor name sql = D.toByteString $ - "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql + "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 0161486a78..5f4fcc703a 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -1,12 +1,10 @@ -module Hasql.Transaction.Private.Sessions -where +module Hasql.Transaction.Private.Sessions where -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Model import Hasql.Session +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude import qualified Hasql.Transaction.Private.Statements as Statements - {- We may want to do one transaction retry in case of the 23505 error, and fail if an identical @@ -14,7 +12,7 @@ error is seen. -} inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session a inRetryingTransaction level mode session preparable = - fix $ \ retry -> do + fix $ \retry -> do attemptRes <- tryTransaction level mode session preparable case attemptRes of Just a -> return a @@ -22,21 +20,21 @@ inRetryingTransaction level mode session preparable = tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session (Maybe a) tryTransaction level mode body preparable = do - statement () (Statements.beginTransaction level mode preparable) - bodyRes <- catchError (fmap Just body) $ \ error -> do + bodyRes <- catchError (fmap Just body) $ \error -> do statement () (Statements.abortTransaction preparable) handleTransactionError error $ return Nothing case bodyRes of - Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \ error -> do + Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \error -> do handleTransactionError error $ return Nothing Nothing -> return Nothing -commitOrAbort commit preparable = if commit - then statement () (Statements.commitTransaction preparable) - else statement () (Statements.abortTransaction preparable) +commitOrAbort commit preparable = + if commit + then statement () (Statements.commitTransaction preparable) + else statement () (Statements.abortTransaction preparable) handleTransactionError error onTransactionError = case error of QueryError _ _ (ResultError (ServerError "40001" _ _ _ _)) -> onTransactionError diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 234562999e..7eb43c6ee3 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -1,16 +1,13 @@ -module Hasql.Transaction.Private.Statements -where +module Hasql.Transaction.Private.Statements where -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Model -import qualified Hasql.Statement as A -import qualified Hasql.Encoders as B import qualified Hasql.Decoders as C +import qualified Hasql.Encoders as B +import qualified Hasql.Statement as A +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude import qualified Hasql.Transaction.Private.SQL as D - -- * Transactions -------------------------- beginTransaction :: IsolationLevel -> Mode -> Bool -> A.Statement () () beginTransaction isolation mode preparable = @@ -24,9 +21,7 @@ abortTransaction :: Bool -> A.Statement () () abortTransaction preparable = A.Statement "ABORT" B.noParams C.noResult preparable - -- * Streaming -------------------------- declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a () declareCursor name sql encoder = diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 672a7e6d82..d36a9da2b6 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -1,13 +1,11 @@ -module Hasql.Transaction.Private.Transaction -where +module Hasql.Transaction.Private.Transaction where -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Model -import qualified Hasql.Statement as A import qualified Hasql.Session as B -import qualified Hasql.Transaction.Private.Statements as C +import qualified Hasql.Statement as A +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude import qualified Hasql.Transaction.Private.Sessions as D - +import qualified Hasql.Transaction.Private.Statements as C -- | -- A composable abstraction over the retryable transactions. @@ -15,8 +13,8 @@ import qualified Hasql.Transaction.Private.Sessions as D -- Executes multiple queries under the specified mode and isolation level, -- while automatically retrying the transaction in case of conflicts. -- Thus this abstraction closely reproduces the behaviour of 'STM'. -newtype Transaction a = - Transaction (StateT Bool B.Session a) +newtype Transaction a + = Transaction (StateT Bool B.Session a) deriving (Functor, Applicative, Monad) instance Semigroup a => Semigroup (Transaction a) where diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 0cde4f28af..018ec3136c 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,18 +1,17 @@ module Hasql.Transaction.Sessions -( - transaction, - unpreparedTransaction, - -- * Transaction settings - C.Mode(..), - C.IsolationLevel(..), -) + ( transaction, + unpreparedTransaction, + + -- * Transaction settings + C.Mode (..), + C.IsolationLevel (..), + ) where import Data.Bool -import qualified Hasql.Transaction.Private.Transaction as A import qualified Hasql.Session as B -import qualified Hasql.Transaction.Private.Model as C - +import qualified Hasql.Transaction.Config as C +import qualified Hasql.Transaction.Private.Transaction as A -- | -- Execute the transaction using the provided isolation level and mode. @@ -29,4 +28,4 @@ transaction isolation mode transaction = {-# INLINE unpreparedTransaction #-} unpreparedTransaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a unpreparedTransaction isolation mode transaction = - A.run transaction isolation mode False \ No newline at end of file + A.run transaction isolation mode False diff --git a/stack.yaml b/stack.yaml index d696256798..4998b208ca 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1 @@ -resolver: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml +resolver: nightly-2022-11-23 diff --git a/stack.yaml.lock b/stack.yaml.lock index 33135bc714..e9b8153803 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,121 +3,10 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: -- completed: - name: coalmine - pantry-tree: - sha256: 8896e428a656c392d25d499f9b024abd0c30459db09e8a78e1645bad43d4fb89 - size: 9564 - commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 - git: https://github.com/nikita-volkov/coalmine - version: 0.1.0.4 - original: - commit: a2857feca4d8a25bd868e0a4ff985b7ef4db6ec3 - git: https://github.com/nikita-volkov/coalmine -- completed: - name: moore-machines - pantry-tree: - sha256: 3d1505067d5c8599e9843ed45ec2bc587fa5100c448f558ca5db2c97fb55706f - size: 887 - commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 - git: https://github.com/nikita-volkov/moore-machines - version: '0.1' - original: - commit: 7e95c33b203a1cfe42dbc0e0de3cec8e6fe94290 - git: https://github.com/nikita-volkov/moore-machines -- completed: - name: structure-kit - pantry-tree: - sha256: b7779ebe935d65c0b4f6e3ea8b5f5011abdabf362b1673826545c93625e050ad - size: 3500 - commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c - git: https://github.com/nikita-volkov/structure-kit - version: 0.1.0.1 - original: - commit: 46ffb6527c48f8a718adecd21a313f0b1ba5e81c - git: https://github.com/nikita-volkov/structure-kit -- completed: - name: canapi - pantry-tree: - sha256: 54c44986c3d7f8daa4464e4e097f312dc3ac0c02f7eb5fbb8bba3a6e6d19487a - size: 1319 - commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 - git: https://github.com/nikita-volkov/canapi - version: '0.1' - original: - commit: 02f1d9ffea90522a3a0968305793a7f507c7da59 - git: https://github.com/nikita-volkov/canapi -- completed: - name: lean-http-client - pantry-tree: - sha256: 64da0f3390166969e2fe6a140d847c315258f9bcb8fcaf3169fd78b4b25b6f6f - size: 544 - commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 - git: https://github.com/nikita-volkov/lean-http-client - version: '0.1' - original: - commit: 52343895df1e5ae49159b8c5f76a50ac438216b1 - git: https://github.com/nikita-volkov/lean-http-client -- completed: - name: distillery - pantry-tree: - sha256: 03d32965a35914b68bdaa149db48ce66e774783360f5b7d8b18db72de61b7baf - size: 524 - commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a - git: https://github.com/nikita-volkov/distillery - version: '0.1' - original: - commit: 2c2905f2addb0d1925c43d427fcf65340ee64b2a - git: https://github.com/nikita-volkov/distillery -- completed: - name: acquire - pantry-tree: - sha256: e194150d070a0e4f07e5f2285e82f177312f328c7490f3a659f361b4f6324d00 - size: 438 - commit: 75194757308ae9340b0e2eda46d8db4d25af7516 - git: https://github.com/metrix-ai/acquire - version: 0.3.1 - original: - commit: 75194757308ae9340b0e2eda46d8db4d25af7516 - git: https://github.com/metrix-ai/acquire -- completed: - pantry-tree: - sha256: 520aa5f59b55c14d27115a801f499f940a563849b0c54876bcd6be41f6450713 - size: 456 - hackage: cereal-data-dword-0.1.1@sha256:a3fa6dfafaeeb3774c5888dfa601d561ce05b0af66f52859970247e58135d47e,1381 - original: - hackage: cereal-data-dword-0.1.1 -- completed: - pantry-tree: - sha256: f2fd5281b8fcea2ffa1f323feca1c84d030914dfec18f61e52be8a60d6939037 - size: 2622 - hackage: hasql-1.6@sha256:78f5fd9e732862cbffb06123015866312bf6f3889c18508018820536490a8460,6624 - original: - hackage: hasql-1.6 -- completed: - pantry-tree: - sha256: 946dbffdad0a92dbdeeaaabb1c7ac2451f3002561407068543fcd860cd860f15 - size: 473 - hackage: punycode-2.0@sha256:dce7f481b5eedc750cf49d21a80b839cb366afd2d29bc506acca5ad9d0c06a8f,1503 - original: - hackage: punycode-2.0 -- completed: - pantry-tree: - sha256: 51dc0ab22269973eec829ae476fb3102cfe155ffde2fd1d039dedf65c7842031 - size: 509 - hackage: timestamp-0.2@sha256:103fe49ce206922d3b14d57d8aff25eaf03c70fef5fcdaeaeb8416aaee163e51,1598 - original: - hackage: timestamp-0.2 +packages: [] snapshots: - completed: - sha256: a4a05670f8e2a2bc108aca4e093c57eb82f562afd6949f299b0116861444f6f6 - size: 887 - url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml - original: - url: https://raw.githubusercontent.com/nikita-volkov/stack-snapshot/f55bfe4e3f2bd73ffa6d9255ea20ab31a993661c/snapshot.yaml -- completed: - sha256: 6a7d84094bf948100b933f83f8cff586a41633d59cb1adbb89eefc25405fabe8 - size: 616794 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/7/16.yaml - original: nightly-2022-07-16 + sha256: f19b7679d0a1094c09ac025c8cfbd4bcdfb0f1f991110094f78ce5a8e299cb39 + size: 546437 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/11/23.yaml + original: nightly-2022-11-23 From 5c46f6bcde89abea1c2efa4cf4a3b027bfd2c0eb Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 9 Jan 2023 16:38:07 -0500 Subject: [PATCH 0798/1204] Remove matrix build badge since it's not available --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7e2f69d24c..62b8b3f757 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # hasql-notifications ![CI](https://github.com/diogob/hasql-notifications/actions/workflows/ci.yml/badge.svg) -[![Hackage Matrix CI](https://matrix.hackage.haskell.org/api/v2/packages/postgres-websockets/badge)](https://matrix.hackage.haskell.org/package/postgres-websockets) See documentation for the module [Hasql.Notifications](https://hackage.haskell.org/package/hasql-notifications/docs/Hasql-Notifications.html) on the [Hackage page](https://hackage.haskell.org/package/hasql-notifications). From 986ae15a79b5f818d7f07700feccf366e3ca27c1 Mon Sep 17 00:00:00 2001 From: Mitchell Rosen Date: Tue, 10 Jan 2023 20:01:29 -0500 Subject: [PATCH 0799/1204] Add `hasql-interpolate` to ecosystem section of readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2a9069a18f..adfe66dd99 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-implicits"](https://github.com/nikita-volkov/hasql-implicits) - implicit definitions, such as default codecs for standard types. +* ["hasql-interpolate"](https://github.com/awkward-squad/hasql-interpolate) - a QuasiQuoter that supports interpolating Haskell expressions into Hasql queries. + ### Benefits of being an ecosystem * **Simplicity.** Each library in isolation provides a simple API, which is hopefully easier to comprehend. From a40ef17e492aa17a508c62cf9832116ad15413bc Mon Sep 17 00:00:00 2001 From: Mitchell Rosen Date: Mon, 30 Jan 2023 10:26:04 -0500 Subject: [PATCH 0800/1204] Add `hasql-listen-notify` to ecosystem in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index adfe66dd99..ff37e69208 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib * ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. -* ["hasql-notifications"](https://github.com/diogob/hasql-notifications) - Support for PostgreSQL asynchronous notifications. +* ["hasql-listen-notify"](https://github.com/awkward-squad/hasql-listen-notify) / ["hasql-notifications"](https://github.com/diogob/hasql-notifications) - Support for PostgreSQL asynchronous notifications. * ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. From b4c9a9b4046cb825a2a0a2ff398ddb89ef8f7ffc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Feb 2023 20:35:27 +0300 Subject: [PATCH 0801/1204] Ditch stack --- stack.yaml | 1 - stack.yaml.lock | 12 ------------ 2 files changed, 13 deletions(-) delete mode 100644 stack.yaml delete mode 100644 stack.yaml.lock diff --git a/stack.yaml b/stack.yaml deleted file mode 100644 index 799a83cfaa..0000000000 --- a/stack.yaml +++ /dev/null @@ -1 +0,0 @@ -resolver: nightly-2022-08-26 diff --git a/stack.yaml.lock b/stack.yaml.lock deleted file mode 100644 index dcf7c6fd65..0000000000 --- a/stack.yaml.lock +++ /dev/null @@ -1,12 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files - -packages: [] -snapshots: -- completed: - sha256: 4467e8867668da207eae2bf418100b6e4262374a626586a9e2d0444bd27662d8 - size: 631956 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/8/26.yaml - original: nightly-2022-08-26 From 463042727ef69b312c808be0698d840f870c9a56 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 3 Feb 2023 20:38:45 +0300 Subject: [PATCH 0802/1204] Make the connection get released on exceptions --- library/Hasql/Pool.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 94179e449a..fe15f380e1 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -132,6 +132,7 @@ use Pool {..} sess = do onConn reuseVar conn = do sessRes <- catch (Session.run sess conn) $ \(err :: SomeException) -> do + Connection.release conn atomically $ modifyTVar' poolCapacity succ throw err From 9f853a99019a33d1bcd4dc07dcb1230b52b6e843 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 6 Feb 2023 16:06:06 +0100 Subject: [PATCH 0803/1204] Close connection before bumping pool capacity (fixes #30) This ensures that the number of open connections can't exceed the pool limit. --- library/Hasql/Pool.hs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index fe15f380e1..72e5641bdb 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -85,8 +85,9 @@ release Pool {..} = newReuse <- newTVar True writeTVar poolReuse newReuse conns <- flushTQueue poolConnectionQueue - modifyTVar' poolCapacity (+ (length conns)) - return $ forM_ conns Connection.release + return $ forM_ conns $ \conn -> do + Connection.release conn + atomically $ modifyTVar' poolCapacity succ -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -153,9 +154,9 @@ use Pool {..} sess = do reuse <- readTVar reuseVar if reuse then writeTQueue poolConnectionQueue conn $> return () - else do - modifyTVar' poolCapacity succ - return $ Connection.release conn + else return $ do + Connection.release conn + atomically $ modifyTVar' poolCapacity succ -- | Union over all errors that 'use' can result in. data UsageError From ebe0fd01938917a256c0f81029ae431c5e117cb2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 Feb 2023 01:19:15 +0300 Subject: [PATCH 0804/1204] Bump --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index ce2eb3fc62..c75309e013 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.6 +version: 0.8.0.7 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql From fdffeb8202a041ef9645e54b502cc3ddf399c34d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 Feb 2023 01:21:34 +0300 Subject: [PATCH 0805/1204] Update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb1d8f8b8e..106f75b69a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 0.8.0.7 + +Fix excessive connections during releases due to race conditions. + +# 0.8.0.5 + +Fix connections not returning to the pool on exceptions. + # 0.8.0.2 Fixed Windows build. From 7724be104a1251aa3f880509526502702b94de0b Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:41:50 +0100 Subject: [PATCH 0806/1204] apply ghcup github workaround --- .github/workflows/haskell.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 4b24cb36b2..e6ae554b16 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -32,6 +32,9 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Workaround runner image issue + # https://github.com/actions/runner-images/issues/7061 + run: sudo chown -R $USER /usr/local/.ghcup - name: ghcup run: | ghcup install ghc ${{ matrix.ghc }} From 9f6ab1e43da2cb87a5d7ce9edfcb8b674022fe1a Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Fri, 3 Feb 2023 12:50:08 +0100 Subject: [PATCH 0807/1204] connection lifetime proof of concept --- library/Hasql/Pool.hs | 50 +++++++++++++++++++++++++++++++++---------- test/Main.hs | 29 ++++++++++++++++--------- 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 72e5641bdb..a2a28d67c1 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -11,20 +11,30 @@ module Hasql.Pool ) where +import GHC.Clock (getMonotonicTimeNSec) import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection import Hasql.Pool.Prelude import Hasql.Session (Session) import qualified Hasql.Session as Session + +data Conn = Conn + { connConnection :: Connection, + connCreationTimeNSec :: Word64 + } + + -- | Pool of connections to DB. data Pool = Pool { -- | Connection settings. poolFetchConnectionSettings :: IO Connection.Settings, + -- | Maximal connection lifetime, in microseconds. + poolMaxLifetime :: Maybe Int, -- | Acquisition timeout, in microseconds. poolAcquisitionTimeout :: Maybe Int, -- | Avail connections. - poolConnectionQueue :: TQueue Connection, + poolConnectionQueue :: TQueue Conn, -- | Remaining capacity. -- The pool size limits the sum of poolCapacity, the length -- of poolConnectionQueue and the number of in-flight @@ -41,13 +51,16 @@ data Pool = Pool acquire :: -- | Pool size. Int -> + -- | Maximal connection lifetime, in microseconds. + -- Connections can live longer than this outside the pool. + Maybe Int -> -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Connection settings. Connection.Settings -> IO Pool -acquire poolSize timeout connectionSettings = - acquireDynamically poolSize timeout (pure connectionSettings) +acquire poolSize maxLifetime acqTimeout connectionSettings = + acquireDynamically poolSize maxLifetime acqTimeout (pure connectionSettings) -- | Create a connection-pool. -- @@ -59,13 +72,16 @@ acquire poolSize timeout connectionSettings = acquireDynamically :: -- | Pool size. Int -> + -- | Maximal connection lifetime, in microseconds. + -- Connections can live longer than this outside the pool. + Maybe Int -> -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Action fetching connection settings. IO Connection.Settings -> IO Pool -acquireDynamically poolSize timeout fetchConnectionSettings = do - Pool fetchConnectionSettings timeout +acquireDynamically poolSize maxLifetime acqTimeout fetchConnectionSettings = do + Pool fetchConnectionSettings maxLifetime acqTimeout <$> newTQueueIO <*> newTVarIO poolSize <*> (newTVarIO =<< newTVarIO True) @@ -86,7 +102,7 @@ release Pool {..} = writeTVar poolReuse newReuse conns <- flushTQueue poolConnectionQueue return $ forM_ conns $ \conn -> do - Connection.release conn + Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ -- | Use a connection from the pool to run a session and return the connection @@ -124,16 +140,28 @@ use Pool {..} sess = do where onNewConn reuseVar = do settings <- poolFetchConnectionSettings + now <- getMonotonicTimeNSec connRes <- Connection.acquire settings case connRes of Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onConn reuseVar conn - onConn reuseVar conn = do + Right conn -> onLiveConn reuseVar (Conn conn now) + + onConn reuseVar conn = case poolMaxLifetime of + Nothing -> onLiveConn reuseVar conn + Just lifetimeUSec -> do + now <- getMonotonicTimeNSec + if now > connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec + then do + Connection.release (connConnection conn) + onNewConn reuseVar + else onLiveConn reuseVar conn + + onLiveConn reuseVar conn = do sessRes <- - catch (Session.run sess conn) $ \(err :: SomeException) -> do - Connection.release conn + catch (Session.run sess (connConnection conn)) $ \(err :: SomeException) -> do + Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ throw err @@ -155,7 +183,7 @@ use Pool {..} sess = do if reuse then writeTQueue poolConnectionQueue conn $> return () else return $ do - Connection.release conn + Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ -- | Union over all errors that 'use' can result in. diff --git a/test/Main.hs b/test/Main.hs index 823454ec88..2a68396140 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -16,24 +16,24 @@ main = do connectionSettings <- getConnectionSettings hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ do - pool <- acquire 1 Nothing connectionSettings + pool <- acquire 1 Nothing Nothing connectionSettings use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) it "Simulation of connection error works" $ do - pool <- acquire 3 Nothing connectionSettings + pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False it "Connection errors cause eviction of connection" $ do - pool <- acquire 3 Nothing connectionSettings + pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after normal use" $ do - pool <- acquire 3 Nothing connectionSettings + pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession @@ -41,7 +41,7 @@ main = do res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after non-connection error" $ do - pool <- acquire 3 Nothing connectionSettings + pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession @@ -49,13 +49,13 @@ main = do res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "The pool remains usable after release" $ do - pool <- acquire 1 Nothing connectionSettings + pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Getting and setting session variables works" $ do - pool <- acquire 1 Nothing connectionSettings + pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do @@ -63,20 +63,20 @@ main = do getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") it "Session variables stay set when a connection gets reused" $ do - pool <- acquire 1 Nothing connectionSettings + pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") it "Releasing the pool resets session variables" $ do - pool <- acquire 1 Nothing connectionSettings + pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing it "Times out connection acquisition" $ do - pool <- acquire 1 (Just 1000) connectionSettings -- 1ms timeout + pool <- acquire 1 Nothing (Just 1000) connectionSettings -- 1ms timeout sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -93,6 +93,15 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s + it "Times out old connections" $ do + pool <- acquire 1 (Just 500000) Nothing connectionSettings -- 0.5s connection lifetime + res <- use pool $ setSettingSession "testing.foo" "hello world" + res `shouldBe` Right () + res2 <- use pool $ getSettingSession "testing.foo" + res2 `shouldBe` Right (Just "hello world") + threadDelay 1000000 -- 1s + res3 <- use pool $ getSettingSession "testing.foo" + res3 `shouldBe` Right Nothing getConnectionSettings :: IO Connection.Settings getConnectionSettings = From f0ebafc51e3209939cc1db5bab4576ce1c6e6a75 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 7 Feb 2023 12:36:03 +0100 Subject: [PATCH 0808/1204] release pool at the end of each test (should be a helper instead) --- test/Main.hs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/Main.hs b/test/Main.hs index 2a68396140..de8545dc86 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -19,12 +19,14 @@ main = do pool <- acquire 1 Nothing Nothing connectionSettings use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) + release pool it "Simulation of connection error works" $ do pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False + release pool it "Connection errors cause eviction of connection" $ do pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ closeConnSession >> selectOneSession @@ -32,6 +34,7 @@ main = do res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight + release pool it "Connection gets returned to the pool after normal use" $ do pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ selectOneSession @@ -40,6 +43,7 @@ main = do res <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight + release pool it "Connection gets returned to the pool after non-connection error" $ do pool <- acquire 3 Nothing Nothing connectionSettings res <- use pool $ badQuerySession @@ -48,12 +52,14 @@ main = do res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight + release pool it "The pool remains usable after release" $ do pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight + release pool it "Getting and setting session variables works" $ do pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ getSettingSession "testing.foo" @@ -62,12 +68,14 @@ main = do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") + release pool it "Session variables stay set when a connection gets reused" $ do pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") + release pool it "Releasing the pool resets session variables" $ do pool <- acquire 1 Nothing Nothing connectionSettings res <- use pool $ setSettingSession "testing.foo" "hello world" @@ -75,6 +83,7 @@ main = do release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing + release pool it "Times out connection acquisition" $ do pool <- acquire 1 Nothing (Just 1000) connectionSettings -- 1ms timeout sleeping <- newEmptyMVar @@ -93,6 +102,7 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s + release pool it "Times out old connections" $ do pool <- acquire 1 (Just 500000) Nothing connectionSettings -- 0.5s connection lifetime res <- use pool $ setSettingSession "testing.foo" "hello world" @@ -102,6 +112,7 @@ main = do threadDelay 1000000 -- 1s res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing + release pool getConnectionSettings :: IO Connection.Settings getConnectionSettings = From 1de496c3c85de86536a9f3f16eb8c88315647936 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 7 Feb 2023 12:36:36 +0100 Subject: [PATCH 0809/1204] set a random application_name --- hasql-pool.cabal | 1 + test/Main.hs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c75309e013..07059cd15c 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -46,5 +46,6 @@ test-suite test hasql, hasql-pool, hspec >=2.6 && <3, + random >= 1.2 && <2, rerebase >=1.15 && <2, stm >=2.5 && <3, diff --git a/test/Main.hs b/test/Main.hs index de8545dc86..d9c06afddf 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -2,6 +2,7 @@ module Main where import Control.Concurrent.Async (race) import qualified Data.ByteString.Char8 as B8 +import qualified Data.Text as Text import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders @@ -9,11 +10,13 @@ import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import qualified System.Environment +import qualified System.Random as Random +import qualified System.Random.Stateful as Random import Test.Hspec import Prelude main = do - connectionSettings <- getConnectionSettings + (connectionSettings, appName) <- getConnectionSettings hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ do pool <- acquire 1 Nothing Nothing connectionSettings @@ -114,9 +117,10 @@ main = do res3 `shouldBe` Right Nothing release pool -getConnectionSettings :: IO Connection.Settings -getConnectionSettings = - B8.unwords . catMaybes + +getConnectionSettings :: IO (Connection.Settings, Text) +getConnectionSettings = do + connStr <- B8.unwords . catMaybes <$> sequence [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", setting "port" $ defaultEnv "POSTGRES_PORT" "5432", @@ -124,6 +128,9 @@ getConnectionSettings = setting "password" $ maybeEnv "POSTGRES_PASSWORD", setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" ] + tag <- Random.uniformWord32 Random.globalStdGen + let appName = "hasql-pool-test-" <> show tag + return (connStr <> " application_name=" <> B8.pack appName, Text.pack appName) where maybeEnv env = fmap B8.pack <$> System.Environment.lookupEnv env defaultEnv env val = Just . fromMaybe val <$> maybeEnv env From 74d144589ccbb4a6303452431a27c8397ccf8823 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Tue, 7 Feb 2023 12:36:46 +0100 Subject: [PATCH 0810/1204] verify basic functionality of session counting --- test/Main.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/Main.hs b/test/Main.hs index d9c06afddf..10ab42addc 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -116,6 +116,11 @@ main = do res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing release pool + it "Counts active connections" $ do + pool <- acquire 1 Nothing Nothing connectionSettings + res <- use pool $ countConnectionsSession appName + res `shouldBe` Right 1 + release pool getConnectionSettings :: IO (Connection.Settings, Text) @@ -172,3 +177,11 @@ getSettingSession name = do statement = Statement.Statement "SELECT current_setting($1, true)" encoder decoder True encoder = Encoders.param (Encoders.nonNullable Encoders.text) decoder = Decoders.singleRow (Decoders.column (Decoders.nullable Decoders.text)) + +countConnectionsSession :: Text -> Session.Session Int64 +countConnectionsSession appName = do + Session.statement appName statement + where + statement = Statement.Statement "SELECT count(*) FROM pg_stat_activity WHERE application_name = $1" encoder decoder True + encoder = Encoders.param (Encoders.nonNullable Encoders.text) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) From 88750a1c89c1af7340fa8fac1f5463198ed8d67c Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 11:17:48 +0100 Subject: [PATCH 0811/1204] config interface --- library/Hasql/Pool.hs | 75 ++++++++++++++++++++++++++++++------------- test/Main.hs | 25 ++++++++------- 2 files changed, 66 insertions(+), 34 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index a2a28d67c1..9a423e6712 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,6 +1,13 @@ module Hasql.Pool ( -- * Pool + Config, + defaultConfig, + setCapacity, + setConnectionSettings, + setMaxLifetime, + setAcquisitionTimeout, Pool, + acquireConf, acquire, acquireDynamically, release, @@ -24,15 +31,40 @@ data Conn = Conn connCreationTimeNSec :: Word64 } +data Config = Config -- Settings ?? + { confCapacity :: Int, + -- | Connection settings. + confFetchConnectionSettings :: IO Connection.Settings, + -- | Maximal connection lifetime, in microseconds. + confMaxLifetime :: Maybe Int, + -- | Acquisition timeout, in microseconds. + confAcquisitionTimeout :: Maybe Int + } + +defaultConfig :: Config +defaultConfig = Config + { confCapacity = 10, + confFetchConnectionSettings = pure "host=localhost port=5432 user=postgres database=postgres", + confAcquisitionTimeout = Nothing, + confMaxLifetime = Nothing + } + +setCapacity :: Int -> Config -> Config +setCapacity c config = config { confCapacity = c } + +setConnectionSettings :: Connection.Settings -> Config -> Config +setConnectionSettings s config = config { confFetchConnectionSettings = pure s } + +setAcquisitionTimeout :: Maybe Int -> Config -> Config +setAcquisitionTimeout t config = config { confAcquisitionTimeout = t } + +setMaxLifetime :: Maybe Int -> Config -> Config +setMaxLifetime t config = config { confMaxLifetime = t } -- | Pool of connections to DB. data Pool = Pool - { -- | Connection settings. - poolFetchConnectionSettings :: IO Connection.Settings, - -- | Maximal connection lifetime, in microseconds. - poolMaxLifetime :: Maybe Int, - -- | Acquisition timeout, in microseconds. - poolAcquisitionTimeout :: Maybe Int, + { -- | Configuration + poolConfig :: Config, -- | Avail connections. poolConnectionQueue :: TQueue Conn, -- | Remaining capacity. @@ -44,6 +76,14 @@ data Pool = Pool poolReuse :: TVar (TVar Bool) } + +acquireConf :: Config -> IO Pool +acquireConf config = + Pool config + <$> newTQueueIO + <*> newTVarIO (confCapacity config) + <*> (newTVarIO =<< newTVarIO True) + -- | Create a connection-pool. -- -- No connections actually get established by this function. It is delegated @@ -51,16 +91,13 @@ data Pool = Pool acquire :: -- | Pool size. Int -> - -- | Maximal connection lifetime, in microseconds. - -- Connections can live longer than this outside the pool. - Maybe Int -> -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Connection settings. Connection.Settings -> IO Pool -acquire poolSize maxLifetime acqTimeout connectionSettings = - acquireDynamically poolSize maxLifetime acqTimeout (pure connectionSettings) +acquire poolSize acqTimeout connectionSettings = + acquireDynamically poolSize acqTimeout (pure connectionSettings) -- | Create a connection-pool. -- @@ -72,19 +109,13 @@ acquire poolSize maxLifetime acqTimeout connectionSettings = acquireDynamically :: -- | Pool size. Int -> - -- | Maximal connection lifetime, in microseconds. - -- Connections can live longer than this outside the pool. - Maybe Int -> -- | Connection acquisition timeout in microseconds. Maybe Int -> -- | Action fetching connection settings. IO Connection.Settings -> IO Pool -acquireDynamically poolSize maxLifetime acqTimeout fetchConnectionSettings = do - Pool fetchConnectionSettings maxLifetime acqTimeout - <$> newTQueueIO - <*> newTVarIO poolSize - <*> (newTVarIO =<< newTVarIO True) +acquireDynamically poolSize acqTimeout fetchConnectionSettings = + acquireConf (Config poolSize fetchConnectionSettings Nothing acqTimeout) -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -114,7 +145,7 @@ release Pool {..} = -- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = do - timeout <- case poolAcquisitionTimeout of + timeout <- case confAcquisitionTimeout poolConfig of Just delta -> do delay <- registerDelay delta return $ readTVar delay @@ -139,7 +170,7 @@ use Pool {..} sess = do ] where onNewConn reuseVar = do - settings <- poolFetchConnectionSettings + settings <- confFetchConnectionSettings poolConfig now <- getMonotonicTimeNSec connRes <- Connection.acquire settings case connRes of @@ -148,7 +179,7 @@ use Pool {..} sess = do return $ Left $ ConnectionUsageError connErr Right conn -> onLiveConn reuseVar (Conn conn now) - onConn reuseVar conn = case poolMaxLifetime of + onConn reuseVar conn = case confMaxLifetime poolConfig of Nothing -> onLiveConn reuseVar conn Just lifetimeUSec -> do now <- getMonotonicTimeNSec diff --git a/test/Main.hs b/test/Main.hs index 10ab42addc..1b56fca7cc 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -17,21 +17,22 @@ import Prelude main = do (connectionSettings, appName) <- getConnectionSettings + let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf (setCapacity 1 config) use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) release pool it "Simulation of connection error works" $ do - pool <- acquire 3 Nothing Nothing connectionSettings + pool <- acquireConf config res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False release pool it "Connection errors cause eviction of connection" $ do - pool <- acquire 3 Nothing Nothing connectionSettings + pool <- acquireConf config res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession @@ -39,7 +40,7 @@ main = do shouldSatisfy res $ isRight release pool it "Connection gets returned to the pool after normal use" $ do - pool <- acquire 3 Nothing Nothing connectionSettings + pool <- acquireConf config res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession @@ -48,7 +49,7 @@ main = do shouldSatisfy res $ isRight release pool it "Connection gets returned to the pool after non-connection error" $ do - pool <- acquire 3 Nothing Nothing connectionSettings + pool <- acquireConf config res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession @@ -57,14 +58,14 @@ main = do shouldSatisfy res $ isRight release pool it "The pool remains usable after release" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf config res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight release pool it "Getting and setting session variables works" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf (setCapacity 1 config) res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do @@ -73,14 +74,14 @@ main = do res `shouldBe` Right (Just "hello world") release pool it "Session variables stay set when a connection gets reused" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf (setCapacity 1 config) res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") release pool it "Releasing the pool resets session variables" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf (setCapacity 1 config) res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -88,7 +89,7 @@ main = do res `shouldBe` Right Nothing release pool it "Times out connection acquisition" $ do - pool <- acquire 1 Nothing (Just 1000) connectionSettings -- 1ms timeout + pool <- acquireConf (setCapacity 1 . setAcquisitionTimeout (Just 1000) $ config) -- 1ms timeout sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -107,7 +108,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s release pool it "Times out old connections" $ do - pool <- acquire 1 (Just 500000) Nothing connectionSettings -- 0.5s connection lifetime + pool <- acquireConf (setCapacity 1 . setMaxLifetime (Just 500000) $ config) -- 0.5s connection lifetime res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -117,7 +118,7 @@ main = do res3 `shouldBe` Right Nothing release pool it "Counts active connections" $ do - pool <- acquire 1 Nothing Nothing connectionSettings + pool <- acquireConf (setCapacity 1 config) res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 release pool From f98123a6f00495586282831158a7231de1bc86ab Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 11:32:41 +0100 Subject: [PATCH 0812/1204] withPool helper for tests --- test/Main.hs | 56 +++++++++++++++++++--------------------------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index 1b56fca7cc..227f3456c4 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -18,78 +18,65 @@ import Prelude main = do (connectionSettings, appName) <- getConnectionSettings let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig + withPool modifyConf = bracket + (acquireConf (modifyConf config)) + release + hspec . describe "" $ do - it "Releases a spot in the pool when there is a query error" $ do - pool <- acquireConf (setCapacity 1 config) + it "Releases a spot in the pool when there is a query error" $ withPool id $ \pool -> do use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) - release pool - it "Simulation of connection error works" $ do - pool <- acquireConf config + it "Simulation of connection error works" $ withPool id $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False - release pool - it "Connection errors cause eviction of connection" $ do - pool <- acquireConf config + it "Connection errors cause eviction of connection" $ withPool id $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - release pool - it "Connection gets returned to the pool after normal use" $ do - pool <- acquireConf config + it "Connection gets returned to the pool after normal use" $ withPool id $ \pool -> do res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - release pool - it "Connection gets returned to the pool after non-connection error" $ do - pool <- acquireConf config + it "Connection gets returned to the pool after non-connection error" $ withPool id $ \pool -> do res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - release pool - it "The pool remains usable after release" $ do - pool <- acquireConf config + it "The pool remains usable after release" $ withPool id $ \pool -> do res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight - release pool - it "Getting and setting session variables works" $ do - pool <- acquireConf (setCapacity 1 config) + it "Getting and setting session variables works" $ withPool id $ \pool -> do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - release pool - it "Session variables stay set when a connection gets reused" $ do - pool <- acquireConf (setCapacity 1 config) + it "Session variables stay set when a connection gets reused" $ withPool (setCapacity 1) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - release pool - it "Releasing the pool resets session variables" $ do - pool <- acquireConf (setCapacity 1 config) + it "Releasing the pool resets session variables" $ withPool (setCapacity 1) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing - release pool - it "Times out connection acquisition" $ do - pool <- acquireConf (setCapacity 1 . setAcquisitionTimeout (Just 1000) $ config) -- 1ms timeout + it "Times out connection acquisition" $ + -- 1ms timeout + withPool (setCapacity 1 . setAcquisitionTimeout (Just 1000)) $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -106,9 +93,9 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s - release pool - it "Times out old connections" $ do - pool <- acquireConf (setCapacity 1 . setMaxLifetime (Just 500000) $ config) -- 0.5s connection lifetime + it "Times out old connections" $ + -- 0.5s connection lifetime + withPool (setCapacity 1 . setMaxLifetime (Just 500000)) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -116,12 +103,9 @@ main = do threadDelay 1000000 -- 1s res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing - release pool - it "Counts active connections" $ do - pool <- acquireConf (setCapacity 1 config) + it "Counts active connections" $ withPool (setCapacity 1) $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 - release pool getConnectionSettings :: IO (Connection.Settings, Text) From c9ffd976217499d2a2a28739bccc2fe31f40450c Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 12:49:04 +0100 Subject: [PATCH 0813/1204] failing test case for lack of active timeout --- test/Main.hs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index 227f3456c4..32c12705bb 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -16,7 +16,7 @@ import Test.Hspec import Prelude main = do - (connectionSettings, appName) <- getConnectionSettings + connectionSettings <- getConnectionSettings let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig withPool modifyConf = bracket (acquireConf (modifyConf config)) @@ -93,7 +93,7 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s - it "Times out old connections" $ + it "Passively times out old connections" $ -- 0.5s connection lifetime withPool (setCapacity 1 . setMaxLifetime (Just 500000)) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" @@ -103,14 +103,27 @@ main = do threadDelay 1000000 -- 1s res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing - it "Counts active connections" $ withPool (setCapacity 1) $ \pool -> do + it "Counts active connections" $ do + (taggedConnectionSettings, appName) <- tagConnection connectionSettings + pool <- acquireConf (setConnectionSettings taggedConnectionSettings config) res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 + release pool + it "Times out old connections" $ do + (taggedConnectionSettings, appName) <- tagConnection connectionSettings + limitedPool <- acquireConf (setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) + countPool <- acquireConf config + res <- use limitedPool $ selectOneSession + res `shouldBe` Right 1 + res2 <- use countPool $ countConnectionsSession appName + res2 `shouldBe` Right 1 + threadDelay 1000000 -- 1s + res3 <- use countPool $ countConnectionsSession appName + res3 `shouldBe` Right 0 -getConnectionSettings :: IO (Connection.Settings, Text) -getConnectionSettings = do - connStr <- B8.unwords . catMaybes +getConnectionSettings :: IO Connection.Settings +getConnectionSettings = B8.unwords . catMaybes <$> sequence [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", setting "port" $ defaultEnv "POSTGRES_PORT" "5432", @@ -118,9 +131,6 @@ getConnectionSettings = do setting "password" $ maybeEnv "POSTGRES_PASSWORD", setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" ] - tag <- Random.uniformWord32 Random.globalStdGen - let appName = "hasql-pool-test-" <> show tag - return (connStr <> " application_name=" <> B8.pack appName, Text.pack appName) where maybeEnv env = fmap B8.pack <$> System.Environment.lookupEnv env defaultEnv env val = Just . fromMaybe val <$> maybeEnv env @@ -128,6 +138,12 @@ getConnectionSettings = do val <- getEnv return $ (\v -> label <> "=" <> v) <$> val +tagConnection :: Connection.Settings -> IO (Connection.Settings, Text) +tagConnection connectionSettings = do + tag <- Random.uniformWord32 Random.globalStdGen + let appName = "hasql-pool-test-" <> show tag + return (connectionSettings <> " application_name=" <> B8.pack appName, Text.pack appName) + selectOneSession :: Session.Session Int64 selectOneSession = Session.statement () statement From 6967353d9bf28cb733dc6fff3e2e83783def5be5 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:18:46 +0100 Subject: [PATCH 0814/1204] managed pool, fixes timeout --- hasql-pool.cabal | 1 + library/Hasql/Pool.hs | 47 ++++++++++++++++++++++++++++++++--- library/Hasql/Pool/Prelude.hs | 1 + test/Main.hs | 21 +++++++++------- 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 07059cd15c..4e4222b925 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -32,6 +32,7 @@ library build-depends: base >=4.11 && <5, hasql >=1.6.0.1 && <1.7, + async >=2.2 && <3, stm >=2.5 && <3, transformers >=0.5 && <0.7, diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 9a423e6712..61fbbe95c4 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -6,10 +6,12 @@ module Hasql.Pool setConnectionSettings, setMaxLifetime, setAcquisitionTimeout, + setManageInterval, Pool, acquireConf, acquire, acquireDynamically, + withManagedPool, release, use, @@ -18,6 +20,7 @@ module Hasql.Pool ) where +import qualified Control.Concurrent.Async as Async import GHC.Clock (getMonotonicTimeNSec) import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection @@ -38,7 +41,8 @@ data Config = Config -- Settings ?? -- | Maximal connection lifetime, in microseconds. confMaxLifetime :: Maybe Int, -- | Acquisition timeout, in microseconds. - confAcquisitionTimeout :: Maybe Int + confAcquisitionTimeout :: Maybe Int, + confManageInterval :: Int -- microseconds } defaultConfig :: Config @@ -46,7 +50,8 @@ defaultConfig = Config { confCapacity = 10, confFetchConnectionSettings = pure "host=localhost port=5432 user=postgres database=postgres", confAcquisitionTimeout = Nothing, - confMaxLifetime = Nothing + confMaxLifetime = Nothing, + confManageInterval = 1000000 -- 1s } setCapacity :: Int -> Config -> Config @@ -55,12 +60,18 @@ setCapacity c config = config { confCapacity = c } setConnectionSettings :: Connection.Settings -> Config -> Config setConnectionSettings s config = config { confFetchConnectionSettings = pure s } +setFetchConnectionSettings :: IO Connection.Settings -> Config -> Config +setFetchConnectionSettings s config = config { confFetchConnectionSettings = s } + setAcquisitionTimeout :: Maybe Int -> Config -> Config setAcquisitionTimeout t config = config { confAcquisitionTimeout = t } setMaxLifetime :: Maybe Int -> Config -> Config setMaxLifetime t config = config { confMaxLifetime = t } +setManageInterval :: Int -> Config -> Config +setManageInterval t config = config { confManageInterval = t } + -- | Pool of connections to DB. data Pool = Pool { -- | Configuration @@ -76,6 +87,12 @@ data Pool = Pool poolReuse :: TVar (TVar Bool) } +withManagedPool :: Config -> (Pool -> IO a) -> IO a +withManagedPool config inner = + bracket + (acquireConf config) + release + (\pool -> withAsync (manage pool) (const $ inner pool)) acquireConf :: Config -> IO Pool acquireConf config = @@ -115,7 +132,11 @@ acquireDynamically :: IO Connection.Settings -> IO Pool acquireDynamically poolSize acqTimeout fetchConnectionSettings = - acquireConf (Config poolSize fetchConnectionSettings Nothing acqTimeout) + acquireConf . + setCapacity poolSize . + setFetchConnectionSettings fetchConnectionSettings . + setAcquisitionTimeout acqTimeout $ + defaultConfig -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -136,6 +157,26 @@ release Pool {..} = Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ +manage :: Pool -> IO () +manage pool@Pool {..} = forever $ do + threadDelay (confManageInterval poolConfig) + clean pool + +clean :: Pool -> IO () +clean Pool {..} = do + now <- getMonotonicTimeNSec + join . atomically $ do + conns <- flushTQueue poolConnectionQueue + let (keep, close) = partition (isAlive now) conns + traverse_ (writeTQueue poolConnectionQueue) keep + return $ forM_ close $ \conn -> do + Connection.release (connConnection conn) + atomically $ modifyTVar' poolCapacity succ + where + isAlive now conn = case confMaxLifetime poolConfig of + Nothing -> True + Just lifetimeUSec -> now <= connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec + -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. -- diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 07d0b8ace5..380522bf7a 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -7,6 +7,7 @@ import Control.Applicative as Exports hiding (WrappedArrow (..)) import Control.Arrow as Exports hiding (first, second) import Control.Category as Exports import Control.Concurrent as Exports +import Control.Concurrent.Async as Exports import Control.Concurrent.STM as Exports hiding (orElse) import Control.Exception as Exports import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) diff --git a/test/Main.hs b/test/Main.hs index 32c12705bb..227553117e 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -110,16 +110,19 @@ main = do res `shouldBe` Right 1 release pool it "Times out old connections" $ do - (taggedConnectionSettings, appName) <- tagConnection connectionSettings - limitedPool <- acquireConf (setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) countPool <- acquireConf config - res <- use limitedPool $ selectOneSession - res `shouldBe` Right 1 - res2 <- use countPool $ countConnectionsSession appName - res2 `shouldBe` Right 1 - threadDelay 1000000 -- 1s - res3 <- use countPool $ countConnectionsSession appName - res3 `shouldBe` Right 0 + (taggedConnectionSettings, appName) <- tagConnection connectionSettings + withManagedPool + (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) + (\limitedPool -> do + res <- use limitedPool $ selectOneSession + res `shouldBe` Right 1 + res2 <- use countPool $ countConnectionsSession appName + res2 `shouldBe` Right 1 + threadDelay 1000000 -- 1s + res3 <- use countPool $ countConnectionsSession appName + res3 `shouldBe` Right 0) + release countPool getConnectionSettings :: IO Connection.Settings From 9ca70161e5846280a9d88daf6a796faceb3e3c5c Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:24:03 +0100 Subject: [PATCH 0815/1204] more withpool --- test/Main.hs | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index 227553117e..0b28ca5b52 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -18,9 +18,7 @@ import Prelude main = do connectionSettings <- getConnectionSettings let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig - withPool modifyConf = bracket - (acquireConf (modifyConf config)) - release + withPool modifyConf = withManagedPool (modifyConf config) hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withPool id $ \pool -> do @@ -105,24 +103,22 @@ main = do res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - pool <- acquireConf (setConnectionSettings taggedConnectionSettings config) - res <- use pool $ countConnectionsSession appName - res `shouldBe` Right 1 - release pool + withManagedPool (setConnectionSettings taggedConnectionSettings config) $ \pool -> do + res <- use pool $ countConnectionsSession appName + res `shouldBe` Right 1 it "Times out old connections" $ do - countPool <- acquireConf config - (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withManagedPool - (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) - (\limitedPool -> do - res <- use limitedPool $ selectOneSession - res `shouldBe` Right 1 - res2 <- use countPool $ countConnectionsSession appName - res2 `shouldBe` Right 1 - threadDelay 1000000 -- 1s - res3 <- use countPool $ countConnectionsSession appName - res3 `shouldBe` Right 0) - release countPool + withPool id $ \countPool -> do + (taggedConnectionSettings, appName) <- tagConnection connectionSettings + withManagedPool + (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) + (\limitedPool -> do + res <- use limitedPool $ selectOneSession + res `shouldBe` Right 1 + res2 <- use countPool $ countConnectionsSession appName + res2 `shouldBe` Right 1 + threadDelay 1000000 -- 1s + res3 <- use countPool $ countConnectionsSession appName + res3 `shouldBe` Right 0) getConnectionSettings :: IO Connection.Settings From bd6ad17509e17ea9a0eb49faad44b0df6a9551f2 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:25:41 +0100 Subject: [PATCH 0816/1204] drop withPool helper --- test/Main.hs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/test/Main.hs b/test/Main.hs index 0b28ca5b52..55472ed8f9 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -18,55 +18,54 @@ import Prelude main = do connectionSettings <- getConnectionSettings let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig - withPool modifyConf = withManagedPool (modifyConf config) hspec . describe "" $ do - it "Releases a spot in the pool when there is a query error" $ withPool id $ \pool -> do + it "Releases a spot in the pool when there is a query error" $ withManagedPool config $ \pool -> do use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) - it "Simulation of connection error works" $ withPool id $ \pool -> do + it "Simulation of connection error works" $ withManagedPool config $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False - it "Connection errors cause eviction of connection" $ withPool id $ \pool -> do + it "Connection errors cause eviction of connection" $ withManagedPool config $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after normal use" $ withPool id $ \pool -> do + it "Connection gets returned to the pool after normal use" $ withManagedPool config $ \pool -> do res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after non-connection error" $ withPool id $ \pool -> do + it "Connection gets returned to the pool after non-connection error" $ withManagedPool config $ \pool -> do res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "The pool remains usable after release" $ withPool id $ \pool -> do + it "The pool remains usable after release" $ withManagedPool config $ \pool -> do res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Getting and setting session variables works" $ withPool id $ \pool -> do + it "Getting and setting session variables works" $ withManagedPool config $ \pool -> do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withPool (setCapacity 1) $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withManagedPool (setCapacity 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withPool (setCapacity 1) $ \pool -> do + it "Releasing the pool resets session variables" $ withManagedPool (setCapacity 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -74,7 +73,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withPool (setCapacity 1 . setAcquisitionTimeout (Just 1000)) $ \pool -> do + withManagedPool (setCapacity 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -93,7 +92,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withPool (setCapacity 1 . setMaxLifetime (Just 500000)) $ \pool -> do + withManagedPool (setCapacity 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -107,7 +106,7 @@ main = do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 it "Times out old connections" $ do - withPool id $ \countPool -> do + withManagedPool config $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings withManagedPool (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) From 53b4d9d5ceb77a80fa640680db0ab26a97bec4c5 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:31:51 +0100 Subject: [PATCH 0817/1204] rename capacity to size --- library/Hasql/Pool.hs | 27 ++++++++++++++++----------- test/Main.hs | 10 +++++----- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 61fbbe95c4..1fb051386a 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -2,7 +2,7 @@ module Hasql.Pool ( -- * Pool Config, defaultConfig, - setCapacity, + setSize, setConnectionSettings, setMaxLifetime, setAcquisitionTimeout, @@ -29,33 +29,38 @@ import Hasql.Session (Session) import qualified Hasql.Session as Session +-- | A connection tagged with metadata. data Conn = Conn { connConnection :: Connection, connCreationTimeNSec :: Word64 } -data Config = Config -- Settings ?? - { confCapacity :: Int, - -- | Connection settings. +-- | Collected pool configuration. +data Config = Config + { -- | Pool size (default 10). + confSize :: Int, + -- | Connection settings (default postgres@localhost:5432/postgres). confFetchConnectionSettings :: IO Connection.Settings, - -- | Maximal connection lifetime, in microseconds. + -- | Maximal connection lifetime, in microseconds (default Nothing). confMaxLifetime :: Maybe Int, - -- | Acquisition timeout, in microseconds. + -- | Acquisition timeout, in microseconds (default Nothing). confAcquisitionTimeout :: Maybe Int, + -- | Interval at which the active management thread triggers (default 1s). confManageInterval :: Int -- microseconds } +-- | Default pool configuration. defaultConfig :: Config defaultConfig = Config - { confCapacity = 10, + { confSize = 10, confFetchConnectionSettings = pure "host=localhost port=5432 user=postgres database=postgres", confAcquisitionTimeout = Nothing, confMaxLifetime = Nothing, confManageInterval = 1000000 -- 1s } -setCapacity :: Int -> Config -> Config -setCapacity c config = config { confCapacity = c } +setSize :: Int -> Config -> Config +setSize c config = config { confSize = c } setConnectionSettings :: Connection.Settings -> Config -> Config setConnectionSettings s config = config { confFetchConnectionSettings = pure s } @@ -98,7 +103,7 @@ acquireConf :: Config -> IO Pool acquireConf config = Pool config <$> newTQueueIO - <*> newTVarIO (confCapacity config) + <*> newTVarIO (confSize config) <*> (newTVarIO =<< newTVarIO True) -- | Create a connection-pool. @@ -133,7 +138,7 @@ acquireDynamically :: IO Pool acquireDynamically poolSize acqTimeout fetchConnectionSettings = acquireConf . - setCapacity poolSize . + setSize poolSize . setFetchConnectionSettings fetchConnectionSettings . setAcquisitionTimeout acqTimeout $ defaultConfig diff --git a/test/Main.hs b/test/Main.hs index 55472ed8f9..a44c36698c 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -17,7 +17,7 @@ import Prelude main = do connectionSettings <- getConnectionSettings - let config = setCapacity 3 . setConnectionSettings connectionSettings $ defaultConfig + let config = setSize 3 . setConnectionSettings connectionSettings $ defaultConfig hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withManagedPool config $ \pool -> do @@ -60,12 +60,12 @@ main = do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withManagedPool (setCapacity 1 config) $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withManagedPool (setSize 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withManagedPool (setCapacity 1 config) $ \pool -> do + it "Releasing the pool resets session variables" $ withManagedPool (setSize 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -73,7 +73,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withManagedPool (setCapacity 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do + withManagedPool (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -92,7 +92,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withManagedPool (setCapacity 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do + withManagedPool (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" From d051c6b79fc28beac2c03ebf393f84c27611e9b3 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 9 Feb 2023 13:38:42 +0100 Subject: [PATCH 0818/1204] bit more docs, make `clean` local --- library/Hasql/Pool.hs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 1fb051386a..de53bc39bf 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -92,6 +92,10 @@ data Pool = Pool poolReuse :: TVar (TVar Bool) } +-- | Run the given action with a pool, ensuring that +-- the management thread is closed and that the pool +-- is released afterwards. (Connections that have not +-- been returned to the pool may survive this.) withManagedPool :: Config -> (Pool -> IO a) -> IO a withManagedPool config inner = bracket @@ -162,22 +166,22 @@ release Pool {..} = Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ +-- | Active pool management thread. (For now, this closes pooled connections +-- that are older than maxLifetime. manage :: Pool -> IO () manage pool@Pool {..} = forever $ do threadDelay (confManageInterval poolConfig) - clean pool - -clean :: Pool -> IO () -clean Pool {..} = do - now <- getMonotonicTimeNSec - join . atomically $ do - conns <- flushTQueue poolConnectionQueue - let (keep, close) = partition (isAlive now) conns - traverse_ (writeTQueue poolConnectionQueue) keep - return $ forM_ close $ \conn -> do - Connection.release (connConnection conn) - atomically $ modifyTVar' poolCapacity succ + clean where + clean = do + now <- getMonotonicTimeNSec + join . atomically $ do + conns <- flushTQueue poolConnectionQueue + let (keep, close) = partition (isAlive now) conns + traverse_ (writeTQueue poolConnectionQueue) keep + return $ forM_ close $ \conn -> do + Connection.release (connConnection conn) + atomically $ modifyTVar' poolCapacity succ isAlive now conn = case confMaxLifetime poolConfig of Nothing -> True Just lifetimeUSec -> now <= connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec From 82c3fc89e800b6dfc94912ecda7d115c904575e1 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 16 Feb 2023 13:14:07 +0100 Subject: [PATCH 0819/1204] default to empty connection settings (which should mean connect to local postgres by socket) --- library/Hasql/Pool.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index de53bc39bf..875417ef88 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -39,7 +39,7 @@ data Conn = Conn data Config = Config { -- | Pool size (default 10). confSize :: Int, - -- | Connection settings (default postgres@localhost:5432/postgres). + -- | Connection settings (default ""). confFetchConnectionSettings :: IO Connection.Settings, -- | Maximal connection lifetime, in microseconds (default Nothing). confMaxLifetime :: Maybe Int, @@ -53,7 +53,7 @@ data Config = Config defaultConfig :: Config defaultConfig = Config { confSize = 10, - confFetchConnectionSettings = pure "host=localhost port=5432 user=postgres database=postgres", + confFetchConnectionSettings = pure "", confAcquisitionTimeout = Nothing, confMaxLifetime = Nothing, confManageInterval = 1000000 -- 1s From 48a37dbdb07d2a409e380c8bd3d20dc73b55401c Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 16 Feb 2023 14:04:58 +0100 Subject: [PATCH 0820/1204] "finish" this up, without particular regard for backward compatibility --- CHANGELOG.md | 8 +++ hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 126 +++++++++++++++++++++++------------------- test/Main.hs | 28 +++++----- 4 files changed, 92 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 106f75b69a..dcc55d09a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 0.9 + +Connections now have a configurable maximal lifetime, configurable via a new extensible configuration interface. The pool is now actively managed, and is created using a combinator that takes care to free resources after use. + +Breaking changes in API: + +- `acquire` and `acquireDynamically` are replaced with `withPool` and `withPoolConf` + # 0.8.0.7 Fix excessive connections during releases due to race conditions. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 4e4222b925..26dc07ebd2 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.7 +version: 0.9 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 875417ef88..78cb8b6376 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,19 +1,19 @@ module Hasql.Pool ( -- * Pool + Pool, + withPool, + withPoolConf, + use, + release, + + -- * Configuration Config, defaultConfig, - setSize, setConnectionSettings, + setSize, setMaxLifetime, setAcquisitionTimeout, setManageInterval, - Pool, - acquireConf, - acquire, - acquireDynamically, - withManagedPool, - release, - use, -- * Errors UsageError (..), @@ -35,7 +35,10 @@ data Conn = Conn connCreationTimeNSec :: Word64 } --- | Collected pool configuration. +-- | Pool configuration. +-- +-- This is created by modifying 'defaultConfig' using the various setters, +-- to be passed to 'withPoolConf'. data Config = Config { -- | Pool size (default 10). confSize :: Int, @@ -45,8 +48,8 @@ data Config = Config confMaxLifetime :: Maybe Int, -- | Acquisition timeout, in microseconds (default Nothing). confAcquisitionTimeout :: Maybe Int, - -- | Interval at which the active management thread triggers (default 1s). - confManageInterval :: Int -- microseconds + -- | Interval at which the active management thread triggers, in microseconds (default 1s). + confManageInterval :: Int } -- | Default pool configuration. @@ -59,21 +62,43 @@ defaultConfig = Config confManageInterval = 1000000 -- 1s } +-- | Modify a pool configuration, setting the pool size (default 10). +-- +-- The pool guarantees that the number of concurrent connections never +-- exceeds this value. setSize :: Int -> Config -> Config setSize c config = config { confSize = c } +-- | Modify a pool configuration, setting a constant connection string. (default ""). setConnectionSettings :: Connection.Settings -> Config -> Config setConnectionSettings s config = config { confFetchConnectionSettings = pure s } +-- | Modify a pool configuration, setting a dynamic connection string. +-- When creating a connection, the action will be run to determine the +-- current connection string. setFetchConnectionSettings :: IO Connection.Settings -> Config -> Config setFetchConnectionSettings s config = config { confFetchConnectionSettings = s } +-- | Modify a pool configuration, setting an acquisition timeout in microseconds. (default 'Nothing', i.e., disabled) +-- +-- If this timeout is set, then acquiring a connection via 'use' will fail +-- with 'AcquisitionTimeoutUsageError' if no connection becomes available +-- within the timeout. setAcquisitionTimeout :: Maybe Int -> Config -> Config setAcquisitionTimeout t config = config { confAcquisitionTimeout = t } +-- | Modify a pool configuration, setting a maximum connection lifetime, in microseconds. (default 'Nothing', i.e., disabled) +-- +-- If this timeout is set, then connections will be closed once they +-- are older than this value (and have been returned to the pool). setMaxLifetime :: Maybe Int -> Config -> Config setMaxLifetime t config = config { confMaxLifetime = t } +-- | Modify a pool configuration, setting the management thread's iteration interval, in microseconds. (Default 1s). +-- +-- The pool's management thread sleeps for this interval between runs. This +-- setting affects the precision to which e.g. connection lifetime is limited +-- via 'setMaxLifetime'. setManageInterval :: Int -> Config -> Config setManageInterval t config = config { confManageInterval = t } @@ -92,60 +117,47 @@ data Pool = Pool poolReuse :: TVar (TVar Bool) } --- | Run the given action with a pool, ensuring that --- the management thread is closed and that the pool --- is released afterwards. (Connections that have not --- been returned to the pool may survive this.) -withManagedPool :: Config -> (Pool -> IO a) -> IO a -withManagedPool config inner = - bracket - (acquireConf config) - release - (\pool -> withAsync (manage pool) (const $ inner pool)) - -acquireConf :: Config -> IO Pool -acquireConf config = - Pool config - <$> newTQueueIO - <*> newTVarIO (confSize config) - <*> (newTVarIO =<< newTVarIO True) - --- | Create a connection-pool. +-- | Create a connection-pool, and run the given action with it. -- --- No connections actually get established by this function. It is delegated --- to 'use'. -acquire :: +-- This uses default settings beyond the pool size and connection string. +-- Use 'withPoolConf' to modify the defaults. +withPool :: -- | Pool size. Int -> - -- | Connection acquisition timeout in microseconds. - Maybe Int -> -- | Connection settings. Connection.Settings -> - IO Pool -acquire poolSize acqTimeout connectionSettings = - acquireDynamically poolSize acqTimeout (pure connectionSettings) + -- | Action. + (Pool -> IO a) + -> IO a +withPool poolSize connectionSettings = withPoolConf conf + where + conf = setSize poolSize . setFetchConnectionSettings (pure connectionSettings) $ defaultConfig --- | Create a connection-pool. --- --- In difference to 'acquire' new settings get fetched each time a connection --- is created. This may be useful for some security models. +-- | Create a connection-pool, and run the given action with it. -- -- No connections actually get established by this function. It is delegated -- to 'use'. -acquireDynamically :: - -- | Pool size. - Int -> - -- | Connection acquisition timeout in microseconds. - Maybe Int -> - -- | Action fetching connection settings. - IO Connection.Settings -> - IO Pool -acquireDynamically poolSize acqTimeout fetchConnectionSettings = - acquireConf . - setSize poolSize . - setFetchConnectionSettings fetchConnectionSettings . - setAcquisitionTimeout acqTimeout $ - defaultConfig +-- +-- Resources associated with the pool are cleaned up afterwards, but +-- connections that have not been returned to the pool will survive. +withPoolConf :: + -- | Pool configuration. + Config -> + -- | Action. + (Pool -> IO a) + -> IO a +withPoolConf config inner = + bracket + (acquire config) + release + (\pool -> withAsync (manage pool) (const $ inner pool)) + +acquire :: Config -> IO Pool +acquire config = + Pool config + <$> newTQueueIO + <*> newTVarIO (confSize config) + <*> (newTVarIO =<< newTVarIO True) -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -167,7 +179,7 @@ release Pool {..} = atomically $ modifyTVar' poolCapacity succ -- | Active pool management thread. (For now, this closes pooled connections --- that are older than maxLifetime. +-- that are older than maxLifetime.) manage :: Pool -> IO () manage pool@Pool {..} = forever $ do threadDelay (confManageInterval poolConfig) diff --git a/test/Main.hs b/test/Main.hs index a44c36698c..17bd22f989 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -20,52 +20,52 @@ main = do let config = setSize 3 . setConnectionSettings connectionSettings $ defaultConfig hspec . describe "" $ do - it "Releases a spot in the pool when there is a query error" $ withManagedPool config $ \pool -> do + it "Releases a spot in the pool when there is a query error" $ withPoolConf config $ \pool -> do use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) - it "Simulation of connection error works" $ withManagedPool config $ \pool -> do + it "Simulation of connection error works" $ withPoolConf config $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False - it "Connection errors cause eviction of connection" $ withManagedPool config $ \pool -> do + it "Connection errors cause eviction of connection" $ withPoolConf config $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after normal use" $ withManagedPool config $ \pool -> do + it "Connection gets returned to the pool after normal use" $ withPoolConf config $ \pool -> do res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after non-connection error" $ withManagedPool config $ \pool -> do + it "Connection gets returned to the pool after non-connection error" $ withPoolConf config $ \pool -> do res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "The pool remains usable after release" $ withManagedPool config $ \pool -> do + it "The pool remains usable after release" $ withPoolConf config $ \pool -> do res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Getting and setting session variables works" $ withManagedPool config $ \pool -> do + it "Getting and setting session variables works" $ withPoolConf config $ \pool -> do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withManagedPool (setSize 1 config) $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withPoolConf (setSize 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withManagedPool (setSize 1 config) $ \pool -> do + it "Releasing the pool resets session variables" $ withPoolConf (setSize 1 config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -73,7 +73,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withManagedPool (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do + withPoolConf (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -92,7 +92,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withManagedPool (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do + withPoolConf (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -102,13 +102,13 @@ main = do res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withManagedPool (setConnectionSettings taggedConnectionSettings config) $ \pool -> do + withPoolConf (setConnectionSettings taggedConnectionSettings config) $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 it "Times out old connections" $ do - withManagedPool config $ \countPool -> do + withPoolConf config $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withManagedPool + withPoolConf (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) (\limitedPool -> do res <- use limitedPool $ selectOneSession From 6c7a6bd2fd6579884c7368db90aceae4407ef6ac Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 16 Feb 2023 14:25:25 +0100 Subject: [PATCH 0821/1204] extract shared connection liveness test --- library/Hasql/Pool.hs | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 78cb8b6376..f9fbdb6aef 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -29,12 +29,6 @@ import Hasql.Session (Session) import qualified Hasql.Session as Session --- | A connection tagged with metadata. -data Conn = Conn - { connConnection :: Connection, - connCreationTimeNSec :: Word64 - } - -- | Pool configuration. -- -- This is created by modifying 'defaultConfig' using the various setters, @@ -102,6 +96,17 @@ setMaxLifetime t config = config { confMaxLifetime = t } setManageInterval :: Int -> Config -> Config setManageInterval t config = config { confManageInterval = t } +-- | A connection tagged with metadata. +data Conn = Conn + { connConnection :: Connection, + connCreationTimeNSec :: Word64 + } + +isAlive :: Config -> Word64 -> Conn -> Bool +isAlive poolConfig now conn = case confMaxLifetime poolConfig of + Nothing -> True + Just lifetimeUSec -> now <= connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec + -- | Pool of connections to DB. data Pool = Pool { -- | Configuration @@ -189,14 +194,11 @@ manage pool@Pool {..} = forever $ do now <- getMonotonicTimeNSec join . atomically $ do conns <- flushTQueue poolConnectionQueue - let (keep, close) = partition (isAlive now) conns + let (keep, close) = partition (isAlive poolConfig now) conns traverse_ (writeTQueue poolConnectionQueue) keep return $ forM_ close $ \conn -> do Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ - isAlive now conn = case confMaxLifetime poolConfig of - Nothing -> True - Just lifetimeUSec -> now <= connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -243,13 +245,13 @@ use Pool {..} sess = do onConn reuseVar conn = case confMaxLifetime poolConfig of Nothing -> onLiveConn reuseVar conn - Just lifetimeUSec -> do + Just _ -> do now <- getMonotonicTimeNSec - if now > connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec - then do + if isAlive poolConfig now conn + then onLiveConn reuseVar conn + else do Connection.release (connConnection conn) onNewConn reuseVar - else onLiveConn reuseVar conn onLiveConn reuseVar conn = do sessRes <- From e6e10c5541ece36269a85398e99131e9adb68692 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 16 Feb 2023 14:26:51 +0100 Subject: [PATCH 0822/1204] run ormolu --- library/Hasql/Pool.hs | 36 ++++++++++----------- test/Main.hs | 75 ++++++++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 55 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index f9fbdb6aef..4c9f0d496e 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -28,7 +28,6 @@ import Hasql.Pool.Prelude import Hasql.Session (Session) import qualified Hasql.Session as Session - -- | Pool configuration. -- -- This is created by modifying 'defaultConfig' using the various setters, @@ -48,30 +47,31 @@ data Config = Config -- | Default pool configuration. defaultConfig :: Config -defaultConfig = Config - { confSize = 10, - confFetchConnectionSettings = pure "", - confAcquisitionTimeout = Nothing, - confMaxLifetime = Nothing, - confManageInterval = 1000000 -- 1s - } +defaultConfig = + Config + { confSize = 10, + confFetchConnectionSettings = pure "", + confAcquisitionTimeout = Nothing, + confMaxLifetime = Nothing, + confManageInterval = 1000000 -- 1s + } -- | Modify a pool configuration, setting the pool size (default 10). -- -- The pool guarantees that the number of concurrent connections never -- exceeds this value. setSize :: Int -> Config -> Config -setSize c config = config { confSize = c } +setSize c config = config {confSize = c} -- | Modify a pool configuration, setting a constant connection string. (default ""). setConnectionSettings :: Connection.Settings -> Config -> Config -setConnectionSettings s config = config { confFetchConnectionSettings = pure s } +setConnectionSettings s config = config {confFetchConnectionSettings = pure s} -- | Modify a pool configuration, setting a dynamic connection string. -- When creating a connection, the action will be run to determine the -- current connection string. setFetchConnectionSettings :: IO Connection.Settings -> Config -> Config -setFetchConnectionSettings s config = config { confFetchConnectionSettings = s } +setFetchConnectionSettings s config = config {confFetchConnectionSettings = s} -- | Modify a pool configuration, setting an acquisition timeout in microseconds. (default 'Nothing', i.e., disabled) -- @@ -79,14 +79,14 @@ setFetchConnectionSettings s config = config { confFetchConnectionSettings = s } -- with 'AcquisitionTimeoutUsageError' if no connection becomes available -- within the timeout. setAcquisitionTimeout :: Maybe Int -> Config -> Config -setAcquisitionTimeout t config = config { confAcquisitionTimeout = t } +setAcquisitionTimeout t config = config {confAcquisitionTimeout = t} -- | Modify a pool configuration, setting a maximum connection lifetime, in microseconds. (default 'Nothing', i.e., disabled) -- -- If this timeout is set, then connections will be closed once they -- are older than this value (and have been returned to the pool). setMaxLifetime :: Maybe Int -> Config -> Config -setMaxLifetime t config = config { confMaxLifetime = t } +setMaxLifetime t config = config {confMaxLifetime = t} -- | Modify a pool configuration, setting the management thread's iteration interval, in microseconds. (Default 1s). -- @@ -94,7 +94,7 @@ setMaxLifetime t config = config { confMaxLifetime = t } -- setting affects the precision to which e.g. connection lifetime is limited -- via 'setMaxLifetime'. setManageInterval :: Int -> Config -> Config -setManageInterval t config = config { confManageInterval = t } +setManageInterval t config = config {confManageInterval = t} -- | A connection tagged with metadata. data Conn = Conn @@ -132,8 +132,8 @@ withPool :: -- | Connection settings. Connection.Settings -> -- | Action. - (Pool -> IO a) - -> IO a + (Pool -> IO a) -> + IO a withPool poolSize connectionSettings = withPoolConf conf where conf = setSize poolSize . setFetchConnectionSettings (pure connectionSettings) $ defaultConfig @@ -149,8 +149,8 @@ withPoolConf :: -- | Pool configuration. Config -> -- | Action. - (Pool -> IO a) - -> IO a + (Pool -> IO a) -> + IO a withPoolConf config inner = bracket (acquire config) diff --git a/test/Main.hs b/test/Main.hs index 17bd22f989..17bd44c7bc 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -72,34 +72,34 @@ main = do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing it "Times out connection acquisition" $ - -- 1ms timeout - withPoolConf (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do - sleeping <- newEmptyMVar - t0 <- getCurrentTime - res <- - race - ( use pool $ - liftIO $ do - putMVar sleeping () - threadDelay 1000000 -- 1s - ) - ( do - takeMVar sleeping - use pool $ selectOneSession - ) - t1 <- getCurrentTime - res `shouldBe` Right (Left AcquisitionTimeoutUsageError) - diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s + -- 1ms timeout + withPoolConf (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do + sleeping <- newEmptyMVar + t0 <- getCurrentTime + res <- + race + ( use pool $ + liftIO $ do + putMVar sleeping () + threadDelay 1000000 -- 1s + ) + ( do + takeMVar sleeping + use pool $ selectOneSession + ) + t1 <- getCurrentTime + res `shouldBe` Right (Left AcquisitionTimeoutUsageError) + diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ - -- 0.5s connection lifetime - withPoolConf (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do - res <- use pool $ setSettingSession "testing.foo" "hello world" - res `shouldBe` Right () - res2 <- use pool $ getSettingSession "testing.foo" - res2 `shouldBe` Right (Just "hello world") - threadDelay 1000000 -- 1s - res3 <- use pool $ getSettingSession "testing.foo" - res3 `shouldBe` Right Nothing + -- 0.5s connection lifetime + withPoolConf (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do + res <- use pool $ setSettingSession "testing.foo" "hello world" + res `shouldBe` Right () + res2 <- use pool $ getSettingSession "testing.foo" + res2 `shouldBe` Right (Just "hello world") + threadDelay 1000000 -- 1s + res3 <- use pool $ getSettingSession "testing.foo" + res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings withPoolConf (setConnectionSettings taggedConnectionSettings config) $ \pool -> do @@ -110,18 +110,19 @@ main = do (taggedConnectionSettings, appName) <- tagConnection connectionSettings withPoolConf (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) - (\limitedPool -> do - res <- use limitedPool $ selectOneSession - res `shouldBe` Right 1 - res2 <- use countPool $ countConnectionsSession appName - res2 `shouldBe` Right 1 - threadDelay 1000000 -- 1s - res3 <- use countPool $ countConnectionsSession appName - res3 `shouldBe` Right 0) - + ( \limitedPool -> do + res <- use limitedPool $ selectOneSession + res `shouldBe` Right 1 + res2 <- use countPool $ countConnectionsSession appName + res2 `shouldBe` Right 1 + threadDelay 1000000 -- 1s + res3 <- use countPool $ countConnectionsSession appName + res3 `shouldBe` Right 0 + ) getConnectionSettings :: IO Connection.Settings -getConnectionSettings = B8.unwords . catMaybes +getConnectionSettings = + B8.unwords . catMaybes <$> sequence [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", setting "port" $ defaultEnv "POSTGRES_PORT" "5432", From bd4253a3121eaf5bb9026c419c3634f264f09d74 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Thu, 16 Feb 2023 14:28:37 +0100 Subject: [PATCH 0823/1204] simplify --- library/Hasql/Pool.hs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 4c9f0d496e..85cdc2c9b7 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -188,17 +188,14 @@ release Pool {..} = manage :: Pool -> IO () manage pool@Pool {..} = forever $ do threadDelay (confManageInterval poolConfig) - clean - where - clean = do - now <- getMonotonicTimeNSec - join . atomically $ do - conns <- flushTQueue poolConnectionQueue - let (keep, close) = partition (isAlive poolConfig now) conns - traverse_ (writeTQueue poolConnectionQueue) keep - return $ forM_ close $ \conn -> do - Connection.release (connConnection conn) - atomically $ modifyTVar' poolCapacity succ + now <- getMonotonicTimeNSec + join . atomically $ do + conns <- flushTQueue poolConnectionQueue + let (keep, close) = partition (isAlive poolConfig now) conns + traverse_ (writeTQueue poolConnectionQueue) keep + return $ forM_ close $ \conn -> do + Connection.release (connConnection conn) + atomically $ modifyTVar' poolCapacity succ -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. From 9b18157224e4c5632a367dc134d4f7b2fd328ce7 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Fri, 17 Feb 2023 11:47:19 +0100 Subject: [PATCH 0824/1204] make acquisition timeout and max lifetime non-optional --- CHANGELOG.md | 2 +- library/Hasql/Pool.hs | 64 ++++++++++++++++++++----------------------- test/Main.hs | 6 ++-- 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc55d09a2..d81e014902 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # 0.9 -Connections now have a configurable maximal lifetime, configurable via a new extensible configuration interface. The pool is now actively managed, and is created using a combinator that takes care to free resources after use. +Connections now have a maximal lifetime, defaulting to 30m and configurable via a new extensible configuration interface. The pool is now actively managed, and is created using a combinator that takes care to free resources after use. The acquisition timeout is now also non-optional, defaulting to 10s. Breaking changes in API: diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 85cdc2c9b7..4744111748 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -37,10 +37,10 @@ data Config = Config confSize :: Int, -- | Connection settings (default ""). confFetchConnectionSettings :: IO Connection.Settings, - -- | Maximal connection lifetime, in microseconds (default Nothing). - confMaxLifetime :: Maybe Int, - -- | Acquisition timeout, in microseconds (default Nothing). - confAcquisitionTimeout :: Maybe Int, + -- | Maximal connection lifetime, in microseconds (default 30m). + confMaxLifetime :: Int, + -- | Acquisition timeout, in microseconds (default 10s). + confAcquisitionTimeout :: Int, -- | Interval at which the active management thread triggers, in microseconds (default 1s). confManageInterval :: Int } @@ -51,10 +51,13 @@ defaultConfig = Config { confSize = 10, confFetchConnectionSettings = pure "", - confAcquisitionTimeout = Nothing, - confMaxLifetime = Nothing, - confManageInterval = 1000000 -- 1s + confAcquisitionTimeout = 10 * oneSecond, + confMaxLifetime = 30 * oneMinute, + confManageInterval = oneSecond } + where + oneSecond = 1000000 + oneMinute = 60 * oneSecond -- | Modify a pool configuration, setting the pool size (default 10). -- @@ -73,19 +76,18 @@ setConnectionSettings s config = config {confFetchConnectionSettings = pure s} setFetchConnectionSettings :: IO Connection.Settings -> Config -> Config setFetchConnectionSettings s config = config {confFetchConnectionSettings = s} --- | Modify a pool configuration, setting an acquisition timeout in microseconds. (default 'Nothing', i.e., disabled) +-- | Modify a pool configuration, setting the acquisition timeout in microseconds. (default 'Nothing', i.e., disabled) -- --- If this timeout is set, then acquiring a connection via 'use' will fail --- with 'AcquisitionTimeoutUsageError' if no connection becomes available --- within the timeout. -setAcquisitionTimeout :: Maybe Int -> Config -> Config +-- Acquiring a connection via 'use' will fail with 'AcquisitionTimeoutUsageError' +-- if no connection becomes available within the timeout. +setAcquisitionTimeout :: Int -> Config -> Config setAcquisitionTimeout t config = config {confAcquisitionTimeout = t} --- | Modify a pool configuration, setting a maximum connection lifetime, in microseconds. (default 'Nothing', i.e., disabled) +-- | Modify a pool configuration, setting the maximum connection lifetime, in microseconds. (default 'Nothing', i.e., disabled) -- --- If this timeout is set, then connections will be closed once they --- are older than this value (and have been returned to the pool). -setMaxLifetime :: Maybe Int -> Config -> Config +-- Connections will be closed once they are older than this value +-- (and have been returned to the pool). +setMaxLifetime :: Int -> Config -> Config setMaxLifetime t config = config {confMaxLifetime = t} -- | Modify a pool configuration, setting the management thread's iteration interval, in microseconds. (Default 1s). @@ -103,9 +105,8 @@ data Conn = Conn } isAlive :: Config -> Word64 -> Conn -> Bool -isAlive poolConfig now conn = case confMaxLifetime poolConfig of - Nothing -> True - Just lifetimeUSec -> now <= connCreationTimeNSec conn + 1000 * fromIntegral lifetimeUSec +isAlive poolConfig now conn = + now <= connCreationTimeNSec conn + 1000 * fromIntegral (confMaxLifetime poolConfig) -- | Pool of connections to DB. data Pool = Pool @@ -206,12 +207,9 @@ manage pool@Pool {..} = forever $ do -- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = do - timeout <- case confAcquisitionTimeout poolConfig of - Just delta -> do - delay <- registerDelay delta - return $ readTVar delay - Nothing -> - return $ return False + timeout <- do + delay <- registerDelay $ confAcquisitionTimeout poolConfig + return $ readTVar delay join . atomically $ do reuseVar <- readTVar poolReuse asum @@ -240,15 +238,13 @@ use Pool {..} sess = do return $ Left $ ConnectionUsageError connErr Right conn -> onLiveConn reuseVar (Conn conn now) - onConn reuseVar conn = case confMaxLifetime poolConfig of - Nothing -> onLiveConn reuseVar conn - Just _ -> do - now <- getMonotonicTimeNSec - if isAlive poolConfig now conn - then onLiveConn reuseVar conn - else do - Connection.release (connConnection conn) - onNewConn reuseVar + onConn reuseVar conn = do + now <- getMonotonicTimeNSec + if isAlive poolConfig now conn + then onLiveConn reuseVar conn + else do + Connection.release (connConnection conn) + onNewConn reuseVar onLiveConn reuseVar conn = do sessRes <- diff --git a/test/Main.hs b/test/Main.hs index 17bd44c7bc..72a76293f1 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -73,7 +73,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withPoolConf (setSize 1 . setAcquisitionTimeout (Just 1000) $ config) $ \pool -> do + withPoolConf (setSize 1 . setAcquisitionTimeout 1000 $ config) $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -92,7 +92,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withPoolConf (setSize 1 . setMaxLifetime (Just 500000) $ config) $ \pool -> do + withPoolConf (setSize 1 . setMaxLifetime 500000 $ config) $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -109,7 +109,7 @@ main = do withPoolConf config $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings withPoolConf - (setManageInterval 10000 . setMaxLifetime (Just 500000) . setConnectionSettings taggedConnectionSettings $ config) + (setManageInterval 10000 . setMaxLifetime 500000 . setConnectionSettings taggedConnectionSettings $ config) ( \limitedPool -> do res <- use limitedPool $ selectOneSession res `shouldBe` Right 1 From a84ede0d21570705f8e2a6614f55579b0fb6b0ff Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 20 Feb 2023 15:19:23 +0100 Subject: [PATCH 0825/1204] instead of withPool, kill the manager thread via a weak ref this is verbatim how resource-pool does it, I'm not *that* familiar with the subtleties of weak refs tbh the need to distinguish between pool + pool with manager ref is a bit painful --- CHANGELOG.md | 8 ++-- hasql-pool.cabal | 2 +- library/Hasql/Pool.hs | 97 ++++++++++++++++++++++++++----------------- test/Main.hs | 1 + 4 files changed, 63 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d81e014902..92143ec522 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,8 @@ -# 0.9 +# 0.8.1 -Connections now have a maximal lifetime, defaulting to 30m and configurable via a new extensible configuration interface. The pool is now actively managed, and is created using a combinator that takes care to free resources after use. The acquisition timeout is now also non-optional, defaulting to 10s. +Connections now have a maximal lifetime, defaulting to 30m and configurable via a new extensible configuration interface. The acquisition timeout is now also non-optional, defaulting to 10s. -Breaking changes in API: - -- `acquire` and `acquireDynamically` are replaced with `withPool` and `withPoolConf` +Adds `Config`, various setters and `acquireConf`. # 0.8.0.7 diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 26dc07ebd2..997f52a12c 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,7 +1,7 @@ cabal-version: 3.0 name: hasql-pool -version: 0.9 +version: 0.8.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 4744111748..1a3d0b97df 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -1,8 +1,9 @@ module Hasql.Pool ( -- * Pool Pool, - withPool, - withPoolConf, + acquire, + acquireConf, + acquireDynamically, use, release, @@ -109,7 +110,7 @@ isAlive poolConfig now conn = now <= connCreationTimeNSec conn + 1000 * fromIntegral (confMaxLifetime poolConfig) -- | Pool of connections to DB. -data Pool = Pool +data RawPool = RawPool { -- | Configuration poolConfig :: Config, -- | Avail connections. @@ -123,47 +124,65 @@ data Pool = Pool poolReuse :: TVar (TVar Bool) } --- | Create a connection-pool, and run the given action with it. +data Pool = Pool + { pool :: RawPool, + reaperRef :: IORef () + } + +-- | Create a connection-pool. +-- +-- No connections actually get established by this function. It is delegated +-- to 'use'. +acquireConf :: Config -> IO Pool +acquireConf config = do + rawPool <- + RawPool config + <$> newTQueueIO + <*> newTVarIO (confSize config) + <*> (newTVarIO =<< newTVarIO True) + ref <- newIORef () + manager <- forkIOWithUnmask $ \unmask -> unmask $ manage rawPool + void . mkWeakIORef ref $ do + -- When the pool goes out of scope, stop the manager. + killThread manager + return $ Pool rawPool ref + +-- | Create a connection-pool, with default settings. -- --- This uses default settings beyond the pool size and connection string. --- Use 'withPoolConf' to modify the defaults. -withPool :: +-- No connections actually get established by this function. It is delegated +-- to 'use'. +acquire :: -- | Pool size. Int -> + -- | Connection acquisition timeout in microseconds. + Maybe Int -> -- | Connection settings. Connection.Settings -> - -- | Action. - (Pool -> IO a) -> - IO a -withPool poolSize connectionSettings = withPoolConf conf - where - conf = setSize poolSize . setFetchConnectionSettings (pure connectionSettings) $ defaultConfig + IO Pool +acquire poolSize acqTimeout connectionSettings = + acquireDynamically poolSize acqTimeout (pure connectionSettings) --- | Create a connection-pool, and run the given action with it. +-- | Create a connection-pool. +-- +-- In difference to 'acquire' new connection settings get fetched each +-- time a connection is created. This may be useful for some security models. -- -- No connections actually get established by this function. It is delegated -- to 'use'. --- --- Resources associated with the pool are cleaned up afterwards, but --- connections that have not been returned to the pool will survive. -withPoolConf :: - -- | Pool configuration. - Config -> - -- | Action. - (Pool -> IO a) -> - IO a -withPoolConf config inner = - bracket - (acquire config) - release - (\pool -> withAsync (manage pool) (const $ inner pool)) - -acquire :: Config -> IO Pool -acquire config = - Pool config - <$> newTQueueIO - <*> newTVarIO (confSize config) - <*> (newTVarIO =<< newTVarIO True) +acquireDynamically :: + -- | Pool size. + Int -> + -- | Connection acquisition timeout in microseconds. + Maybe Int -> + -- | Action fetching connection settings. + IO Connection.Settings -> + IO Pool +acquireDynamically poolSize acqTimeout fetchConnectionSettings = + acquireConf + . setSize poolSize + . setFetchConnectionSettings fetchConnectionSettings + . maybe id setAcquisitionTimeout acqTimeout + $ defaultConfig -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -173,7 +192,7 @@ acquire config = -- So you can use this function to reset the connections in the pool. -- Naturally, you can also use it to release the resources. release :: Pool -> IO () -release Pool {..} = +release (Pool (RawPool {..}) _) = join . atomically $ do prevReuse <- readTVar poolReuse writeTVar prevReuse False @@ -186,8 +205,8 @@ release Pool {..} = -- | Active pool management thread. (For now, this closes pooled connections -- that are older than maxLifetime.) -manage :: Pool -> IO () -manage pool@Pool {..} = forever $ do +manage :: RawPool -> IO () +manage RawPool {..} = forever $ do threadDelay (confManageInterval poolConfig) now <- getMonotonicTimeNSec join . atomically $ do @@ -206,7 +225,7 @@ manage pool@Pool {..} = forever $ do -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use Pool {..} sess = do +use (Pool (RawPool {..}) _) sess = do timeout <- do delay <- registerDelay $ confAcquisitionTimeout poolConfig return $ readTVar delay diff --git a/test/Main.hs b/test/Main.hs index 72a76293f1..9ddf141435 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -18,6 +18,7 @@ import Prelude main = do connectionSettings <- getConnectionSettings let config = setSize 3 . setConnectionSettings connectionSettings $ defaultConfig + withPoolConf conf = bracket (acquireConf conf) release hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withPoolConf config $ \pool -> do From 0eda8340e9cd3f84036a6f93de1664bfb6c8d48d Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Mon, 20 Feb 2023 15:41:19 +0100 Subject: [PATCH 0826/1204] instead of RawPool, put the ref in Pool and pass the fields to manage --- library/Hasql/Pool.hs | 47 ++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 1a3d0b97df..1ab31a7e1f 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -110,7 +110,7 @@ isAlive poolConfig now conn = now <= connCreationTimeNSec conn + 1000 * fromIntegral (confMaxLifetime poolConfig) -- | Pool of connections to DB. -data RawPool = RawPool +data Pool = Pool { -- | Configuration poolConfig :: Config, -- | Avail connections. @@ -121,12 +121,9 @@ data RawPool = RawPool -- connections. poolCapacity :: TVar Int, -- | Whether to return a connection to the pool. - poolReuse :: TVar (TVar Bool) - } - -data Pool = Pool - { pool :: RawPool, - reaperRef :: IORef () + poolReuse :: TVar (TVar Bool), + -- | To stop the manager thread via garbage collection. + poolReaperRef :: IORef () } -- | Create a connection-pool. @@ -135,17 +132,17 @@ data Pool = Pool -- to 'use'. acquireConf :: Config -> IO Pool acquireConf config = do - rawPool <- - RawPool config - <$> newTQueueIO - <*> newTVarIO (confSize config) - <*> (newTVarIO =<< newTVarIO True) - ref <- newIORef () - manager <- forkIOWithUnmask $ \unmask -> unmask $ manage rawPool - void . mkWeakIORef ref $ do + connectionQueue <- newTQueueIO + capacity <- newTVarIO (confSize config) + reuse <- newTVarIO =<< newTVarIO True + reaperRef <- newIORef () + + manager <- forkIOWithUnmask $ \unmask -> unmask $ manage config connectionQueue capacity + void . mkWeakIORef reaperRef $ do -- When the pool goes out of scope, stop the manager. killThread manager - return $ Pool rawPool ref + + return $ Pool config connectionQueue capacity reuse reaperRef -- | Create a connection-pool, with default settings. -- @@ -192,7 +189,7 @@ acquireDynamically poolSize acqTimeout fetchConnectionSettings = -- So you can use this function to reset the connections in the pool. -- Naturally, you can also use it to release the resources. release :: Pool -> IO () -release (Pool (RawPool {..}) _) = +release Pool {..} = join . atomically $ do prevReuse <- readTVar poolReuse writeTVar prevReuse False @@ -205,17 +202,17 @@ release (Pool (RawPool {..}) _) = -- | Active pool management thread. (For now, this closes pooled connections -- that are older than maxLifetime.) -manage :: RawPool -> IO () -manage RawPool {..} = forever $ do - threadDelay (confManageInterval poolConfig) +manage :: Config -> TQueue Conn -> TVar Int -> IO () +manage config connectionQueue capacity = forever $ do + threadDelay (confManageInterval config) now <- getMonotonicTimeNSec join . atomically $ do - conns <- flushTQueue poolConnectionQueue - let (keep, close) = partition (isAlive poolConfig now) conns - traverse_ (writeTQueue poolConnectionQueue) keep + conns <- flushTQueue connectionQueue + let (keep, close) = partition (isAlive config now) conns + traverse_ (writeTQueue connectionQueue) keep return $ forM_ close $ \conn -> do Connection.release (connConnection conn) - atomically $ modifyTVar' poolCapacity succ + atomically $ modifyTVar' capacity succ -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -225,7 +222,7 @@ manage RawPool {..} = forever $ do -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. use :: Pool -> Session.Session a -> IO (Either UsageError a) -use (Pool (RawPool {..}) _) sess = do +use Pool {..} sess = do timeout <- do delay <- registerDelay $ confAcquisitionTimeout poolConfig return $ readTVar delay From 33b6bce10b8eefc5d5cbd67f06f5effcd29aa8f6 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Fri, 24 Feb 2023 21:16:35 +0100 Subject: [PATCH 0827/1204] Revert ghcup github workaround (no longer necessary) This reverts commit 7724be104a1251aa3f880509526502702b94de0b. --- .github/workflows/haskell.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index e6ae554b16..4b24cb36b2 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -32,9 +32,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Workaround runner image issue - # https://github.com/actions/runner-images/issues/7061 - run: sudo chown -R $USER /usr/local/.ghcup - name: ghcup run: | ghcup install ghc ${{ matrix.ghc }} From ccfad6ceec1e902fdb008493796e31e7ef7a34c3 Mon Sep 17 00:00:00 2001 From: SEKUN Date: Sun, 26 Feb 2023 22:47:21 +0800 Subject: [PATCH 0828/1204] feat: Add Bool instance --- library/Hasql/Implicits/Encoders.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index dc95033f7e..d0744bbea5 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -3,6 +3,7 @@ module Hasql.Implicits.Encoders where import Hasql.Implicits.Prelude import Hasql.Encoders +import qualified Hasql.Encoders as Encoders (bool) import qualified Data.Aeson as Aeson @@ -85,5 +86,6 @@ INSTANCES(TimeOfDay, time) INSTANCES(LocalTime, timestamp) INSTANCES((TimeOfDay, TimeZone), timetz) INSTANCES((NetAddr IP), inet) +INSTANCES(Bool, Encoders.bool) #undef INSTANCES From 15ab2c0ab4c7c97b873f08ff29094c52b7fc9f45 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 Feb 2023 09:52:04 +0300 Subject: [PATCH 0829/1204] Polish --- library/Hasql/Implicits/Encoders.hs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index d0744bbea5..215fb0bd28 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -1,9 +1,8 @@ {-# LANGUAGE CPP #-} module Hasql.Implicits.Encoders where -import Hasql.Implicits.Prelude +import Hasql.Implicits.Prelude hiding (bool) import Hasql.Encoders -import qualified Hasql.Encoders as Encoders (bool) import qualified Data.Aeson as Aeson @@ -86,6 +85,6 @@ INSTANCES(TimeOfDay, time) INSTANCES(LocalTime, timestamp) INSTANCES((TimeOfDay, TimeZone), timetz) INSTANCES((NetAddr IP), inet) -INSTANCES(Bool, Encoders.bool) +INSTANCES(Bool, bool) #undef INSTANCES From 8515e2283b1216e09e4d449b83b802b2880efca8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 27 Feb 2023 09:52:17 +0300 Subject: [PATCH 0830/1204] Bump --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 7a31d870f3..9cad35bf54 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.0.5 +version: 0.1.1 synopsis: Implicit definitions for Hasql, such as default codecs for standard types homepage: https://github.com/nikita-volkov/hasql-implicits bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues From 37e25827801fcb1637a5f1d6a071419c4332a934 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Apr 2023 12:24:18 +0300 Subject: [PATCH 0831/1204] Move to auto-deploy CI, ditch Windows --- .github/workflows/cd.yaml | 35 +++++++++++++ .github/workflows/ci.yaml | 88 +++++++++++++++++++++++++++++++++ .github/workflows/haskell.yml | 92 ----------------------------------- 3 files changed, 123 insertions(+), 92 deletions(-) create mode 100644 .github/workflows/cd.yaml create mode 100644 .github/workflows/ci.yaml delete mode 100644 .github/workflows/haskell.yml diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 0000000000..aa998c9ade --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,35 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: cd + cancel-in-progress: false + +jobs: + + ci: + uses: ./.github/workflows/ci.yaml + secrets: inherit + + cd: + needs: + - ci + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Release + uses: nikita-volkov/release-haskell-package.github-action@v1.0.0 + with: + hackage-token: ${{ secrets.HACKAGE_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} + version-bump-place: ${{ fromJSON('{"supermajor":0,"major":1,"minor":2,"patch":3}')[github.ref_name] }} + main-branch: master + prefix-tag-with-v: false diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000000..28523f4507 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,88 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + workflow_call: + +jobs: + + format: + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: nikita-volkov/cabal-fmt.github-action@v1.0.0 + - uses: nikita-volkov/ormolu.github-action@v1.0.0 + - name: Commit the changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: Format + + build-and-test: + + needs: + - format + + strategy: + fail-fast: false + matrix: + include: + - ghc: '8.10' + - ghc: '9.6' + ghc-options: -Werror -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints -Wunused-packages -Wno-name-shadowing -Wno-unused-matches -Wno-unused-do-bind -Wno-type-defaults + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + steps: + + - uses: actions/checkout@v3 + + - name: Setup Haskell + uses: haskell/actions/setup@v2 + with: + ghc-version: ${{ matrix.ghc }} + cabal-version: 3.8 + + - name: Generate cabal.project + run: | + echo "packages: ." >> cabal.project + echo "constraints:" >> cabal.project + cat cabal.project + + - name: Generate cabal.project.freeze + run: cabal freeze --enable-tests --enable-benchmarks + + - uses: actions/cache@v3 + with: + path: | + ~/.cabal/store + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.ghc }}- + + - name: Install deps and compile + run: cabal build --enable-tests -j +RTS -A128m -n2m -N -RTS --ghc-options="${{ matrix.ghc-options }}" + + - name: Test + run: | + export POSTGRES_PASSWORD=postgres + cabal test --test-show-details always + + - name: Run Haddock + run: cabal haddock diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml deleted file mode 100644 index 4b24cb36b2..0000000000 --- a/.github/workflows/haskell.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: Haskell CI - -on: - push: - pull_request: - branches: [ master ] - -permissions: - contents: read - -jobs: - test-on-linux: - strategy: - matrix: - ghc: ['8.10.7', '9.2.4'] - fail-fast: false - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_PASSWORD: postgres - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - - steps: - - uses: actions/checkout@v3 - - name: ghcup - run: | - ghcup install ghc ${{ matrix.ghc }} - ghcup set ghc ${{ matrix.ghc }} - ghcup install cabal latest - ghcup set cabal latest - - - name: Cache - uses: actions/cache@v3 - with: - path: ~/.cabal - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.ghc }}- - - - name: Install dependencies - run: | - cabal update - cabal build --only-dependencies --enable-tests --enable-benchmarks - - name: Build - run: cabal build --enable-tests --enable-benchmarks all - - name: Run tests - run: | - export POSTGRES_PASSWORD=postgres - cabal test all - - test-on-windows: - strategy: - matrix: - ghc: ['8.10.7', '9.2.4'] - fail-fast: false - - runs-on: windows-latest - - steps: - - uses: actions/checkout@v3 - - run: Add-Content $env:GITHUB_PATH $env:PGBIN - - name: ghcup - run: | - ghcup install ghc ${{ matrix.ghc }} - ghcup set ghc ${{ matrix.ghc }} - ghcup install cabal latest - ghcup set cabal latest - - - name: Cache - uses: actions/cache@v3 - with: - path: ~/.cabal - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.ghc }}- - - - name: Install dependencies - run: | - cabal update - cabal build --only-dependencies --enable-tests --enable-benchmarks - - name: Build - run: cabal build --enable-tests --enable-benchmarks all From 1b6d15e07c507383e70ad98608745fbbef7bc9cb Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 2 Apr 2023 09:25:06 +0000 Subject: [PATCH 0832/1204] Format --- hasql-pool.cabal | 111 +++++++++++++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 37 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c75309e013..9a111b730d 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,50 +1,87 @@ -cabal-version: 3.0 - -name: hasql-pool -version: 0.8.0.7 - -category: Hasql, Database, PostgreSQL -synopsis: Pool of connections for Hasql -homepage: https://github.com/nikita-volkov/hasql-pool -bug-reports: https://github.com/nikita-volkov/hasql-pool/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE +cabal-version: 3.0 +name: hasql-pool +version: 0.8.0.7 +category: Hasql, Database, PostgreSQL +synopsis: Pool of connections for Hasql +homepage: https://github.com/nikita-volkov/hasql-pool +bug-reports: https://github.com/nikita-volkov/hasql-pool/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-pool.git common base-settings - default-extensions: BangPatterns, BlockArguments, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DerivingVia, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, InstanceSigs, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, StrictData, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + BangPatterns + BlockArguments + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + DerivingVia + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + InstanceSigs + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + StrictData + TemplateHaskell + TupleSections + TypeApplications + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 library - import: base-settings - hs-source-dirs: library - exposed-modules: - Hasql.Pool - other-modules: - Hasql.Pool.Prelude + import: base-settings + hs-source-dirs: library + exposed-modules: Hasql.Pool + other-modules: Hasql.Pool.Prelude build-depends: - base >=4.11 && <5, - hasql >=1.6.0.1 && <1.7, - stm >=2.5 && <3, - transformers >=0.5 && <0.7, + , base >=4.11 && <5 + , hasql >=1.6.0.1 && <1.7 + , stm >=2.5 && <3 + , transformers >=0.5 && <0.7 test-suite test - import: base-settings - type: exitcode-stdio-1.0 + import: base-settings + type: exitcode-stdio-1.0 hs-source-dirs: test - main-is: Main.hs - ghc-options: -threaded + main-is: Main.hs + ghc-options: -threaded build-depends: - async >=2.2 && <3, - hasql, - hasql-pool, - hspec >=2.6 && <3, - rerebase >=1.15 && <2, - stm >=2.5 && <3, + , async >=2.2 && <3 + , hasql + , hasql-pool + , hspec >=2.6 && <3 + , rerebase >=1.15 && <2 + , stm >=2.5 && <3 From 0531abfafdcff330d91df441a8f1ff5b8835aa5b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Apr 2023 12:34:52 +0300 Subject: [PATCH 0833/1204] Downgrade GHC due to cryptohash-sha1 issues --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 28523f4507..daceabbc8c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -31,7 +31,7 @@ jobs: matrix: include: - ghc: '8.10' - - ghc: '9.6' + - ghc: '9.4' ghc-options: -Werror -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints -Wunused-packages -Wno-name-shadowing -Wno-unused-matches -Wno-unused-do-bind -Wno-type-defaults runs-on: ubuntu-latest From ff69cacccf48bc254569b9dbfba568d9cc1ee4a6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 2 Apr 2023 12:48:37 +0300 Subject: [PATCH 0834/1204] Lint --- hasql-pool.cabal | 1 - library/Hasql/Pool.hs | 1 - library/Hasql/Pool/Prelude.hs | 2 -- test/Main.hs | 1 + 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 9a111b730d..349f541b00 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -84,4 +84,3 @@ test-suite test , hasql-pool , hspec >=2.6 && <3 , rerebase >=1.15 && <2 - , stm >=2.5 && <3 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 72e5641bdb..fdb83651d1 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -14,7 +14,6 @@ where import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection import Hasql.Pool.Prelude -import Hasql.Session (Session) import qualified Hasql.Session as Session -- | Pool of connections to DB. diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 07d0b8ace5..36864d505d 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -71,8 +71,6 @@ import System.IO.Unsafe as Exports import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports -import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) import Text.Printf as Exports (hPrintf, printf) import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports diff --git a/test/Main.hs b/test/Main.hs index 823454ec88..10fd70c0de 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -12,6 +12,7 @@ import qualified System.Environment import Test.Hspec import Prelude +main :: IO () main = do connectionSettings <- getConnectionSettings hspec . describe "" $ do From fe398d1c45416fddaee03e3df01d4cb41c6d4d79 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 00:15:28 +0300 Subject: [PATCH 0835/1204] Apply cabal-fmt --- hasql-pool.cabal | 115 +++++++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 39 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 997f52a12c..79073766a6 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,52 +1,89 @@ -cabal-version: 3.0 - -name: hasql-pool -version: 0.8.1 - -category: Hasql, Database, PostgreSQL -synopsis: Pool of connections for Hasql -homepage: https://github.com/nikita-volkov/hasql-pool -bug-reports: https://github.com/nikita-volkov/hasql-pool/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE +cabal-version: 3.0 +name: hasql-pool +version: 0.8.1 +category: Hasql, Database, PostgreSQL +synopsis: Pool of connections for Hasql +homepage: https://github.com/nikita-volkov/hasql-pool +bug-reports: https://github.com/nikita-volkov/hasql-pool/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-pool.git common base-settings - default-extensions: BangPatterns, BlockArguments, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DerivingVia, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, InstanceSigs, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, StrictData, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + BangPatterns + BlockArguments + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + DerivingVia + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + InstanceSigs + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + StrictData + TemplateHaskell + TupleSections + TypeApplications + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 library - import: base-settings - hs-source-dirs: library - exposed-modules: - Hasql.Pool - other-modules: - Hasql.Pool.Prelude + import: base-settings + hs-source-dirs: library + exposed-modules: Hasql.Pool + other-modules: Hasql.Pool.Prelude build-depends: - base >=4.11 && <5, - hasql >=1.6.0.1 && <1.7, - async >=2.2 && <3, - stm >=2.5 && <3, - transformers >=0.5 && <0.7, + , async >=2.2 && <3 + , base >=4.11 && <5 + , hasql >=1.6.0.1 && <1.7 + , stm >=2.5 && <3 + , transformers >=0.5 && <0.7 test-suite test - import: base-settings - type: exitcode-stdio-1.0 + import: base-settings + type: exitcode-stdio-1.0 hs-source-dirs: test - main-is: Main.hs - ghc-options: -threaded + main-is: Main.hs + ghc-options: -threaded build-depends: - async >=2.2 && <3, - hasql, - hasql-pool, - hspec >=2.6 && <3, - random >= 1.2 && <2, - rerebase >=1.15 && <2, - stm >=2.5 && <3, + , async >=2.2 && <3 + , hasql + , hasql-pool + , hspec >=2.6 && <3 + , random >=1.2 && <2 + , rerebase >=1.15 && <2 + , stm >=2.5 && <3 From 3323d356f836f055f7f0ee65e096dd40f3998741 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 00:20:14 +0300 Subject: [PATCH 0836/1204] Lint and reduce the deps --- hasql-pool.cabal | 2 -- library/Hasql/Pool.hs | 1 - library/Hasql/Pool/Prelude.hs | 1 - test/Main.hs | 1 - 4 files changed, 5 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 79073766a6..0c179c53d7 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -67,7 +67,6 @@ library exposed-modules: Hasql.Pool other-modules: Hasql.Pool.Prelude build-depends: - , async >=2.2 && <3 , base >=4.11 && <5 , hasql >=1.6.0.1 && <1.7 , stm >=2.5 && <3 @@ -86,4 +85,3 @@ test-suite test , hspec >=2.6 && <3 , random >=1.2 && <2 , rerebase >=1.15 && <2 - , stm >=2.5 && <3 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 5902caad01..7f9d6d3a27 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -21,7 +21,6 @@ module Hasql.Pool ) where -import qualified Control.Concurrent.Async as Async import GHC.Clock (getMonotonicTimeNSec) import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index be3fc6c767..36864d505d 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -7,7 +7,6 @@ import Control.Applicative as Exports hiding (WrappedArrow (..)) import Control.Arrow as Exports hiding (first, second) import Control.Category as Exports import Control.Concurrent as Exports -import Control.Concurrent.Async as Exports import Control.Concurrent.STM as Exports hiding (orElse) import Control.Exception as Exports import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) diff --git a/test/Main.hs b/test/Main.hs index 276af5deb7..c744843b58 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -10,7 +10,6 @@ import Hasql.Pool import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import qualified System.Environment -import qualified System.Random as Random import qualified System.Random.Stateful as Random import Test.Hspec import Prelude From c3b1d3b7c771312e4d49f1cfb7c4bb1b8ccb30a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 00:21:30 +0300 Subject: [PATCH 0837/1204] Restore the version --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 0c179c53d7..263d863849 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.1 +version: 0.8.0.7 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 04178bdddd4b32d693c496ea4f2b8a23c2cb09de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 00:28:03 +0300 Subject: [PATCH 0838/1204] Update changelog --- CHANGELOG.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92143ec522..53b128d6d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,7 @@ -# 0.8.1 +# 0.9 -Connections now have a maximal lifetime, defaulting to 30m and configurable via a new extensible configuration interface. The acquisition timeout is now also non-optional, defaulting to 10s. - -Adds `Config`, various setters and `acquireConf`. +- Maximal lifetime added for connections. Allows to refresh the connections in time cleaning up the resources. +- The acquisition timeout is now non-optional. # 0.8.0.7 From 2f9c0d5379b640f1728387cf7f4c7d84af803eae Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 00:38:27 +0300 Subject: [PATCH 0839/1204] Remove transformers --- hasql-pool.cabal | 1 - library/Hasql/Pool/Prelude.hs | 7 ------- 2 files changed, 8 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 349f541b00..9c27d9f7b3 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -70,7 +70,6 @@ library , base >=4.11 && <5 , hasql >=1.6.0.1 && <1.7 , stm >=2.5 && <3 - , transformers >=0.5 && <0.7 test-suite test import: base-settings diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 36864d505d..8e8fb0ca95 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -14,13 +14,6 @@ import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) -import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), except, mapExcept, mapExceptT, runExcept, runExceptT, withExcept, withExceptT) -import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) -import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) -import Control.Monad.Trans.Writer.Strict as Exports (Writer, WriterT (..), execWriter, execWriterT, mapWriter, mapWriterT, runWriter) import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports From e400f53479997f644a3e7418f10b89ca0968277c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 01:19:57 +0300 Subject: [PATCH 0840/1204] Remove Config --- hasql-pool.cabal | 1 + library/Hasql/Pool.hs | 185 ++++++++++++------------------------------ test/Main.hs | 55 ++++++------- 3 files changed, 79 insertions(+), 162 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 1db91a11d4..c84ff02a6c 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -43,6 +43,7 @@ common base-settings MagicHash MultiParamTypeClasses MultiWayIf + NumericUnderscores OverloadedStrings ParallelListComp PatternGuards diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 7f9d6d3a27..2ebbd8cc26 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -2,20 +2,10 @@ module Hasql.Pool ( -- * Pool Pool, acquire, - acquireConf, acquireDynamically, use, release, - -- * Configuration - Config, - defaultConfig, - setConnectionSettings, - setSize, - setMaxLifetime, - setAcquisitionTimeout, - setManageInterval, - -- * Errors UsageError (..), ) @@ -27,90 +17,26 @@ import qualified Hasql.Connection as Connection import Hasql.Pool.Prelude import qualified Hasql.Session as Session --- | Pool configuration. --- --- This is created by modifying 'defaultConfig' using the various setters, --- to be passed to 'withPoolConf'. -data Config = Config - { -- | Pool size (default 10). - confSize :: Int, - -- | Connection settings (default ""). - confFetchConnectionSettings :: IO Connection.Settings, - -- | Maximal connection lifetime, in microseconds (default 30m). - confMaxLifetime :: Int, - -- | Acquisition timeout, in microseconds (default 10s). - confAcquisitionTimeout :: Int, - -- | Interval at which the active management thread triggers, in microseconds (default 1s). - confManageInterval :: Int - } - --- | Default pool configuration. -defaultConfig :: Config -defaultConfig = - Config - { confSize = 10, - confFetchConnectionSettings = pure "", - confAcquisitionTimeout = 10 * oneSecond, - confMaxLifetime = 30 * oneMinute, - confManageInterval = oneSecond - } - where - oneSecond = 1000000 - oneMinute = 60 * oneSecond - --- | Modify a pool configuration, setting the pool size (default 10). --- --- The pool guarantees that the number of concurrent connections never --- exceeds this value. -setSize :: Int -> Config -> Config -setSize c config = config {confSize = c} - --- | Modify a pool configuration, setting a constant connection string. (default ""). -setConnectionSettings :: Connection.Settings -> Config -> Config -setConnectionSettings s config = config {confFetchConnectionSettings = pure s} - --- | Modify a pool configuration, setting a dynamic connection string. --- When creating a connection, the action will be run to determine the --- current connection string. -setFetchConnectionSettings :: IO Connection.Settings -> Config -> Config -setFetchConnectionSettings s config = config {confFetchConnectionSettings = s} - --- | Modify a pool configuration, setting the acquisition timeout in microseconds. (default 'Nothing', i.e., disabled) --- --- Acquiring a connection via 'use' will fail with 'AcquisitionTimeoutUsageError' --- if no connection becomes available within the timeout. -setAcquisitionTimeout :: Int -> Config -> Config -setAcquisitionTimeout t config = config {confAcquisitionTimeout = t} - --- | Modify a pool configuration, setting the maximum connection lifetime, in microseconds. (default 'Nothing', i.e., disabled) --- --- Connections will be closed once they are older than this value --- (and have been returned to the pool). -setMaxLifetime :: Int -> Config -> Config -setMaxLifetime t config = config {confMaxLifetime = t} - --- | Modify a pool configuration, setting the management thread's iteration interval, in microseconds. (Default 1s). --- --- The pool's management thread sleeps for this interval between runs. This --- setting affects the precision to which e.g. connection lifetime is limited --- via 'setMaxLifetime'. -setManageInterval :: Int -> Config -> Config -setManageInterval t config = config {confManageInterval = t} - -- | A connection tagged with metadata. data Conn = Conn { connConnection :: Connection, connCreationTimeNSec :: Word64 } -isAlive :: Config -> Word64 -> Conn -> Bool -isAlive poolConfig now conn = - now <= connCreationTimeNSec conn + 1000 * fromIntegral (confMaxLifetime poolConfig) +isAlive :: Word64 -> Word64 -> Conn -> Bool +isAlive maxLifetime now conn = + now <= connCreationTimeNSec conn + maxLifetime -- | Pool of connections to DB. data Pool = Pool - { -- | Configuration - poolConfig :: Config, + { -- | Pool size. + poolSize :: Int, + -- | Connection settings. + poolFetchConnectionSettings :: IO Connection.Settings, + -- | Acquisition timeout, in microseconds. + poolAcquisitionTimeout :: Int, + -- | Maximal connection lifetime, in nanoseconds. + poolMaxLifetime :: Word64, -- | Avail connections. poolConnectionQueue :: TQueue Conn, -- | Remaining capacity. @@ -119,29 +45,11 @@ data Pool = Pool -- connections. poolCapacity :: TVar Int, -- | Whether to return a connection to the pool. - poolReuse :: TVar (TVar Bool), + poolReuseVar :: TVar (TVar Bool), -- | To stop the manager thread via garbage collection. poolReaperRef :: IORef () } --- | Create a connection-pool. --- --- No connections actually get established by this function. It is delegated --- to 'use'. -acquireConf :: Config -> IO Pool -acquireConf config = do - connectionQueue <- newTQueueIO - capacity <- newTVarIO (confSize config) - reuse <- newTVarIO =<< newTVarIO True - reaperRef <- newIORef () - - manager <- forkIOWithUnmask $ \unmask -> unmask $ manage config connectionQueue capacity - void . mkWeakIORef reaperRef $ do - -- When the pool goes out of scope, stop the manager. - killThread manager - - return $ Pool config connectionQueue capacity reuse reaperRef - -- | Create a connection-pool, with default settings. -- -- No connections actually get established by this function. It is delegated @@ -150,12 +58,14 @@ acquire :: -- | Pool size. Int -> -- | Connection acquisition timeout in microseconds. - Maybe Int -> + Int -> + -- | Maximal connection lifetime in microseconds. + Int -> -- | Connection settings. Connection.Settings -> IO Pool -acquire poolSize acqTimeout connectionSettings = - acquireDynamically poolSize acqTimeout (pure connectionSettings) +acquire poolSize acqTimeout maxLifetime connectionSettings = + acquireDynamically poolSize acqTimeout maxLifetime (pure connectionSettings) -- | Create a connection-pool. -- @@ -168,16 +78,37 @@ acquireDynamically :: -- | Pool size. Int -> -- | Connection acquisition timeout in microseconds. - Maybe Int -> + Int -> + -- | Maximal connection lifetime in microseconds. + Int -> -- | Action fetching connection settings. IO Connection.Settings -> IO Pool -acquireDynamically poolSize acqTimeout fetchConnectionSettings = - acquireConf - . setSize poolSize - . setFetchConnectionSettings fetchConnectionSettings - . maybe id setAcquisitionTimeout acqTimeout - $ defaultConfig +acquireDynamically poolSize acqTimeout maxLifetime fetchConnectionSettings = do + connectionQueue <- newTQueueIO + capVar <- newTVarIO poolSize + reuseVar <- newTVarIO =<< newTVarIO True + reaperRef <- newIORef () + + managerTid <- forkIOWithUnmask $ \unmask -> unmask $ forever $ do + threadDelay 1000000 + now <- getMonotonicTimeNSec + join . atomically $ do + conns <- flushTQueue connectionQueue + let (keep, close) = partition (isAlive maxLifetimeNanos now) conns + traverse_ (writeTQueue connectionQueue) keep + return $ forM_ close $ \conn -> do + Connection.release (connConnection conn) + atomically $ modifyTVar' capVar succ + + void . mkWeakIORef reaperRef $ do + -- When the pool goes out of scope, stop the manager. + killThread managerTid + + return $ Pool poolSize fetchConnectionSettings acqTimeout maxLifetimeNanos connectionQueue capVar reuseVar reaperRef + where + maxLifetimeNanos = + 1000 * fromIntegral maxLifetime -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -189,29 +120,15 @@ acquireDynamically poolSize acqTimeout fetchConnectionSettings = release :: Pool -> IO () release Pool {..} = join . atomically $ do - prevReuse <- readTVar poolReuse + prevReuse <- readTVar poolReuseVar writeTVar prevReuse False newReuse <- newTVar True - writeTVar poolReuse newReuse + writeTVar poolReuseVar newReuse conns <- flushTQueue poolConnectionQueue return $ forM_ conns $ \conn -> do Connection.release (connConnection conn) atomically $ modifyTVar' poolCapacity succ --- | Active pool management thread. (For now, this closes pooled connections --- that are older than maxLifetime.) -manage :: Config -> TQueue Conn -> TVar Int -> IO () -manage config connectionQueue capacity = forever $ do - threadDelay (confManageInterval config) - now <- getMonotonicTimeNSec - join . atomically $ do - conns <- flushTQueue connectionQueue - let (keep, close) = partition (isAlive config now) conns - traverse_ (writeTQueue connectionQueue) keep - return $ forM_ close $ \conn -> do - Connection.release (connConnection conn) - atomically $ modifyTVar' capacity succ - -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. -- @@ -222,10 +139,10 @@ manage config connectionQueue capacity = forever $ do use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = do timeout <- do - delay <- registerDelay $ confAcquisitionTimeout poolConfig + delay <- registerDelay poolAcquisitionTimeout return $ readTVar delay join . atomically $ do - reuseVar <- readTVar poolReuse + reuseVar <- readTVar poolReuseVar asum [ readTQueue poolConnectionQueue <&> onConn reuseVar, do @@ -243,7 +160,7 @@ use Pool {..} sess = do ] where onNewConn reuseVar = do - settings <- confFetchConnectionSettings poolConfig + settings <- poolFetchConnectionSettings now <- getMonotonicTimeNSec connRes <- Connection.acquire settings case connRes of @@ -254,7 +171,7 @@ use Pool {..} sess = do onConn reuseVar conn = do now <- getMonotonicTimeNSec - if isAlive poolConfig now conn + if isAlive poolMaxLifetime now conn then onLiveConn reuseVar conn else do Connection.release (connConnection conn) diff --git a/test/Main.hs b/test/Main.hs index c744843b58..61a6811ddb 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -17,56 +17,58 @@ import Prelude main :: IO () main = do connectionSettings <- getConnectionSettings - let config = setSize 3 . setConnectionSettings connectionSettings $ defaultConfig - withPoolConf conf = bracket (acquireConf conf) release + let withPool poolSize acqTimeout maxLifetime connectionSettings = + bracket (acquire poolSize acqTimeout maxLifetime connectionSettings) release + withDefaultPool = + withPool 3 10_000_000 1_800_000_000 connectionSettings hspec . describe "" $ do - it "Releases a spot in the pool when there is a query error" $ withPoolConf config $ \pool -> do + it "Releases a spot in the pool when there is a query error" $ withDefaultPool $ \pool -> do use pool badQuerySession `shouldNotReturn` (Right ()) use pool selectOneSession `shouldReturn` (Right 1) - it "Simulation of connection error works" $ withPoolConf config $ \pool -> do + it "Simulation of connection error works" $ withDefaultPool $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False - it "Connection errors cause eviction of connection" $ withPoolConf config $ \pool -> do + it "Connection errors cause eviction of connection" $ withDefaultPool $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after normal use" $ withPoolConf config $ \pool -> do + it "Connection gets returned to the pool after normal use" $ withDefaultPool $ \pool -> do res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Connection gets returned to the pool after non-connection error" $ withPoolConf config $ \pool -> do + it "Connection gets returned to the pool after non-connection error" $ withDefaultPool $ \pool -> do res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "The pool remains usable after release" $ withPoolConf config $ \pool -> do + it "The pool remains usable after release" $ withDefaultPool $ \pool -> do res <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight - it "Getting and setting session variables works" $ withPoolConf config $ \pool -> do + it "Getting and setting session variables works" $ withDefaultPool $ \pool -> do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing res <- use pool $ do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withPoolConf (setSize 1 config) $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withPool 1 10_000_000 1_800_000_000 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withPoolConf (setSize 1 config) $ \pool -> do + it "Releasing the pool resets session variables" $ withPool 1 10_000_000 1_800_000_000 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -74,7 +76,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withPoolConf (setSize 1 . setAcquisitionTimeout 1000 $ config) $ \pool -> do + withPool 1 1_000 1_800_000_000 connectionSettings $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -82,7 +84,7 @@ main = do ( use pool $ liftIO $ do putMVar sleeping () - threadDelay 1000000 -- 1s + threadDelay 1_000_000 -- 1s ) ( do takeMVar sleeping @@ -93,33 +95,30 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withPoolConf (setSize 1 . setMaxLifetime 500000 $ config) $ \pool -> do + withPool 1 10_000_000 500_000 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - threadDelay 1000000 -- 1s + threadDelay 1_000_000 -- 1s res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPoolConf (setConnectionSettings taggedConnectionSettings config) $ \pool -> do + withPool 3 10_000_000 1_800_000_000 taggedConnectionSettings $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 it "Times out old connections" $ do - withPoolConf config $ \countPool -> do + withDefaultPool $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPoolConf - (setManageInterval 10000 . setMaxLifetime 500000 . setConnectionSettings taggedConnectionSettings $ config) - ( \limitedPool -> do - res <- use limitedPool $ selectOneSession - res `shouldBe` Right 1 - res2 <- use countPool $ countConnectionsSession appName - res2 `shouldBe` Right 1 - threadDelay 1000000 -- 1s - res3 <- use countPool $ countConnectionsSession appName - res3 `shouldBe` Right 0 - ) + withPool 3 10_000_000 500_000 taggedConnectionSettings $ \limitedPool -> do + res <- use limitedPool $ selectOneSession + res `shouldBe` Right 1 + res2 <- use countPool $ countConnectionsSession appName + res2 `shouldBe` Right 1 + threadDelay 1_000_000 -- 1s + res3 <- use countPool $ countConnectionsSession appName + res3 `shouldBe` Right 0 getConnectionSettings :: IO Connection.Settings getConnectionSettings = From ceccebfeba2908adcdf9d6927403246b3413e0a6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 01:21:12 +0300 Subject: [PATCH 0841/1204] Move Clock to Prelude --- library/Hasql/Pool.hs | 1 - library/Hasql/Pool/Prelude.hs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 2ebbd8cc26..ee3d91c776 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -11,7 +11,6 @@ module Hasql.Pool ) where -import GHC.Clock (getMonotonicTimeNSec) import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection import Hasql.Pool.Prelude diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 8e8fb0ca95..fd90584b37 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -51,6 +51,7 @@ import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports import Foreign.Storable as Exports +import GHC.Clock as Exports (getMonotonicTimeNSec) import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic) From 117581e331d8c780c364d2422a0dc61024a7f748 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 01:52:22 +0300 Subject: [PATCH 0842/1204] Move to DiffTime for timeouts --- hasql-pool.cabal | 1 + library/Hasql/Pool.hs | 14 ++++++++------ library/Hasql/Pool/Prelude.hs | 1 + test/Main.hs | 14 +++++++------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c84ff02a6c..986212f0e3 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -71,6 +71,7 @@ library , base >=4.11 && <5 , hasql >=1.6.0.1 && <1.7 , stm >=2.5 && <3 + , time >=1.9 && <2 test-suite test import: base-settings diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index ee3d91c776..0f85b7c656 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -57,9 +57,9 @@ acquire :: -- | Pool size. Int -> -- | Connection acquisition timeout in microseconds. - Int -> + DiffTime -> -- | Maximal connection lifetime in microseconds. - Int -> + DiffTime -> -- | Connection settings. Connection.Settings -> IO Pool @@ -77,9 +77,9 @@ acquireDynamically :: -- | Pool size. Int -> -- | Connection acquisition timeout in microseconds. - Int -> + DiffTime -> -- | Maximal connection lifetime in microseconds. - Int -> + DiffTime -> -- | Action fetching connection settings. IO Connection.Settings -> IO Pool @@ -104,10 +104,12 @@ acquireDynamically poolSize acqTimeout maxLifetime fetchConnectionSettings = do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool poolSize fetchConnectionSettings acqTimeout maxLifetimeNanos connectionQueue capVar reuseVar reaperRef + return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos connectionQueue capVar reuseVar reaperRef where + acqTimeoutMicros = + div (fromIntegral (diffTimeToPicoseconds acqTimeout)) 1_000_000 maxLifetimeNanos = - 1000 * fromIntegral maxLifetime + div (fromIntegral (diffTimeToPicoseconds maxLifetime)) 1_000 -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index fd90584b37..7530b8a7da 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -40,6 +40,7 @@ import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports import Data.String as Exports +import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports import Data.Unique as Exports diff --git a/test/Main.hs b/test/Main.hs index 61a6811ddb..fd29f0514c 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -20,7 +20,7 @@ main = do let withPool poolSize acqTimeout maxLifetime connectionSettings = bracket (acquire poolSize acqTimeout maxLifetime connectionSettings) release withDefaultPool = - withPool 3 10_000_000 1_800_000_000 connectionSettings + withPool 3 10 1_800 connectionSettings hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withDefaultPool $ \pool -> do @@ -63,12 +63,12 @@ main = do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withPool 1 10_000_000 1_800_000_000 connectionSettings $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withPool 1 10 1_800 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withPool 1 10_000_000 1_800_000_000 connectionSettings $ \pool -> do + it "Releasing the pool resets session variables" $ withPool 1 10 1_800 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -76,7 +76,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withPool 1 1_000 1_800_000_000 connectionSettings $ \pool -> do + withPool 1 0.001 1_800 connectionSettings $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -95,7 +95,7 @@ main = do diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s it "Passively times out old connections" $ -- 0.5s connection lifetime - withPool 1 10_000_000 500_000 connectionSettings $ \pool -> do + withPool 1 10 0.5 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -105,13 +105,13 @@ main = do res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPool 3 10_000_000 1_800_000_000 taggedConnectionSettings $ \pool -> do + withPool 3 10 1_800 taggedConnectionSettings $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 it "Times out old connections" $ do withDefaultPool $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPool 3 10_000_000 500_000 taggedConnectionSettings $ \limitedPool -> do + withPool 3 10 0.5 taggedConnectionSettings $ \limitedPool -> do res <- use limitedPool $ selectOneSession res `shouldBe` Right 1 res2 <- use countPool $ countConnectionsSession appName From bcf132f20457b40394f04e979cc9ff563ca22ead Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 01:56:56 +0300 Subject: [PATCH 0843/1204] Remove the microseconds suffix --- library/Hasql/Pool.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 0f85b7c656..84953644d2 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -56,9 +56,9 @@ data Pool = Pool acquire :: -- | Pool size. Int -> - -- | Connection acquisition timeout in microseconds. + -- | Connection acquisition timeout. DiffTime -> - -- | Maximal connection lifetime in microseconds. + -- | Maximal connection lifetime. DiffTime -> -- | Connection settings. Connection.Settings -> @@ -76,9 +76,9 @@ acquire poolSize acqTimeout maxLifetime connectionSettings = acquireDynamically :: -- | Pool size. Int -> - -- | Connection acquisition timeout in microseconds. + -- | Connection acquisition timeout. DiffTime -> - -- | Maximal connection lifetime in microseconds. + -- | Maximal connection lifetime. DiffTime -> -- | Action fetching connection settings. IO Connection.Settings -> From 39925c2f049fb2a84f4a0c0465325f1470f5130f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 4 Apr 2023 21:24:35 +0300 Subject: [PATCH 0844/1204] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53b128d6d3..45ef9b0f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Maximal lifetime added for connections. Allows to refresh the connections in time cleaning up the resources. - The acquisition timeout is now non-optional. +- Moved to `DiffTime` for timeouts. # 0.8.0.7 From ced1985f14092cd8575db8e0dfc4fa8f2b59d9cb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 5 Apr 2023 00:00:26 +0300 Subject: [PATCH 0845/1204] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45ef9b0f42..5edbe5f50e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # 0.9 - Maximal lifetime added for connections. Allows to refresh the connections in time cleaning up the resources. + +Breaking: + - The acquisition timeout is now non-optional. - Moved to `DiffTime` for timeouts. From 4e8821ee6ac28b4f6b18b7be340d6b2a591b80d7 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 4 Apr 2023 21:05:28 +0000 Subject: [PATCH 0846/1204] Set package version to 0.9 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 986212f0e3..7acf4e0c46 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.8.0.7 +version: 0.9 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From ccd46dcc9f2f486c933673c359b31478a8a132d0 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 4 Apr 2023 21:42:30 -0400 Subject: [PATCH 0847/1204] Relax constraint to allow hasql-0.9 (tests are green). --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 8d0f59e63a..dbc3074590 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 1.2.3.1 && < 2.2 - , hasql-pool >= 0.4 && < 0.9 + , hasql-pool >= 0.4 && < 0.10 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 From 1d3586ecedcb1fd6a12f3b73a9e20f607cbfcd83 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 4 Apr 2023 22:05:51 -0400 Subject: [PATCH 0848/1204] Bump patch version number --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index dbc3074590..47db004fa4 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.3 +version: 0.2.0.4 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From e50f6940170e718c2472be9d408e5be23ba3131b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 15 Apr 2023 12:21:28 +0300 Subject: [PATCH 0849/1204] Add a warning about error consuption (#35) --- library/Hasql/Pool.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 84953644d2..c608e29cd7 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -137,6 +137,9 @@ release Pool {..} = -- connection. In such case the connection does not get returned to the pool -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. +-- +-- __Warning:__ Due to the mechanism mentioned above you should avoid consuming +-- errors within sessions. use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = do timeout <- do From f2dc2f5dce1d3d68a78b2db28db436aa58a8e681 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 15 Apr 2023 09:32:36 +0000 Subject: [PATCH 0850/1204] Set package version to 0.9.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 7acf4e0c46..cdcafa3c08 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.9 +version: 0.9.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 5c3ecd016ffdc8cc495cef5c660d9e1b551bcfb5 Mon Sep 17 00:00:00 2001 From: Robert Vollmert Date: Fri, 12 May 2023 12:28:01 +0200 Subject: [PATCH 0851/1204] add connection idle timeout --- library/Hasql/Pool.hs | 34 ++++++++++++++++++++++------------ test/Main.hs | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index c608e29cd7..3dff0f21ad 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -19,12 +19,14 @@ import qualified Hasql.Session as Session -- | A connection tagged with metadata. data Conn = Conn { connConnection :: Connection, - connCreationTimeNSec :: Word64 + connCreationTimeNSec :: Word64, + connUseTimeNSec :: Word64 } -isAlive :: Word64 -> Word64 -> Conn -> Bool -isAlive maxLifetime now conn = - now <= connCreationTimeNSec conn + maxLifetime +isAlive :: Word64 -> Word64 -> Word64 -> Conn -> Bool +isAlive maxLifetime maxIdletime now Conn {..} = + now <= connCreationTimeNSec + maxLifetime + && now <= connUseTimeNSec + maxIdletime -- | Pool of connections to DB. data Pool = Pool @@ -36,6 +38,8 @@ data Pool = Pool poolAcquisitionTimeout :: Int, -- | Maximal connection lifetime, in nanoseconds. poolMaxLifetime :: Word64, + -- | Maximal connection idle time, in nanoseconds. + poolMaxIdletime :: Word64, -- | Avail connections. poolConnectionQueue :: TQueue Conn, -- | Remaining capacity. @@ -60,11 +64,13 @@ acquire :: DiffTime -> -- | Maximal connection lifetime. DiffTime -> + -- | Maximal connection idle time. + DiffTime -> -- | Connection settings. Connection.Settings -> IO Pool -acquire poolSize acqTimeout maxLifetime connectionSettings = - acquireDynamically poolSize acqTimeout maxLifetime (pure connectionSettings) +acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings = + acquireDynamically poolSize acqTimeout maxLifetime maxIdletime (pure connectionSettings) -- | Create a connection-pool. -- @@ -80,10 +86,12 @@ acquireDynamically :: DiffTime -> -- | Maximal connection lifetime. DiffTime -> + -- | Maximal connection idle time. + DiffTime -> -- | Action fetching connection settings. IO Connection.Settings -> IO Pool -acquireDynamically poolSize acqTimeout maxLifetime fetchConnectionSettings = do +acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSettings = do connectionQueue <- newTQueueIO capVar <- newTVarIO poolSize reuseVar <- newTVarIO =<< newTVarIO True @@ -94,7 +102,7 @@ acquireDynamically poolSize acqTimeout maxLifetime fetchConnectionSettings = do now <- getMonotonicTimeNSec join . atomically $ do conns <- flushTQueue connectionQueue - let (keep, close) = partition (isAlive maxLifetimeNanos now) conns + let (keep, close) = partition (isAlive maxLifetimeNanos maxIdletimeNanos now) conns traverse_ (writeTQueue connectionQueue) keep return $ forM_ close $ \conn -> do Connection.release (connConnection conn) @@ -104,12 +112,14 @@ acquireDynamically poolSize acqTimeout maxLifetime fetchConnectionSettings = do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos connectionQueue capVar reuseVar reaperRef + return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef where acqTimeoutMicros = div (fromIntegral (diffTimeToPicoseconds acqTimeout)) 1_000_000 maxLifetimeNanos = div (fromIntegral (diffTimeToPicoseconds maxLifetime)) 1_000 + maxIdletimeNanos = + div (fromIntegral (diffTimeToPicoseconds maxIdletime)) 1_000 -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be @@ -171,12 +181,12 @@ use Pool {..} sess = do Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onLiveConn reuseVar (Conn conn now) + Right conn -> onLiveConn reuseVar (Conn conn now now) onConn reuseVar conn = do now <- getMonotonicTimeNSec - if isAlive poolMaxLifetime now conn - then onLiveConn reuseVar conn + if isAlive poolMaxLifetime poolMaxIdletime now conn + then onLiveConn reuseVar conn {connUseTimeNSec = now} else do Connection.release (connConnection conn) onNewConn reuseVar diff --git a/test/Main.hs b/test/Main.hs index fd29f0514c..1da268e168 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -17,10 +17,10 @@ import Prelude main :: IO () main = do connectionSettings <- getConnectionSettings - let withPool poolSize acqTimeout maxLifetime connectionSettings = - bracket (acquire poolSize acqTimeout maxLifetime connectionSettings) release + let withPool poolSize acqTimeout maxLifetime maxIdletime connectionSettings = + bracket (acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings) release withDefaultPool = - withPool 3 10 1_800 connectionSettings + withPool 3 10 1_800 1_800 connectionSettings hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withDefaultPool $ \pool -> do @@ -63,12 +63,12 @@ main = do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withPool 1 10 1_800 connectionSettings $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withPool 1 10 1_800 1_800 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withPool 1 10 1_800 connectionSettings $ \pool -> do + it "Releasing the pool resets session variables" $ withPool 1 10 1_800 1_800 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -76,7 +76,7 @@ main = do res `shouldBe` Right Nothing it "Times out connection acquisition" $ -- 1ms timeout - withPool 1 0.001 1_800 connectionSettings $ \pool -> do + withPool 1 0.001 1_800 1_800 connectionSettings $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- @@ -93,9 +93,9 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s - it "Passively times out old connections" $ + it "Passively times out old connections (maxLifetime)" $ -- 0.5s connection lifetime - withPool 1 10 0.5 connectionSettings $ \pool -> do + withPool 1 10 0.5 1_800 connectionSettings $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -105,13 +105,14 @@ main = do res3 `shouldBe` Right Nothing it "Counts active connections" $ do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPool 3 10 1_800 taggedConnectionSettings $ \pool -> do + withPool 3 10 1_800 1_800 taggedConnectionSettings $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 - it "Times out old connections" $ do + + it "Actively times out old connections (maxLifetime)" $ do withDefaultPool $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionSettings - withPool 3 10 0.5 taggedConnectionSettings $ \limitedPool -> do + withPool 3 10 0.5 1_800 taggedConnectionSettings $ \limitedPool -> do res <- use limitedPool $ selectOneSession res `shouldBe` Right 1 res2 <- use countPool $ countConnectionsSession appName @@ -119,6 +120,24 @@ main = do threadDelay 1_000_000 -- 1s res3 <- use countPool $ countConnectionsSession appName res3 `shouldBe` Right 0 + it "Times out old connections (maxIdletime)" $ do + -- 0.5s connection idle time + withPool 1 10 1_800 0.5 connectionSettings $ \pool -> do + res <- use pool $ setSettingSession "testing.foo" "hello world" + res `shouldBe` Right () + res2 <- use pool $ getSettingSession "testing.foo" + res2 `shouldBe` Right (Just "hello world") + -- busy sleep, to keep connection alive + forM_ [1 .. 10] $ \_ -> do + r <- use pool $ selectOneSession + r `shouldBe` Right 1 + threadDelay 100_000 -- 0.1s + res3 <- use pool $ getSettingSession "testing.foo" + res3 `shouldBe` Right (Just "hello world") + -- idle sleep, connection times out + threadDelay 1_000_000 -- 1s + res4 <- use pool $ getSettingSession "testing.foo" + res4 `shouldBe` Right Nothing getConnectionSettings :: IO Connection.Settings getConnectionSettings = From 5d6b411ac758116893cdf63f3286d34b5eb424d8 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 13 May 2023 09:58:39 +0000 Subject: [PATCH 0852/1204] Set package version to 0.10 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index cdcafa3c08..ae8083b888 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.9.0.1 +version: 0.10 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From c7cca35ebeeb6e2b5d57fa789d2fba9059e020a7 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 16 May 2023 10:12:33 -0400 Subject: [PATCH 0853/1204] Relax hasql-pool constraint since new version changes do not break our calls --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 47db004fa4..596f1fc8c6 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 1.2.3.1 && < 2.2 - , hasql-pool >= 0.4 && < 0.10 + , hasql-pool >= 0.4 && < 0.11 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 From d6a3cfa5b3707eb1f57227ef3615b4e9690f427c Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 16 May 2023 11:37:00 -0400 Subject: [PATCH 0854/1204] Bump patch version --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 596f1fc8c6..f573df7588 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.4 +version: 0.2.0.5 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From d62ad09bb960097103a6b4c9c2c51e5202789422 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 8 Jun 2023 19:32:04 +0300 Subject: [PATCH 0855/1204] Remove travis badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ff37e69208..51376ecac8 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Hasql also is one of the supported targets of the [pGenie](https://pgenie.io) co # Status -[![Build Status](https://travis-ci.org/nikita-volkov/hasql.svg?branch=master)](https://travis-ci.org/nikita-volkov/hasql) [![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) Hasql is production-ready, actively maintained and the API is pretty stable. It's used by many companies and most notably by the [Postgrest](https://postgrest.org/) project. From 5de064d755547eae0a88acbff986596cd7d78ae7 Mon Sep 17 00:00:00 2001 From: Able Arthy Date: Tue, 4 Jul 2023 13:25:07 +0300 Subject: [PATCH 0856/1204] Fix: update link to PG documentation --- library/Hasql/Private/Encoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index a97d3c141f..877201f344 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -284,7 +284,7 @@ unknownEnum mapping = Value (Value.unsafePTI PTI.binaryUnknown (const (A.text_st -- -- The value transimitted is any value encoded in the Postgres' Text data format. -- For reference, see the --- +-- -- section of the Postgres' documentation. -- -- __Warning:__ Do not use this as part of composite encoders like 'array' since From 5bb720d0688a777d64b8958f36988b62f71e3100 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2023 13:00:54 +0300 Subject: [PATCH 0857/1204] Format cabal --- hasql.cabal | 389 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 285 insertions(+), 104 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 5e1781c9c4..9e72e83d70 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,150 +1,331 @@ -name: hasql -version: 1.6.3 -category: Hasql, Database, PostgreSQL -synopsis: An efficient PostgreSQL driver with a flexible mapping API +cabal-version: 3.0 +name: hasql +version: 1.6.3 +category: Hasql, Database, PostgreSQL +synopsis: An efficient PostgreSQL driver with a flexible mapping API description: Root of the \"hasql\" ecosystem. For details and tutorials see . . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. -homepage: https://github.com/nikita-volkov/hasql -bug-reports: https://github.com/nikita-volkov/hasql/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2014, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple -cabal-version: >=1.10 + +homepage: https://github.com/nikita-volkov/hasql +bug-reports: https://github.com/nikita-volkov/hasql/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2014, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md README.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql.git library - hs-source-dirs: library - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + hs-source-dirs: library + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 exposed-modules: + Hasql.Connection Hasql.Decoders Hasql.Encoders - Hasql.Connection - Hasql.Statement Hasql.Session + Hasql.Statement + other-modules: - Hasql.Private.Prelude - Hasql.Private.Errors - Hasql.Private.PTI - Hasql.Private.IO - Hasql.Private.Session - Hasql.Private.Connection - Hasql.Private.PreparedStatementRegistry - Hasql.Private.Settings Hasql.Private.Commands + Hasql.Private.Connection Hasql.Private.Decoders Hasql.Private.Decoders.Array Hasql.Private.Decoders.Composite - Hasql.Private.Decoders.Value - Hasql.Private.Decoders.Row Hasql.Private.Decoders.Result Hasql.Private.Decoders.Results + Hasql.Private.Decoders.Row + Hasql.Private.Decoders.Value Hasql.Private.Encoders Hasql.Private.Encoders.Array - Hasql.Private.Encoders.Value Hasql.Private.Encoders.Params + Hasql.Private.Encoders.Value + Hasql.Private.Errors + Hasql.Private.IO + Hasql.Private.Prelude + Hasql.Private.PreparedStatementRegistry + Hasql.Private.PTI + Hasql.Private.Session + Hasql.Private.Settings + build-depends: - aeson >=2 && <3, - attoparsec >=0.10 && <0.15, - base >=4.12 && <5, - bytestring >=0.10 && <0.12, - bytestring-strict-builder >=0.4.5.1 && <0.5, - contravariant >=1.3 && <2, - dlist ==0.8.* || >=1 && <2, - hashable >=1.2 && <2, - hashtables >=1.1 && <2, - mtl >=2 && <3, - network-ip >=0.3.0.3 && <0.4, - postgresql-binary >=0.13.1 && <0.14, - postgresql-libpq ==0.9.*, - profunctors >=5.1 && <6, - scientific >=0.3 && <0.4, - text >=1 && <3, - text-builder >=0.6.7 && <0.7, - time >=1.9 && <2, - transformers >=0.3 && <0.7, - uuid >=1.3 && <2, - vector >=0.10 && <0.14 + , aeson >=2 && <3 + , attoparsec >=0.10 && <0.15 + , base >=4.12 && <5 + , bytestring >=0.10 && <0.12 + , bytestring-strict-builder >=0.4.5.1 && <0.5 + , contravariant >=1.3 && <2 + , dlist >=0.8 && <0.9 || >=1 && <2 + , hashable >=1.2 && <2 + , hashtables >=1.1 && <2 + , mtl >=2 && <3 + , network-ip >=0.3.0.3 && <0.4 + , postgresql-binary >=0.13.1 && <0.14 + , postgresql-libpq >=0.9 && <0.10 + , profunctors >=5.1 && <6 + , scientific >=0.3 && <0.4 + , text >=1 && <3 + , text-builder >=0.6.7 && <0.7 + , time >=1.9 && <2 + , transformers >=0.3 && <0.7 + , uuid >=1.3 && <2 + , vector >=0.10 && <0.14 test-suite tasty - type: exitcode-stdio-1.0 - hs-source-dirs: tasty - main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: tasty + main-is: Main.hs + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 other-modules: - Main.DSL Main.Connection - Main.Statements + Main.DSL Main.Prelude + Main.Statements + build-depends: - contravariant-extras >=0.3.5.2 && <0.4, - hasql, - QuickCheck >=2.8.1 && <3, - quickcheck-instances >=0.3.11 && <0.4, - rerebase <2, - tasty >=0.12 && <2, - tasty-hunit >=0.9 && <0.11, - tasty-quickcheck >=0.9 && <0.11 + , contravariant-extras >=0.3.5.2 && <0.4 + , hasql + , QuickCheck >=2.8.1 && <3 + , quickcheck-instances >=0.3.11 && <0.4 + , rerebase <2 + , tasty >=0.12 && <2 + , tasty-hunit >=0.9 && <0.11 + , tasty-quickcheck >=0.9 && <0.11 test-suite threads-test - type: exitcode-stdio-1.0 - hs-source-dirs: threads-test - main-is: Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: threads-test + main-is: Main.hs default-extensions: - Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: - Haskell2010 - other-modules: - Main.Statements - ghc-options: - -O2 - -threaded - "-with-rtsopts=-N" + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 + other-modules: Main.Statements + ghc-options: -O2 -threaded -with-rtsopts=-N build-depends: - hasql, - rerebase + , hasql + , rerebase benchmark benchmarks - type: exitcode-stdio-1.0 - hs-source-dirs: benchmarks - main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: benchmarks + main-is: Main.hs + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 ghc-options: - -O2 - -threaded - "-with-rtsopts=-N" - -rtsopts - -funbox-strict-fields + -O2 -threaded -with-rtsopts=-N -rtsopts -funbox-strict-fields + build-depends: - gauge >=0.2.5 && <0.3, - hasql, - rerebase <2 + , gauge >=0.2.5 && <0.3 + , hasql + , rerebase <2 test-suite profiling - type: exitcode-stdio-1.0 - hs-source-dirs: profiling - main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, RoleAnnotations, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 - ghc-options: - -O2 - -threaded - -rtsopts + type: exitcode-stdio-1.0 + hs-source-dirs: profiling + main-is: Main.hs + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 + ghc-options: -O2 -threaded -rtsopts build-depends: - hasql, - rerebase ==1.* + , hasql + , rerebase >=1 && <2 From d124e26715617615847133074407cc0216f3624d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2023 13:03:13 +0300 Subject: [PATCH 0858/1204] Update postgresql-libpq and prepare for release --- CHANGELOG.md | 4 ++++ hasql.cabal | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9f4f7bc7d..a96c1de6dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.6.3.1 + +- Moved to "postgresql-libpq-0.10" + # 1.6.3 - Added `unknownEnum` encoder diff --git a/hasql.cabal b/hasql.cabal index 9e72e83d70..52db44baf5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.3 +version: 1.6.3.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: @@ -109,7 +109,7 @@ library , mtl >=2 && <3 , network-ip >=0.3.0.3 && <0.4 , postgresql-binary >=0.13.1 && <0.14 - , postgresql-libpq >=0.9 && <0.10 + , postgresql-libpq >=0.10 && <0.11 , profunctors >=5.1 && <6 , scientific >=0.3 && <0.4 , text >=1 && <3 From b9b8f8e7d849e82adf3adc9b2ea5bb3bb113f479 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 31 Jul 2023 13:05:18 +0300 Subject: [PATCH 0859/1204] Relax the postgresql-libpq bound For compatibility reasons. --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 52db44baf5..f6f09cddae 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.3.1 +version: 1.6.3.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: @@ -109,7 +109,7 @@ library , mtl >=2 && <3 , network-ip >=0.3.0.3 && <0.4 , postgresql-binary >=0.13.1 && <0.14 - , postgresql-libpq >=0.10 && <0.11 + , postgresql-libpq >=0.9 && <0.11 , profunctors >=5.1 && <6 , scientific >=0.3 && <0.4 , text >=1 && <3 From 243f01b5aea2aebf188b86bb1f51c2555b9d4db0 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 19 Aug 2023 14:12:25 -0400 Subject: [PATCH 0860/1204] Use threadDelay instead of threadWaitRead to poll for notification on windows since it seems to be a more robust approach. --- src/Hasql/Notifications.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 383f7ca601..eb04c1baf1 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-| This module has functions to send commands LISTEN and NOTIFY to the database server. It also has a function to wait for and handle notifications on a database connection. @@ -30,7 +31,11 @@ import qualified Data.Text.Encoding as T import Data.ByteString.Char8 (ByteString) import Data.Functor.Contravariant (contramap) import Control.Monad (void, forever) +#if defined(mingw32_HOST_OS) +import Control.Concurrent ( threadDelay ) +#else import Control.Concurrent (threadWaitRead) +#endif import Control.Exception (Exception, throw) -- | A wrapped text that represents a properly escaped and quoted PostgreSQL identifier @@ -160,8 +165,13 @@ waitForNotifications sendNotification con = mfd <- PQ.socket pqCon case mfd of Nothing -> panic "Error checking for PostgreSQL notifications" +#if defined(mingw32_HOST_OS) + Just _ -> do + void $ threadDelay 1000000 +#else Just fd -> do void $ threadWaitRead fd +#endif void $ PQ.consumeInput pqCon Just notification -> sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) From b072182801bbc73409135b64a484ca58eee39c24 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 19 Aug 2023 14:36:47 -0400 Subject: [PATCH 0861/1204] Bump patch --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index f573df7588..1d41899d84 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.5 +version: 0.2.0.6 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 558850adfbd6502626608290510d0f7d5db3ff4d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 10 Oct 2023 20:07:59 +0300 Subject: [PATCH 0862/1204] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 51376ecac8..3f9f26af0b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet flexible mapping API. It targets both the users, who need maximum control, and the users who face the typical tasks of DB-powered applications, providing them with higher-level APIs. Currently it is known to be [the fastest driver](https://nikita-volkov.github.io/hasql-benchmarks/) in the Haskell ecosystem. -Hasql also is one of the supported targets of the [pGenie](https://pgenie.io) code generator, which empowers it with schema and query validation, and relieves you from boilerplate. +> [!IMPORTANT] +> Hasql is one of the supported targets of the [pGenie](https://pgenie.io) code generator, which empowers it with schema and query validation, and relieves you from boilerplate. # Status From 8c2aacc46413062c7b044c105b681ceeb4794293 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Oct 2023 01:59:59 +0300 Subject: [PATCH 0863/1204] Move to Github Actions --- .github/workflows/format.yaml | 12 +++++++ .github/workflows/release.yaml | 21 ++++++++++++ .github/workflows/test.yaml | 13 ++++++++ .travis.yml | 61 ---------------------------------- 4 files changed, 46 insertions(+), 61 deletions(-) create mode 100644 .github/workflows/format.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 .github/workflows/test.yaml delete mode 100644 .travis.yml diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..9f46f3a03a --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,12 @@ +name: Format the code + +on: + push: + branches: + - master + pull_request: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format-stage.yaml@7e8df8d36f4b50ec4c3585aaaed4bf3892f313f2 + secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000000..9db2de4551 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,21 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: release + cancel-in-progress: false + +jobs: + + release: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release-stage.yaml@7e8df8d36f4b50ec4c3585aaaed4bf3892f313f2 + secrets: inherit + with: + prefix-tag-with-v: false diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000000..7e168f9166 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,13 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + +jobs: + + test: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-stage.yaml@3558cf3b1acae6a3a872253e02aeda95a411617d + secrets: inherit diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6c4882d893..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,61 +0,0 @@ -if: tag IS blank - -env: - - ghc=8.6.1 - - ghc=8.8.1 - - ghc=8.10.2 benchmarks=1 tests=1 - - ghc=9.0.1 - -matrix: - allow_failures: - - env: ghc=9.0.1 - -services: - - postgresql - -install: - # Set up the Shell to treat the semicolon as && - - set -eo pipefail - # Install GHC and Cabal - - - cabal=${cabal=2.4}; - travis_retry sudo add-apt-repository -y ppa:hvr/ghc; - travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; - # Update the Cabal database - - cabal update - # Switch to the distro: - - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - # Install the lower bound dependencies - - - if [ "$lower_bound_dependencies" = "1" ]; - then - constraint_options=( - ); - fi; - # Install the library dependencies - - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls - ${constraint_options[@]} - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - # Build the library - - cabal v1-build - # Configure and build the remaining stuff - - cabal v1-configure - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - -f doctest - - cabal v1-build - -script: - - | - if [ "$tests" = "1" ]; - then - cabal v1-test --show-details=always; - fi; From 55dc24bbd51cf1b9bac98be8e40b5578ebc60298 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 12 Oct 2023 23:24:12 +0000 Subject: [PATCH 0864/1204] Format --- benchmarks/Main.hs | 2 +- library/Hasql/Private/Decoders.hs | 6 +- library/Hasql/Private/Decoders/Array.hs | 2 +- library/Hasql/Private/Decoders/Result.hs | 56 +- library/Hasql/Private/Decoders/Results.hs | 24 +- library/Hasql/Private/Decoders/Row.hs | 15 +- library/Hasql/Private/Encoders.hs | 2 +- library/Hasql/Private/Encoders/Params.hs | 5 +- library/Hasql/Private/Encoders/Value.hs | 2 +- library/Hasql/Private/Errors.hs | 16 +- library/Hasql/Private/Prelude.hs | 4 +- library/Hasql/Private/Session.hs | 40 +- library/Hasql/Private/Settings.hs | 37 +- tasty/Main.hs | 853 +++++++++++----------- tasty/Main/DSL.hs | 6 +- tasty/Main/Statements.hs | 15 +- threads-test/Main.hs | 6 +- 17 files changed, 563 insertions(+), 528 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 600f37bb5e..18851e102d 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -25,7 +25,7 @@ main = sessionBench "manySmallResults" sessionWithManySmallResults ] where - sessionBench :: NFData a => String -> B.Session a -> Benchmark + sessionBench :: (NFData a) => String -> B.Session a -> Benchmark sessionBench name session = bench name (nfIO (fmap (either (error "") id) (B.run session connection))) diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index bb3b63b819..0dc02dfcb7 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -306,7 +306,7 @@ refine fn (Value v) = Value (Value.Value (\b -> A.refine fn (Value.run v b))) -- x = hstore 'replicateM' -- @ {-# INLINEABLE hstore #-} -hstore :: (forall m. Monad m => Int -> m (Text, Maybe Text) -> m a) -> Value a +hstore :: (forall m. (Monad m) => Int -> m (Text, Maybe Text) -> m a) -> Value a hstore replicateM = Value (Value.decoder (const (A.hstore replicateM A.text_strict A.text_strict))) -- | @@ -348,7 +348,7 @@ listArray = array . dimension replicateM . element -- Please notice that in case of multidimensional arrays nesting 'vectorArray' decoder -- won't work. You have to explicitly construct the array decoder using 'array'. {-# INLINE vectorArray #-} -vectorArray :: GenericVector.Vector vector element => NullableOrNot Value element -> Value (vector element) +vectorArray :: (GenericVector.Vector vector element) => NullableOrNot Value element -> Value (vector element) vectorArray = array . dimension GenericVector.replicateM . element -- | @@ -383,7 +383,7 @@ newtype Array a = Array (Array.Array a) -- -- * A decoder of its components, which can be either another 'dimension' or 'element'. {-# INLINEABLE dimension #-} -dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +dimension :: (forall m. (Monad m) => Int -> m a -> m b) -> Array a -> Array b dimension replicateM (Array imp) = Array (Array.dimension replicateM imp) -- | diff --git a/library/Hasql/Private/Decoders/Array.hs b/library/Hasql/Private/Decoders/Array.hs index 711154697f..9bc868dc0d 100644 --- a/library/Hasql/Private/Decoders/Array.hs +++ b/library/Hasql/Private/Decoders/Array.hs @@ -13,7 +13,7 @@ run (Array imp) env = A.array (runReaderT imp env) {-# INLINE dimension #-} -dimension :: (forall m. Monad m => Int -> m a -> m b) -> Array a -> Array b +dimension :: (forall m. (Monad m) => Int -> m a -> m b) -> Array a -> Array b dimension replicateM (Array imp) = Array $ ReaderT $ \env -> A.dimensionArray replicateM (runReaderT imp env) diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 4a6a41b8f3..2226a6f752 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -34,10 +34,12 @@ rowsAffected = checkExecStatus $ \case LibPQ.CommandOk -> True _ -> False - Result $ - ReaderT $ \(_, result) -> - ExceptT $ - LibPQ.cmdTuples result & fmap cmdTuplesReader + Result + $ ReaderT + $ \(_, result) -> + ExceptT + $ LibPQ.cmdTuples result + & fmap cmdTuplesReader where cmdTuplesReader = notNothing >=> notEmpty >=> decimal @@ -49,8 +51,8 @@ rowsAffected = then Left (UnexpectedResult "Empty bytes") else Right bytes decimal bytes = - mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ - Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes + mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) + $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} checkExecStatus :: (LibPQ.ExecStatus -> Bool) -> Result () @@ -69,14 +71,15 @@ checkExecStatus predicate = {-# INLINE serverError #-} serverError :: Result () serverError = - Result $ - ReaderT $ \(_, result) -> ExceptT $ do + Result + $ ReaderT + $ \(_, result) -> ExceptT $ do code <- - fmap fold $ - LibPQ.resultErrorField result LibPQ.DiagSqlstate + fmap fold + $ LibPQ.resultErrorField result LibPQ.DiagSqlstate message <- - fmap fold $ - LibPQ.resultErrorField result LibPQ.DiagMessagePrimary + fmap fold + $ LibPQ.resultErrorField result LibPQ.DiagMessagePrimary detail <- LibPQ.resultErrorField result LibPQ.DiagMessageDetail hint <- @@ -99,8 +102,9 @@ maybe rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ - ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + Result + $ ReaderT + $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result case maxRows of 0 -> return (Right Nothing) @@ -122,8 +126,9 @@ single rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ - ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + Result + $ ReaderT + $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result case maxRows of 1 -> do @@ -144,8 +149,9 @@ vector rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ - ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + Result + $ ReaderT + $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result mvector <- MutableVector.unsafeNew (rowToInt maxRows) @@ -172,10 +178,11 @@ foldl step init rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ - ReaderT $ \(integerDatetimes, result) -> - ExceptT $ - {-# SCC "traversal" #-} + Result + $ ReaderT + $ \(integerDatetimes, result) -> + ExceptT + $ {-# SCC "traversal" #-} do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result @@ -203,8 +210,9 @@ foldr step init rowDec = checkExecStatus $ \case LibPQ.TuplesOk -> True _ -> False - Result $ - ReaderT $ \(integerDatetimes, result) -> ExceptT $ do + Result + $ ReaderT + $ \(integerDatetimes, result) -> ExceptT $ do maxRows <- LibPQ.ntuples result maxCols <- LibPQ.nfields result accRef <- newIORef init diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index af36034468..e560124cee 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -29,18 +29,20 @@ run (Results stack) env = {-# INLINE clientError #-} clientError :: Results a clientError = - Results $ - ReaderT $ \(_, connection) -> - ExceptT $ - fmap (Left . ClientError) (LibPQ.errorMessage connection) + Results + $ ReaderT + $ \(_, connection) -> + ExceptT + $ fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | -- Parse a single result. {-# INLINE single #-} single :: Result.Result a -> Results a single resultDec = - Results $ - ReaderT $ \(integerDatetimes, connection) -> ExceptT $ do + Results + $ ReaderT + $ \(integerDatetimes, connection) -> ExceptT $ do resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> @@ -53,8 +55,9 @@ single resultDec = {-# INLINE getResult #-} getResult :: Results LibPQ.Result getResult = - Results $ - ReaderT $ \(_, connection) -> ExceptT $ do + Results + $ ReaderT + $ \(_, connection) -> ExceptT $ do resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> pure (Right result) @@ -85,7 +88,8 @@ dropRemainders = ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) refine :: (a -> Either Text b) -> Results a -> Results b -refine refiner results = Results $ - ReaderT $ \env -> ExceptT $ do +refine refiner results = Results + $ ReaderT + $ \env -> ExceptT $ do resultEither <- run results env return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Private/Decoders/Row.hs index 9a0c0a70b5..7130f8d79f 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Private/Decoders/Row.hs @@ -41,21 +41,22 @@ error x = value :: Value.Value a -> Row (Maybe a) value valueDec = {-# SCC "value" #-} - Row $ - ReaderT $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do + Row + $ ReaderT + $ \(Env result row columnsAmount integerDatetimes columnRef) -> ExceptT $ do col <- readIORef columnRef writeIORef columnRef (succ col) if col < columnsAmount then do valueMaybe <- {-# SCC "getvalue'" #-} LibPQ.getvalue' result row col - pure $ - case valueMaybe of + pure + $ case valueMaybe of Nothing -> Right Nothing Just value -> - fmap Just $ - mapLeft ValueError $ - {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value + fmap Just + $ mapLeft ValueError + $ {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value else pure (Left EndOfInput) -- | diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 877201f344..52214da849 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -330,7 +330,7 @@ composite (Composite encode print) = -- Please notice that in case of multidimensional arrays nesting 'foldableArray' encoder -- won't work. You have to explicitly construct the array encoder using 'array'. {-# INLINE foldableArray #-} -foldableArray :: Foldable foldable => NullableOrNot Value element -> Value (foldable element) +foldableArray :: (Foldable foldable) => NullableOrNot Value element -> Value (foldable element) foldableArray = array . dimension foldl' . element -- * Array diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Private/Encoders/Params.hs index fb4d68aaec..e2228f29d0 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Private/Encoders/Params.hs @@ -19,8 +19,9 @@ value = nullableValue :: C.Value a -> Params (Maybe a) nullableValue (C.Value valueOID arrayOID encode render) = - Params $ - Op $ \input -> + Params + $ Op + $ \input -> let D.OID _ pqOid format = valueOID encoder env = diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Private/Encoders/Value.hs index d87fa381c1..cb09ac330e 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Private/Encoders/Value.hs @@ -19,6 +19,6 @@ unsafePTI pti = Value (PTI.ptiOID pti) (fromMaybe (error "No array OID") (PTI.ptiArrayOID pti)) {-# INLINE unsafePTIWithShow #-} -unsafePTIWithShow :: Show a => PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a +unsafePTIWithShow :: (Show a) => PTI.PTI -> (Bool -> a -> B.Encoding) -> Value a unsafePTIWithShow pti encode = unsafePTI pti encode (C.string . show) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 89a13d4494..2893b57719 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -39,24 +39,24 @@ data CommandError data ResultError = -- | An error reported by the DB. ServerError - ByteString - -- ^ __Code__. The SQLSTATE code for the error. It's recommended to use + -- | __Code__. The SQLSTATE code for the error. It's recommended to use -- to work with those. ByteString - -- ^ __Message__. The primary human-readable error message(typically one + -- | __Message__. The primary human-readable error message(typically one -- line). Always present. - (Maybe ByteString) - -- ^ __Details__. An optional secondary error message carrying more + ByteString + -- | __Details__. An optional secondary error message carrying more -- detail about the problem. Might run to multiple lines. (Maybe ByteString) - -- ^ __Hint__. An optional suggestion on what to do about the problem. + -- | __Hint__. An optional suggestion on what to do about the problem. -- This is intended to differ from detail in that it offers advice -- (potentially inappropriate) rather than hard facts. Might run to -- multiple lines. - (Maybe Int) - -- ^ __Position__. Error cursor position as an index into the original + (Maybe ByteString) + -- | __Position__. Error cursor position as an index into the original -- statement string. Positions are measured in characters not bytes. + (Maybe Int) | -- | -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 90bf3a9f97..065c0f4e7e 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -117,12 +117,12 @@ type TextBuilder = Data.Text.Lazy.Builder.Builder {-# INLINE forMToZero_ #-} -forMToZero_ :: Applicative m => Int -> (Int -> m a) -> m () +forMToZero_ :: (Applicative m) => Int -> (Int -> m a) -> m () forMToZero_ !startN f = ($ pred startN) $ fix $ \loop !n -> if n >= 0 then f n *> loop (pred n) else pure () {-# INLINE forMFromZero_ #-} -forMFromZero_ :: Applicative m => Int -> (Int -> m a) -> m () +forMFromZero_ :: (Applicative m) => Int -> (Int -> m a) -> m () forMFromZero_ !endN f = ($ 0) $ fix $ \loop !n -> if n < endN then f n *> loop (succ n) else pure () diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index c7e815572f..9607e2c078 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -22,8 +22,8 @@ newtype Session a -- Executes a bunch of commands on the provided connection. run :: Session a -> Connection.Connection -> IO (Either QueryError a) run (Session impl) connection = - runExceptT $ - runReaderT impl connection + runExceptT + $ runReaderT impl connection -- | -- Possibly a multi-statement query, @@ -31,14 +31,16 @@ run (Session impl) connection = -- nor can any results of it be collected. sql :: ByteString -> Session () sql sql = - Session $ - ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ - fmap (mapLeft (QueryError sql [])) $ - withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendNonparametricStatement pqConnection sql - r2 <- IO.getResults pqConnection integerDatetimes decoder - return $ r1 *> r2 + Session + $ ReaderT + $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT + $ fmap (mapLeft (QueryError sql [])) + $ withMVar pqConnectionRef + $ \pqConnection -> do + r1 <- IO.sendNonparametricStatement pqConnection sql + r2 <- IO.getResults pqConnection integerDatetimes decoder + return $ r1 *> r2 where decoder = Decoders.Results.single Decoders.Result.noResult @@ -47,14 +49,16 @@ sql sql = -- Parameters and a specification of a parametric single-statement query to apply them to. statement :: params -> Statement.Statement params result -> Session result statement input (Statement.Statement template (Encoders.Params paramsEncoder) decoder preparable) = - Session $ - ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> - ExceptT $ - fmap (mapLeft (QueryError template inputReps)) $ - withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input - r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) - return $ r1 *> r2 + Session + $ ReaderT + $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT + $ fmap (mapLeft (QueryError template inputReps)) + $ withMVar pqConnectionRef + $ \pqConnection -> do + r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input + r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) + return $ r1 *> r2 where inputReps = let Encoders.Params.Params (Op encoderOp) = paramsEncoder diff --git a/library/Hasql/Private/Settings.hs b/library/Hasql/Private/Settings.hs index 5c348dc58b..6d08b434b8 100644 --- a/library/Hasql/Private/Settings.hs +++ b/library/Hasql/Private/Settings.hs @@ -16,19 +16,24 @@ type Settings = {-# INLINE settings #-} settings :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> Settings settings host port user password database = - BL.toStrict $ - BB.toLazyByteString $ - mconcat $ - intersperse (BB.char7 ' ') $ - catMaybes $ - [ mappend (BB.string7 "host=") . BB.byteString - <$> mfilter (not . B.null) (pure host), - mappend (BB.string7 "port=") . BB.word16Dec - <$> mfilter (/= 0) (pure port), - mappend (BB.string7 "user=") . BB.byteString - <$> mfilter (not . B.null) (pure user), - mappend (BB.string7 "password=") . BB.byteString - <$> mfilter (not . B.null) (pure password), - mappend (BB.string7 "dbname=") . BB.byteString - <$> mfilter (not . B.null) (pure database) - ] + BL.toStrict + $ BB.toLazyByteString + $ mconcat + $ intersperse (BB.char7 ' ') + $ catMaybes + $ [ mappend (BB.string7 "host=") + . BB.byteString + <$> mfilter (not . B.null) (pure host), + mappend (BB.string7 "port=") + . BB.word16Dec + <$> mfilter (/= 0) (pure port), + mappend (BB.string7 "user=") + . BB.byteString + <$> mfilter (not . B.null) (pure user), + mappend (BB.string7 "password=") + . BB.byteString + <$> mfilter (not . B.null) (pure password), + mappend (BB.string7 "dbname=") + . BB.byteString + <$> mfilter (not . B.null) (pure database) + ] diff --git a/tasty/Main.hs b/tasty/Main.hs index 77396933d5..89991ab0b0 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -20,377 +20,122 @@ main = defaultMain tree tree = - localOption (NumThreads 1) $ - testGroup + localOption (NumThreads 1) + $ testGroup "All tests" - [ testGroup "Roundtrips" $ - let roundtrip encoder decoder input = - let session = - let statement = Statement.Statement "select $1" encoder decoder True - in Session.statement input statement - in unsafePerformIO $ do - x <- Connection.with (Session.run session) - return (Right (Right input) === x) - in [ testProperty "Array" $ - let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8)))))) - in roundtrip encoder decoder, - testProperty "2D Array" $ - let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))))) - in \list -> list /= [] ==> roundtrip encoder decoder (replicate 3 list) - ], - testCase "Failed query" $ - let statement = - Statement.Statement "select true where 1 = any ($1) and $2" encoder decoder True - where - encoder = - contrazip2 - (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - (Encoders.param (Encoders.nonNullable (Encoders.text))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - Session.statement ([3, 7], "a") statement - in do - x <- Connection.with (Session.run session) - assertBool (show x) $ case x of - Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True - _ -> False, - testCase "IN simulation" $ - let statement = - Statement.Statement "select true where 1 = any ($1)" encoder decoder True - where - encoder = - Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - do - result1 <- Session.statement [1, 2] statement - result2 <- Session.statement [2, 3] statement - return (result1, result2) - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (True, False))) x, - testCase "NOT IN simulation" $ - let statement = - Statement.Statement "select true where 3 <> all ($1)" encoder decoder True - where - encoder = - Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) - decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) - session = - do - result1 <- Session.statement [1, 2] statement - result2 <- Session.statement [2, 3] statement - return (result1, result2) - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (True, False))) x, - testCase "Composite decoding" $ - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select (1, true)" - encoder = - mempty - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.composite ((,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool))) - session = - Session.statement () statement - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right (1, True))) x, - testCase "Complex composite decoding" $ - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select (1, true) as entity1, ('hello', 3) as entity2" - encoder = - mempty - decoder = - Decoders.singleRow $ - (,) <$> (Decoders.column . Decoders.nonNullable) entity1 <*> (Decoders.column . Decoders.nonNullable) entity2 - where - entity1 = - Decoders.composite $ - (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool - entity2 = - Decoders.composite $ - (,) <$> (Decoders.field . Decoders.nonNullable) Decoders.text <*> (Decoders.field . Decoders.nonNullable) Decoders.int8 - session = - Session.statement () statement - in do - x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, - testGroup "unknownEnum" $ - [ testCase "" $ do - res <- DSL.session $ do - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "drop type if exists mood" - in DSL.statement () statement - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.unknownEnum id)) - in DSL.statement "ok" statement - - assertEqual "" (Right "ok") res - ], - testCase "Composite encoding" $ do - let value = - (123, 456, 789, "abc") - res <- - let statement = + [ testGroup "Roundtrips" + $ let roundtrip encoder decoder input = + let session = + let statement = Statement.Statement "select $1" encoder decoder True + in Session.statement input statement + in unsafePerformIO $ do + x <- Connection.with (Session.run session) + return (Right (Right input) === x) + in [ testProperty "Array" + $ let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8)))))) + in roundtrip encoder decoder, + testProperty "2D Array" + $ let encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable (Decoders.array (Decoders.dimension replicateM (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))))) + in \list -> list /= [] ==> roundtrip encoder decoder (replicate 3 list) + ], + testCase "Failed query" + $ let statement = + Statement.Statement "select true where 1 = any ($1) and $2" encoder decoder True + where + encoder = + contrazip2 + (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) + (Encoders.param (Encoders.nonNullable (Encoders.text))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + Session.statement ([3, 7], "a") statement + in do + x <- Connection.with (Session.run session) + assertBool (show x) $ case x of + Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True + _ -> False, + testCase "IN simulation" + $ let statement = + Statement.Statement "select true where 1 = any ($1)" encoder decoder True + where + encoder = + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + do + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x, + testCase "NOT IN simulation" + $ let statement = + Statement.Statement "select true where 3 <> all ($1)" encoder decoder True + where + encoder = + Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) + decoder = + fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + session = + do + result1 <- Session.statement [1, 2] statement + result2 <- Session.statement [2, 3] statement + return (result1, result2) + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right (True, False))) x, + testCase "Composite decoding" + $ let statement = Statement.Statement sql encoder decoder True where sql = - "select $1 :: pg_enum" + "select (1, true)" encoder = - Encoders.param . Encoders.nonNullable . Encoders.composite . mconcat $ - [ contramap (\(a, _, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, - contramap (\(_, a, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, - contramap (\(_, _, a, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.float4, - contramap (\(_, _, _, a) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.name - ] + mempty decoder = - Decoders.singleRow $ - (Decoders.column . Decoders.nonNullable . Decoders.composite) - ( (,,,) - <$> (Decoders.field . Decoders.nonNullable) Decoders.int4 - <*> (Decoders.field . Decoders.nonNullable) Decoders.int4 - <*> (Decoders.field . Decoders.nonNullable) Decoders.float4 - <*> (Decoders.field . Decoders.nonNullable) Decoders.text - ) - in Connection.with $ Session.run $ Session.statement value statement - assertEqual "" (Right (Right value)) res, - testCase "Empty array" $ - let io = - do + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.composite ((,) <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 <*> (Decoders.field . Decoders.nonNullable) Decoders.bool))) + session = + Session.statement () statement + in do x <- Connection.with (Session.run session) - assertEqual (show x) (Right (Right [])) x - where - session = - Session.statement () statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select array[]::int8[]" - encoder = - mempty - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))) - in io, - testCase "Failing prepared statements" $ - let io = - Connection.with (Session.run session) - >>= (assertBool <$> show <*> resultTest) - where - resultTest = - \case - Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False - _ -> True - session = - catchError session (const (pure ())) *> session - where - session = - Session.statement () statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "absurd" - encoder = - mempty - decoder = - Decoders.noResult - in io, - testCase "Prepared statements after error" $ - let io = - Connection.with (Session.run session) - >>= \x -> assertBool (show x) (either (const False) isRight x) - where - session = - try *> fail *> try - where - try = - Session.statement 1 statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1 :: int8" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) - decoder = - Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 - fail = - catchError (Session.sql "absurd") (const (pure ())) - in io, - testCase "\"in progress after error\" bugfix" $ - let sumStatement :: Statement.Statement (Int64, Int64) Int64 - sumStatement = - Statement.Statement sql encoder decoder True - where - sql = - "select ($1 + $2)" - encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) - <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) - sumSession :: Session.Session Int64 - sumSession = - Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" - errorSession :: Session.Session () - errorSession = - Session.sql "asldfjsldk" - io = - Connection.with $ \c -> do - Session.run errorSession c - Session.run sumSession c - in io >>= \x -> assertBool (show x) (either (const False) isRight x), - testCase "\"another command is already in progress\" bugfix" $ - let sumStatement :: Statement.Statement (Int64, Int64) Int64 - sumStatement = - Statement.Statement sql encoder decoder True - where - sql = - "select ($1 + $2)" - encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) - <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) - decoder = - Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) - session :: Session.Session Int64 - session = - do - Session.sql "begin;" - s <- Session.statement (1, 1) sumStatement - Session.sql "end;" - return s - in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x, - testCase "Executing the same query twice" $ - pure (), - testCase "Interval Encoding" $ - let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1 = interval '10 seconds'" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement - in actualIO >>= \x -> assertEqual (show x) (Right True) x, - testCase "Interval Decoding" $ - let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select interval '10 seconds'" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) - encoder = - Encoders.noParams - in DSL.statement () statement - in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, - testCase "Interval Encoding/Decoding" $ - let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement - in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, - testCase "Unknown" $ - let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "drop type if exists mood" - in DSL.statement () statement - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1 = ('ok' :: mood)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) - encoder = - Encoders.param (Encoders.nonNullable (Encoders.unknown)) - in DSL.statement "ok" statement - in actualIO >>= assertEqual "" (Right True), - testCase "Textual Unknown" $ - let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" - in DSL.statement () statement - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" - in DSL.statement () statement - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select overloaded($1, $2) || overloaded($3, $4, $5)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) - encoder = - contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) - in DSL.statement ["1", "2", "4", "5", "6"] statement - in actualIO >>= assertEqual "" (Right "3456"), - testCase "Enum" $ - let actualIO = - DSL.session $ do + assertEqual (show x) (Right (Right (1, True))) x, + testCase "Complex composite decoding" + $ let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select (1, true) as entity1, ('hello', 3) as entity2" + encoder = + mempty + decoder = + Decoders.singleRow + $ (,) + <$> (Decoders.column . Decoders.nonNullable) entity1 + <*> (Decoders.column . Decoders.nonNullable) entity2 + where + entity1 = + Decoders.composite + $ (,) + <$> (Decoders.field . Decoders.nonNullable) Decoders.int8 + <*> (Decoders.field . Decoders.nonNullable) Decoders.bool + entity2 = + Decoders.composite + $ (,) + <$> (Decoders.field . Decoders.nonNullable) Decoders.text + <*> (Decoders.field . Decoders.nonNullable) Decoders.int8 + session = + Session.statement () statement + in do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, + testGroup "unknownEnum" + $ [ testCase "" $ do + res <- DSL.session $ do let statement = Statement.Statement sql mempty Decoders.noResult True where @@ -407,45 +152,309 @@ tree = Statement.Statement sql encoder decoder True where sql = - "select ($1 :: mood)" + "select $1" decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) encoder = - Encoders.param (Encoders.nonNullable ((Encoders.enum id))) + Encoders.param (Encoders.nonNullable (Encoders.unknownEnum id)) in DSL.statement "ok" statement - in actualIO >>= assertEqual "" (Right "ok"), - testCase "The same prepared statement used on different types" $ - let actualIO = - DSL.session $ do - let effect1 = - DSL.statement "ok" statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.text)) - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) - effect2 = - DSL.statement 1 statement - where - statement = - Statement.Statement sql encoder decoder True - where - sql = - "select $1" - encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) - in (,) <$> effect1 <*> effect2 - in actualIO >>= assertEqual "" (Right ("ok", 1)), - testCase "Affected rows counting" $ - replicateM_ 13 $ - let actualIO = + + assertEqual "" (Right "ok") res + ], + testCase "Composite encoding" $ do + let value = + (123, 456, 789, "abc") + res <- + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 :: pg_enum" + encoder = + Encoders.param + . Encoders.nonNullable + . Encoders.composite + . mconcat + $ [ contramap (\(a, _, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, + contramap (\(_, a, _, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.oid, + contramap (\(_, _, a, _) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.float4, + contramap (\(_, _, _, a) -> a) . Encoders.field . Encoders.nonNullable $ Encoders.name + ] + decoder = + Decoders.singleRow + $ (Decoders.column . Decoders.nonNullable . Decoders.composite) + ( (,,,) + <$> (Decoders.field . Decoders.nonNullable) Decoders.int4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.int4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.float4 + <*> (Decoders.field . Decoders.nonNullable) Decoders.text + ) + in Connection.with $ Session.run $ Session.statement value statement + assertEqual "" (Right (Right value)) res, + testCase "Empty array" + $ let io = + do + x <- Connection.with (Session.run session) + assertEqual (show x) (Right (Right [])) x + where + session = + Session.statement () statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select array[]::int8[]" + encoder = + mempty + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.array (Decoders.dimension replicateM (Decoders.element (Decoders.nonNullable Decoders.int8))))) + in io, + testCase "Failing prepared statements" + $ let io = + Connection.with (Session.run session) + >>= (assertBool <$> show <*> resultTest) + where + resultTest = + \case + Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False + _ -> True + session = + catchError session (const (pure ())) *> session + where + session = + Session.statement () statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "absurd" + encoder = + mempty + decoder = + Decoders.noResult + in io, + testCase "Prepared statements after error" + $ let io = + Connection.with (Session.run session) + >>= \x -> assertBool (show x) (either (const False) isRight x) + where + session = + try *> fail *> try + where + try = + Session.statement 1 statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 :: int8" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.int8)) + decoder = + Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 + fail = + catchError (Session.sql "absurd") (const (pure ())) + in io, + testCase "\"in progress after error\" bugfix" + $ let sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) + <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) + sumSession :: Session.Session Int64 + sumSession = + Session.sql "begin" *> Session.statement (1, 1) sumStatement <* Session.sql "end" + errorSession :: Session.Session () + errorSession = + Session.sql "asldfjsldk" + io = + Connection.with $ \c -> do + Session.run errorSession c + Session.run sumSession c + in io >>= \x -> assertBool (show x) (either (const False) isRight x), + testCase "\"another command is already in progress\" bugfix" + $ let sumStatement :: Statement.Statement (Int64, Int64) Int64 + sumStatement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 + $2)" + encoder = + contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) + <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + decoder = + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) + session :: Session.Session Int64 + session = + do + Session.sql "begin;" + s <- Session.statement (1, 1) sumStatement + Session.sql "end;" + return s + in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x, + testCase "Executing the same query twice" + $ pure (), + testCase "Interval Encoding" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 = interval '10 seconds'" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.interval)) + in DSL.statement (10 :: DiffTime) statement + in actualIO >>= \x -> assertEqual (show x) (Right True) x, + testCase "Interval Decoding" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select interval '10 seconds'" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + encoder = + Encoders.noParams + in DSL.statement () statement + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, + testCase "Interval Encoding/Decoding" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.interval)) + in DSL.statement (10 :: DiffTime) statement + in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, + testCase "Unknown" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "drop type if exists mood" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1 = ('ok' :: mood)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + encoder = + Encoders.param (Encoders.nonNullable (Encoders.unknown)) + in DSL.statement "ok" statement + in actualIO >>= assertEqual "" (Right True), + testCase "Textual Unknown" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select overloaded($1, $2) || overloaded($3, $4, $5)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) + encoder = + contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) + in DSL.statement ["1", "2", "4", "5", "6"] statement + in actualIO >>= assertEqual "" (Right "3456"), + testCase "Enum" + $ let actualIO = + DSL.session $ do + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "drop type if exists mood" + in DSL.statement () statement + let statement = + Statement.Statement sql mempty Decoders.noResult True + where + sql = + "create type mood as enum ('sad', 'ok', 'happy')" + in DSL.statement () statement + let statement = + Statement.Statement sql encoder decoder True + where + sql = + "select ($1 :: mood)" + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) + encoder = + Encoders.param (Encoders.nonNullable ((Encoders.enum id))) + in DSL.statement "ok" statement + in actualIO >>= assertEqual "" (Right "ok"), + testCase "The same prepared statement used on different types" + $ let actualIO = + DSL.session $ do + let effect1 = + DSL.statement "ok" statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.text)) + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) + effect2 = + DSL.statement 1 statement + where + statement = + Statement.Statement sql encoder decoder True + where + sql = + "select $1" + encoder = + Encoders.param (Encoders.nonNullable (Encoders.int8)) + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + in (,) <$> effect1 <*> effect2 + in actualIO >>= assertEqual "" (Right ("ok", 1)), + testCase "Affected rows counting" + $ replicateM_ 13 + $ let actualIO = DSL.session $ do dropTable createTable @@ -453,17 +462,17 @@ tree = deleteRows <* dropTable where dropTable = - DSL.statement () $ - Statements.plain $ - "drop table if exists a" + DSL.statement () + $ Statements.plain + $ "drop table if exists a" createTable = - DSL.statement () $ - Statements.plain $ - "create table a (id bigserial not null, name varchar not null, primary key (id))" + DSL.statement () + $ Statements.plain + $ "create table a (id bigserial not null, name varchar not null, primary key (id))" insertRow = - DSL.statement () $ - Statements.plain $ - "insert into a (name) values ('a')" + DSL.statement () + $ Statements.plain + $ "insert into a (name) values ('a')" deleteRows = DSL.statement () $ Statement.Statement sql mempty decoder False where @@ -472,18 +481,18 @@ tree = decoder = Decoders.rowsAffected in actualIO >>= assertEqual "" (Right 100), - testCase "Result of an auto-incremented column" $ - let actualIO = - DSL.session $ do - DSL.statement () $ Statements.plain $ "drop table if exists a" - DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - DSL.statement () $ Statements.plain $ "drop table if exists a" - pure (id1, id2) - in assertEqual "" (Right (1, 2)) =<< actualIO, - testCase "List decoding" $ - let actualIO = - DSL.session $ DSL.statement () $ Statements.selectList - in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO + testCase "Result of an auto-incremented column" + $ let actualIO = + DSL.session $ do + DSL.statement () $ Statements.plain $ "drop table if exists a" + DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" + id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + DSL.statement () $ Statements.plain $ "drop table if exists a" + pure (id1, id2) + in assertEqual "" (Right (1, 2)) =<< actualIO, + testCase "List decoding" + $ let actualIO = + DSL.session $ DSL.statement () $ Statements.selectList + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 5e8bd5a5e1..d9ef22e9b3 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -38,8 +38,8 @@ session session = password = "" database = "postgres" use connection = - ExceptT $ - fmap (mapLeft SessionError) $ - Hasql.Session.run session connection + ExceptT + $ fmap (mapLeft SessionError) + $ Hasql.Session.run session connection release connection = lift $ HC.release connection diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index 1897eec866..7ab07b8fc2 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -12,15 +12,18 @@ plain sql = dropType :: ByteString -> HQ.Statement () () dropType name = - plain $ - "drop type if exists " <> name + plain + $ "drop type if exists " + <> name createEnum :: ByteString -> [ByteString] -> HQ.Statement () () createEnum name values = - plain $ - "create type " <> name <> " as enum (" - <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) - <> ")" + plain + $ "create type " + <> name + <> " as enum (" + <> mconcat (intersperse ", " (map (\x -> "'" <> x <> "'") values)) + <> ")" selectList :: HQ.Statement () ([] (Int64, Int64)) selectList = diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 020f3947b4..8d94459fd3 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -15,9 +15,9 @@ main = (,) <$> acquire <*> acquire where acquire = - join $ - fmap (either (fail . show) return) $ - Hasql.Connection.acquire connectionSettings + join + $ fmap (either (fail . show) return) + $ Hasql.Connection.acquire connectionSettings where connectionSettings = Hasql.Connection.settings "localhost" 5432 "postgres" "" "postgres" From 676feb1ccc535eef7b657960ebc4d3b35d940ec9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Oct 2023 04:00:30 +0300 Subject: [PATCH 0865/1204] Update the workflow deps --- .github/workflows/format.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/test.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml index 9f46f3a03a..e78c7ca6fe 100644 --- a/.github/workflows/format.yaml +++ b/.github/workflows/format.yaml @@ -8,5 +8,5 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format-stage.yaml@7e8df8d36f4b50ec4c3585aaaed4bf3892f313f2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format-stage.yaml@v1.0.0 secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9db2de4551..2ebb44865d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,7 +15,7 @@ concurrency: jobs: release: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release-stage.yaml@7e8df8d36f4b50ec4c3585aaaed4bf3892f313f2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release-stage.yaml@v1.0.0 secrets: inherit with: prefix-tag-with-v: false diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7e168f9166..6c68fd4eeb 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -9,5 +9,5 @@ on: jobs: test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-stage.yaml@3558cf3b1acae6a3a872253e02aeda95a411617d + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-stage.yaml@v1.0.0 secrets: inherit From 6b7fbbbdbf7a5cbfc6e9ad6757e8e05e35094c16 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Oct 2023 04:31:56 +0300 Subject: [PATCH 0866/1204] Add allow-newer --- cabal.project | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 cabal.project diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000000..3fc27c43b2 --- /dev/null +++ b/cabal.project @@ -0,0 +1,8 @@ +packages: . +allow-newer: + , *:base + , *:primitive + , *:text + , *:bytestring + , *:deepseq + , *:pretty From f794995b12d9651f14ba82607d54e8259a285a78 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 14 Oct 2023 14:42:25 +0300 Subject: [PATCH 0867/1204] Clean up --- cabal.project | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cabal.project b/cabal.project index 3fc27c43b2..40feb370a3 100644 --- a/cabal.project +++ b/cabal.project @@ -1,8 +1,7 @@ packages: . allow-newer: , *:base - , *:primitive - , *:text , *:bytestring , *:deepseq - , *:pretty + , *:primitive + , *:text From e0fc46cda822f57106b086a51ade05f518aa0f9d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 14 Oct 2023 14:55:02 +0300 Subject: [PATCH 0868/1204] Update CI --- .../workflows/{test.yaml => format-and-test.yaml} | 6 +++++- .github/workflows/format.yaml | 12 ------------ .github/workflows/release.yaml | 13 ++++++++++++- 3 files changed, 17 insertions(+), 14 deletions(-) rename .github/workflows/{test.yaml => format-and-test.yaml} (52%) delete mode 100644 .github/workflows/format.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/format-and-test.yaml similarity index 52% rename from .github/workflows/test.yaml rename to .github/workflows/format-and-test.yaml index 6c68fd4eeb..9365a1ae43 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/format-and-test.yaml @@ -8,6 +8,10 @@ on: jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.0 + secrets: inherit + test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-stage.yaml@v1.0.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.0 secrets: inherit diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml deleted file mode 100644 index e78c7ca6fe..0000000000 --- a/.github/workflows/format.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: Format the code - -on: - push: - branches: - - master - pull_request: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format-stage.yaml@v1.0.0 - secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2ebb44865d..4117903ac8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,8 +14,19 @@ concurrency: jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.0 + secrets: inherit + + test: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.0 + secrets: inherit + release: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release-stage.yaml@v1.0.0 + needs: + - format + - test + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1.1.0 secrets: inherit with: prefix-tag-with-v: false From 2e2665a8ba907946229a694469efcc87981aab33 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Oct 2023 02:00:19 +0300 Subject: [PATCH 0869/1204] Update the workflow deps --- .github/workflows/format-and-test.yaml | 4 ++-- .github/workflows/release.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/format-and-test.yaml b/.github/workflows/format-and-test.yaml index 9365a1ae43..d9d3eab2ae 100644 --- a/.github/workflows/format-and-test.yaml +++ b/.github/workflows/format-and-test.yaml @@ -9,9 +9,9 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.2 secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.2 secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 4117903ac8..6959dd0bef 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,18 +15,18 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.2 secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.2 secrets: inherit release: needs: - format - test - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1.1.0 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1.1.2 secrets: inherit with: prefix-tag-with-v: false From f7c362fd5efff4af63e877dd949d93af1d73cdac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Oct 2023 02:14:41 +0300 Subject: [PATCH 0870/1204] Move to test-with-postgres --- .github/workflows/format-and-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/format-and-test.yaml b/.github/workflows/format-and-test.yaml index d9d3eab2ae..84a80c3cc3 100644 --- a/.github/workflows/format-and-test.yaml +++ b/.github/workflows/format-and-test.yaml @@ -13,5 +13,5 @@ jobs: secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-with-postgres.yaml@2d3d247058c0b80a6dabcabf27330a083e025cb2 secrets: inherit From d01e4a692cc45a1326c365c968b90a31ac758b9e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 15 Oct 2023 13:18:46 +0300 Subject: [PATCH 0871/1204] Fix the deps --- .github/workflows/format-and-test.yaml | 4 ++-- .github/workflows/release.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/format-and-test.yaml b/.github/workflows/format-and-test.yaml index 84a80c3cc3..42b468c94a 100644 --- a/.github/workflows/format-and-test.yaml +++ b/.github/workflows/format-and-test.yaml @@ -9,9 +9,9 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-with-postgres.yaml@2d3d247058c0b80a6dabcabf27330a083e025cb2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-with-postgres.yaml@v1 secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6959dd0bef..e922700cf0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,18 +15,18 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1.1.2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1.1.2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1 secrets: inherit release: needs: - format - test - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1.1.2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1 secrets: inherit with: prefix-tag-with-v: false From 0d7c2aeedf6ba08ae0d944046db20c19bc5e5ab0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 03:32:11 +0300 Subject: [PATCH 0872/1204] Update CI --- .github/workflows/build-and-test.yaml | 40 +++++++++++++++++++ ...test.yaml => on-push-to-master-or-pr.yaml} | 2 +- .../{release.yaml => on-push-to-release.yaml} | 6 +-- 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build-and-test.yaml rename .github/workflows/{format-and-test.yaml => on-push-to-master-or-pr.yaml} (70%) rename .github/workflows/{release.yaml => on-push-to-release.yaml} (81%) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml new file mode 100644 index 0000000000..e2a6d18d3f --- /dev/null +++ b/.github/workflows/build-and-test.yaml @@ -0,0 +1,40 @@ +name: Compile, test and check the docs + +on: + workflow_call: + +jobs: + + test: + + strategy: + fail-fast: false + matrix: + include: + - ghc: 8.8.1 + ghc-options: "" + - ghc: latest + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 + with: + ghc: ${{matrix.ghc}} + ghc-options: ${{matrix.ghc-options}} diff --git a/.github/workflows/format-and-test.yaml b/.github/workflows/on-push-to-master-or-pr.yaml similarity index 70% rename from .github/workflows/format-and-test.yaml rename to .github/workflows/on-push-to-master-or-pr.yaml index 42b468c94a..e2181dbde6 100644 --- a/.github/workflows/format-and-test.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -13,5 +13,5 @@ jobs: secrets: inherit test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test-with-postgres.yaml@v1 + uses: ./.github/workflows/build-and-test.yaml secrets: inherit diff --git a/.github/workflows/release.yaml b/.github/workflows/on-push-to-release.yaml similarity index 81% rename from .github/workflows/release.yaml rename to .github/workflows/on-push-to-release.yaml index e922700cf0..3d5947f9b2 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -18,14 +18,14 @@ jobs: uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 secrets: inherit - test: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/test.yaml@v1 + verify: + uses: ./.github/workflows/build-and-test.yaml secrets: inherit release: needs: - format - - test + - verify uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1 secrets: inherit with: From 7ae600f3a5d899ecae2e2d41034265cf4562fa2c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 03:40:38 +0300 Subject: [PATCH 0873/1204] Update the minimal GHC --- .github/workflows/build-and-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index e2a6d18d3f..8dba3c945c 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -11,7 +11,7 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" - ghc: latest From 6270c62cee6a67f2a571edaadf9a80dfc59cabce Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 03:54:25 +0300 Subject: [PATCH 0874/1204] Lint --- hasql.cabal | 1 - library/Hasql/Connection.hs | 2 +- library/Hasql/Private/Commands.hs | 1 - library/Hasql/Private/Decoders.hs | 2 - library/Hasql/Private/Decoders/Result.hs | 4 -- library/Hasql/Private/Decoders/Results.hs | 1 - library/Hasql/Private/IO.hs | 1 - library/Hasql/Private/PTI.hs | 70 +++++++++++++++++++++++ library/Hasql/Private/Prelude.hs | 2 +- library/Hasql/Private/Session.hs | 2 - profiling/Main.hs | 2 +- tasty/Main.hs | 5 +- tasty/Main/Connection.hs | 2 - tasty/Main/DSL.hs | 3 - tasty/Main/Statements.hs | 2 - threads-test/Main.hs | 4 +- 16 files changed, 77 insertions(+), 27 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index f6f09cddae..22a568b2d8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -172,7 +172,6 @@ test-suite tasty build-depends: , contravariant-extras >=0.3.5.2 && <0.4 , hasql - , QuickCheck >=2.8.1 && <3 , quickcheck-instances >=0.3.11 && <0.4 , rerebase <2 , tasty >=0.12 && <2 diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index c295e02927..fd1fbb6eeb 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -2,7 +2,7 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection ( Connection, - ConnectionError (..), + ConnectionError, acquire, release, Settings, diff --git a/library/Hasql/Private/Commands.hs b/library/Hasql/Private/Commands.hs index 29c9904e4f..1a851dcefe 100644 --- a/library/Hasql/Private/Commands.hs +++ b/library/Hasql/Private/Commands.hs @@ -6,7 +6,6 @@ module Hasql.Private.Commands ) where -import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL import Hasql.Private.Prelude diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Private/Decoders.hs index 0dc02dfcb7..1088a20819 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Private/Decoders.hs @@ -3,7 +3,6 @@ module Hasql.Private.Decoders where import qualified Data.Aeson as Aeson -import qualified Data.Vector as Vector import qualified Data.Vector.Generic as GenericVector import qualified Hasql.Private.Decoders.Array as Array import qualified Hasql.Private.Decoders.Composite as Composite @@ -11,7 +10,6 @@ import qualified Hasql.Private.Decoders.Result as Result import qualified Hasql.Private.Decoders.Results as Results import qualified Hasql.Private.Decoders.Row as Row import qualified Hasql.Private.Decoders.Value as Value -import qualified Hasql.Private.Errors as Errors import Hasql.Private.Prelude hiding (bool, maybe) import qualified Hasql.Private.Prelude as Prelude import qualified Network.IP.Addr as NetworkIp diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs index 2226a6f752..ba052d117b 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Private/Decoders/Result.hs @@ -116,8 +116,6 @@ maybe rowDec = where rowToInt (LibPQ.Row n) = fromIntegral n - intToRow = - LibPQ.Row . fromIntegral {-# INLINE single #-} single :: Row.Row a -> Result a @@ -139,8 +137,6 @@ single rowDec = where rowToInt (LibPQ.Row n) = fromIntegral n - intToRow = - LibPQ.Row . fromIntegral {-# INLINE vector #-} vector :: Row.Row a -> Result (Vector a) diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Private/Decoders/Results.hs index e560124cee..f076c1946e 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Private/Decoders/Results.hs @@ -12,7 +12,6 @@ module Hasql.Private.Decoders.Results where import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Decoders.Result as Result -import qualified Hasql.Private.Decoders.Row as Row import Hasql.Private.Errors import Hasql.Private.Prelude hiding (many, maybe) import qualified Hasql.Private.Prelude as Prelude diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/Private/IO.hs index abd65bd883..1e2d2dbe7f 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/Private/IO.hs @@ -2,7 +2,6 @@ -- An API of low-level IO operations. module Hasql.Private.IO where -import qualified Data.DList as DList import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Commands as Commands import qualified Hasql.Private.Decoders.Result as ResultDecoders diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/Private/PTI.hs index 531f2d1283..3cc449b7b1 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/Private/PTI.hs @@ -19,142 +19,212 @@ mkPTI format oid arrayOID = -- * Constants +abstime :: PTI abstime = mkPTI LibPQ.Binary 702 (Just 1023) +aclitem :: PTI aclitem = mkPTI LibPQ.Binary 1033 (Just 1034) +bit :: PTI bit = mkPTI LibPQ.Binary 1560 (Just 1561) +bool :: PTI bool = mkPTI LibPQ.Binary 16 (Just 1000) +box :: PTI box = mkPTI LibPQ.Binary 603 (Just 1020) +bpchar :: PTI bpchar = mkPTI LibPQ.Binary 1042 (Just 1014) +bytea :: PTI bytea = mkPTI LibPQ.Binary 17 (Just 1001) +char :: PTI char = mkPTI LibPQ.Binary 18 (Just 1002) +cid :: PTI cid = mkPTI LibPQ.Binary 29 (Just 1012) +cidr :: PTI cidr = mkPTI LibPQ.Binary 650 (Just 651) +circle :: PTI circle = mkPTI LibPQ.Binary 718 (Just 719) +cstring :: PTI cstring = mkPTI LibPQ.Binary 2275 (Just 1263) +date :: PTI date = mkPTI LibPQ.Binary 1082 (Just 1182) +daterange :: PTI daterange = mkPTI LibPQ.Binary 3912 (Just 3913) +float4 :: PTI float4 = mkPTI LibPQ.Binary 700 (Just 1021) +float8 :: PTI float8 = mkPTI LibPQ.Binary 701 (Just 1022) +gtsvector :: PTI gtsvector = mkPTI LibPQ.Binary 3642 (Just 3644) +inet :: PTI inet = mkPTI LibPQ.Binary 869 (Just 1041) +int2 :: PTI int2 = mkPTI LibPQ.Binary 21 (Just 1005) +int2vector :: PTI int2vector = mkPTI LibPQ.Binary 22 (Just 1006) +int4 :: PTI int4 = mkPTI LibPQ.Binary 23 (Just 1007) +int4range :: PTI int4range = mkPTI LibPQ.Binary 3904 (Just 3905) +int8 :: PTI int8 = mkPTI LibPQ.Binary 20 (Just 1016) +int8range :: PTI int8range = mkPTI LibPQ.Binary 3926 (Just 3927) +interval :: PTI interval = mkPTI LibPQ.Binary 1186 (Just 1187) +json :: PTI json = mkPTI LibPQ.Binary 114 (Just 199) +jsonb :: PTI jsonb = mkPTI LibPQ.Binary 3802 (Just 3807) +line :: PTI line = mkPTI LibPQ.Binary 628 (Just 629) +lseg :: PTI lseg = mkPTI LibPQ.Binary 601 (Just 1018) +macaddr :: PTI macaddr = mkPTI LibPQ.Binary 829 (Just 1040) +money :: PTI money = mkPTI LibPQ.Binary 790 (Just 791) +name :: PTI name = mkPTI LibPQ.Binary 19 (Just 1003) +numeric :: PTI numeric = mkPTI LibPQ.Binary 1700 (Just 1231) +numrange :: PTI numrange = mkPTI LibPQ.Binary 3906 (Just 3907) +oid :: PTI oid = mkPTI LibPQ.Binary 26 (Just 1028) +oidvector :: PTI oidvector = mkPTI LibPQ.Binary 30 (Just 1013) +path :: PTI path = mkPTI LibPQ.Binary 602 (Just 1019) +point :: PTI point = mkPTI LibPQ.Binary 600 (Just 1017) +polygon :: PTI polygon = mkPTI LibPQ.Binary 604 (Just 1027) +record :: PTI record = mkPTI LibPQ.Binary 2249 (Just 2287) +refcursor :: PTI refcursor = mkPTI LibPQ.Binary 1790 (Just 2201) +regclass :: PTI regclass = mkPTI LibPQ.Binary 2205 (Just 2210) +regconfig :: PTI regconfig = mkPTI LibPQ.Binary 3734 (Just 3735) +regdictionary :: PTI regdictionary = mkPTI LibPQ.Binary 3769 (Just 3770) +regoper :: PTI regoper = mkPTI LibPQ.Binary 2203 (Just 2208) +regoperator :: PTI regoperator = mkPTI LibPQ.Binary 2204 (Just 2209) +regproc :: PTI regproc = mkPTI LibPQ.Binary 24 (Just 1008) +regprocedure :: PTI regprocedure = mkPTI LibPQ.Binary 2202 (Just 2207) +regtype :: PTI regtype = mkPTI LibPQ.Binary 2206 (Just 2211) +reltime :: PTI reltime = mkPTI LibPQ.Binary 703 (Just 1024) +text :: PTI text = mkPTI LibPQ.Binary 25 (Just 1009) +tid :: PTI tid = mkPTI LibPQ.Binary 27 (Just 1010) +time :: PTI time = mkPTI LibPQ.Binary 1083 (Just 1183) +timestamp :: PTI timestamp = mkPTI LibPQ.Binary 1114 (Just 1115) +timestamptz :: PTI timestamptz = mkPTI LibPQ.Binary 1184 (Just 1185) +timetz :: PTI timetz = mkPTI LibPQ.Binary 1266 (Just 1270) +tinterval :: PTI tinterval = mkPTI LibPQ.Binary 704 (Just 1025) +tsquery :: PTI tsquery = mkPTI LibPQ.Binary 3615 (Just 3645) +tsrange :: PTI tsrange = mkPTI LibPQ.Binary 3908 (Just 3909) +tstzrange :: PTI tstzrange = mkPTI LibPQ.Binary 3910 (Just 3911) +tsvector :: PTI tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) +txid_snapshot :: PTI txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) +textUnknown :: PTI textUnknown = mkPTI LibPQ.Text 705 (Just 705) +binaryUnknown :: PTI binaryUnknown = mkPTI LibPQ.Binary 705 (Just 705) +uuid :: PTI uuid = mkPTI LibPQ.Binary 2950 (Just 2951) +varbit :: PTI varbit = mkPTI LibPQ.Binary 1562 (Just 1563) +varchar :: PTI varchar = mkPTI LibPQ.Binary 1043 (Just 1015) +void :: PTI void = mkPTI LibPQ.Binary 2278 Nothing +xid :: PTI xid = mkPTI LibPQ.Binary 28 (Just 1011) +xml :: PTI xml = mkPTI LibPQ.Binary 142 (Just 143) diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Private/Prelude.hs index 065c0f4e7e..532144a60d 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Private/Prelude.hs @@ -46,7 +46,7 @@ import Data.Either as Exports import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports +import Data.Functor as Exports hiding (unzip) import Data.Functor.Compose as Exports import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Private/Session.hs index 9607e2c078..ea66a4bd9c 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Private/Session.hs @@ -1,6 +1,5 @@ module Hasql.Private.Session where -import qualified Database.PostgreSQL.LibPQ as LibPQ import qualified Hasql.Private.Connection as Connection import qualified Hasql.Private.Decoders.Result as Decoders.Result import qualified Hasql.Private.Decoders.Results as Decoders.Results @@ -9,7 +8,6 @@ import qualified Hasql.Private.Encoders.Params as Encoders.Params import Hasql.Private.Errors import qualified Hasql.Private.IO as IO import Hasql.Private.Prelude -import qualified Hasql.Private.Settings as Settings import qualified Hasql.Statement as Statement -- | diff --git a/profiling/Main.hs b/profiling/Main.hs index eb4d0bb09d..2dddaa29b1 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -3,11 +3,11 @@ module Main where import qualified Data.Vector as F import qualified Hasql.Connection as A import qualified Hasql.Decoders as D -import qualified Hasql.Encoders as E import qualified Hasql.Session as B import qualified Hasql.Statement as C import Prelude +main :: IO () main = do Right connection <- acquireConnection diff --git a/tasty/Main.hs b/tasty/Main.hs index 89991ab0b0..36fbb420b7 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -9,16 +9,17 @@ import qualified Main.Connection as Connection import qualified Main.DSL as DSL import Main.Prelude hiding (assert) import qualified Main.Statements as Statements -import qualified Test.QuickCheck as QuickCheck -import Test.QuickCheck.Instances +import Test.QuickCheck.Instances () import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.QuickCheck import Test.Tasty.Runners +main :: IO () main = defaultMain tree +tree :: TestTree tree = localOption (NumThreads 1) $ testGroup diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index e8393dae67..ca2d20b060 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -1,8 +1,6 @@ module Main.Connection where import qualified Hasql.Connection as HC -import qualified Hasql.Session -import qualified Hasql.Statement as HQ import Main.Prelude with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index d9ef22e9b3..6c182c77c6 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -8,10 +8,7 @@ module Main.DSL where import qualified Hasql.Connection as HC -import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE import qualified Hasql.Session -import qualified Hasql.Statement as HQ import Main.Prelude type Session = diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index 7ab07b8fc2..d910df591a 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -1,10 +1,8 @@ module Main.Statements where import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE import qualified Hasql.Statement as HQ import Main.Prelude -import qualified Main.Prelude as Prelude plain :: ByteString -> HQ.Statement () () plain sql = diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 8d94459fd3..c08d4d3ed8 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -1,13 +1,11 @@ module Main where import qualified Hasql.Connection -import qualified Hasql.Decoders -import qualified Hasql.Encoders import qualified Hasql.Session -import qualified Hasql.Statement import qualified Main.Statements as Statements import Prelude +main :: IO () main = acquire >>= use where From 30c8d67e85d6f92ea9351b531c71ffaa158418e1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 04:01:31 +0300 Subject: [PATCH 0875/1204] Add password for CI --- profiling/Main.hs | 2 +- tasty/Main/Connection.hs | 2 +- tasty/Main/DSL.hs | 2 +- threads-test/Main.hs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/profiling/Main.hs b/profiling/Main.hs index 2dddaa29b1..4747963422 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -25,7 +25,7 @@ main = host = "localhost" port = 5432 user = "postgres" - password = "" + password = "postgres" database = "postgres" -- * Sessions diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index ca2d20b060..d54f2db26a 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -16,7 +16,7 @@ with handler = host = "localhost" port = 5432 user = "postgres" - password = "" + password = "postgres" database = "postgres" use connection = lift $ handler connection diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 6c182c77c6..7d3bf52760 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -32,7 +32,7 @@ session session = host = "localhost" port = 5432 user = "postgres" - password = "" + password = "postgres" database = "postgres" use connection = ExceptT diff --git a/threads-test/Main.hs b/threads-test/Main.hs index c08d4d3ed8..15c334f410 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -18,7 +18,7 @@ main = $ Hasql.Connection.acquire connectionSettings where connectionSettings = - Hasql.Connection.settings "localhost" 5432 "postgres" "" "postgres" + Hasql.Connection.settings "localhost" 5432 "postgres" "postgres" "postgres" use (connection1, connection2) = do beginVar <- newEmptyMVar From 89e11ff2fe91c88a58f43f8b00ea0601839192a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 04:29:53 +0300 Subject: [PATCH 0876/1204] Restrict base and update CI --- .github/workflows/build-and-test.yaml | 4 +++- hasql.cabal | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index 8dba3c945c..7a679fa43b 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -11,8 +11,9 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.10.1 + - ghc: 8.8.1 ghc-options: "" + ignore-haddock: true - ghc: latest runs-on: ubuntu-latest @@ -38,3 +39,4 @@ jobs: with: ghc: ${{matrix.ghc}} ghc-options: ${{matrix.ghc-options}} + ignore-haddock: ${{matrix.ignore-haddock}} diff --git a/hasql.cabal b/hasql.cabal index 22a568b2d8..a3cc05fd84 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -99,7 +99,7 @@ library build-depends: , aeson >=2 && <3 , attoparsec >=0.10 && <0.15 - , base >=4.12 && <5 + , base >=4.13 && <5 , bytestring >=0.10 && <0.12 , bytestring-strict-builder >=0.4.5.1 && <0.5 , contravariant >=1.3 && <2 From 6c6f83cb63f44e85dbfa116b9e4b16061445f8d6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 04:42:54 +0300 Subject: [PATCH 0877/1204] Try a string literal --- .github/workflows/build-and-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index 7a679fa43b..40fd7fd0cd 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -13,7 +13,7 @@ jobs: include: - ghc: 8.8.1 ghc-options: "" - ignore-haddock: true + ignore-haddock: "true" - ghc: latest runs-on: ubuntu-latest From a370d72131e69da5fbdf7ea98735035c2eec865a Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 16 Oct 2023 12:36:14 +0000 Subject: [PATCH 0878/1204] Set package version to 1.6.3.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index a3cc05fd84..aa7c58e97e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.3.2 +version: 1.6.3.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 48492f17f36f1a2246aeff86ff0b64f565abb6b0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 15:39:46 +0300 Subject: [PATCH 0879/1204] Rename workflows --- .github/workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index e2181dbde6..1392980759 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -12,6 +12,6 @@ jobs: uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 secrets: inherit - test: + check: uses: ./.github/workflows/build-and-test.yaml secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 3d5947f9b2..9a1cc5e4cc 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -18,14 +18,14 @@ jobs: uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 secrets: inherit - verify: + check: uses: ./.github/workflows/build-and-test.yaml secrets: inherit release: needs: - format - - verify + - check uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1 secrets: inherit with: From e8c8eb126fa79826b1db0ab6003b41c4e6023299 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 16 Oct 2023 15:47:35 +0300 Subject: [PATCH 0880/1204] Rename CI things --- .github/workflows/{build-and-test.yaml => check.yaml} | 2 +- .github/workflows/on-push-to-master-or-pr.yaml | 4 +--- .github/workflows/on-push-to-release.yaml | 4 +--- 3 files changed, 3 insertions(+), 7 deletions(-) rename .github/workflows/{build-and-test.yaml => check.yaml} (98%) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/check.yaml similarity index 98% rename from .github/workflows/build-and-test.yaml rename to .github/workflows/check.yaml index 40fd7fd0cd..9938564243 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/check.yaml @@ -5,7 +5,7 @@ on: jobs: - test: + check: strategy: fail-fast: false diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 1392980759..7e14ae2e26 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -1,5 +1,3 @@ -name: Compile, test and check the docs - on: push: branches: @@ -13,5 +11,5 @@ jobs: secrets: inherit check: - uses: ./.github/workflows/build-and-test.yaml + uses: ./.github/workflows/check.yaml secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 9a1cc5e4cc..19636d01d4 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -1,5 +1,3 @@ -name: Release the lib to Hackage - on: push: branches: @@ -19,7 +17,7 @@ jobs: secrets: inherit check: - uses: ./.github/workflows/build-and-test.yaml + uses: ./.github/workflows/check.yaml secrets: inherit release: From 25f05bae79d67371a7eb0aaf13312d91ac8b4094 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 31 Oct 2023 19:58:48 +0300 Subject: [PATCH 0881/1204] Change the OID of composites from unknown to record --- library/Hasql/Private/Encoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 52214da849..608a524c8c 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -304,7 +304,7 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = -- Lift a composite encoder into a value encoder. composite :: Composite a -> Value a composite (Composite encode print) = - Value (Value.unsafePTI PTI.binaryUnknown encodeValue printValue) + Value (Value.unsafePTI PTI.record encodeValue printValue) where encodeValue idt val = A.composite $ encode val idt From 3f85f643f205ced94f4a1287c78d94cfd736583d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 31 Oct 2023 20:04:31 +0300 Subject: [PATCH 0882/1204] Revert "Change the OID of composites from unknown to record" This reverts commit 25f05bae79d67371a7eb0aaf13312d91ac8b4094. --- library/Hasql/Private/Encoders.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Private/Encoders.hs index 608a524c8c..52214da849 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Private/Encoders.hs @@ -304,7 +304,7 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = -- Lift a composite encoder into a value encoder. composite :: Composite a -> Value a composite (Composite encode print) = - Value (Value.unsafePTI PTI.record encodeValue printValue) + Value (Value.unsafePTI PTI.binaryUnknown encodeValue printValue) where encodeValue idt val = A.composite $ encode val idt From cc3bba3a69a44773d746f81d38be88bc1ea49d3c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 2 Nov 2023 13:26:52 +0300 Subject: [PATCH 0883/1204] Fix description --- hasql.cabal | 1 - 1 file changed, 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index aa7c58e97e..a28d75e212 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -7,7 +7,6 @@ description: Root of the \"hasql\" ecosystem. For details and tutorials see . - . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. homepage: https://github.com/nikita-volkov/hasql From 1cf7c2c932e8118fce77923d66ec5a6dbf8fae33 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 18 Nov 2023 19:30:43 +0300 Subject: [PATCH 0884/1204] Update bytestring --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index a28d75e212..f359e7aa6a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -99,7 +99,7 @@ library , aeson >=2 && <3 , attoparsec >=0.10 && <0.15 , base >=4.13 && <5 - , bytestring >=0.10 && <0.12 + , bytestring >=0.10 && <0.13 , bytestring-strict-builder >=0.4.5.1 && <0.5 , contravariant >=1.3 && <2 , dlist >=0.8 && <0.9 || >=1 && <2 From 0c04dcd14adc6a14610a1413fe27b29bf79d9375 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 18 Nov 2023 16:39:16 +0000 Subject: [PATCH 0885/1204] Set package version to 1.6.3.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index f359e7aa6a..edafaf40e6 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.3.3 +version: 1.6.3.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 53846aa4d3c225402c5c06d9e8d14316fa9de145 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 14 Dec 2023 10:04:47 +0300 Subject: [PATCH 0886/1204] Modernize --- .github/workflows/cd.yaml | 35 -------- .github/workflows/check.yaml | 30 +++++++ .github/workflows/ci.yaml | 88 ------------------- .../workflows/on-push-to-master-or-pr.yaml | 17 ++++ .github/workflows/on-push-to-release.yaml | 32 +++++++ cabal.project | 1 + library/Hasql/Pool/Prelude.hs | 2 +- 7 files changed, 81 insertions(+), 124 deletions(-) delete mode 100644 .github/workflows/cd.yaml create mode 100644 .github/workflows/check.yaml delete mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/on-push-to-master-or-pr.yaml create mode 100644 .github/workflows/on-push-to-release.yaml create mode 100644 cabal.project diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml deleted file mode 100644 index aa998c9ade..0000000000 --- a/.github/workflows/cd.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: Release the lib to Hackage - -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: cd - cancel-in-progress: false - -jobs: - - ci: - uses: ./.github/workflows/ci.yaml - secrets: inherit - - cd: - needs: - - ci - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Release - uses: nikita-volkov/release-haskell-package.github-action@v1.0.0 - with: - hackage-token: ${{ secrets.HACKAGE_TOKEN }} - github-token: ${{ secrets.GITHUB_TOKEN }} - version-bump-place: ${{ fromJSON('{"supermajor":0,"major":1,"minor":2,"patch":3}')[github.ref_name] }} - main-branch: master - prefix-tag-with-v: false diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 0000000000..94d3b99eb3 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,30 @@ +name: Compile, test and check the docs + +on: + workflow_call: + +jobs: + + check: + + strategy: + fail-fast: false + matrix: + include: + - ghc: 8.8.1 + ghc-options: "" + ignore-haddock: true + ignore-cabal-check: true + - ghc: latest + ignore-cabal-check: true + + runs-on: ubuntu-latest + + steps: + + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 + with: + ghc: ${{matrix.ghc}} + ghc-options: ${{matrix.ghc-options}} + ignore-haddock: ${{matrix.ignore-haddock}} + ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index daceabbc8c..0000000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,88 +0,0 @@ -name: Compile, test and check the docs - -on: - push: - branches: - - master - pull_request: - workflow_call: - -jobs: - - format: - - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: nikita-volkov/cabal-fmt.github-action@v1.0.0 - - uses: nikita-volkov/ormolu.github-action@v1.0.0 - - name: Commit the changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Format - - build-and-test: - - needs: - - format - - strategy: - fail-fast: false - matrix: - include: - - ghc: '8.10' - - ghc: '9.4' - ghc-options: -Werror -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints -Wunused-packages -Wno-name-shadowing -Wno-unused-matches -Wno-unused-do-bind -Wno-type-defaults - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_PASSWORD: postgres - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - - steps: - - - uses: actions/checkout@v3 - - - name: Setup Haskell - uses: haskell/actions/setup@v2 - with: - ghc-version: ${{ matrix.ghc }} - cabal-version: 3.8 - - - name: Generate cabal.project - run: | - echo "packages: ." >> cabal.project - echo "constraints:" >> cabal.project - cat cabal.project - - - name: Generate cabal.project.freeze - run: cabal freeze --enable-tests --enable-benchmarks - - - uses: actions/cache@v3 - with: - path: | - ~/.cabal/store - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.ghc }}- - - - name: Install deps and compile - run: cabal build --enable-tests -j +RTS -A128m -n2m -N -RTS --ghc-options="${{ matrix.ghc-options }}" - - - name: Test - run: | - export POSTGRES_PASSWORD=postgres - cabal test --test-show-details always - - - name: Run Haddock - run: cabal haddock diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml new file mode 100644 index 0000000000..79c21f5dcc --- /dev/null +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -0,0 +1,17 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml new file mode 100644 index 0000000000..9024112507 --- /dev/null +++ b/.github/workflows/on-push-to-release.yaml @@ -0,0 +1,32 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: release + cancel-in-progress: false + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit + + release: + needs: + - format + - check + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + secrets: inherit + with: + prefix-tag-with-v: false diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000000..e6fdbadb43 --- /dev/null +++ b/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 7530b8a7da..3ac731e77b 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -26,7 +26,7 @@ import Data.Either as Exports import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports +import Data.Functor as Exports hiding (unzip) import Data.Functor.Compose as Exports import Data.IORef as Exports import Data.Int as Exports From 99a63df723c3de2f69ee2fca349a19c8a2e8518c Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 14 Dec 2023 07:05:41 +0000 Subject: [PATCH 0887/1204] Format --- library/Hasql/Pool.hs | 8 ++++++-- test/Main.hs | 20 +++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 3dff0f21ad..c3fc88ceb3 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -25,8 +25,12 @@ data Conn = Conn isAlive :: Word64 -> Word64 -> Word64 -> Conn -> Bool isAlive maxLifetime maxIdletime now Conn {..} = - now <= connCreationTimeNSec + maxLifetime - && now <= connUseTimeNSec + maxIdletime + now + <= connCreationTimeNSec + + maxLifetime + && now + <= connUseTimeNSec + + maxIdletime -- | Pool of connections to DB. data Pool = Pool diff --git a/test/Main.hs b/test/Main.hs index 1da268e168..dd618e0738 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -74,15 +74,18 @@ main = do release pool res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing - it "Times out connection acquisition" $ + it "Times out connection acquisition" + $ -- 1ms timeout - withPool 1 0.001 1_800 1_800 connectionSettings $ \pool -> do + withPool 1 0.001 1_800 1_800 connectionSettings + $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime res <- race - ( use pool $ - liftIO $ do + ( use pool + $ liftIO + $ do putMVar sleeping () threadDelay 1_000_000 -- 1s ) @@ -93,9 +96,11 @@ main = do t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) diffUTCTime t1 t0 `shouldSatisfy` (< 0.5) -- 0.5s - it "Passively times out old connections (maxLifetime)" $ + it "Passively times out old connections (maxLifetime)" + $ -- 0.5s connection lifetime - withPool 1 10 0.5 1_800 connectionSettings $ \pool -> do + withPool 1 10 0.5 1_800 connectionSettings + $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -141,7 +146,8 @@ main = do getConnectionSettings :: IO Connection.Settings getConnectionSettings = - B8.unwords . catMaybes + B8.unwords + . catMaybes <$> sequence [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", setting "port" $ defaultEnv "POSTGRES_PORT" "5432", From da5431bde13498100f6861cedca8f8e5899ee592 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 14 Dec 2023 10:34:25 +0300 Subject: [PATCH 0888/1204] Enable postgres in GA --- .github/workflows/check.yaml | 15 +++++++++++++++ test/Main.hs | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 94d3b99eb3..b39bceefae 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -20,6 +20,21 @@ jobs: runs-on: ubuntu-latest + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 diff --git a/test/Main.hs b/test/Main.hs index dd618e0738..873d6c2fd2 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -152,7 +152,7 @@ getConnectionSettings = [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", setting "port" $ defaultEnv "POSTGRES_PORT" "5432", setting "user" $ defaultEnv "POSTGRES_USER" "postgres", - setting "password" $ maybeEnv "POSTGRES_PASSWORD", + setting "password" $ defaultEnv "POSTGRES_PASSWORD" "postgres", setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" ] where From 6b0c8e5e84fdbab0fff21e022a302ed1f6654ad8 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 14 Dec 2023 07:45:20 +0000 Subject: [PATCH 0889/1204] Set package version to 0.10.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index ae8083b888..f5aa477da0 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.10 +version: 0.10.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 2ae3e0c8ab062958edf3e900104d919e0e6c065d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 25 Dec 2023 14:02:33 +0300 Subject: [PATCH 0890/1204] Modernize --- .github/workflows/check.yaml | 45 ++++++++++++++ .../workflows/on-push-to-master-or-pr.yaml | 17 ++++++ .github/workflows/on-push-to-release.yaml | 32 ++++++++++ .travis.yml | 61 ------------------- cabal.project | 1 + conflicts-test/Main.hs | 11 ++-- library/Hasql/Transaction.hs | 1 - library/Hasql/Transaction/Private/Prelude.hs | 6 +- library/Hasql/Transaction/Private/Sessions.hs | 2 + .../Hasql/Transaction/Private/Transaction.hs | 6 +- stack.yaml | 1 - stack.yaml.lock | 12 ---- 12 files changed, 108 insertions(+), 87 deletions(-) create mode 100644 .github/workflows/check.yaml create mode 100644 .github/workflows/on-push-to-master-or-pr.yaml create mode 100644 .github/workflows/on-push-to-release.yaml delete mode 100644 .travis.yml create mode 100644 cabal.project delete mode 100644 stack.yaml delete mode 100644 stack.yaml.lock diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 0000000000..b39bceefae --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,45 @@ +name: Compile, test and check the docs + +on: + workflow_call: + +jobs: + + check: + + strategy: + fail-fast: false + matrix: + include: + - ghc: 8.8.1 + ghc-options: "" + ignore-haddock: true + ignore-cabal-check: true + - ghc: latest + ignore-cabal-check: true + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 + with: + ghc: ${{matrix.ghc}} + ghc-options: ${{matrix.ghc-options}} + ignore-haddock: ${{matrix.ignore-haddock}} + ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml new file mode 100644 index 0000000000..79c21f5dcc --- /dev/null +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -0,0 +1,17 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml new file mode 100644 index 0000000000..9024112507 --- /dev/null +++ b/.github/workflows/on-push-to-release.yaml @@ -0,0 +1,32 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: release + cancel-in-progress: false + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit + + release: + needs: + - format + - check + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + secrets: inherit + with: + prefix-tag-with-v: false diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6c4882d893..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,61 +0,0 @@ -if: tag IS blank - -env: - - ghc=8.6.1 - - ghc=8.8.1 - - ghc=8.10.2 benchmarks=1 tests=1 - - ghc=9.0.1 - -matrix: - allow_failures: - - env: ghc=9.0.1 - -services: - - postgresql - -install: - # Set up the Shell to treat the semicolon as && - - set -eo pipefail - # Install GHC and Cabal - - - cabal=${cabal=2.4}; - travis_retry sudo add-apt-repository -y ppa:hvr/ghc; - travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; - # Update the Cabal database - - cabal update - # Switch to the distro: - - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - # Install the lower bound dependencies - - - if [ "$lower_bound_dependencies" = "1" ]; - then - constraint_options=( - ); - fi; - # Install the library dependencies - - cabal v1-install --only-dependencies --reorder-goals --force-reinstalls - ${constraint_options[@]} - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - # Build the library - - cabal v1-build - # Configure and build the remaining stuff - - cabal v1-configure - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - -f doctest - - cabal v1-build - -script: - - | - if [ "$tests" = "1" ]; - then - cabal v1-test --show-details=always; - fi; diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000000..e6fdbadb43 --- /dev/null +++ b/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index b12fbb6493..1dda5c3a91 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -9,6 +9,7 @@ import qualified Main.Statements as D import qualified Main.Transactions as E import Prelude +main :: IO () main = bracket acquire release use where @@ -16,12 +17,12 @@ main = (,) <$> acquire <*> acquire where acquire = - join $ - fmap (either (fail . show) return) $ - A.acquire connectionSettings + join + $ fmap (either (fail . show) return) + $ A.acquire connectionSettings where connectionSettings = - A.settings "localhost" 5432 "postgres" "" "postgres" + A.settings "localhost" 5432 "postgres" "postgres" "postgres" release (connection1, connection2) = do transaction connection1 E.dropSchema @@ -41,10 +42,12 @@ main = tests = [readAndWriteTransactionsTest, transactionsTest, transactionAndQueryTest] +session :: A.Connection -> B.Session a -> IO a session connection session = B.run session connection >>= either (fail . show) return +transaction :: A.Connection -> C.Transaction a -> IO a transaction connection transaction = session connection (G.transaction G.RepeatableRead G.Write transaction) diff --git a/library/Hasql/Transaction.hs b/library/Hasql/Transaction.hs index b6bc42411e..9c0de9a6af 100644 --- a/library/Hasql/Transaction.hs +++ b/library/Hasql/Transaction.hs @@ -9,5 +9,4 @@ module Hasql.Transaction ) where -import Hasql.Transaction.Config import Hasql.Transaction.Private.Transaction diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs index 79bf394c8b..89bf947e31 100644 --- a/library/Hasql/Transaction/Private/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -32,7 +32,7 @@ import Data.Either as Exports import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports +import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports import Data.Functor.Identity as Exports @@ -71,13 +71,11 @@ import System.IO.Unsafe as Exports import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports -import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) import Text.Printf as Exports (hPrintf, printf) import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) -tryError :: MonadError e m => m a -> m (Either e a) +tryError :: (MonadError e m) => m a -> m (Either e a) tryError m = catchError (liftM Right m) (return . Left) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 5f4fcc703a..200ca1621e 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -31,11 +31,13 @@ tryTransaction level mode body preparable = do handleTransactionError error $ return Nothing Nothing -> return Nothing +commitOrAbort :: Bool -> Bool -> Session () commitOrAbort commit preparable = if commit then statement () (Statements.commitTransaction preparable) else statement () (Statements.abortTransaction preparable) +handleTransactionError :: QueryError -> Session a -> Session a handleTransactionError error onTransactionError = case error of QueryError _ _ (ResultError (ServerError "40001" _ _ _ _)) -> onTransactionError error -> throwError error diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index d36a9da2b6..e2a03436a8 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -5,7 +5,6 @@ import qualified Hasql.Statement as A import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude import qualified Hasql.Transaction.Private.Sessions as D -import qualified Hasql.Transaction.Private.Statements as C -- | -- A composable abstraction over the retryable transactions. @@ -17,12 +16,11 @@ newtype Transaction a = Transaction (StateT Bool B.Session a) deriving (Functor, Applicative, Monad) -instance Semigroup a => Semigroup (Transaction a) where +instance (Semigroup a) => Semigroup (Transaction a) where (<>) = liftA2 (<>) -instance Monoid a => Monoid (Transaction a) where +instance (Monoid a) => Monoid (Transaction a) where mempty = pure mempty - mappend = liftA2 mappend -- | -- Execute the transaction using the provided isolation level and mode. diff --git a/stack.yaml b/stack.yaml deleted file mode 100644 index 4998b208ca..0000000000 --- a/stack.yaml +++ /dev/null @@ -1 +0,0 @@ -resolver: nightly-2022-11-23 diff --git a/stack.yaml.lock b/stack.yaml.lock deleted file mode 100644 index e9b8153803..0000000000 --- a/stack.yaml.lock +++ /dev/null @@ -1,12 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files - -packages: [] -snapshots: -- completed: - sha256: f19b7679d0a1094c09ac025c8cfbd4bcdfb0f1f991110094f78ce5a8e299cb39 - size: 546437 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/11/23.yaml - original: nightly-2022-11-23 From 86aeb23282c22f23f1b63a1a2070bafec7528208 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 25 Dec 2023 11:31:43 +0000 Subject: [PATCH 0891/1204] Format --- hasql-transaction.cabal | 154 +++++++++++++++++------ library/Hasql/Transaction/Private/SQL.hs | 7 +- 2 files changed, 120 insertions(+), 41 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 8d4fc1c98e..42ee8af133 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,61 +1,137 @@ -name: hasql-transaction -version: 1.0.1.2 -category: Hasql, Database, PostgreSQL -synopsis: Composable abstraction over retryable transactions for Hasql -homepage: https://github.com/nikita-volkov/hasql-transaction -bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple +name: hasql-transaction +version: 1.0.1.2 +category: Hasql, Database, PostgreSQL +synopsis: + Composable abstraction over retryable transactions for Hasql + +homepage: https://github.com/nikita-volkov/hasql-transaction +bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple cabal-version: >=1.10 source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-transaction.git library - hs-source-dirs: library - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + hs-source-dirs: library + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 exposed-modules: Hasql.Transaction Hasql.Transaction.Sessions + other-modules: Hasql.Transaction.Config Hasql.Transaction.Private.Prelude + Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.SQL Hasql.Transaction.Private.Statements - Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Transaction + build-depends: - base >=4.12 && <5, - bytestring >=0.10 && <0.12, - bytestring-tree-builder >=0.2.7.8 && <0.3, - contravariant >=1.3 && <2, - contravariant-extras >=0.3 && <0.4, - hasql >=1.6 && <1.7, - mtl >=2.2 && <3, - transformers >=0.5 && <0.7 + base >=4.12 && <5 + , bytestring >=0.10 && <0.12 + , bytestring-tree-builder >=0.2.7.8 && <0.3 + , contravariant >=1.3 && <2 + , contravariant-extras >=0.3 && <0.4 + , hasql >=1.6 && <1.7 + , mtl >=2.2 && <3 + , transformers >=0.5 && <0.7 test-suite conflicts-test - type: exitcode-stdio-1.0 - hs-source-dirs: conflicts-test - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 - main-is: Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: conflicts-test + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 + main-is: Main.hs other-modules: Main.Statements Main.Transactions - ghc-options: - -O2 - -threaded - "-with-rtsopts=-N" + + ghc-options: -O2 -threaded -with-rtsopts=-N build-depends: - contravariant-extras >=0.3 && <0.4, - hasql-transaction, - hasql, - async >=2.1 && <3, - rerebase >=1.11 && <2 + async >=2.1 && <3 + , contravariant-extras >=0.3 && <0.4 + , hasql + , hasql-transaction + , rerebase >=1.11 && <2 diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs index 5776d3998a..6c7b80d813 100644 --- a/library/Hasql/Transaction/Private/SQL.hs +++ b/library/Hasql/Transaction/Private/SQL.hs @@ -23,5 +23,8 @@ beginTransaction isolation mode = declareCursor :: ByteString -> ByteString -> ByteString declareCursor name sql = - D.toByteString $ - "DECLARE " <> D.byteString name <> " NO SCROLL CURSOR FOR " <> D.byteString sql + D.toByteString + $ "DECLARE " + <> D.byteString name + <> " NO SCROLL CURSOR FOR " + <> D.byteString sql From 804931c4c5b98e5b29df127d665959f6c8cd0df3 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 25 Dec 2023 11:34:13 +0000 Subject: [PATCH 0892/1204] Set package version to 1.0.1.3 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 42ee8af133..89768416f2 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.1.2 +version: 1.0.1.3 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From fee9bc12008dde541da9424f134f614ebacedc1f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 26 Dec 2023 15:57:30 +0300 Subject: [PATCH 0893/1204] Update the deps --- cabal.project | 2 ++ hasql-transaction.cabal | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cabal.project b/cabal.project index e6fdbadb43..8396227c13 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,3 @@ packages: . +constraints: + , bytestring >=0.12 diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 89768416f2..a073148cf2 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -73,7 +73,7 @@ library build-depends: base >=4.12 && <5 - , bytestring >=0.10 && <0.12 + , bytestring >=0.10 && <0.13 , bytestring-tree-builder >=0.2.7.8 && <0.3 , contravariant >=1.3 && <2 , contravariant-extras >=0.3 && <0.4 From 57a6ff13fbf83172b07ba72771c73a91faf81ab4 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 26 Dec 2023 13:49:03 +0000 Subject: [PATCH 0894/1204] Set package version to 1.0.1.4 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index a073148cf2..d478d67129 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.1.3 +version: 1.0.1.4 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 73ac1079acfa4f4f23669fed1fd2c085aa6e3036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Domen=20Ko=C5=BEar?= Date: Thu, 4 Jan 2024 13:06:09 +0000 Subject: [PATCH 0895/1204] QueryError: add displayException --- library/Hasql/Private/Errors.hs | 64 ++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs index 2893b57719..012b8064ae 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Private/Errors.hs @@ -10,6 +10,7 @@ -- * Row-by-row fetching. module Hasql.Private.Errors where +import qualified Data.ByteString.Char8 as BC import Hasql.Private.Prelude -- | @@ -19,7 +20,68 @@ data QueryError = QueryError ByteString [Text] CommandError deriving (Show, Eq, Typeable) -instance Exception QueryError +instance Exception QueryError where + displayException (QueryError query params commandError) = + let queryContext :: Maybe (ByteString, Int) + queryContext = case commandError of + ClientError _ -> Nothing + ResultError resultError -> case resultError of + ServerError _ message _ _ (Just position) -> Just (message, position) + _ -> Nothing + + -- find the line number and position of the error + findLineAndPos :: ByteString -> Int -> (Int, Int) + findLineAndPos byteString errorPos = + let (_, line, pos) = + BC.foldl' + ( \(total, line, pos) c -> + case total + 1 of + 0 -> (total, line, pos) + cursor + | cursor == errorPos -> (-1, line, pos + 1) + | c == '\n' -> (total + 1, line + 1, 0) + | otherwise -> (total + 1, line, pos + 1) + ) + (0, 1, 0) + byteString + in (line, pos) + + formatErrorContext :: ByteString -> ByteString -> Int -> ByteString + formatErrorContext query message errorPos = + let lines = BC.lines query + (lineNum, linePos) = findLineAndPos query errorPos + in BC.unlines (take lineNum lines) + <> BC.replicate (linePos - 1) ' ' + <> "^ " + <> message + + prettyQuery :: ByteString + prettyQuery = case queryContext of + Nothing -> query + Just (message, pos) -> formatErrorContext query message pos + in "QueryError!\n" + <> "\n Query:\n" + <> BC.unpack prettyQuery + <> "\n" + <> "\n Params: " + <> show params + <> "\n Error: " + <> case commandError of + ClientError (Just message) -> "Client error: " <> show message + ClientError Nothing -> "Unknown client error" + ResultError resultError -> case resultError of + ServerError code message details hint position -> + "Server error " + <> BC.unpack code + <> ": " + <> BC.unpack message + <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details + <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint + UnexpectedResult message -> "Unexpected result: " <> show message + RowError row column rowError -> + "Row error: " <> show row <> ":" <> show column <> " " <> show rowError + UnexpectedAmountOfRows amount -> + "Unexpected amount of rows: " <> show amount -- | -- An error of some command in the session. From 504cc900407c20ec496eb6f6e89b719e1397e9bf Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 8 Jan 2024 12:57:26 +0000 Subject: [PATCH 0896/1204] Set package version to 1.6.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index edafaf40e6..42bda00542 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.3.4 +version: 1.6.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 2a0ebc048e1eb31aace84a69754cac6b512911ee Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 21 Jan 2024 20:46:39 +0100 Subject: [PATCH 0897/1204] Build with GHC 981 Resolves #5 --- hasql-implicits.cabal | 2 +- library/Hasql/Implicits/Prelude.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 9cad35bf54..b107c3103d 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -27,7 +27,7 @@ library build-depends: aeson >=1 && <3, base >=4.12 && <5, - bytestring >=0.10 && <0.12, + bytestring >=0.10 && <0.13, containers >=0.6 && <0.7, hasql >=1.4 && <1.7, network-ip >=0.2 && <1, diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index d04a9ed8eb..eca66a916c 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -29,7 +29,7 @@ import Data.Either as Exports import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports +import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports import Data.Int as Exports From d189490198868a4e35b72f17276382ab844e474e Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 21 Jan 2024 20:52:46 +0100 Subject: [PATCH 0898/1204] Modernize CI --- .github/workflows/check.yaml | 30 ++++++++++ .../workflows/on-push-to-master-or-pr.yaml | 17 ++++++ .github/workflows/on-push-to-release.yaml | 32 +++++++++++ .travis.yml | 57 ------------------- cabal.project | 1 + 5 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/check.yaml create mode 100644 .github/workflows/on-push-to-master-or-pr.yaml create mode 100644 .github/workflows/on-push-to-release.yaml delete mode 100644 .travis.yml create mode 100644 cabal.project diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 0000000000..ca78740be1 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,30 @@ +name: Compile, test and check the docs + +on: + workflow_call: + +jobs: + + check: + + strategy: + fail-fast: false + matrix: + include: + - ghc: 8.8.1 + ghc-options: "" + ignore-haddock: true + ignore-cabal-check: true + - ghc: latest + ignore-cabal-check: true + + runs-on: ubuntu-latest + + steps: + + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 + with: + ghc: ${{matrix.ghc}} + ghc-options: ${{matrix.ghc-options}} + ignore-haddock: ${{matrix.ignore-haddock}} + ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml new file mode 100644 index 0000000000..79c21f5dcc --- /dev/null +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -0,0 +1,17 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml new file mode 100644 index 0000000000..204c41a91a --- /dev/null +++ b/.github/workflows/on-push-to-release.yaml @@ -0,0 +1,32 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: release + cancel-in-progress: false + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit + + release: + needs: + - format + - check + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + secrets: inherit + with: + prefix-tag-with-v: false diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a82b351d9d..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,57 +0,0 @@ -if: tag IS blank - -env: - - ghc=8.6.5 benchmarks=1 tests=1 - - ghc=8.8.1 - -matrix: - allow_failures: - - env: ghc=8.8.1 - -install: - # Set up the Shell to treat the semicolon as && - - set -o pipefail && set -e - # Install GHC and Cabal - - - cabal=${cabal=2.4}; - travis_retry sudo add-apt-repository -y ppa:hvr/ghc; - travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; - # Update the Cabal database - - cabal update - # Switch to the distro: - - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - # Install the lower bound dependencies - - - if [ "$lower_bound_dependencies" = "1" ]; - then - constraint_options=( - ); - fi; - # Install the library dependencies - - cabal install --only-dependencies --reorder-goals --force-reinstalls - ${constraint_options[@]} - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - # Build the library - - cabal build - # Configure and build the remaining stuff - - cabal configure - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - -f doctest - - cabal build - -script: - - | - if [ "$tests" = "1" ]; - then - cabal clean; - cabal test --show-details=always --test-options=--quickcheck-tests=100000; - fi; diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000000..e6fdbadb43 --- /dev/null +++ b/cabal.project @@ -0,0 +1 @@ +packages: . From 7d090bd3b72ad11f104021c0c714133a3abdd1a6 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 21 Jan 2024 21:08:23 +0100 Subject: [PATCH 0899/1204] Build with GHC 9.8 --- hasql-dynamic-statements.cabal | 2 +- library/Hasql/DynamicStatements/Prelude.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index ec85d608b4..eb46533c07 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -34,7 +34,7 @@ library Hasql.DynamicStatements.Snippet.Defs build-depends: base >=4.12 && <5, - bytestring >=0.10 && <0.12, + bytestring >=0.10 && <0.13, containers >=0.6 && <0.7, hasql >=1.6 && <1.7, hasql-implicits >=0.1 && <0.2, diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 7fa72699a4..aa43f1709d 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -28,7 +28,7 @@ import Data.Either as Exports import Data.Fixed as Exports import Data.Foldable as Exports hiding (toList) import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports +import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports import Data.Int as Exports From 2abb6d4d2cd823fa1889529d1b3ca21af2b4beef Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 21 Jan 2024 21:08:32 +0100 Subject: [PATCH 0900/1204] Modernize CI --- .github/workflows/check.yaml | 45 +++++++++++++++++++ .../workflows/on-push-to-master-or-pr.yaml | 17 +++++++ .github/workflows/on-push-to-release.yaml | 32 +++++++++++++ cabal.project | 1 + test/Main.hs | 2 +- 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/check.yaml create mode 100644 .github/workflows/on-push-to-master-or-pr.yaml create mode 100644 .github/workflows/on-push-to-release.yaml create mode 100644 cabal.project diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 0000000000..86fb7a2577 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,45 @@ +name: Compile, test and check the docs + +on: + workflow_call: + +jobs: + + check: + + strategy: + fail-fast: false + matrix: + include: + - ghc: 8.8.1 + ghc-options: "" + ignore-haddock: true + ignore-cabal-check: true + - ghc: latest + ignore-cabal-check: true + + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 + with: + ghc: ${{matrix.ghc}} + ghc-options: ${{matrix.ghc-options}} + ignore-haddock: ${{matrix.ignore-haddock}} + ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml new file mode 100644 index 0000000000..79c21f5dcc --- /dev/null +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -0,0 +1,17 @@ +name: Compile, test and check the docs + +on: + push: + branches: + - master + pull_request: + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml new file mode 100644 index 0000000000..204c41a91a --- /dev/null +++ b/.github/workflows/on-push-to-release.yaml @@ -0,0 +1,32 @@ +name: Release the lib to Hackage + +on: + push: + branches: + - supermajor + - major + - minor + - patch + +concurrency: + group: release + cancel-in-progress: false + +jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit + + release: + needs: + - format + - check + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + secrets: inherit + with: + prefix-tag-with-v: false diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000000..e6fdbadb43 --- /dev/null +++ b/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/test/Main.hs b/test/Main.hs index d68225d530..35e67db6d4 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -70,7 +70,7 @@ withConnection handler = host = "localhost" port = 5432 user = "postgres" - password = "" + password = "postgres" database = "postgres" use connection = lift $ handler connection From b464448857c977e4739bfe2622e779091b42ba5e Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:02:12 +0000 Subject: [PATCH 0901/1204] Format --- hasql-implicits.cabal | 79 ++++++++++++++---------- library/Hasql/Implicits/Encoders.hs | 48 +++++++-------- library/Hasql/Implicits/Prelude.hs | 96 ++++++++++++++--------------- 3 files changed, 117 insertions(+), 106 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index b107c3103d..73fd11907d 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,38 +1,55 @@ -name: hasql-implicits -version: 0.1.1 -synopsis: Implicit definitions for Hasql, such as default codecs for standard types -homepage: https://github.com/nikita-volkov/hasql-implicits -bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple +name: hasql-implicits +version: 0.1.1 +synopsis: + Implicit definitions for Hasql, such as default codecs for standard types + +homepage: https://github.com/nikita-volkov/hasql-implicits +bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple cabal-version: >=1.10 source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-implicits.git library - hs-source-dirs: library - default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, OverloadedStrings, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies - ghc-options: -funbox-strict-fields - default-language: Haskell2010 - exposed-modules: - Hasql.Implicits.Encoders - other-modules: - Hasql.Implicits.Prelude + hs-source-dirs: library + default-extensions: + NoImplicitPrelude + BangPatterns + DeriveDataTypeable + DeriveFunctor + DeriveGeneric + DeriveTraversable + FlexibleContexts + FlexibleInstances + GeneralizedNewtypeDeriving + LambdaCase + OverloadedStrings + RankNTypes + ScopedTypeVariables + StandaloneDeriving + TypeApplications + TypeFamilies + + ghc-options: -funbox-strict-fields + default-language: Haskell2010 + exposed-modules: Hasql.Implicits.Encoders + other-modules: Hasql.Implicits.Prelude build-depends: - aeson >=1 && <3, - base >=4.12 && <5, - bytestring >=0.10 && <0.13, - containers >=0.6 && <0.7, - hasql >=1.4 && <1.7, - network-ip >=0.2 && <1, - scientific >=0.2 && <0.4, - text >=1 && <3, - time >=1.4 && <2, - uuid >=1.3 && <1.4, - vector >=0.10 && <0.14 + aeson >=1 && <3 + , base >=4.12 && <5 + , bytestring >=0.10 && <0.13 + , containers >=0.6 && <0.7 + , hasql >=1.4 && <1.7 + , network-ip >=0.2 && <1 + , scientific >=0.2 && <0.4 + , text >=1 && <3 + , time >=1.4 && <2 + , uuid >=1.3 && <1.4 + , vector >=0.10 && <0.14 diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index 215fb0bd28..36c29625ff 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -1,14 +1,14 @@ {-# LANGUAGE CPP #-} + module Hasql.Implicits.Encoders where -import Hasql.Implicits.Prelude hiding (bool) -import Hasql.Encoders import qualified Data.Aeson as Aeson +import Hasql.Encoders +import Hasql.Implicits.Prelude hiding (bool) - -{-| Provides a default implementation of parameter encoder. -} +-- | Provides a default implementation of parameter encoder. class DefaultParamEncoder a where - {-| Default parameter encoder with nullability specified. -} + -- | Default parameter encoder with nullability specified. defaultParam :: NullableOrNot Value a #define INSTANCES(VALUE, ENCODER) \ @@ -67,24 +67,24 @@ instance DefaultParamEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ } -INSTANCES(Char, char) -INSTANCES(Double, float8) -INSTANCES(Float, float4) -INSTANCES(Int16, int2) -INSTANCES(Int32, int4) -INSTANCES(Int64, int8) -INSTANCES(ByteString, bytea) -INSTANCES(Scientific, numeric) -INSTANCES(Text, text) -INSTANCES(UTCTime, timestamptz) -INSTANCES(Aeson.Value, jsonb) -INSTANCES(UUID, uuid) -INSTANCES(Day, date) -INSTANCES(DiffTime, interval) -INSTANCES(TimeOfDay, time) -INSTANCES(LocalTime, timestamp) -INSTANCES((TimeOfDay, TimeZone), timetz) -INSTANCES((NetAddr IP), inet) -INSTANCES(Bool, bool) +INSTANCES (Char, char) +INSTANCES (Double, float8) +INSTANCES (Float, float4) +INSTANCES (Int16, int2) +INSTANCES (Int32, int4) +INSTANCES (Int64, int8) +INSTANCES (ByteString, bytea) +INSTANCES (Scientific, numeric) +INSTANCES (Text, text) +INSTANCES (UTCTime, timestamptz) +INSTANCES (Aeson.Value, jsonb) +INSTANCES (UUID, uuid) +INSTANCES (Day, date) +INSTANCES (DiffTime, interval) +INSTANCES (TimeOfDay, time) +INSTANCES (LocalTime, timestamp) +INSTANCES ((TimeOfDay, TimeZone), timetz) +INSTANCES ((NetAddr IP), inet) +INSTANCES (Bool, bool) #undef INSTANCES diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index eca66a916c..fdcad6f587 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -1,11 +1,9 @@ module Hasql.Implicits.Prelude -( - module Exports, - foldlStrict, -) + ( module Exports, + foldlStrict, + ) where - -- base ------------------------- import Control.Applicative as Exports @@ -13,13 +11,19 @@ import Control.Arrow as Exports import Control.Category as Exports import Control.Concurrent as Exports import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports +-- containers +------------------------- + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports @@ -32,34 +36,55 @@ import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports -import Data.Int as Exports import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) import Data.Maybe as Exports -import Data.Monoid as Exports hiding (Last(..), First(..), (<>)) +import Data.Monoid as Exports hiding (First (..), Last (..), (<>)) import Data.Ord as Exports import Data.Proxy as Exports import Data.Ratio as Exports -import Data.Semigroup as Exports import Data.STRef as Exports +-- text +------------------------- + +-- vector +------------------------- + +-- scientific +------------------------- +import Data.Scientific as Exports (Scientific) +import Data.Semigroup as Exports +import Data.Sequence as Exports (Seq) import Data.String as Exports +import Data.Text as Exports (Text) +-- uuid +------------------------- + +-- time +------------------------- +import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports +import Data.UUID as Exports (UUID) import Data.Unique as Exports +import Data.Vector as Exports (Vector) import Data.Version as Exports import Data.Word as Exports import Debug.Trace as Exports import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (sizeOf, alignment) -import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import Foreign.Storable as Exports hiding (alignment, sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports +-- network-ip +------------------------- +import Network.IP.Addr as Exports (IP, NetAddr) import Numeric as Exports -import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports @@ -69,43 +94,12 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) -import Text.Read as Exports (Read(..), readMaybe, readEither) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports - --- containers -------------------------- -import Data.Sequence as Exports (Seq) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) - --- text -------------------------- -import Data.Text as Exports (Text) - --- vector -------------------------- -import Data.Vector as Exports (Vector) - --- scientific -------------------------- -import Data.Scientific as Exports (Scientific) - --- uuid -------------------------- -import Data.UUID as Exports (UUID) - --- time -------------------------- -import Data.Time as Exports - --- network-ip -------------------------- -import Network.IP.Addr as Exports (NetAddr, IP) +import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) {-# INLINE foldlStrict #-} -foldlStrict :: Foldable foldable => (b -> a -> b) -> b -> foldable a -> b +foldlStrict :: (Foldable foldable) => (b -> a -> b) -> b -> foldable a -> b foldlStrict = foldl' From dd6223841f7f36d82d6577e14771b5cf7e26f96d Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:02:58 +0000 Subject: [PATCH 0902/1204] Format --- hasql-dynamic-statements.cabal | 130 +++++++++++++----- library/Hasql/DynamicStatements/Prelude.hs | 47 +++---- library/Hasql/DynamicStatements/Session.hs | 19 ++- library/Hasql/DynamicStatements/Snippet.hs | 11 +- .../Hasql/DynamicStatements/Snippet/Defs.hs | 70 +++++----- library/Hasql/DynamicStatements/Statement.hs | 114 ++++++++------- test/Main.hs | 88 ++++++------ 7 files changed, 264 insertions(+), 215 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index eb46533c07..3e5432ef20 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,57 +1,117 @@ -name: hasql-dynamic-statements -version: 0.3.1.2 -synopsis: Toolkit for constructing Hasql statements dynamically +name: hasql-dynamic-statements +version: 0.3.1.2 +synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, which makes it trivial to construct SQL, while injecting values. It is intended to be used when the SQL of your statement depends on the parameters, that you want to pass in. -homepage: https://github.com/nikita-volkov/hasql-dynamic-statements -bug-reports: https://github.com/nikita-volkov/hasql-dynamic-statements/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple + +homepage: https://github.com/nikita-volkov/hasql-dynamic-statements +bug-reports: + https://github.com/nikita-volkov/hasql-dynamic-statements/issues + +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple cabal-version: >=1.10 source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-dynamic-statements.git library - hs-source-dirs: library - default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, OverloadedStrings, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies - ghc-options: -funbox-strict-fields - default-language: Haskell2010 + hs-source-dirs: library + default-extensions: + NoImplicitPrelude + BangPatterns + DeriveDataTypeable + DeriveFunctor + DeriveGeneric + DeriveTraversable + FlexibleContexts + FlexibleInstances + GeneralizedNewtypeDeriving + LambdaCase + OverloadedStrings + RankNTypes + ScopedTypeVariables + StandaloneDeriving + TypeApplications + TypeFamilies + + ghc-options: -funbox-strict-fields + default-language: Haskell2010 exposed-modules: Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet Hasql.DynamicStatements.Statement + other-modules: Hasql.DynamicStatements.Prelude Hasql.DynamicStatements.Snippet.Defs + build-depends: - base >=4.12 && <5, - bytestring >=0.10 && <0.13, - containers >=0.6 && <0.7, - hasql >=1.6 && <1.7, - hasql-implicits >=0.1 && <0.2, - ptr >=0.16.7.2 && <0.17 + base >=4.12 && <5 + , bytestring >=0.10 && <0.13 + , containers >=0.6 && <0.7 + , hasql >=1.6 && <1.7 + , hasql-implicits >=0.1 && <0.2 + , ptr >=0.16.7.2 && <0.17 test-suite test - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: Main.hs - default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples - default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + default-extensions: + NoImplicitPrelude + NoMonomorphismRestriction + Arrows + BangPatterns + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + LambdaCase + LiberalTypeSynonyms + MagicHash + MultiParamTypeClasses + MultiWayIf + OverloadedStrings + ParallelListComp + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + TemplateHaskell + TupleSections + TypeApplications + TypeFamilies + TypeOperators + UnboxedTuples + + default-language: Haskell2010 build-depends: - hasql, - hasql-dynamic-statements, - QuickCheck >=2.8.1 && <3, - quickcheck-instances >=0.3.11 && <0.4, - rerebase <2, - tasty >=0.12 && <2, - tasty-hunit >=0.9 && <0.11, - tasty-quickcheck >=0.9 && <0.11 + hasql + , hasql-dynamic-statements + , QuickCheck >=2.8.1 && <3 + , quickcheck-instances >=0.3.11 && <0.4 + , rerebase <2 + , tasty >=0.12 && <2 + , tasty-hunit >=0.9 && <0.11 + , tasty-quickcheck >=0.9 && <0.11 diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index aa43f1709d..5dbae4400c 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -1,10 +1,8 @@ module Hasql.DynamicStatements.Prelude -( - module Exports, -) + ( module Exports, + ) where - -- base ------------------------- import Control.Applicative as Exports @@ -12,13 +10,19 @@ import Control.Arrow as Exports import Control.Category as Exports import Control.Concurrent as Exports import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM) -import Control.Monad.IO.Class as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) import Control.Monad.Fail as Exports import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports +-- containers +------------------------- + +-- bytestring +------------------------- +import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports @@ -31,17 +35,18 @@ import Data.Function as Exports hiding (id, (.)) import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports -import Data.Int as Exports import Data.IORef as Exports +import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl') +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) import Data.Maybe as Exports -import Data.Monoid as Exports hiding (Last(..), First(..), (<>)) +import Data.Monoid as Exports hiding (First (..), Last (..), (<>)) import Data.Ord as Exports import Data.Proxy as Exports import Data.Ratio as Exports -import Data.Semigroup as Exports import Data.STRef as Exports +import Data.Semigroup as Exports +import Data.Sequence as Exports (Seq) import Data.String as Exports import Data.Traversable as Exports import Data.Tuple as Exports @@ -52,13 +57,12 @@ import Debug.Trace as Exports import Foreign.ForeignPtr as Exports import Foreign.Ptr as Exports import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (sizeOf, alignment) -import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead) -import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..)) +import Foreign.Storable as Exports hiding (alignment, sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports import Numeric as Exports -import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.)) import System.Environment as Exports import System.Exit as Exports import System.IO as Exports @@ -68,15 +72,8 @@ import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (printf, hPrintf) -import Text.Read as Exports (Read(..), readMaybe, readEither) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports - --- containers -------------------------- -import Data.Sequence as Exports (Seq) - --- bytestring -------------------------- -import Data.ByteString as Exports (ByteString) +import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs index 13de708f68..af75bf6ca9 100644 --- a/library/Hasql/DynamicStatements/Session.hs +++ b/library/Hasql/DynamicStatements/Session.hs @@ -1,20 +1,19 @@ module Hasql.DynamicStatements.Session where +import qualified Hasql.Decoders as Decoders import Hasql.DynamicStatements.Prelude -import Hasql.Session import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs import qualified Hasql.DynamicStatements.Statement as Statement -import qualified Hasql.Decoders as Decoders +import Hasql.Session import qualified Hasql.Session as Session -{-| -Execute a dynamically parameterized statement, providing a result decoder. - -This is merely a shortcut, which immediately embeds -@Hasql.DynamicStatements.Statement.'Statement.dynamicallyParameterized'@ -in @Session@. -For details see the docs on that function. --} +-- | +-- Execute a dynamically parameterized statement, providing a result decoder. +-- +-- This is merely a shortcut, which immediately embeds +-- @Hasql.DynamicStatements.Statement.'Statement.dynamicallyParameterized'@ +-- in @Session@. +-- For details see the docs on that function. dynamicallyParameterizedStatement :: SnippetDefs.Snippet -> Decoders.Result result -> Bool -> Session result dynamicallyParameterizedStatement snippet decoder prepared = Session.statement () (Statement.dynamicallyParameterized snippet decoder prepared) diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/library/Hasql/DynamicStatements/Snippet.hs index 2a31c588f9..922cc61f82 100644 --- a/library/Hasql/DynamicStatements/Snippet.hs +++ b/library/Hasql/DynamicStatements/Snippet.hs @@ -1,10 +1,9 @@ module Hasql.DynamicStatements.Snippet -( - Snippet, - param, - encoderAndParam, - sql, -) + ( Snippet, + param, + encoderAndParam, + sql, + ) where import Hasql.DynamicStatements.Snippet.Defs diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index c28fcc0c83..df73fa7ebb 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -4,56 +4,52 @@ import Hasql.DynamicStatements.Prelude import qualified Hasql.Encoders as Encoders import qualified Hasql.Implicits.Encoders as Encoders - -{-| -Composable SQL snippet with parameters injected. -Abstracts over placeholders and matching of encoders. - -It has an instance of `IsString`, so having the @OverloadedStrings@ extension enabled -you can construct it directly from string literals. - -Here's an example: - -@ -selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Snippet' -selectSubstring string from to = - "select substring(" <> 'param' string <> - 'foldMap' (\\ x -> " from " <> 'param' x) from <> - 'foldMap' (\\ x -> " for " <> 'param' x) to <> - ")" -@ - -Having a decoder you can lift it into 'Hasql.Statement.Statement' using -'Hasql.DynamicStatements.Statement.dynamicallyParameterized' or directly execute it in -'Hasql.Session.Session' using -'Hasql.DynamicStatements.Session.dynamicallyParameterizedStatement'. --} +-- | +-- Composable SQL snippet with parameters injected. +-- Abstracts over placeholders and matching of encoders. +-- +-- It has an instance of `IsString`, so having the @OverloadedStrings@ extension enabled +-- you can construct it directly from string literals. +-- +-- Here's an example: +-- +-- @ +-- selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Snippet' +-- selectSubstring string from to = +-- "select substring(" <> 'param' string <> +-- 'foldMap' (\\ x -> " from " <> 'param' x) from <> +-- 'foldMap' (\\ x -> " for " <> 'param' x) to <> +-- ")" +-- @ +-- +-- Having a decoder you can lift it into 'Hasql.Statement.Statement' using +-- 'Hasql.DynamicStatements.Statement.dynamicallyParameterized' or directly execute it in +-- 'Hasql.Session.Session' using +-- 'Hasql.DynamicStatements.Session.dynamicallyParameterizedStatement'. newtype Snippet = Snippet (Seq SnippetChunk) -data SnippetChunk = - StringSnippetChunk ByteString | - ParamSnippetChunk (Encoders.Params ()) +data SnippetChunk + = StringSnippetChunk ByteString + | ParamSnippetChunk (Encoders.Params ()) deriving instance Semigroup Snippet + deriving instance Monoid Snippet instance IsString Snippet where fromString x = Snippet (pure (StringSnippetChunk (fromString x))) -{-| -SQL chunk in ASCII. --} +-- | +-- SQL chunk in ASCII. sql :: ByteString -> Snippet sql x = Snippet (pure (StringSnippetChunk x)) -{-| -Parameter encoded using an implicitly derived encoder from the type. --} -param :: Encoders.DefaultParamEncoder param => param -> Snippet +-- | +-- Parameter encoded using an implicitly derived encoder from the type. +param :: (Encoders.DefaultParamEncoder param) => param -> Snippet param = encoderAndParam Encoders.defaultParam -{-| -Parameter with an explicitly defined encoder. --} +-- | +-- Parameter with an explicitly defined encoder. encoderAndParam :: Encoders.NullableOrNot Encoders.Value param -> param -> Snippet encoderAndParam encoder param = Snippet (pure (ParamSnippetChunk (param >$ Encoders.param encoder))) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index f441945dda..f41d3cd999 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -1,66 +1,64 @@ module Hasql.DynamicStatements.Statement where +import qualified Hasql.Decoders as Decoders import Hasql.DynamicStatements.Prelude -import Hasql.Statement import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs -import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders -import qualified Ptr.Poking as Poking +import Hasql.Statement import qualified Ptr.ByteString as ByteString +import qualified Ptr.Poking as Poking - -{-| -Construct a statement dynamically, specifying the parameters in-place -in the declaration of snippet and providing a result decoder and -specifying whether the statement should be prepared. - -The injection of the parameters is handled automatically, -generating parametric statements with binary encoders under the hood. - -This is useful when the SQL of your statement depends on the parameters. -Here's an example: - -@ -selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text -selectSubstring string from to = let - snippet = - "select substring(" <> Snippet.'SnippetDefs.param' string <> - foldMap (mappend " from " . Snippet.'SnippetDefs.param') from <> - foldMap (mappend " for " . Snippet.'SnippetDefs.param') to <> - ")" - decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' (Decoders.'Decoders.nonNullable' Decoders.'Decoders.text')) - in 'dynamicallyParameterized' snippet decoder True -@ - -Without the Snippet API you would have had to implement the same functionality thus: - -@ -selectSubstring' :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text -selectSubstring' string from to = let - sql = case (from, to) of - (Just _, Just _) -> "select substring($1 from $2 to $3)" - (Just _, Nothing) -> "select substring($1 from $2)" - (Nothing, Just _) -> "select substring($1 to $2)" - (Nothing, Nothing) -> "select substring($1)" - encoder = - Encoders.'Encoders.param' (string '>$' Encoders.'Encoders.text') <> - foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) from <> - foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) to - decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') - in Statement sql encoder decoder True -@ - -As you can see, the Snippet API abstracts over placeholders and -matching encoder generation, thus also protecting you from all sorts of related bugs. --} +-- | +-- Construct a statement dynamically, specifying the parameters in-place +-- in the declaration of snippet and providing a result decoder and +-- specifying whether the statement should be prepared. +-- +-- The injection of the parameters is handled automatically, +-- generating parametric statements with binary encoders under the hood. +-- +-- This is useful when the SQL of your statement depends on the parameters. +-- Here's an example: +-- +-- @ +-- selectSubstring :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text +-- selectSubstring string from to = let +-- snippet = +-- "select substring(" <> Snippet.'SnippetDefs.param' string <> +-- foldMap (mappend " from " . Snippet.'SnippetDefs.param') from <> +-- foldMap (mappend " for " . Snippet.'SnippetDefs.param') to <> +-- ")" +-- decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' (Decoders.'Decoders.nonNullable' Decoders.'Decoders.text')) +-- in 'dynamicallyParameterized' snippet decoder True +-- @ +-- +-- Without the Snippet API you would have had to implement the same functionality thus: +-- +-- @ +-- selectSubstring' :: Text -> Maybe Int32 -> Maybe Int32 -> 'Statement' () Text +-- selectSubstring' string from to = let +-- sql = case (from, to) of +-- (Just _, Just _) -> "select substring($1 from $2 to $3)" +-- (Just _, Nothing) -> "select substring($1 from $2)" +-- (Nothing, Just _) -> "select substring($1 to $2)" +-- (Nothing, Nothing) -> "select substring($1)" +-- encoder = +-- Encoders.'Encoders.param' (string '>$' Encoders.'Encoders.text') <> +-- foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) from <> +-- foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) to +-- decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') +-- in Statement sql encoder decoder True +-- @ +-- +-- As you can see, the Snippet API abstracts over placeholders and +-- matching encoder generation, thus also protecting you from all sorts of related bugs. dynamicallyParameterized :: SnippetDefs.Snippet -> Decoders.Result result -> Bool -> Statement () result -dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder prepared = let - step (!paramId, !poking, !encoder) = \ case - SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) - SnippetDefs.ParamSnippetChunk paramEncoder -> let - newParamId = paramId + 1 - newPoking = poking <> Poking.word8 36 <> Poking.asciiIntegral paramId - newEncoder = encoder <> paramEncoder - in (newParamId, newPoking, newEncoder) - in case foldl' step (1, mempty, mempty) chunks of - (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder prepared +dynamicallyParameterized (SnippetDefs.Snippet chunks) decoder prepared = + let step (!paramId, !poking, !encoder) = \case + SnippetDefs.StringSnippetChunk sql -> (paramId, poking <> Poking.bytes sql, encoder) + SnippetDefs.ParamSnippetChunk paramEncoder -> + let newParamId = paramId + 1 + newPoking = poking <> Poking.word8 36 <> Poking.asciiIntegral paramId + newEncoder = encoder <> paramEncoder + in (newParamId, newPoking, newEncoder) + in case foldl' step (1, mempty, mempty) chunks of + (_, poking, encoder) -> Statement (ByteString.poking poking) encoder decoder prepared diff --git a/test/Main.hs b/test/Main.hs index 35e67db6d4..d2c148501b 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,58 +1,58 @@ module Main where -import Prelude hiding (assert) +import qualified Data.ByteString as ByteString +import qualified Data.ByteString.Char8 as ByteStringChar8 +import qualified Hasql.Connection as Connection +import qualified Hasql.Decoders as Decoders +import qualified Hasql.DynamicStatements.Session as Session +import qualified Hasql.DynamicStatements.Snippet as Snippet +import qualified Hasql.DynamicStatements.Statement as Statement +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import qualified Test.QuickCheck as QuickCheck import Test.QuickCheck.Instances import Test.Tasty -import Test.Tasty.Runners import Test.Tasty.HUnit import Test.Tasty.QuickCheck -import qualified Test.QuickCheck as QuickCheck -import qualified Hasql.Statement as Statement -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Session as Session -import qualified Hasql.Connection as Connection -import qualified Hasql.DynamicStatements.Snippet as Snippet -import qualified Hasql.DynamicStatements.Session as Session -import qualified Hasql.DynamicStatements.Statement as Statement -import qualified Data.ByteString as ByteString -import qualified Data.ByteString.Char8 as ByteStringChar8 - +import Test.Tasty.Runners +import Prelude hiding (assert) main = defaultMain tree tree = - testGroup "All tests" - [ - testCase "Select substring" $ let - sample string from to = let - snippet = - "select substring(" <> Snippet.param @Text string <> - foldMap (mappend " from " . Snippet.param @Int32) from <> - foldMap (mappend " for " . Snippet.param @Int32) to <> - ")" - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.text)) - in runSession (Session.dynamicallyParameterizedStatement snippet decoder True) - in do - assertEqual "" (Right (Right "bc")) =<< sample "abcd" (Just 2) (Just 2) - assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) (Just 3) - assertEqual "" (Right (Right "abc")) =<< sample "abcd" Nothing (Just 3) - assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) Nothing - , - testGroup "Regression" [ - testCase "Missing $ for 1000th parameter string #2" $ let - snippet = - "SELECT 1 " <> (foldMap @[] ("," <>) $ replicate 1001 $ Snippet.param (10::Int64)) - statement = - Statement.dynamicallyParameterized snippet Decoders.noResult True - sql = - case statement of - Statement.Statement x _ _ _ -> x - in do - assertBool (ByteStringChar8.unpack sql) (ByteString.isInfixOf "$1000" sql) - ] - ] + testGroup + "All tests" + [ testCase "Select substring" + $ let sample string from to = + let snippet = + "select substring(" + <> Snippet.param @Text string + <> foldMap (mappend " from " . Snippet.param @Int32) from + <> foldMap (mappend " for " . Snippet.param @Int32) to + <> ")" + decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.text)) + in runSession (Session.dynamicallyParameterizedStatement snippet decoder True) + in do + assertEqual "" (Right (Right "bc")) =<< sample "abcd" (Just 2) (Just 2) + assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) (Just 3) + assertEqual "" (Right (Right "abc")) =<< sample "abcd" Nothing (Just 3) + assertEqual "" (Right (Right "bcd")) =<< sample "abcd" (Just 2) Nothing, + testGroup + "Regression" + [ testCase "Missing $ for 1000th parameter string #2" + $ let snippet = + "SELECT 1 " <> (foldMap @[] ("," <>) $ replicate 1001 $ Snippet.param (10 :: Int64)) + statement = + Statement.dynamicallyParameterized snippet Decoders.noResult True + sql = + case statement of + Statement.Statement x _ _ _ -> x + in do + assertBool (ByteStringChar8.unpack sql) (ByteString.isInfixOf "$1000" sql) + ] + ] runSession :: Session.Session a -> IO (Either Connection.ConnectionError (Either Session.QueryError a)) runSession = withConnection . Session.run From d5c53cfe4ed7d4c8f7404d808e2a426dc1f4239d Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:11:57 +0000 Subject: [PATCH 0903/1204] Set package version to 0.1.1.1 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 73fd11907d..ca89ee835b 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.1 +version: 0.1.1.1 synopsis: Implicit definitions for Hasql, such as default codecs for standard types From 7d59d089cfd319ac7b62c51020dca8f9be7c26e1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Jan 2024 01:16:36 +0300 Subject: [PATCH 0904/1204] Clean up --- .travis.yml | 56 ---------------------- library/Hasql/DynamicStatements/Prelude.hs | 9 ++-- 2 files changed, 3 insertions(+), 62 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7d5e6046b3..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,56 +0,0 @@ -if: tag IS blank - -env: - - ghc=8.6.5 - - ghc=8.8.3 benchmarks=1 tests=1 - -services: - - postgresql - -install: - # Set up the Shell to treat the semicolon as && - - set -o pipefail && set -e - # Install GHC and Cabal - - - cabal=${cabal=2.4}; - travis_retry sudo add-apt-repository -y ppa:hvr/ghc; - travis_retry sudo apt-get update; - travis_retry sudo apt-get install cabal-install-$cabal ghc-$ghc; - export PATH=/opt/ghc/$ghc/bin:/opt/cabal/$cabal/bin:$PATH; - # Update the Cabal database - - cabal update - # Switch to the distro: - - - export pkg_name=$(cabal info . | awk '{print $2;exit}'); - cabal sdist; - cd dist; - tar xzvf $pkg_name.tar.gz; - cd $pkg_name; - # Install the lower bound dependencies - - - if [ "$lower_bound_dependencies" = "1" ]; - then - constraint_options=( - ); - fi; - # Install the library dependencies - - cabal install --only-dependencies --reorder-goals --force-reinstalls - ${constraint_options[@]} - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - # Build the library - - cabal build - # Configure and build the remaining stuff - - cabal configure - $([ "$tests" = "1" ] && echo "--enable-tests") - $([ "$benchmarks" = "1" ] && echo "--enable-benchmarks") - -f doctest - - cabal build - -script: - - | - if [ "$tests" = "1" ]; - then - cabal clean; - cabal test --show-details=always; - fi; diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 5dbae4400c..a897aaf041 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -3,8 +3,7 @@ module Hasql.DynamicStatements.Prelude ) where --- base -------------------------- + import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports @@ -17,11 +16,9 @@ import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports --- containers -------------------------- --- bytestring -------------------------- + + import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports From 75b96e4023c5f3614b484997ac2597be4f1f7cfb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Jan 2024 01:22:21 +0300 Subject: [PATCH 0905/1204] Fix CPP formatting --- library/Hasql/Implicits/Encoders.hs | 40 +++++++++++++++-------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index 36c29625ff..331f442eff 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -67,24 +67,26 @@ instance DefaultParamEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \ defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \ } -INSTANCES (Char, char) -INSTANCES (Double, float8) -INSTANCES (Float, float4) -INSTANCES (Int16, int2) -INSTANCES (Int32, int4) -INSTANCES (Int64, int8) -INSTANCES (ByteString, bytea) -INSTANCES (Scientific, numeric) -INSTANCES (Text, text) -INSTANCES (UTCTime, timestamptz) -INSTANCES (Aeson.Value, jsonb) -INSTANCES (UUID, uuid) -INSTANCES (Day, date) -INSTANCES (DiffTime, interval) -INSTANCES (TimeOfDay, time) -INSTANCES (LocalTime, timestamp) -INSTANCES ((TimeOfDay, TimeZone), timetz) -INSTANCES ((NetAddr IP), inet) -INSTANCES (Bool, bool) +{- ORMOLU_DISABLE -} +INSTANCES(Char, char) +INSTANCES(Double, float8) +INSTANCES(Float, float4) +INSTANCES(Int16, int2) +INSTANCES(Int32, int4) +INSTANCES(Int64, int8) +INSTANCES(ByteString, bytea) +INSTANCES(Scientific, numeric) +INSTANCES(Text, text) +INSTANCES(UTCTime, timestamptz) +INSTANCES(Aeson.Value, jsonb) +INSTANCES(UUID, uuid) +INSTANCES(Day, date) +INSTANCES(DiffTime, interval) +INSTANCES(TimeOfDay, time) +INSTANCES(LocalTime, timestamp) +INSTANCES((TimeOfDay, TimeZone), timetz) +INSTANCES((NetAddr IP), inet) +INSTANCES(Bool, bool) +{- ORMOLU_ENABLE -} #undef INSTANCES From b07822fd74efa8fe700b4e05652c06db18af7067 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Jan 2024 01:25:42 +0300 Subject: [PATCH 0906/1204] Restrict the hasql-implicits dep --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 3e5432ef20..04d408fdbc 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -59,7 +59,7 @@ library , bytestring >=0.10 && <0.13 , containers >=0.6 && <0.7 , hasql >=1.6 && <1.7 - , hasql-implicits >=0.1 && <0.2 + , hasql-implicits >=0.1.1.2 && <0.2 , ptr >=0.16.7.2 && <0.17 test-suite test From ab73e7f035e73eca4dec388c4212f679d0e39cdb Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:26:28 +0000 Subject: [PATCH 0907/1204] Set package version to 0.1.1.2 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index ca89ee835b..35fa2d9c6f 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,5 +1,5 @@ name: hasql-implicits -version: 0.1.1.1 +version: 0.1.1.2 synopsis: Implicit definitions for Hasql, such as default codecs for standard types From d8272b128df170065a28d538b1f2a9aec64a1ce1 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:27:01 +0000 Subject: [PATCH 0908/1204] Format --- library/Hasql/DynamicStatements/Prelude.hs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index a897aaf041..78d403884c 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -3,7 +3,6 @@ module Hasql.DynamicStatements.Prelude ) where - import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports @@ -16,9 +15,6 @@ import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports - - - import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports From dbcb0ed6a8840f5697c57aa167715d0b4d5933eb Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:38:16 +0000 Subject: [PATCH 0909/1204] Set package version to 0.3.1.3 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 04d408fdbc..2e37fd31b1 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3.1.2 +version: 0.3.1.3 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 0c1dce0089e68b6e2ae7b041c92b6aa57ab7ecaa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Jan 2024 01:39:58 +0300 Subject: [PATCH 0910/1204] Relax the containers bounds --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 2e37fd31b1..39fbbf8c0e 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -57,7 +57,7 @@ library build-depends: base >=4.12 && <5 , bytestring >=0.10 && <0.13 - , containers >=0.6 && <0.7 + , containers >=0.6 && <0.8 , hasql >=1.6 && <1.7 , hasql-implicits >=0.1.1.2 && <0.2 , ptr >=0.16.7.2 && <0.17 From a516548f317e5cc527164baa2f0bcc607afa7132 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Jan 2024 22:42:41 +0000 Subject: [PATCH 0911/1204] Set package version to 0.3.1.4 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 39fbbf8c0e..b1dd86688e 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3.1.3 +version: 0.3.1.4 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From c6c5715a457696b1c886f5ec8c00d2f13b65a3fc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Jan 2024 00:12:18 +0300 Subject: [PATCH 0912/1204] Modernize --- benchmarks/Main.hs | 4 +- hasql.cabal | 214 +++++++-------------------------------------- 2 files changed, 35 insertions(+), 183 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 18851e102d..e3719f48bc 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -1,8 +1,8 @@ module Main where +import Criterion +import Criterion.Main import qualified Data.Vector as F -import Gauge -import Gauge.Main import qualified Hasql.Connection as A import qualified Hasql.Decoders as D import qualified Hasql.Encoders as E diff --git a/hasql.cabal b/hasql.cabal index 42bda00542..03bd88d36b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -24,8 +24,7 @@ source-repository head type: git location: git://github.com/nikita-volkov/hasql.git -library - hs-source-dirs: library +common base default-extensions: NoImplicitPrelude NoMonomorphismRestriction @@ -66,6 +65,19 @@ library UnboxedTuples default-language: Haskell2010 + +common executable + import: base + ghc-options: + -O2 -threaded -with-rtsopts=-N -rtsopts -funbox-strict-fields + +common test + import: base + ghc-options: -O2 -threaded -with-rtsopts=-N + +library + import: base + hs-source-dirs: library exposed-modules: Hasql.Connection Hasql.Decoders @@ -119,49 +131,10 @@ library , vector >=0.10 && <0.14 test-suite tasty - type: exitcode-stdio-1.0 - hs-source-dirs: tasty - main-is: Main.hs - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - RoleAnnotations - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 + import: test + type: exitcode-stdio-1.0 + hs-source-dirs: tasty + main-is: Main.hs other-modules: Main.Connection Main.DSL @@ -178,152 +151,31 @@ test-suite tasty , tasty-quickcheck >=0.9 && <0.11 test-suite threads-test - type: exitcode-stdio-1.0 - hs-source-dirs: threads-test - main-is: Main.hs - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - RoleAnnotations - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 - other-modules: Main.Statements - ghc-options: -O2 -threaded -with-rtsopts=-N + import: test + type: exitcode-stdio-1.0 + hs-source-dirs: threads-test + main-is: Main.hs + other-modules: Main.Statements build-depends: , hasql , rerebase benchmark benchmarks - type: exitcode-stdio-1.0 - hs-source-dirs: benchmarks - main-is: Main.hs - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - RoleAnnotations - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 - ghc-options: - -O2 -threaded -with-rtsopts=-N -rtsopts -funbox-strict-fields - + import: executable + type: exitcode-stdio-1.0 + hs-source-dirs: benchmarks + main-is: Main.hs build-depends: - , gauge >=0.2.5 && <0.3 + , criterion >=1.6 && <2 , hasql , rerebase <2 test-suite profiling - type: exitcode-stdio-1.0 - hs-source-dirs: profiling - main-is: Main.hs - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - RoleAnnotations - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 - ghc-options: -O2 -threaded -rtsopts + import: base + type: exitcode-stdio-1.0 + hs-source-dirs: profiling + main-is: Main.hs + ghc-options: -O2 -threaded -rtsopts build-depends: , hasql , rerebase >=1 && <2 From afab914c8634c8ef59600fc19f695943c643ca64 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Jan 2024 00:14:28 +0300 Subject: [PATCH 0913/1204] Lint --- benchmarks/Main.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index e3719f48bc..fe53edd21b 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -2,14 +2,13 @@ module Main where import Criterion import Criterion.Main -import qualified Data.Vector as F import qualified Hasql.Connection as A import qualified Hasql.Decoders as D -import qualified Hasql.Encoders as E import qualified Hasql.Session as B import qualified Hasql.Statement as C import Prelude +main :: IO () main = do Right connection <- acquireConnection From 658bfe97625565d1b3e56adebc3affd66b7cfa2f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Jan 2024 00:23:09 +0300 Subject: [PATCH 0914/1204] Move away from experimental conventions --- hasql.cabal | 40 +++++++++---------- library/Hasql/{Private => }/Commands.hs | 4 +- library/Hasql/Connection.hs | 4 +- .../Connection.hs => Connection/Core.hs} | 10 ++--- library/Hasql/Decoders.hs | 2 +- .../{Private/Decoders.hs => Decoders/All.hs} | 18 ++++----- library/Hasql/{Private => }/Decoders/Array.hs | 4 +- .../Hasql/{Private => }/Decoders/Composite.hs | 4 +- .../Hasql/{Private => }/Decoders/Result.hs | 10 ++--- .../Hasql/{Private => }/Decoders/Results.hs | 10 ++--- library/Hasql/{Private => }/Decoders/Row.hs | 8 ++-- library/Hasql/{Private => }/Decoders/Value.hs | 4 +- library/Hasql/Encoders.hs | 2 +- .../{Private/Encoders.hs => Encoders/All.hs} | 14 +++---- library/Hasql/{Private => }/Encoders/Array.hs | 6 +-- .../Hasql/{Private => }/Encoders/Params.hs | 8 ++-- library/Hasql/{Private => }/Encoders/Value.hs | 6 +-- library/Hasql/{Private => }/Errors.hs | 4 +- library/Hasql/{Private => }/IO.hs | 16 ++++---- library/Hasql/{Private => }/PTI.hs | 4 +- library/Hasql/{Private => }/Prelude.hs | 2 +- .../PreparedStatementRegistry.hs | 4 +- library/Hasql/Session.hs | 6 +-- .../{Private/Session.hs => Session/Core.hs} | 18 ++++----- library/Hasql/{Private => }/Settings.hs | 4 +- library/Hasql/Statement.hs | 4 +- 26 files changed, 108 insertions(+), 108 deletions(-) rename library/Hasql/{Private => }/Commands.hs (91%) rename library/Hasql/{Private/Connection.hs => Connection/Core.hs} (86%) rename library/Hasql/{Private/Decoders.hs => Decoders/All.hs} (96%) rename library/Hasql/{Private => }/Decoders/Array.hs (91%) rename library/Hasql/{Private => }/Decoders/Composite.hs (88%) rename library/Hasql/{Private => }/Decoders/Result.hs (97%) rename library/Hasql/{Private => }/Decoders/Results.hs (92%) rename library/Hasql/{Private => }/Decoders/Row.hs (92%) rename library/Hasql/{Private => }/Decoders/Value.hs (87%) rename library/Hasql/{Private/Encoders.hs => Encoders/All.hs} (97%) rename library/Hasql/{Private => }/Encoders/Array.hs (93%) rename library/Hasql/{Private => }/Encoders/Params.hs (83%) rename library/Hasql/{Private => }/Encoders/Value.hs (87%) rename library/Hasql/{Private => }/Errors.hs (98%) rename library/Hasql/{Private => }/IO.hs (93%) rename library/Hasql/{Private => }/PTI.hs (98%) rename library/Hasql/{Private => }/Prelude.hs (99%) rename library/Hasql/{Private => }/PreparedStatementRegistry.hs (93%) rename library/Hasql/{Private/Session.hs => Session/Core.hs} (82%) rename library/Hasql/{Private => }/Settings.hs (95%) diff --git a/hasql.cabal b/hasql.cabal index 03bd88d36b..3e5a7991cb 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -86,26 +86,26 @@ library Hasql.Statement other-modules: - Hasql.Private.Commands - Hasql.Private.Connection - Hasql.Private.Decoders - Hasql.Private.Decoders.Array - Hasql.Private.Decoders.Composite - Hasql.Private.Decoders.Result - Hasql.Private.Decoders.Results - Hasql.Private.Decoders.Row - Hasql.Private.Decoders.Value - Hasql.Private.Encoders - Hasql.Private.Encoders.Array - Hasql.Private.Encoders.Params - Hasql.Private.Encoders.Value - Hasql.Private.Errors - Hasql.Private.IO - Hasql.Private.Prelude - Hasql.Private.PreparedStatementRegistry - Hasql.Private.PTI - Hasql.Private.Session - Hasql.Private.Settings + Hasql.Commands + Hasql.Connection.Core + Hasql.Decoders.All + Hasql.Decoders.Array + Hasql.Decoders.Composite + Hasql.Decoders.Result + Hasql.Decoders.Results + Hasql.Decoders.Row + Hasql.Decoders.Value + Hasql.Encoders.All + Hasql.Encoders.Array + Hasql.Encoders.Params + Hasql.Encoders.Value + Hasql.Errors + Hasql.IO + Hasql.Prelude + Hasql.PreparedStatementRegistry + Hasql.PTI + Hasql.Session.Core + Hasql.Settings build-depends: , aeson >=2 && <3 diff --git a/library/Hasql/Private/Commands.hs b/library/Hasql/Commands.hs similarity index 91% rename from library/Hasql/Private/Commands.hs rename to library/Hasql/Commands.hs index 1a851dcefe..2c7227f1d0 100644 --- a/library/Hasql/Private/Commands.hs +++ b/library/Hasql/Commands.hs @@ -1,4 +1,4 @@ -module Hasql.Private.Commands +module Hasql.Commands ( Commands, asBytes, setEncodersToUTF8, @@ -8,7 +8,7 @@ where import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL -import Hasql.Private.Prelude +import Hasql.Prelude newtype Commands = Commands (DList BB.Builder) diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index fd1fbb6eeb..8dc9996824 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -11,5 +11,5 @@ module Hasql.Connection ) where -import Hasql.Private.Connection -import Hasql.Private.Settings +import Hasql.Connection.Core +import Hasql.Settings diff --git a/library/Hasql/Private/Connection.hs b/library/Hasql/Connection/Core.hs similarity index 86% rename from library/Hasql/Private/Connection.hs rename to library/Hasql/Connection/Core.hs index 3d1af26ec1..9bf613c0bf 100644 --- a/library/Hasql/Private/Connection.hs +++ b/library/Hasql/Connection/Core.hs @@ -1,12 +1,12 @@ -- | -- This module provides a low-level effectful API dealing with the connections to the database. -module Hasql.Private.Connection where +module Hasql.Connection.Core where import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.IO as IO -import Hasql.Private.Prelude -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Private.Settings as Settings +import qualified Hasql.IO as IO +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Settings as Settings -- | -- A single connection to the database. diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index f8f3ee559d..6aa7a9c06f 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -69,4 +69,4 @@ module Hasql.Decoders ) where -import Hasql.Private.Decoders +import Hasql.Decoders.All diff --git a/library/Hasql/Private/Decoders.hs b/library/Hasql/Decoders/All.hs similarity index 96% rename from library/Hasql/Private/Decoders.hs rename to library/Hasql/Decoders/All.hs index 1088a20819..d5305f2abc 100644 --- a/library/Hasql/Private/Decoders.hs +++ b/library/Hasql/Decoders/All.hs @@ -1,17 +1,17 @@ -- | -- A DSL for declaration of result decoders. -module Hasql.Private.Decoders where +module Hasql.Decoders.All where import qualified Data.Aeson as Aeson import qualified Data.Vector.Generic as GenericVector -import qualified Hasql.Private.Decoders.Array as Array -import qualified Hasql.Private.Decoders.Composite as Composite -import qualified Hasql.Private.Decoders.Result as Result -import qualified Hasql.Private.Decoders.Results as Results -import qualified Hasql.Private.Decoders.Row as Row -import qualified Hasql.Private.Decoders.Value as Value -import Hasql.Private.Prelude hiding (bool, maybe) -import qualified Hasql.Private.Prelude as Prelude +import qualified Hasql.Decoders.Array as Array +import qualified Hasql.Decoders.Composite as Composite +import qualified Hasql.Decoders.Result as Result +import qualified Hasql.Decoders.Results as Results +import qualified Hasql.Decoders.Row as Row +import qualified Hasql.Decoders.Value as Value +import Hasql.Prelude hiding (bool, maybe) +import qualified Hasql.Prelude as Prelude import qualified Network.IP.Addr as NetworkIp import qualified PostgreSQL.Binary.Decoding as A diff --git a/library/Hasql/Private/Decoders/Array.hs b/library/Hasql/Decoders/Array.hs similarity index 91% rename from library/Hasql/Private/Decoders/Array.hs rename to library/Hasql/Decoders/Array.hs index 9bc868dc0d..24604a2822 100644 --- a/library/Hasql/Private/Decoders/Array.hs +++ b/library/Hasql/Decoders/Array.hs @@ -1,6 +1,6 @@ -module Hasql.Private.Decoders.Array where +module Hasql.Decoders.Array where -import Hasql.Private.Prelude +import Hasql.Prelude import qualified PostgreSQL.Binary.Decoding as A newtype Array a diff --git a/library/Hasql/Private/Decoders/Composite.hs b/library/Hasql/Decoders/Composite.hs similarity index 88% rename from library/Hasql/Private/Decoders/Composite.hs rename to library/Hasql/Decoders/Composite.hs index 308869c5e4..081e8554a9 100644 --- a/library/Hasql/Private/Decoders/Composite.hs +++ b/library/Hasql/Decoders/Composite.hs @@ -1,6 +1,6 @@ -module Hasql.Private.Decoders.Composite where +module Hasql.Decoders.Composite where -import Hasql.Private.Prelude +import Hasql.Prelude import qualified PostgreSQL.Binary.Decoding as A newtype Composite a diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs similarity index 97% rename from library/Hasql/Private/Decoders/Result.hs rename to library/Hasql/Decoders/Result.hs index ba052d117b..efac6bc27d 100644 --- a/library/Hasql/Private/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -1,14 +1,14 @@ -module Hasql.Private.Decoders.Result where +module Hasql.Decoders.Result where import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec import qualified Data.ByteString as ByteString import qualified Data.Vector as Vector import qualified Data.Vector.Mutable as MutableVector import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Decoders.Row as Row -import Hasql.Private.Errors -import Hasql.Private.Prelude hiding (many, maybe) -import qualified Hasql.Private.Prelude as Prelude +import qualified Hasql.Decoders.Row as Row +import Hasql.Errors +import Hasql.Prelude hiding (many, maybe) +import qualified Hasql.Prelude as Prelude newtype Result a = Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) diff --git a/library/Hasql/Private/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs similarity index 92% rename from library/Hasql/Private/Decoders/Results.hs rename to library/Hasql/Decoders/Results.hs index f076c1946e..2fa2e86d34 100644 --- a/library/Hasql/Private/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -8,13 +8,13 @@ -- with the help of "Applicative" and "Monad", -- -- * Row-by-row fetching. -module Hasql.Private.Decoders.Results where +module Hasql.Decoders.Results where import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Decoders.Result as Result -import Hasql.Private.Errors -import Hasql.Private.Prelude hiding (many, maybe) -import qualified Hasql.Private.Prelude as Prelude +import qualified Hasql.Decoders.Result as Result +import Hasql.Errors +import Hasql.Prelude hiding (many, maybe) +import qualified Hasql.Prelude as Prelude newtype Results a = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) diff --git a/library/Hasql/Private/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs similarity index 92% rename from library/Hasql/Private/Decoders/Row.hs rename to library/Hasql/Decoders/Row.hs index 7130f8d79f..381918be75 100644 --- a/library/Hasql/Private/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -1,9 +1,9 @@ -module Hasql.Private.Decoders.Row where +module Hasql.Decoders.Row where import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Decoders.Value as Value -import Hasql.Private.Errors -import Hasql.Private.Prelude hiding (error) +import qualified Hasql.Decoders.Value as Value +import Hasql.Errors +import Hasql.Prelude hiding (error) import qualified PostgreSQL.Binary.Decoding as A newtype Row a diff --git a/library/Hasql/Private/Decoders/Value.hs b/library/Hasql/Decoders/Value.hs similarity index 87% rename from library/Hasql/Private/Decoders/Value.hs rename to library/Hasql/Decoders/Value.hs index cab735124a..7913fb7499 100644 --- a/library/Hasql/Private/Decoders/Value.hs +++ b/library/Hasql/Decoders/Value.hs @@ -1,6 +1,6 @@ -module Hasql.Private.Decoders.Value where +module Hasql.Decoders.Value where -import Hasql.Private.Prelude +import Hasql.Prelude import qualified PostgreSQL.Binary.Decoding as A newtype Value a diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 03a790f322..8e928c57a3 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -60,4 +60,4 @@ module Hasql.Encoders ) where -import Hasql.Private.Encoders +import Hasql.Encoders.All diff --git a/library/Hasql/Private/Encoders.hs b/library/Hasql/Encoders/All.hs similarity index 97% rename from library/Hasql/Private/Encoders.hs rename to library/Hasql/Encoders/All.hs index 52214da849..8691e8193c 100644 --- a/library/Hasql/Private/Encoders.hs +++ b/library/Hasql/Encoders/All.hs @@ -1,15 +1,15 @@ -- | -- A DSL for declaration of query parameter encoders. -module Hasql.Private.Encoders where +module Hasql.Encoders.All where import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy as LazyByteString -import qualified Hasql.Private.Encoders.Array as Array -import qualified Hasql.Private.Encoders.Params as Params -import qualified Hasql.Private.Encoders.Value as Value -import qualified Hasql.Private.PTI as PTI -import Hasql.Private.Prelude hiding (bool) -import qualified Hasql.Private.Prelude as Prelude +import qualified Hasql.Encoders.Array as Array +import qualified Hasql.Encoders.Params as Params +import qualified Hasql.Encoders.Value as Value +import qualified Hasql.PTI as PTI +import Hasql.Prelude hiding (bool) +import qualified Hasql.Prelude as Prelude import qualified Network.IP.Addr as NetworkIp import qualified PostgreSQL.Binary.Encoding as A import qualified Text.Builder as C diff --git a/library/Hasql/Private/Encoders/Array.hs b/library/Hasql/Encoders/Array.hs similarity index 93% rename from library/Hasql/Private/Encoders/Array.hs rename to library/Hasql/Encoders/Array.hs index 6201c8535c..e1d943503d 100644 --- a/library/Hasql/Private/Encoders/Array.hs +++ b/library/Hasql/Encoders/Array.hs @@ -1,7 +1,7 @@ -module Hasql.Private.Encoders.Array where +module Hasql.Encoders.Array where -import qualified Hasql.Private.PTI as B -import Hasql.Private.Prelude +import qualified Hasql.PTI as B +import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Text.Builder as C diff --git a/library/Hasql/Private/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs similarity index 83% rename from library/Hasql/Private/Encoders/Params.hs rename to library/Hasql/Encoders/Params.hs index e2228f29d0..63715cfcd5 100644 --- a/library/Hasql/Private/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -1,9 +1,9 @@ -module Hasql.Private.Encoders.Params where +module Hasql.Encoders.Params where import qualified Database.PostgreSQL.LibPQ as A -import qualified Hasql.Private.Encoders.Value as C -import qualified Hasql.Private.PTI as D -import Hasql.Private.Prelude +import qualified Hasql.Encoders.Value as C +import qualified Hasql.PTI as D +import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Text.Builder as E diff --git a/library/Hasql/Private/Encoders/Value.hs b/library/Hasql/Encoders/Value.hs similarity index 87% rename from library/Hasql/Private/Encoders/Value.hs rename to library/Hasql/Encoders/Value.hs index cb09ac330e..a08a8d0402 100644 --- a/library/Hasql/Private/Encoders/Value.hs +++ b/library/Hasql/Encoders/Value.hs @@ -1,7 +1,7 @@ -module Hasql.Private.Encoders.Value where +module Hasql.Encoders.Value where -import qualified Hasql.Private.PTI as PTI -import Hasql.Private.Prelude +import qualified Hasql.PTI as PTI +import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Text.Builder as C diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Errors.hs similarity index 98% rename from library/Hasql/Private/Errors.hs rename to library/Hasql/Errors.hs index 012b8064ae..63bc9ec146 100644 --- a/library/Hasql/Private/Errors.hs +++ b/library/Hasql/Errors.hs @@ -8,10 +8,10 @@ -- with the help of "Applicative" and "Monad", -- -- * Row-by-row fetching. -module Hasql.Private.Errors where +module Hasql.Errors where import qualified Data.ByteString.Char8 as BC -import Hasql.Private.Prelude +import Hasql.Prelude -- | -- An error during the execution of a query. diff --git a/library/Hasql/Private/IO.hs b/library/Hasql/IO.hs similarity index 93% rename from library/Hasql/Private/IO.hs rename to library/Hasql/IO.hs index 1e2d2dbe7f..47c4b3a01a 100644 --- a/library/Hasql/Private/IO.hs +++ b/library/Hasql/IO.hs @@ -1,15 +1,15 @@ -- | -- An API of low-level IO operations. -module Hasql.Private.IO where +module Hasql.IO where import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Private.Commands as Commands -import qualified Hasql.Private.Decoders.Result as ResultDecoders -import qualified Hasql.Private.Decoders.Results as ResultsDecoders -import qualified Hasql.Private.Encoders.Params as ParamsEncoders -import Hasql.Private.Errors -import Hasql.Private.Prelude -import qualified Hasql.Private.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Commands as Commands +import qualified Hasql.Decoders.Result as ResultDecoders +import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Encoders.Params as ParamsEncoders +import Hasql.Errors +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry {-# INLINE acquireConnection #-} acquireConnection :: ByteString -> IO LibPQ.Connection diff --git a/library/Hasql/Private/PTI.hs b/library/Hasql/PTI.hs similarity index 98% rename from library/Hasql/Private/PTI.hs rename to library/Hasql/PTI.hs index 3cc449b7b1..648c1dd14f 100644 --- a/library/Hasql/Private/PTI.hs +++ b/library/Hasql/PTI.hs @@ -1,7 +1,7 @@ -module Hasql.Private.PTI where +module Hasql.PTI where import qualified Database.PostgreSQL.LibPQ as LibPQ -import Hasql.Private.Prelude hiding (bool) +import Hasql.Prelude hiding (bool) -- | A Postgresql type info data PTI = PTI {ptiOID :: !OID, ptiArrayOID :: !(Maybe OID)} diff --git a/library/Hasql/Private/Prelude.hs b/library/Hasql/Prelude.hs similarity index 99% rename from library/Hasql/Private/Prelude.hs rename to library/Hasql/Prelude.hs index 532144a60d..18ab4c3097 100644 --- a/library/Hasql/Private/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -1,4 +1,4 @@ -module Hasql.Private.Prelude +module Hasql.Prelude ( module Exports, LazyByteString, ByteStringBuilder, diff --git a/library/Hasql/Private/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs similarity index 93% rename from library/Hasql/Private/PreparedStatementRegistry.hs rename to library/Hasql/PreparedStatementRegistry.hs index 1617470f48..8b5b5f3896 100644 --- a/library/Hasql/Private/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -1,4 +1,4 @@ -module Hasql.Private.PreparedStatementRegistry +module Hasql.PreparedStatementRegistry ( PreparedStatementRegistry, new, update, @@ -8,7 +8,7 @@ where import qualified ByteString.StrictBuilder as B import qualified Data.HashTable.IO as A -import Hasql.Private.Prelude hiding (lookup) +import Hasql.Prelude hiding (lookup) data PreparedStatementRegistry = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 9636d5c1e9..6f3a37059b 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -7,9 +7,9 @@ module Hasql.Session run, -- * Errors - module Hasql.Private.Errors, + module Hasql.Errors, ) where -import Hasql.Private.Errors -import Hasql.Private.Session +import Hasql.Errors +import Hasql.Session.Core diff --git a/library/Hasql/Private/Session.hs b/library/Hasql/Session/Core.hs similarity index 82% rename from library/Hasql/Private/Session.hs rename to library/Hasql/Session/Core.hs index ea66a4bd9c..09f1ffe1a1 100644 --- a/library/Hasql/Private/Session.hs +++ b/library/Hasql/Session/Core.hs @@ -1,13 +1,13 @@ -module Hasql.Private.Session where +module Hasql.Session.Core where -import qualified Hasql.Private.Connection as Connection -import qualified Hasql.Private.Decoders.Result as Decoders.Result -import qualified Hasql.Private.Decoders.Results as Decoders.Results -import qualified Hasql.Private.Encoders as Encoders -import qualified Hasql.Private.Encoders.Params as Encoders.Params -import Hasql.Private.Errors -import qualified Hasql.Private.IO as IO -import Hasql.Private.Prelude +import qualified Hasql.Connection.Core as Connection +import qualified Hasql.Decoders.Result as Decoders.Result +import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Encoders.All as Encoders +import qualified Hasql.Encoders.Params as Encoders.Params +import Hasql.Errors +import qualified Hasql.IO as IO +import Hasql.Prelude import qualified Hasql.Statement as Statement -- | diff --git a/library/Hasql/Private/Settings.hs b/library/Hasql/Settings.hs similarity index 95% rename from library/Hasql/Private/Settings.hs rename to library/Hasql/Settings.hs index 6d08b434b8..8c286c9a70 100644 --- a/library/Hasql/Private/Settings.hs +++ b/library/Hasql/Settings.hs @@ -1,9 +1,9 @@ -module Hasql.Private.Settings where +module Hasql.Settings where import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL -import Hasql.Private.Prelude +import Hasql.Prelude -- | -- All settings encoded in a single byte-string according to diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index e6f9c0f522..fe3b8df1de 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -13,9 +13,9 @@ module Hasql.Statement where import qualified Hasql.Decoders as Decoders +import qualified Hasql.Decoders.All as Decoders import qualified Hasql.Encoders as Encoders -import qualified Hasql.Private.Decoders as Decoders -import Hasql.Private.Prelude +import Hasql.Prelude -- | -- Specification of a strictly single-statement query, which can be parameterized and prepared. From 188eb2891c97d080b8b0860eb73b75ee50f2297c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Jan 2024 00:36:34 +0300 Subject: [PATCH 0915/1204] Fix tests --- hasql.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 3e5a7991cb..541526f08f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -73,7 +73,7 @@ common executable common test import: base - ghc-options: -O2 -threaded -with-rtsopts=-N + ghc-options: -threaded -with-rtsopts=-N library import: base @@ -131,7 +131,7 @@ library , vector >=0.10 && <0.14 test-suite tasty - import: test + import: base type: exitcode-stdio-1.0 hs-source-dirs: tasty main-is: Main.hs From 2334d8d686ee037721be89ed54506407e15ecde7 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Fri, 26 Jan 2024 21:39:41 +0000 Subject: [PATCH 0916/1204] Set package version to 1.6.4.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 541526f08f..5392216eb1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.4 +version: 1.6.4.1 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 9e638e88ca7821a92f300e2786b3a2c384ab5833 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 19:20:07 +0300 Subject: [PATCH 0917/1204] Rename things --- library/Hasql/Pool.hs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index c3fc88ceb3..7a41efc2c2 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -17,19 +17,19 @@ import Hasql.Pool.Prelude import qualified Hasql.Session as Session -- | A connection tagged with metadata. -data Conn = Conn - { connConnection :: Connection, - connCreationTimeNSec :: Word64, - connUseTimeNSec :: Word64 +data Entry = Entry + { entryConnection :: Connection, + entryCreationTimeNSec :: Word64, + entryUseTimeNSec :: Word64 } -isAlive :: Word64 -> Word64 -> Word64 -> Conn -> Bool -isAlive maxLifetime maxIdletime now Conn {..} = +entryIsAlive :: Word64 -> Word64 -> Word64 -> Entry -> Bool +entryIsAlive maxLifetime maxIdletime now Entry {..} = now - <= connCreationTimeNSec + <= entryCreationTimeNSec + maxLifetime && now - <= connUseTimeNSec + <= entryUseTimeNSec + maxIdletime -- | Pool of connections to DB. @@ -45,7 +45,7 @@ data Pool = Pool -- | Maximal connection idle time, in nanoseconds. poolMaxIdletime :: Word64, -- | Avail connections. - poolConnectionQueue :: TQueue Conn, + poolConnectionQueue :: TQueue Entry, -- | Remaining capacity. -- The pool size limits the sum of poolCapacity, the length -- of poolConnectionQueue and the number of in-flight @@ -106,10 +106,10 @@ acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSe now <- getMonotonicTimeNSec join . atomically $ do conns <- flushTQueue connectionQueue - let (keep, close) = partition (isAlive maxLifetimeNanos maxIdletimeNanos now) conns + let (keep, close) = partition (entryIsAlive maxLifetimeNanos maxIdletimeNanos now) conns traverse_ (writeTQueue connectionQueue) keep return $ forM_ close $ \conn -> do - Connection.release (connConnection conn) + Connection.release (entryConnection conn) atomically $ modifyTVar' capVar succ void . mkWeakIORef reaperRef $ do @@ -141,7 +141,7 @@ release Pool {..} = writeTVar poolReuseVar newReuse conns <- flushTQueue poolConnectionQueue return $ forM_ conns $ \conn -> do - Connection.release (connConnection conn) + Connection.release (entryConnection conn) atomically $ modifyTVar' poolCapacity succ -- | Use a connection from the pool to run a session and return the connection @@ -185,20 +185,20 @@ use Pool {..} sess = do Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onLiveConn reuseVar (Conn conn now now) + Right conn -> onLiveConn reuseVar (Entry conn now now) onConn reuseVar conn = do now <- getMonotonicTimeNSec - if isAlive poolMaxLifetime poolMaxIdletime now conn - then onLiveConn reuseVar conn {connUseTimeNSec = now} + if entryIsAlive poolMaxLifetime poolMaxIdletime now conn + then onLiveConn reuseVar conn {entryUseTimeNSec = now} else do - Connection.release (connConnection conn) + Connection.release (entryConnection conn) onNewConn reuseVar onLiveConn reuseVar conn = do sessRes <- - catch (Session.run sess (connConnection conn)) $ \(err :: SomeException) -> do - Connection.release (connConnection conn) + catch (Session.run sess (entryConnection conn)) $ \(err :: SomeException) -> do + Connection.release (entryConnection conn) atomically $ modifyTVar' poolCapacity succ throw err @@ -220,7 +220,7 @@ use Pool {..} sess = do if reuse then writeTQueue poolConnectionQueue conn $> return () else return $ do - Connection.release (connConnection conn) + Connection.release (entryConnection conn) atomically $ modifyTVar' poolCapacity succ -- | Union over all errors that 'use' can result in. From cf1229515fd964bce0ae964ad5a371b30eac7401 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 23:28:16 +0300 Subject: [PATCH 0918/1204] Rename entries --- library/Hasql/Pool.hs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 7a41efc2c2..194e0d76ab 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -105,11 +105,11 @@ acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSe threadDelay 1000000 now <- getMonotonicTimeNSec join . atomically $ do - conns <- flushTQueue connectionQueue - let (keep, close) = partition (entryIsAlive maxLifetimeNanos maxIdletimeNanos now) conns + entries <- flushTQueue connectionQueue + let (keep, close) = partition (entryIsAlive maxLifetimeNanos maxIdletimeNanos now) entries traverse_ (writeTQueue connectionQueue) keep - return $ forM_ close $ \conn -> do - Connection.release (entryConnection conn) + return $ forM_ close $ \entry -> do + Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ void . mkWeakIORef reaperRef $ do @@ -139,9 +139,9 @@ release Pool {..} = writeTVar prevReuse False newReuse <- newTVar True writeTVar poolReuseVar newReuse - conns <- flushTQueue poolConnectionQueue - return $ forM_ conns $ \conn -> do - Connection.release (entryConnection conn) + entries <- flushTQueue poolConnectionQueue + return $ forM_ entries $ \entry -> do + Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ -- | Use a connection from the pool to run a session and return the connection @@ -185,20 +185,20 @@ use Pool {..} sess = do Left connErr -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right conn -> onLiveConn reuseVar (Entry conn now now) + Right entry -> onLiveConn reuseVar (Entry entry now now) - onConn reuseVar conn = do + onConn reuseVar entry = do now <- getMonotonicTimeNSec - if entryIsAlive poolMaxLifetime poolMaxIdletime now conn - then onLiveConn reuseVar conn {entryUseTimeNSec = now} + if entryIsAlive poolMaxLifetime poolMaxIdletime now entry + then onLiveConn reuseVar entry {entryUseTimeNSec = now} else do - Connection.release (entryConnection conn) + Connection.release (entryConnection entry) onNewConn reuseVar - onLiveConn reuseVar conn = do + onLiveConn reuseVar entry = do sessRes <- - catch (Session.run sess (entryConnection conn)) $ \(err :: SomeException) -> do - Connection.release (entryConnection conn) + catch (Session.run sess (entryConnection entry)) $ \(err :: SomeException) -> do + Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ throw err @@ -218,9 +218,9 @@ use Pool {..} sess = do join . atomically $ do reuse <- readTVar reuseVar if reuse - then writeTQueue poolConnectionQueue conn $> return () + then writeTQueue poolConnectionQueue entry $> return () else return $ do - Connection.release (entryConnection conn) + Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ -- | Union over all errors that 'use' can result in. From 8668b8d9983d1362336baf120804607faa7199f2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 23:31:41 +0300 Subject: [PATCH 0919/1204] Avoid closing connections on exceptions --- library/Hasql/Pool.hs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 194e0d76ab..75abd42be7 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -196,21 +196,20 @@ use Pool {..} sess = do onNewConn reuseVar onLiveConn reuseVar entry = do - sessRes <- - catch (Session.run sess (entryConnection entry)) $ \(err :: SomeException) -> do - Connection.release (entryConnection entry) - atomically $ modifyTVar' poolCapacity succ - throw err + sessRes <- try @SomeException (Session.run sess (entryConnection entry)) case sessRes of - Left err -> case err of + Left exc -> do + returnConn + throwIO exc + Right (Left err) -> case err of Session.QueryError _ _ (Session.ClientError _) -> do atomically $ modifyTVar' poolCapacity succ return $ Left $ SessionUsageError err _ -> do returnConn return $ Left $ SessionUsageError err - Right res -> do + Right (Right res) -> do returnConn return $ Right res where From 6c262a485b7f320e49d5ac043790e61a31fd35a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 23:33:27 +0300 Subject: [PATCH 0920/1204] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5edbe5f50e..5ffd14a6a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.10.1 + +- Avoid releasing connections on exceptions thrown in session + # 0.9 - Maximal lifetime added for connections. Allows to refresh the connections in time cleaning up the resources. From 4f18b6c89dca3d4bddb7d65faa2c6e9dd0693e61 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 23:36:46 +0300 Subject: [PATCH 0921/1204] State the goals --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ffd14a6a2..a4accc5cb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.11 + +- Optional observability event stream, which can be interpreted into log records and metrics. + # 0.10.1 - Avoid releasing connections on exceptions thrown in session From d20e7b9ca7cf12804f071abb4a3e035341287a4b Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 14 Feb 2024 20:41:47 +0000 Subject: [PATCH 0922/1204] Set package version to 0.10.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index f5aa477da0..297bf7947f 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.10.0.1 +version: 0.10.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From edc33d27adb134aefc39b7aba1fd00c07166305f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 14 Feb 2024 23:56:05 +0300 Subject: [PATCH 0923/1204] Implement observability --- hasql-pool.cabal | 7 ++- library/Hasql/Pool.hs | 97 ++++++++++++++++++++++--------- library/Hasql/Pool/Observation.hs | 17 ++++++ library/Hasql/Pool/Prelude.hs | 2 + test/Main.hs | 2 +- 5 files changed, 97 insertions(+), 28 deletions(-) create mode 100644 library/Hasql/Pool/Observation.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index f5aa477da0..a5c5807cf7 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -65,13 +65,18 @@ common base-settings library import: base-settings hs-source-dirs: library - exposed-modules: Hasql.Pool + exposed-modules: + Hasql.Pool + Hasql.Pool.Observation + other-modules: Hasql.Pool.Prelude build-depends: , base >=4.11 && <5 + , bytestring >=0.10 && <0.14 , hasql >=1.6.0.1 && <1.7 , stm >=2.5 && <3 , time >=1.9 && <2 + , uuid >=1.3 && <2 test-suite test import: base-settings diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 75abd42be7..d945336650 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -8,11 +8,17 @@ module Hasql.Pool -- * Errors UsageError (..), + + -- * Observations + Observation (..), + ReleaseReason (..), ) where +import qualified Data.UUID.V4 as Uuid import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection +import Hasql.Pool.Observation import Hasql.Pool.Prelude import qualified Hasql.Session as Session @@ -20,17 +26,17 @@ import qualified Hasql.Session as Session data Entry = Entry { entryConnection :: Connection, entryCreationTimeNSec :: Word64, - entryUseTimeNSec :: Word64 + entryUseTimeNSec :: Word64, + entryId :: UUID } -entryIsAlive :: Word64 -> Word64 -> Word64 -> Entry -> Bool -entryIsAlive maxLifetime maxIdletime now Entry {..} = - now - <= entryCreationTimeNSec - + maxLifetime - && now - <= entryUseTimeNSec - + maxIdletime +entryIsAged :: Word64 -> Word64 -> Entry -> Bool +entryIsAged maxLifetime now Entry {..} = + now > entryCreationTimeNSec + maxLifetime + +entryIsIdle :: Word64 -> Word64 -> Entry -> Bool +entryIsIdle maxIdletime now Entry {..} = + now > entryUseTimeNSec + maxIdletime -- | Pool of connections to DB. data Pool = Pool @@ -54,7 +60,9 @@ data Pool = Pool -- | Whether to return a connection to the pool. poolReuseVar :: TVar (TVar Bool), -- | To stop the manager thread via garbage collection. - poolReaperRef :: IORef () + poolReaperRef :: IORef (), + -- | Action for reporting the observations. + poolObserver :: Observation -> IO () } -- | Create a connection-pool, with default settings. @@ -72,9 +80,16 @@ acquire :: DiffTime -> -- | Connection settings. Connection.Settings -> + -- | Observation handler. + -- + -- Typically it's used for monitoring the state of the pool via metrics and logging. + -- + -- If the action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue. + -- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. + (Observation -> IO ()) -> IO Pool -acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings = - acquireDynamically poolSize acqTimeout maxLifetime maxIdletime (pure connectionSettings) +acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings observer = + acquireDynamically poolSize acqTimeout maxLifetime maxIdletime (pure connectionSettings) observer -- | Create a connection-pool. -- @@ -94,8 +109,15 @@ acquireDynamically :: DiffTime -> -- | Action fetching connection settings. IO Connection.Settings -> + -- | Observation handler. + -- + -- Use it for monitoring the state of the pool via metrics and logging. + -- + -- If the action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue. + -- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. + (Observation -> IO ()) -> IO Pool -acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSettings = do +acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSettings observer = do connectionQueue <- newTQueueIO capVar <- newTVarIO poolSize reuseVar <- newTVarIO =<< newTVarIO True @@ -106,17 +128,24 @@ acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSe now <- getMonotonicTimeNSec join . atomically $ do entries <- flushTQueue connectionQueue - let (keep, close) = partition (entryIsAlive maxLifetimeNanos maxIdletimeNanos now) entries - traverse_ (writeTQueue connectionQueue) keep - return $ forM_ close $ \entry -> do - Connection.release (entryConnection entry) - atomically $ modifyTVar' capVar succ + let (agedEntries, unagedEntries) = partition (entryIsAged maxLifetimeNanos now) entries + (idleEntries, liveEntries) = partition (entryIsIdle maxLifetimeNanos now) unagedEntries + traverse_ (writeTQueue connectionQueue) liveEntries + return $ do + forM_ agedEntries $ \entry -> do + Connection.release (entryConnection entry) + atomically $ modifyTVar' capVar succ + observer (ConnectionReleasedObservation (entryId entry) AgingReleaseReason) + forM_ idleEntries $ \entry -> do + Connection.release (entryConnection entry) + atomically $ modifyTVar' capVar succ + observer (ConnectionReleasedObservation (entryId entry) IdlenessReleaseReason) void . mkWeakIORef reaperRef $ do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef + return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef observer where acqTimeoutMicros = div (fromIntegral (diffTimeToPicoseconds acqTimeout)) 1_000_000 @@ -143,6 +172,7 @@ release Pool {..} = return $ forM_ entries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ + poolObserver (ConnectionReleasedObservation (entryId entry) ReleaseActionCallReleaseReason) -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -152,8 +182,7 @@ release Pool {..} = -- and a slot gets freed up for a new connection to be established the next -- time one is needed. The error still gets returned from this function. -- --- __Warning:__ Due to the mechanism mentioned above you should avoid consuming --- errors within sessions. +-- __Warning:__ Due to the mechanism mentioned above you should avoid intercepting this error type from within sessions. use :: Pool -> Session.Session a -> IO (Either UsageError a) use Pool {..} sess = do timeout <- do @@ -180,20 +209,33 @@ use Pool {..} sess = do onNewConn reuseVar = do settings <- poolFetchConnectionSettings now <- getMonotonicTimeNSec + id <- Uuid.nextRandom + poolObserver (AttemptingToConnectObservation id) connRes <- Connection.acquire settings case connRes of Left connErr -> do + poolObserver (FailedToConnectObservation id connErr) atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right entry -> onLiveConn reuseVar (Entry entry now now) + Right entry -> do + poolObserver (ConnectionEstablishedObservation id) + onLiveConn reuseVar (Entry entry now now id) onConn reuseVar entry = do now <- getMonotonicTimeNSec - if entryIsAlive poolMaxLifetime poolMaxIdletime now entry - then onLiveConn reuseVar entry {entryUseTimeNSec = now} - else do + if entryIsAged poolMaxLifetime now entry + then do Connection.release (entryConnection entry) + poolObserver (ConnectionReleasedObservation (entryId entry) AgingReleaseReason) onNewConn reuseVar + else + if entryIsIdle poolMaxIdletime now entry + then do + Connection.release (entryConnection entry) + poolObserver (ConnectionReleasedObservation (entryId entry) IdlenessReleaseReason) + onNewConn reuseVar + else do + onLiveConn reuseVar entry {entryUseTimeNSec = now} onLiveConn reuseVar entry = do sessRes <- try @SomeException (Session.run sess (entryConnection entry)) @@ -203,8 +245,10 @@ use Pool {..} sess = do returnConn throwIO exc Right (Left err) -> case err of - Session.QueryError _ _ (Session.ClientError _) -> do + Session.QueryError _ _ (Session.ClientError details) -> do + Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ + poolObserver (ConnectionReleasedObservation (entryId entry) (TransportErrorReleaseReason details)) return $ Left $ SessionUsageError err _ -> do returnConn @@ -221,6 +265,7 @@ use Pool {..} sess = do else return $ do Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ + poolObserver (ConnectionReleasedObservation (entryId entry) ReleaseActionCallReleaseReason) -- | Union over all errors that 'use' can result in. data UsageError diff --git a/library/Hasql/Pool/Observation.hs b/library/Hasql/Pool/Observation.hs new file mode 100644 index 0000000000..e51d35fedb --- /dev/null +++ b/library/Hasql/Pool/Observation.hs @@ -0,0 +1,17 @@ +module Hasql.Pool.Observation where + +import Hasql.Pool.Prelude + +data Observation + = ConnectionEstablishedObservation UUID + | AttemptingToConnectObservation UUID + | FailedToConnectObservation UUID (Maybe ByteString) + | ConnectionReleasedObservation UUID ReleaseReason + deriving (Show, Eq) + +data ReleaseReason + = AgingReleaseReason + | IdlenessReleaseReason + | TransportErrorReleaseReason (Maybe ByteString) + | ReleaseActionCallReleaseReason + deriving (Show, Eq) diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 3ac731e77b..584f5acc85 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -17,6 +17,7 @@ import Control.Monad.ST as Exports import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports @@ -43,6 +44,7 @@ import Data.String as Exports import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports +import Data.UUID as Exports (UUID) import Data.Unique as Exports import Data.Version as Exports import Data.Void as Exports diff --git a/test/Main.hs b/test/Main.hs index 873d6c2fd2..b3659f4e82 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -18,7 +18,7 @@ main :: IO () main = do connectionSettings <- getConnectionSettings let withPool poolSize acqTimeout maxLifetime maxIdletime connectionSettings = - bracket (acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings) release + bracket (acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings (const (pure ()))) release withDefaultPool = withPool 3 10 1_800 1_800 connectionSettings From fc48a102585a832f3021360c5588ef9854573cc3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 22 Feb 2024 21:02:18 +0300 Subject: [PATCH 0924/1204] Move to a status model --- hasql-pool.cabal | 1 + library/Hasql/Pool.hs | 27 +++++++++++++--------- library/Hasql/Pool/Observation.hs | 37 +++++++++++++++++++++++-------- library/Hasql/Pool/Prelude.hs | 1 + 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index a5c5807cf7..d8b6bcdd93 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -75,6 +75,7 @@ library , bytestring >=0.10 && <0.14 , hasql >=1.6.0.1 && <1.7 , stm >=2.5 && <3 + , text >=1.2 && <3 , time >=1.9 && <2 , uuid >=1.3 && <2 diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index d945336650..1b1cb4ad10 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -11,10 +11,12 @@ module Hasql.Pool -- * Observations Observation (..), - ReleaseReason (..), + ConnectionTerminationReason (..), ) where +import qualified Data.Text.Encoding as Text +import qualified Data.Text.Encoding.Error as Text import qualified Data.UUID.V4 as Uuid import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection @@ -135,11 +137,11 @@ acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSe forM_ agedEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - observer (ConnectionReleasedObservation (entryId entry) AgingReleaseReason) + observer (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) forM_ idleEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - observer (ConnectionReleasedObservation (entryId entry) IdlenessReleaseReason) + observer (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) void . mkWeakIORef reaperRef $ do -- When the pool goes out of scope, stop the manager. @@ -172,7 +174,7 @@ release Pool {..} = return $ forM_ entries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ - poolObserver (ConnectionReleasedObservation (entryId entry) ReleaseActionCallReleaseReason) + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus ReleaseConnectionTerminationReason)) -- | Use a connection from the pool to run a session and return the connection -- to the pool, when finished. @@ -210,15 +212,15 @@ use Pool {..} sess = do settings <- poolFetchConnectionSettings now <- getMonotonicTimeNSec id <- Uuid.nextRandom - poolObserver (AttemptingToConnectObservation id) + poolObserver (ConnectionObservation id ConnectingConnectionStatus) connRes <- Connection.acquire settings case connRes of Left connErr -> do - poolObserver (FailedToConnectObservation id connErr) + poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) connErr)))) atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr Right entry -> do - poolObserver (ConnectionEstablishedObservation id) + poolObserver (ConnectionObservation id ReadyForUseConnectionStatus) onLiveConn reuseVar (Entry entry now now id) onConn reuseVar entry = do @@ -226,18 +228,19 @@ use Pool {..} sess = do if entryIsAged poolMaxLifetime now entry then do Connection.release (entryConnection entry) - poolObserver (ConnectionReleasedObservation (entryId entry) AgingReleaseReason) + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) onNewConn reuseVar else if entryIsIdle poolMaxIdletime now entry then do Connection.release (entryConnection entry) - poolObserver (ConnectionReleasedObservation (entryId entry) IdlenessReleaseReason) + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) onNewConn reuseVar else do onLiveConn reuseVar entry {entryUseTimeNSec = now} onLiveConn reuseVar entry = do + poolObserver (ConnectionObservation (entryId entry) InUseConnectionStatus) sessRes <- try @SomeException (Session.run sess (entryConnection entry)) case sessRes of @@ -248,13 +251,15 @@ use Pool {..} sess = do Session.QueryError _ _ (Session.ClientError details) -> do Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ - poolObserver (ConnectionReleasedObservation (entryId entry) (TransportErrorReleaseReason details)) + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) return $ Left $ SessionUsageError err _ -> do returnConn + poolObserver (ConnectionObservation (entryId entry) ReadyForUseConnectionStatus) return $ Left $ SessionUsageError err Right (Right res) -> do returnConn + poolObserver (ConnectionObservation (entryId entry) ReadyForUseConnectionStatus) return $ Right res where returnConn = @@ -265,7 +270,7 @@ use Pool {..} sess = do else return $ do Connection.release (entryConnection entry) atomically $ modifyTVar' poolCapacity succ - poolObserver (ConnectionReleasedObservation (entryId entry) ReleaseActionCallReleaseReason) + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus ReleaseConnectionTerminationReason)) -- | Union over all errors that 'use' can result in. data UsageError diff --git a/library/Hasql/Pool/Observation.hs b/library/Hasql/Pool/Observation.hs index e51d35fedb..1ee14ba1cb 100644 --- a/library/Hasql/Pool/Observation.hs +++ b/library/Hasql/Pool/Observation.hs @@ -3,15 +3,34 @@ module Hasql.Pool.Observation where import Hasql.Pool.Prelude data Observation - = ConnectionEstablishedObservation UUID - | AttemptingToConnectObservation UUID - | FailedToConnectObservation UUID (Maybe ByteString) - | ConnectionReleasedObservation UUID ReleaseReason + = ConnectionObservation + -- | Generated connection ID. + -- For grouping the observations by one connection. + UUID + -- | Connection status that it has entered. + ConnectionStatus deriving (Show, Eq) -data ReleaseReason - = AgingReleaseReason - | IdlenessReleaseReason - | TransportErrorReleaseReason (Maybe ByteString) - | ReleaseActionCallReleaseReason +data ConnectionStatus + = -- | Connection is being established. + ConnectingConnectionStatus + | -- | Connection is established and not occupied. + ReadyForUseConnectionStatus + | -- | Is being used by some session. + -- + -- After it's done the status will transition to 'ReadyForUseConnectionStatus' or 'ReleasedConnectionStatus'. + InUseConnectionStatus + | -- | Connection terminated. + TerminatedConnectionStatus ConnectionTerminationReason + deriving (Show, Eq) + +data ConnectionTerminationReason + = -- | The age timeout of the connection has passed. + AgingConnectionTerminationReason + | -- | The timeout of how long a connection may remain idle in the pool has passed. + IdlenessConnectionTerminationReason + | -- | Connectivity issues with the server. + NetworkErrorConnectionTerminationReason (Maybe Text) + | -- | User has invoked the 'Hasql.Pool.release' procedure. + ReleaseConnectionTerminationReason deriving (Show, Eq) diff --git a/library/Hasql/Pool/Prelude.hs b/library/Hasql/Pool/Prelude.hs index 584f5acc85..f291d0dd05 100644 --- a/library/Hasql/Pool/Prelude.hs +++ b/library/Hasql/Pool/Prelude.hs @@ -41,6 +41,7 @@ import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports import Data.String as Exports +import Data.Text as Exports (Text) import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports From 4a290714f9ce529bd23cbe404caebc5d8d4277a7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 22 Feb 2024 21:06:18 +0300 Subject: [PATCH 0925/1204] Fix export --- library/Hasql/Pool.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/library/Hasql/Pool.hs b/library/Hasql/Pool.hs index 1b1cb4ad10..0f171f3704 100644 --- a/library/Hasql/Pool.hs +++ b/library/Hasql/Pool.hs @@ -10,8 +10,7 @@ module Hasql.Pool UsageError (..), -- * Observations - Observation (..), - ConnectionTerminationReason (..), + module Hasql.Pool.Observation, ) where From 7a0e6201f5f03fde226edb7116770d706a622b8f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 23 Feb 2024 14:35:42 +0300 Subject: [PATCH 0926/1204] Correct refs --- library/Hasql/Pool/Observation.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pool/Observation.hs b/library/Hasql/Pool/Observation.hs index 1ee14ba1cb..d0e26a031b 100644 --- a/library/Hasql/Pool/Observation.hs +++ b/library/Hasql/Pool/Observation.hs @@ -18,7 +18,7 @@ data ConnectionStatus ReadyForUseConnectionStatus | -- | Is being used by some session. -- - -- After it's done the status will transition to 'ReadyForUseConnectionStatus' or 'ReleasedConnectionStatus'. + -- After it's done the status will transition to 'ReadyForUseConnectionStatus' or 'TerminatedConnectionStatus'. InUseConnectionStatus | -- | Connection terminated. TerminatedConnectionStatus ConnectionTerminationReason From 9b7b8bbf2db2dcede924eb32aece34cea16f91de Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 12:07:41 +0300 Subject: [PATCH 0927/1204] Move to cabal-gild --- .../workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 4 +- hasql-pool.cabal | 79 ++++++++++--------- .../library/exposed}/Hasql/Pool.hs | 0 .../exposed}/Hasql/Pool/Observation.hs | 0 .../library/other}/Hasql/Pool/Prelude.hs | 0 {test => src/test}/Main.hs | 0 7 files changed, 45 insertions(+), 40 deletions(-) rename {library => src/library/exposed}/Hasql/Pool.hs (100%) rename {library => src/library/exposed}/Hasql/Pool/Observation.hs (100%) rename {library => src/library/other}/Hasql/Pool/Prelude.hs (100%) rename {test => src/test}/Main.hs (100%) diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 79c21f5dcc..5144337b7c 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -9,7 +9,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 9024112507..32895c6be8 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -15,7 +15,7 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 secrets: inherit check: @@ -26,7 +26,7 @@ jobs: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 secrets: inherit with: prefix-tag-with-v: false diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 70193dbc14..862bd4a38b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,25 +1,23 @@ -cabal-version: 3.0 -name: hasql-pool -version: 0.10.1 -category: Hasql, Database, PostgreSQL -synopsis: Pool of connections for Hasql -homepage: https://github.com/nikita-volkov/hasql-pool -bug-reports: https://github.com/nikita-volkov/hasql-pool/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE +cabal-version: 3.0 +name: hasql-pool +version: 0.10.1 +category: Hasql, Database, PostgreSQL +synopsis: Pool of connections for Hasql +homepage: https://github.com/nikita-volkov/hasql-pool +bug-reports: https://github.com/nikita-volkov/hasql-pool/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-pool.git common base-settings default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction BangPatterns BlockArguments ConstraintKinds @@ -59,36 +57,43 @@ common base-settings TypeFamilies TypeOperators UnboxedTuples + NoImplicitPrelude + NoMonomorphismRestriction - default-language: Haskell2010 + default-language: Haskell2010 library - import: base-settings - hs-source-dirs: library + import: base-settings + hs-source-dirs: + src/library/exposed + src/library/other + + -- cabal-gild: discover src/library/exposed exposed-modules: Hasql.Pool Hasql.Pool.Observation - other-modules: Hasql.Pool.Prelude + -- cabal-gild: discover src/library/other + other-modules: Hasql.Pool.Prelude build-depends: - , base >=4.11 && <5 - , bytestring >=0.10 && <0.14 - , hasql >=1.6.0.1 && <1.7 - , stm >=2.5 && <3 - , text >=1.2 && <3 - , time >=1.9 && <2 - , uuid >=1.3 && <2 + base >=4.11 && <5, + bytestring >=0.10 && <0.14, + hasql >=1.6.0.1 && <1.7, + stm >=2.5 && <3, + text >=1.2 && <3, + time >=1.9 && <2, + uuid >=1.3 && <2, test-suite test - import: base-settings - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: Main.hs - ghc-options: -threaded + import: base-settings + type: exitcode-stdio-1.0 + hs-source-dirs: src/test + main-is: Main.hs + ghc-options: -threaded build-depends: - , async >=2.2 && <3 - , hasql - , hasql-pool - , hspec >=2.6 && <3 - , random >=1.2 && <2 - , rerebase >=1.15 && <2 + async >=2.2 && <3, + hasql, + hasql-pool, + hspec >=2.6 && <3, + random >=1.2 && <2, + rerebase >=1.15 && <2, diff --git a/library/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs similarity index 100% rename from library/Hasql/Pool.hs rename to src/library/exposed/Hasql/Pool.hs diff --git a/library/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs similarity index 100% rename from library/Hasql/Pool/Observation.hs rename to src/library/exposed/Hasql/Pool/Observation.hs diff --git a/library/Hasql/Pool/Prelude.hs b/src/library/other/Hasql/Pool/Prelude.hs similarity index 100% rename from library/Hasql/Pool/Prelude.hs rename to src/library/other/Hasql/Pool/Prelude.hs diff --git a/test/Main.hs b/src/test/Main.hs similarity index 100% rename from test/Main.hs rename to src/test/Main.hs From 67cba12a6e818604756c46a933d2e1d90ca7ded6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 12:12:14 +0300 Subject: [PATCH 0928/1204] Avoid reexporting observations --- src/library/exposed/Hasql/Pool.hs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 0f171f3704..02f76af5b0 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -8,9 +8,6 @@ module Hasql.Pool -- * Errors UsageError (..), - - -- * Observations - module Hasql.Pool.Observation, ) where From fb2d7a5cad8e8db95a607afb12a2974f77a93652 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 12:12:53 +0300 Subject: [PATCH 0929/1204] Introduce flexible config --- hasql-pool.cabal | 7 +- src/library/exposed/Hasql/Pool.hs | 73 +++-------------- src/library/exposed/Hasql/Pool/Config.hs | 24 ++++++ src/library/other/Hasql/Pool/Config/Config.hs | 26 ++++++ .../other/Hasql/Pool/Config/Setting.hs | 81 +++++++++++++++++++ src/test/Main.hs | 14 +++- 6 files changed, 163 insertions(+), 62 deletions(-) create mode 100644 src/library/exposed/Hasql/Pool/Config.hs create mode 100644 src/library/other/Hasql/Pool/Config/Config.hs create mode 100644 src/library/other/Hasql/Pool/Config/Setting.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 862bd4a38b..23eddad9c8 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -71,10 +71,15 @@ library -- cabal-gild: discover src/library/exposed exposed-modules: Hasql.Pool + Hasql.Pool.Config Hasql.Pool.Observation -- cabal-gild: discover src/library/other - other-modules: Hasql.Pool.Prelude + other-modules: + Hasql.Pool.Config.Config + Hasql.Pool.Config.Setting + Hasql.Pool.Prelude + build-depends: base >=4.11 && <5, bytestring >=0.10 && <0.14, diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 02f76af5b0..d0d5cfd5e7 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -2,7 +2,6 @@ module Hasql.Pool ( -- * Pool Pool, acquire, - acquireDynamically, use, release, @@ -16,6 +15,7 @@ import qualified Data.Text.Encoding.Error as Text import qualified Data.UUID.V4 as Uuid import Hasql.Connection (Connection) import qualified Hasql.Connection as Connection +import qualified Hasql.Pool.Config.Config as Config import Hasql.Pool.Observation import Hasql.Pool.Prelude import qualified Hasql.Session as Session @@ -63,61 +63,14 @@ data Pool = Pool poolObserver :: Observation -> IO () } --- | Create a connection-pool, with default settings. --- --- No connections actually get established by this function. It is delegated --- to 'use'. -acquire :: - -- | Pool size. - Int -> - -- | Connection acquisition timeout. - DiffTime -> - -- | Maximal connection lifetime. - DiffTime -> - -- | Maximal connection idle time. - DiffTime -> - -- | Connection settings. - Connection.Settings -> - -- | Observation handler. - -- - -- Typically it's used for monitoring the state of the pool via metrics and logging. - -- - -- If the action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue. - -- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. - (Observation -> IO ()) -> - IO Pool -acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings observer = - acquireDynamically poolSize acqTimeout maxLifetime maxIdletime (pure connectionSettings) observer - -- | Create a connection-pool. -- --- In difference to 'acquire' new connection settings get fetched each --- time a connection is created. This may be useful for some security models. --- -- No connections actually get established by this function. It is delegated -- to 'use'. -acquireDynamically :: - -- | Pool size. - Int -> - -- | Connection acquisition timeout. - DiffTime -> - -- | Maximal connection lifetime. - DiffTime -> - -- | Maximal connection idle time. - DiffTime -> - -- | Action fetching connection settings. - IO Connection.Settings -> - -- | Observation handler. - -- - -- Use it for monitoring the state of the pool via metrics and logging. - -- - -- If the action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue. - -- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. - (Observation -> IO ()) -> - IO Pool -acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSettings observer = do +acquire :: Config.Config -> IO Pool +acquire config = do connectionQueue <- newTQueueIO - capVar <- newTVarIO poolSize + capVar <- newTVarIO (Config.size config) reuseVar <- newTVarIO =<< newTVarIO True reaperRef <- newIORef () @@ -126,31 +79,31 @@ acquireDynamically poolSize acqTimeout maxLifetime maxIdletime fetchConnectionSe now <- getMonotonicTimeNSec join . atomically $ do entries <- flushTQueue connectionQueue - let (agedEntries, unagedEntries) = partition (entryIsAged maxLifetimeNanos now) entries - (idleEntries, liveEntries) = partition (entryIsIdle maxLifetimeNanos now) unagedEntries + let (agedEntries, unagedEntries) = partition (entryIsAged agingTimeoutNanos now) entries + (idleEntries, liveEntries) = partition (entryIsIdle agingTimeoutNanos now) unagedEntries traverse_ (writeTQueue connectionQueue) liveEntries return $ do forM_ agedEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - observer (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) + (Config.observationHandler config) (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) forM_ idleEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - observer (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) + (Config.observationHandler config) (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) void . mkWeakIORef reaperRef $ do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool poolSize fetchConnectionSettings acqTimeoutMicros maxLifetimeNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef observer + return $ Pool (Config.size config) (Config.connectionStringProvider config) acqTimeoutMicros agingTimeoutNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef (Config.observationHandler config) where acqTimeoutMicros = - div (fromIntegral (diffTimeToPicoseconds acqTimeout)) 1_000_000 - maxLifetimeNanos = - div (fromIntegral (diffTimeToPicoseconds maxLifetime)) 1_000 + div (fromIntegral (diffTimeToPicoseconds (Config.acquisitionTimeout config))) 1_000_000 + agingTimeoutNanos = + div (fromIntegral (diffTimeToPicoseconds (Config.agingTimeout config))) 1_000 maxIdletimeNanos = - div (fromIntegral (diffTimeToPicoseconds maxIdletime)) 1_000 + div (fromIntegral (diffTimeToPicoseconds (Config.idlenessTimeout config))) 1_000 -- | Release all the idle connections in the pool, and mark the in-use connections -- to be released after use. Any connections acquired after the call will be diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs new file mode 100644 index 0000000000..39e0d91bea --- /dev/null +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -0,0 +1,24 @@ +-- | DSL for construction of configs. +module Hasql.Pool.Config + ( Config.Config, + compile, + Setting.Setting, + Setting.size, + Setting.acquisitionTimeout, + Setting.agingTimeout, + Setting.idlenessTimeout, + Setting.staticConnectionString, + Setting.dynamicConnectionString, + Setting.observationHandler, + ) +where + +import qualified Hasql.Pool.Config.Config as Config +import qualified Hasql.Pool.Config.Setting as Setting +import Hasql.Pool.Prelude + +-- | Compile config from a list of settings. +-- Latter settings override the preceding in cases of conflicts. +compile :: [Setting.Setting] -> Config.Config +compile = + foldr ($) Config.standard . fmap Setting.apply diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs new file mode 100644 index 0000000000..a7e3c03dbb --- /dev/null +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -0,0 +1,26 @@ +module Hasql.Pool.Config.Config where + +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude + +-- | Configufation for Hasql connection pool. +data Config = Config + { size :: Int, + acquisitionTimeout :: DiffTime, + agingTimeout :: DiffTime, + idlenessTimeout :: DiffTime, + connectionStringProvider :: IO ByteString, + observationHandler :: Observation -> IO () + } + +-- | Reasonable defaults, which can be built upon. +standard :: Config +standard = + Config + { size = 3, + acquisitionTimeout = 10, + agingTimeout = 60 * 60 * 24, + idlenessTimeout = 60 * 10, + connectionStringProvider = pure "postgresql://postgres:postgres@localhost:5432/postgres", + observationHandler = const (pure ()) + } diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs new file mode 100644 index 0000000000..0a425d29b2 --- /dev/null +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -0,0 +1,81 @@ +module Hasql.Pool.Config.Setting where + +import Hasql.Pool.Config.Config (Config) +import qualified Hasql.Pool.Config.Config as Config +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude + +apply :: Setting -> Config -> Config +apply (Setting run) = run + +-- | A single setting of a config. +newtype Setting + = Setting (Config -> Config) + +-- | Pool size. +-- +-- 3 by default. +size :: Int -> Setting +size x = + Setting (\config -> config {Config.size = x}) + +-- | Connection acquisition timeout. +-- +-- 10 seconds by default. +acquisitionTimeout :: DiffTime -> Setting +acquisitionTimeout x = + Setting (\config -> config {Config.acquisitionTimeout = x}) + +-- | Maximal connection lifetime. +-- +-- Determines how long is available for reuse. +-- After the timeout passes and an active session is finished the connection will be closed releasing a slot in the pool for a fresh connection to be established. +-- +-- This is useful as a healthy measure for resetting the server-side caches. +-- +-- 1 day by default. +agingTimeout :: DiffTime -> Setting +agingTimeout x = + Setting (\config -> config {Config.agingTimeout = x}) + +-- | Maximal connection idle time. +-- +-- How long to keep a connection open when it's not being used. +-- +-- 10 minutes by default. +idlenessTimeout :: DiffTime -> Setting +idlenessTimeout x = + Setting (\config -> config {Config.idlenessTimeout = x}) + +-- | Connection string. +-- +-- You can use 'Hasql.Connection.settings' to construct it. +-- +-- @\"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. +staticConnectionString :: ByteString -> Setting +staticConnectionString x = + Setting (\config -> config {Config.connectionStringProvider = pure x}) + +-- | Action providing connection settings. +-- +-- Gets used each time a connection gets established by the pool. +-- This may be useful for some authorization models. +-- +-- You can use 'Hasql.Connection.settings' to construct it. +-- +-- @pure \"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. +dynamicConnectionString :: IO ByteString -> Setting +dynamicConnectionString x = + Setting (\config -> config {Config.connectionStringProvider = x}) + +-- | Observation handler. +-- +-- Typically it's used for monitoring the state of the pool via metrics and logging. +-- +-- If the provided action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue to avoid occupying the pool management thread for too long. +-- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. +-- +-- @const (pure ())@ by default. +observationHandler :: (Observation -> IO ()) -> Setting +observationHandler x = + Setting (\config -> config {Config.observationHandler = x}) diff --git a/src/test/Main.hs b/src/test/Main.hs index b3659f4e82..ef4c42fd19 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -7,6 +7,7 @@ import qualified Hasql.Connection as Connection import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders import Hasql.Pool +import qualified Hasql.Pool.Config as Config import qualified Hasql.Session as Session import qualified Hasql.Statement as Statement import qualified System.Environment @@ -18,7 +19,18 @@ main :: IO () main = do connectionSettings <- getConnectionSettings let withPool poolSize acqTimeout maxLifetime maxIdletime connectionSettings = - bracket (acquire poolSize acqTimeout maxLifetime maxIdletime connectionSettings (const (pure ()))) release + bracket + ( acquire + ( Config.compile + [ Config.size poolSize, + Config.acquisitionTimeout acqTimeout, + Config.agingTimeout maxLifetime, + Config.idlenessTimeout maxIdletime, + Config.staticConnectionString connectionSettings + ] + ) + ) + release withDefaultPool = withPool 3 10 1_800 1_800 connectionSettings From 82716a6ea5e4b439c8b9eaf2223065701b68970f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 16:16:01 +0300 Subject: [PATCH 0930/1204] Rename standard to defaults --- src/library/exposed/Hasql/Pool/Config.hs | 2 +- src/library/other/Hasql/Pool/Config/Config.hs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs index 39e0d91bea..8023f14245 100644 --- a/src/library/exposed/Hasql/Pool/Config.hs +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -21,4 +21,4 @@ import Hasql.Pool.Prelude -- Latter settings override the preceding in cases of conflicts. compile :: [Setting.Setting] -> Config.Config compile = - foldr ($) Config.standard . fmap Setting.apply + foldr ($) Config.defaults . fmap Setting.apply diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index a7e3c03dbb..70a740eb29 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -14,8 +14,8 @@ data Config = Config } -- | Reasonable defaults, which can be built upon. -standard :: Config -standard = +defaults :: Config +defaults = Config { size = 3, acquisitionTimeout = 10, From 878430cadc43693551bdbf71bf5731d894eb0338 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 16:21:24 +0300 Subject: [PATCH 0931/1204] Extend changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4accc5cb9..2e15d45c3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # 0.11 -- Optional observability event stream, which can be interpreted into log records and metrics. +- Optional observability event stream added. Provides a flexible mechanism for monitoring the healthiness of the pool via logs and metrics. # 0.10.1 From d7162ce36551d95aaf656d1e24ec61edb3c32bc4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 17:05:59 +0300 Subject: [PATCH 0932/1204] Extend the observability docs --- src/library/exposed/Hasql/Pool/Observation.hs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index d0e26a031b..1a207b518e 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -1,18 +1,27 @@ +-- | Interface for processing observations of the status of the pool. +-- +-- Provides a flexible mechanism for monitoring the healthiness of the pool via logs and metrics without any opinionated choices on the actual monitoring technologies. +-- Specific interpreters are encouraged to be created as extension libraries. module Hasql.Pool.Observation where import Hasql.Pool.Prelude +-- | An observation of a change of the state of a pool. data Observation - = ConnectionObservation + = -- | Status of one of the pool's connections has changed. + ConnectionObservation -- | Generated connection ID. -- For grouping the observations by one connection. UUID - -- | Connection status that it has entered. + -- | Status that the connection has entered. ConnectionStatus deriving (Show, Eq) +-- | Status of a connection. data ConnectionStatus = -- | Connection is being established. + -- + -- This is the initial status of every connection. ConnectingConnectionStatus | -- | Connection is established and not occupied. ReadyForUseConnectionStatus @@ -24,6 +33,7 @@ data ConnectionStatus TerminatedConnectionStatus ConnectionTerminationReason deriving (Show, Eq) +-- | Explanation of why a connection was terminated. data ConnectionTerminationReason = -- | The age timeout of the connection has passed. AgingConnectionTerminationReason From ee927ec3784ba0cb545a76923afb34281caf2aac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 17:23:37 +0300 Subject: [PATCH 0933/1204] Update the changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4accc5cb9..c4580ec03f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -# 0.11 +# 1 - Optional observability event stream, which can be interpreted into log records and metrics. +- Configuration got isolated into a DSL, which will allow to provide new configurations without breaking backward compatibility. # 0.10.1 From 6586f40c82dbfc662ea32aa3d98c17af029befa3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 21:56:53 +0300 Subject: [PATCH 0934/1204] Rename compile to settings --- src/library/exposed/Hasql/Pool/Config.hs | 6 +++--- src/test/Main.hs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs index 8023f14245..30561df8a7 100644 --- a/src/library/exposed/Hasql/Pool/Config.hs +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -1,7 +1,7 @@ -- | DSL for construction of configs. module Hasql.Pool.Config ( Config.Config, - compile, + settings, Setting.Setting, Setting.size, Setting.acquisitionTimeout, @@ -19,6 +19,6 @@ import Hasql.Pool.Prelude -- | Compile config from a list of settings. -- Latter settings override the preceding in cases of conflicts. -compile :: [Setting.Setting] -> Config.Config -compile = +settings :: [Setting.Setting] -> Config.Config +settings = foldr ($) Config.defaults . fmap Setting.apply diff --git a/src/test/Main.hs b/src/test/Main.hs index ef4c42fd19..3a456dae63 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -21,7 +21,7 @@ main = do let withPool poolSize acqTimeout maxLifetime maxIdletime connectionSettings = bracket ( acquire - ( Config.compile + ( Config.settings [ Config.size poolSize, Config.acquisitionTimeout acqTimeout, Config.agingTimeout maxLifetime, From 8294d715c3ca795ccea8d3a98b7b074eec393768 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 25 Feb 2024 22:00:39 +0300 Subject: [PATCH 0935/1204] Move to connection settings For better compatibility with Hasql updates --- src/library/exposed/Hasql/Pool.hs | 2 +- src/library/exposed/Hasql/Pool/Config.hs | 4 ++-- src/library/other/Hasql/Pool/Config/Config.hs | 5 +++-- src/library/other/Hasql/Pool/Config/Setting.hs | 13 +++++++------ src/test/Main.hs | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index d0d5cfd5e7..2720d70804 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -96,7 +96,7 @@ acquire config = do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool (Config.size config) (Config.connectionStringProvider config) acqTimeoutMicros agingTimeoutNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef (Config.observationHandler config) + return $ Pool (Config.size config) (Config.connectionSettingsProvider config) acqTimeoutMicros agingTimeoutNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef (Config.observationHandler config) where acqTimeoutMicros = div (fromIntegral (diffTimeToPicoseconds (Config.acquisitionTimeout config))) 1_000_000 diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs index 30561df8a7..7462c6eb4f 100644 --- a/src/library/exposed/Hasql/Pool/Config.hs +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -7,8 +7,8 @@ module Hasql.Pool.Config Setting.acquisitionTimeout, Setting.agingTimeout, Setting.idlenessTimeout, - Setting.staticConnectionString, - Setting.dynamicConnectionString, + Setting.staticConnectionSettings, + Setting.dynamicConnectionSettings, Setting.observationHandler, ) where diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 70a740eb29..1912114a0e 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -1,5 +1,6 @@ module Hasql.Pool.Config.Config where +import qualified Hasql.Connection as Connection import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude @@ -9,7 +10,7 @@ data Config = Config acquisitionTimeout :: DiffTime, agingTimeout :: DiffTime, idlenessTimeout :: DiffTime, - connectionStringProvider :: IO ByteString, + connectionSettingsProvider :: IO Connection.Settings, observationHandler :: Observation -> IO () } @@ -21,6 +22,6 @@ defaults = acquisitionTimeout = 10, agingTimeout = 60 * 60 * 24, idlenessTimeout = 60 * 10, - connectionStringProvider = pure "postgresql://postgres:postgres@localhost:5432/postgres", + connectionSettingsProvider = pure "postgresql://postgres:postgres@localhost:5432/postgres", observationHandler = const (pure ()) } diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index 0a425d29b2..fbdd4ef52f 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -1,5 +1,6 @@ module Hasql.Pool.Config.Setting where +import qualified Hasql.Connection as Connection import Hasql.Pool.Config.Config (Config) import qualified Hasql.Pool.Config.Config as Config import Hasql.Pool.Observation (Observation) @@ -52,9 +53,9 @@ idlenessTimeout x = -- You can use 'Hasql.Connection.settings' to construct it. -- -- @\"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. -staticConnectionString :: ByteString -> Setting -staticConnectionString x = - Setting (\config -> config {Config.connectionStringProvider = pure x}) +staticConnectionSettings :: Connection.Settings -> Setting +staticConnectionSettings x = + Setting (\config -> config {Config.connectionSettingsProvider = pure x}) -- | Action providing connection settings. -- @@ -64,9 +65,9 @@ staticConnectionString x = -- You can use 'Hasql.Connection.settings' to construct it. -- -- @pure \"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. -dynamicConnectionString :: IO ByteString -> Setting -dynamicConnectionString x = - Setting (\config -> config {Config.connectionStringProvider = x}) +dynamicConnectionSettings :: IO Connection.Settings -> Setting +dynamicConnectionSettings x = + Setting (\config -> config {Config.connectionSettingsProvider = x}) -- | Observation handler. -- diff --git a/src/test/Main.hs b/src/test/Main.hs index 3a456dae63..fc159ac65c 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -26,7 +26,7 @@ main = do Config.acquisitionTimeout acqTimeout, Config.agingTimeout maxLifetime, Config.idlenessTimeout maxIdletime, - Config.staticConnectionString connectionSettings + Config.staticConnectionSettings connectionSettings ] ) ) From 7875cdef69fbac037c7d3b8d2f0835c0113831ab Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 26 Feb 2024 19:06:00 +0000 Subject: [PATCH 0936/1204] Set package version to 1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 23eddad9c8..d28567b22b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 0.10.1 +version: 1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 3bf5d240c06b3e8d00396d4bd60561d0b542c02b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 26 Feb 2024 22:25:33 +0300 Subject: [PATCH 0937/1204] Refine the docs --- src/library/other/Hasql/Pool/Config/Setting.hs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index fbdd4ef52f..75e2771119 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -52,7 +52,9 @@ idlenessTimeout x = -- -- You can use 'Hasql.Connection.settings' to construct it. -- --- @\"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. +-- By default it is: +-- +-- > "postgresql://postgres:postgres@localhost:5432/postgres" staticConnectionSettings :: Connection.Settings -> Setting staticConnectionSettings x = Setting (\config -> config {Config.connectionSettingsProvider = pure x}) @@ -64,7 +66,9 @@ staticConnectionSettings x = -- -- You can use 'Hasql.Connection.settings' to construct it. -- --- @pure \"postgresql://postgres:postgres@localhost:5432/postgres\"@ by default. +-- By default it is: +-- +-- > pure "postgresql://postgres:postgres@localhost:5432/postgres" dynamicConnectionSettings :: IO Connection.Settings -> Setting dynamicConnectionSettings x = Setting (\config -> config {Config.connectionSettingsProvider = x}) @@ -76,7 +80,9 @@ dynamicConnectionSettings x = -- If the provided action is not lightweight, it's recommended to use intermediate bufferring via channels like TBQueue to avoid occupying the pool management thread for too long. -- E.g., if the action is @'atomically' . 'writeTBQueue' yourQueue@, then reading from it and processing can be done on a separate thread. -- --- @const (pure ())@ by default. +-- By default it is: +-- +-- > const (pure ()) observationHandler :: (Observation -> IO ()) -> Setting observationHandler x = Setting (\config -> config {Config.observationHandler = x}) From d6df4c8d60420d33ec1e15afc6c19c19d51e7096 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 26 Feb 2024 19:28:09 +0000 Subject: [PATCH 0938/1204] Set package version to 1.0.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index d28567b22b..4ae3a6c991 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1 +version: 1.0.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From d34ab0a110f5f0c3c537591c444bab79b2aa797a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 27 Feb 2024 23:04:43 +0300 Subject: [PATCH 0939/1204] Extend docs --- src/library/exposed/Hasql/Pool.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 2720d70804..b6aa1bd3b3 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -67,6 +67,8 @@ data Pool = Pool -- -- No connections actually get established by this function. It is delegated -- to 'use'. +-- +-- If you want to ensure that the pool connects fine at the initialization phase, just run 'use' with an empty session (@pure ()@) and check for errors. acquire :: Config.Config -> IO Pool acquire config = do connectionQueue <- newTQueueIO From 77041bba9d5bbc3ba75e238ec69dfc002337f0e8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 27 Feb 2024 23:04:55 +0300 Subject: [PATCH 0940/1204] Add defaults --- hasql-pool.cabal | 1 + .../exposed/Hasql/Pool/Config/Defaults.hs | 40 +++++++++++++++++++ src/library/other/Hasql/Pool/Config/Config.hs | 13 +++--- 3 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/library/exposed/Hasql/Pool/Config/Defaults.hs diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 4ae3a6c991..07166e35fc 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -72,6 +72,7 @@ library exposed-modules: Hasql.Pool Hasql.Pool.Config + Hasql.Pool.Config.Defaults Hasql.Pool.Observation -- cabal-gild: discover src/library/other diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/library/exposed/Hasql/Pool/Config/Defaults.hs new file mode 100644 index 0000000000..251206da31 --- /dev/null +++ b/src/library/exposed/Hasql/Pool/Config/Defaults.hs @@ -0,0 +1,40 @@ +module Hasql.Pool.Config.Defaults where + +import qualified Hasql.Connection as Connection +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude + +-- | +-- 3 connections. +size :: Int +size = 3 + +-- | +-- 10 seconds. +acquisitionTimeout :: DiffTime +acquisitionTimeout = 10 + +-- | +-- 1 day. +agingTimeout :: DiffTime +agingTimeout = 60 * 60 * 24 + +-- | +-- 10 minutes. +idlenessTimeout :: DiffTime +idlenessTimeout = 60 * 10 + +-- | +-- > "postgresql://postgres:postgres@localhost:5432/postgres" +staticConnectionSettings :: Connection.Settings +staticConnectionSettings = "postgresql://postgres:postgres@localhost:5432/postgres" + +-- | +-- > pure "postgresql://postgres:postgres@localhost:5432/postgres" +dynamicConnectionSettings :: IO Connection.Settings +dynamicConnectionSettings = pure "postgresql://postgres:postgres@localhost:5432/postgres" + +-- | +-- > const (pure ()) +observationHandler :: Observation -> IO () +observationHandler = const (pure ()) diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 1912114a0e..0e31fcafad 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -1,6 +1,7 @@ module Hasql.Pool.Config.Config where import qualified Hasql.Connection as Connection +import qualified Hasql.Pool.Config.Defaults as Defaults import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude @@ -18,10 +19,10 @@ data Config = Config defaults :: Config defaults = Config - { size = 3, - acquisitionTimeout = 10, - agingTimeout = 60 * 60 * 24, - idlenessTimeout = 60 * 10, - connectionSettingsProvider = pure "postgresql://postgres:postgres@localhost:5432/postgres", - observationHandler = const (pure ()) + { size = Defaults.size, + acquisitionTimeout = Defaults.acquisitionTimeout, + agingTimeout = Defaults.agingTimeout, + idlenessTimeout = Defaults.idlenessTimeout, + connectionSettingsProvider = Defaults.dynamicConnectionSettings, + observationHandler = Defaults.observationHandler } From 49498fe079d1730c8e47333945ba13fd6c7ebae5 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 27 Feb 2024 20:06:39 +0000 Subject: [PATCH 0941/1204] Format --- src/library/exposed/Hasql/Pool.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index b6aa1bd3b3..a278c2a3ad 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -67,7 +67,7 @@ data Pool = Pool -- -- No connections actually get established by this function. It is delegated -- to 'use'. --- +-- -- If you want to ensure that the pool connects fine at the initialization phase, just run 'use' with an empty session (@pure ()@) and check for errors. acquire :: Config.Config -> IO Pool acquire config = do From e7400b9983f153b792974ba5818a672743cdadab Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 27 Feb 2024 20:09:44 +0000 Subject: [PATCH 0942/1204] Set package version to 1.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 07166e35fc..3d1895ff42 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.0.0.1 +version: 1.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 8a9389f22b08f7eff7443c2744cc1ff2320aa770 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 29 Feb 2024 09:36:50 +0300 Subject: [PATCH 0943/1204] Clean up --- src/library/exposed/Hasql/Pool.hs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index a278c2a3ad..29f88e21ee 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -164,15 +164,14 @@ use Pool {..} sess = do now <- getMonotonicTimeNSec id <- Uuid.nextRandom poolObserver (ConnectionObservation id ConnectingConnectionStatus) - connRes <- Connection.acquire settings - case connRes of + Connection.acquire settings >>= \case Left connErr -> do poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) connErr)))) atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr - Right entry -> do + Right connection -> do poolObserver (ConnectionObservation id ReadyForUseConnectionStatus) - onLiveConn reuseVar (Entry entry now now id) + onLiveConn reuseVar (Entry connection now now id) onConn reuseVar entry = do now <- getMonotonicTimeNSec From 54cdc2ab99839b19c7690cfe83646f71cde12d97 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 29 Feb 2024 09:53:47 +0300 Subject: [PATCH 0944/1204] Add initSession setting --- src/library/exposed/Hasql/Pool.hs | 20 +++++++++++++++---- src/library/exposed/Hasql/Pool/Config.hs | 1 + .../exposed/Hasql/Pool/Config/Defaults.hs | 6 ++++++ src/library/exposed/Hasql/Pool/Observation.hs | 3 +++ src/library/other/Hasql/Pool/Config/Config.hs | 7 +++++-- .../other/Hasql/Pool/Config/Setting.hs | 9 +++++++++ 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 29f88e21ee..8b2a796dc0 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -60,7 +60,9 @@ data Pool = Pool -- | To stop the manager thread via garbage collection. poolReaperRef :: IORef (), -- | Action for reporting the observations. - poolObserver :: Observation -> IO () + poolObserver :: Observation -> IO (), + -- | Initial session to execute upon every established connection. + poolInitSession :: Session.Session () } -- | Create a connection-pool. @@ -98,7 +100,7 @@ acquire config = do -- When the pool goes out of scope, stop the manager. killThread managerTid - return $ Pool (Config.size config) (Config.connectionSettingsProvider config) acqTimeoutMicros agingTimeoutNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef (Config.observationHandler config) + return $ Pool (Config.size config) (Config.connectionSettingsProvider config) acqTimeoutMicros agingTimeoutNanos maxIdletimeNanos connectionQueue capVar reuseVar reaperRef (Config.observationHandler config) (Config.initSession config) where acqTimeoutMicros = div (fromIntegral (diffTimeToPicoseconds (Config.acquisitionTimeout config))) 1_000_000 @@ -170,8 +172,18 @@ use Pool {..} sess = do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr Right connection -> do - poolObserver (ConnectionObservation id ReadyForUseConnectionStatus) - onLiveConn reuseVar (Entry connection now now id) + Session.run poolInitSession connection >>= \case + Left err -> do + Connection.release connection + case err of + Session.QueryError _ _ (Session.ClientError details) -> do + poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) + _ -> + poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err))) + return $ Left $ SessionUsageError err + Right () -> do + poolObserver (ConnectionObservation id ReadyForUseConnectionStatus) + onLiveConn reuseVar (Entry connection now now id) onConn reuseVar entry = do now <- getMonotonicTimeNSec diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs index 7462c6eb4f..28821e43e6 100644 --- a/src/library/exposed/Hasql/Pool/Config.hs +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -10,6 +10,7 @@ module Hasql.Pool.Config Setting.staticConnectionSettings, Setting.dynamicConnectionSettings, Setting.observationHandler, + Setting.initSession, ) where diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/library/exposed/Hasql/Pool/Config/Defaults.hs index 251206da31..da09ce0e7a 100644 --- a/src/library/exposed/Hasql/Pool/Config/Defaults.hs +++ b/src/library/exposed/Hasql/Pool/Config/Defaults.hs @@ -3,6 +3,7 @@ module Hasql.Pool.Config.Defaults where import qualified Hasql.Connection as Connection import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | -- 3 connections. @@ -38,3 +39,8 @@ dynamicConnectionSettings = pure "postgresql://postgres:postgres@localhost:5432/ -- > const (pure ()) observationHandler :: Observation -> IO () observationHandler = const (pure ()) + +-- | +-- > pure () +initSession :: Session.Session () +initSession = pure () diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index 1a207b518e..bd2a142a73 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -5,6 +5,7 @@ module Hasql.Pool.Observation where import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | An observation of a change of the state of a pool. data Observation @@ -43,4 +44,6 @@ data ConnectionTerminationReason NetworkErrorConnectionTerminationReason (Maybe Text) | -- | User has invoked the 'Hasql.Pool.release' procedure. ReleaseConnectionTerminationReason + | -- | Initialization session failure. + InitializationErrorTerminationReason Session.QueryError deriving (Show, Eq) diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 0e31fcafad..12329cd6fd 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -4,6 +4,7 @@ import qualified Hasql.Connection as Connection import qualified Hasql.Pool.Config.Defaults as Defaults import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | Configufation for Hasql connection pool. data Config = Config @@ -12,7 +13,8 @@ data Config = Config agingTimeout :: DiffTime, idlenessTimeout :: DiffTime, connectionSettingsProvider :: IO Connection.Settings, - observationHandler :: Observation -> IO () + observationHandler :: Observation -> IO (), + initSession :: Session.Session () } -- | Reasonable defaults, which can be built upon. @@ -24,5 +26,6 @@ defaults = agingTimeout = Defaults.agingTimeout, idlenessTimeout = Defaults.idlenessTimeout, connectionSettingsProvider = Defaults.dynamicConnectionSettings, - observationHandler = Defaults.observationHandler + observationHandler = Defaults.observationHandler, + initSession = Defaults.initSession } diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index 75e2771119..9d02065d31 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -5,6 +5,7 @@ import Hasql.Pool.Config.Config (Config) import qualified Hasql.Pool.Config.Config as Config import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude +import qualified Hasql.Session as Session apply :: Setting -> Config -> Config apply (Setting run) = run @@ -86,3 +87,11 @@ dynamicConnectionSettings x = observationHandler :: (Observation -> IO ()) -> Setting observationHandler x = Setting (\config -> config {Config.observationHandler = x}) + +-- | Initial session. +-- +-- Gets executed on every connection upon acquisition. +-- Lets you specify the connection-wide settings. +initSession :: Session.Session () -> Setting +initSession x = + Setting (\config -> config {Config.initSession = x}) From 0a9851647869e189543062aef4d6192c4a84dd8c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Mar 2024 13:07:17 +0300 Subject: [PATCH 0945/1204] Add automatic retry on deadlock errors (code 40P01) --- CHANGELOG.md | 3 +++ library/Hasql/Transaction/Private/Sessions.hs | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..558d44713a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# 1.1 + +- Add automatic retry on deadlock errors (code 40P01) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 200ca1621e..8db6433b21 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -39,5 +39,8 @@ commitOrAbort commit preparable = handleTransactionError :: QueryError -> Session a -> Session a handleTransactionError error onTransactionError = case error of - QueryError _ _ (ResultError (ServerError "40001" _ _ _ _)) -> onTransactionError + QueryError _ _ (ResultError (ServerError code _ _ _ _)) -> case code of + "40001" -> onTransactionError + "40P01" -> onTransactionError + _ -> throwError error error -> throwError error From 25b00b94deac40d45bee95fe22c8782ad5391cd1 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 6 Mar 2024 10:16:53 +0000 Subject: [PATCH 0946/1204] Set package version to 1.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index d478d67129..ef0b7b963d 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.0.1.4 +version: 1.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 97258bb010dc013c2ce8535659c5f1d92330d0f0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 6 Mar 2024 13:20:13 +0300 Subject: [PATCH 0947/1204] Mention changelog in cabal --- hasql-transaction.cabal | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ef0b7b963d..9b3fb3b93e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -13,6 +13,8 @@ license: MIT license-file: LICENSE build-type: Simple cabal-version: >=1.10 +extra-source-files: + CHANGELOG.md source-repository head type: git From 2aaa241fc780f2b3f64d78de875e6086e6a826ce Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 6 Mar 2024 10:20:54 +0000 Subject: [PATCH 0948/1204] Format --- hasql-transaction.cabal | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 9b3fb3b93e..848992d829 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,20 +1,19 @@ -name: hasql-transaction -version: 1.1 -category: Hasql, Database, PostgreSQL +name: hasql-transaction +version: 1.1 +category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql -homepage: https://github.com/nikita-volkov/hasql-transaction -bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple -cabal-version: >=1.10 -extra-source-files: - CHANGELOG.md +homepage: https://github.com/nikita-volkov/hasql-transaction +bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE +build-type: Simple +cabal-version: >=1.10 +extra-source-files: CHANGELOG.md source-repository head type: git From b1b5c4aeecef85071af78b8e5d183ce1ce83c5eb Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 6 Mar 2024 10:29:14 +0000 Subject: [PATCH 0949/1204] Set package version to 1.1.0.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 848992d829..02c14b6cbe 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,5 +1,5 @@ name: hasql-transaction -version: 1.1 +version: 1.1.0.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 7e893fd45ed787d6d4a9a91b55d634736fedef3d Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 12 Mar 2024 18:05:27 -0400 Subject: [PATCH 0950/1204] When PQ.socket fails we just need to wait, the connection should be starting or resetting --- src/Hasql/Notifications.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index eb04c1baf1..ed513f5304 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -34,7 +34,7 @@ import Control.Monad (void, forever) #if defined(mingw32_HOST_OS) import Control.Concurrent ( threadDelay ) #else -import Control.Concurrent (threadWaitRead) +import Control.Concurrent (threadWaitRead, threadDelay) #endif import Control.Exception (Exception, throw) @@ -164,7 +164,7 @@ waitForNotifications sendNotification con = Nothing -> do mfd <- PQ.socket pqCon case mfd of - Nothing -> panic "Error checking for PostgreSQL notifications" + Nothing -> void $ threadDelay 1000000 #if defined(mingw32_HOST_OS) Just _ -> do void $ threadDelay 1000000 From 88502eef85b4b64ed3601e037ebb3bee5e2cdfaa Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 12 Mar 2024 18:07:52 -0400 Subject: [PATCH 0951/1204] Panic and try to get libpq message when consumeInput fails --- src/Hasql/Notifications.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index ed513f5304..8fe6c7b90f 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -171,8 +171,11 @@ waitForNotifications sendNotification con = #else Just fd -> do void $ threadWaitRead fd -#endif - void $ PQ.consumeInput pqCon + + result <- PQ.consumeInput pqCon + unless result $ do + mError <- PQ.errorMessage pqCon + panic $ maybe "Error checking for PostgreSQL notifications" show mError Just notification -> sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) panic :: String -> a From 769ca47f4da421b75b97a87102613b406d46d0d3 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Tue, 12 Mar 2024 18:08:10 -0400 Subject: [PATCH 0952/1204] Reformat --- src/Hasql/Notifications.hs | 245 +++++++++++++++++++------------------ 1 file changed, 125 insertions(+), 120 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 8fe6c7b90f..ee7927ecab 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -1,48 +1,44 @@ {-# LANGUAGE CPP #-} -{-| - This module has functions to send commands LISTEN and NOTIFY to the database server. - It also has a function to wait for and handle notifications on a database connection. - For more information check the [PostgreSQL documentation](https://www.postgresql.org/docs/current/libpq-notify.html). - --} +-- | +-- This module has functions to send commands LISTEN and NOTIFY to the database server. +-- It also has a function to wait for and handle notifications on a database connection. +-- +-- For more information check the [PostgreSQL documentation](https://www.postgresql.org/docs/current/libpq-notify.html). module Hasql.Notifications - ( notifyPool - , notify - , listen - , unlisten - , waitForNotifications - , PgIdentifier - , toPgIdentifier - , fromPgIdentifier - ) where - -import Hasql.Pool (Pool, UsageError, use) -import Hasql.Session (sql, run, statement) -import qualified Hasql.Session as S -import qualified Hasql.Statement as HST -import Hasql.Connection (Connection, withLibPQConnection) -import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE -import qualified Database.PostgreSQL.LibPQ as PQ + ( notifyPool, + notify, + listen, + unlisten, + waitForNotifications, + PgIdentifier, + toPgIdentifier, + fromPgIdentifier, + ) +where + +import Control.Concurrent (threadDelay, threadWaitRead) +import Control.Exception (Exception, throw) +import Control.Monad (forever, unless, void) +import Data.ByteString.Char8 (ByteString) +import Data.Functor.Contravariant (contramap) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T -import Data.ByteString.Char8 (ByteString) -import Data.Functor.Contravariant (contramap) -import Control.Monad (void, forever) -#if defined(mingw32_HOST_OS) -import Control.Concurrent ( threadDelay ) -#else -import Control.Concurrent (threadWaitRead, threadDelay) -#endif -import Control.Exception (Exception, throw) +import qualified Database.PostgreSQL.LibPQ as PQ +import Hasql.Connection (Connection, withLibPQConnection) +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import Hasql.Pool (Pool, UsageError, use) +import Hasql.Session (run, sql, statement) +import qualified Hasql.Session as S +import qualified Hasql.Statement as HST -- | A wrapped text that represents a properly escaped and quoted PostgreSQL identifier newtype PgIdentifier = PgIdentifier Text deriving (Show) -- | Uncatchable exceptions thrown and never caught. -newtype FatalError = FatalError { fatalErrorMessage :: String } +newtype FatalError = FatalError {fatalErrorMessage :: String} deriving (Show) instance Exception FatalError @@ -60,101 +56,114 @@ toPgIdentifier x = strictlyReplaceQuotes = T.replace "\"" ("\"\"" :: Text) -- | Given a Hasql Pool, a channel and a message sends a notify command to the database -notifyPool :: Pool -- ^ Pool from which the connection will be used to issue a NOTIFY command. - -> Text -- ^ Channel where to send the notification - -> Text -- ^ Payload to be sent with the notification - -> IO (Either UsageError ()) +notifyPool :: + -- | Pool from which the connection will be used to issue a NOTIFY command. + Pool -> + -- | Channel where to send the notification + Text -> + -- | Payload to be sent with the notification + Text -> + IO (Either UsageError ()) notifyPool pool channel mesg = - use pool (statement (channel, mesg) callStatement) - where - callStatement = HST.Statement ("SELECT pg_notify" <> "($1, $2)") encoder HD.noResult False - encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable HE.text) + use pool (statement (channel, mesg) callStatement) + where + callStatement = HST.Statement ("SELECT pg_notify" <> "($1, $2)") encoder HD.noResult False + encoder = contramap fst (HE.param $ HE.nonNullable HE.text) <> contramap snd (HE.param $ HE.nonNullable HE.text) -- | Given a Hasql Connection, a channel and a message sends a notify command to the database -notify :: Connection -- ^ Connection to be used to send the NOTIFY command - -> PgIdentifier -- ^ Channel where to send the notification - -> Text -- ^ Payload to be sent with the notification - -> IO (Either S.QueryError ()) +notify :: + -- | Connection to be used to send the NOTIFY command + Connection -> + -- | Channel where to send the notification + PgIdentifier -> + -- | Payload to be sent with the notification + Text -> + IO (Either S.QueryError ()) notify con channel mesg = - run (sql $ T.encodeUtf8 ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> mesg <> "'")) con - -{-| - Given a Hasql Connection and a channel sends a listen command to the database. - Once the connection sends the LISTEN command the server register its interest in the channel. - Hence it's important to keep track of which connection was used to open the listen command. - - Example of listening and waiting for a notification: - - @ - import System.Exit (die) - - import Hasql.Connection - import Hasql.Notifications - - main :: IO () - main = do - dbOrError <- acquire "postgres://localhost/db_name" - case dbOrError of - Right db -> do - let channelToListen = toPgIdentifier "sample-channel" - listen db channelToListen - waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db - _ -> die "Could not open database connection" - @ --} -listen :: Connection -- ^ Connection to be used to send the LISTEN command - -> PgIdentifier -- ^ Channel this connection will be registered to listen to - -> IO () + run (sql $ T.encodeUtf8 ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> mesg <> "'")) con + +-- | +-- Given a Hasql Connection and a channel sends a listen command to the database. +-- Once the connection sends the LISTEN command the server register its interest in the channel. +-- Hence it's important to keep track of which connection was used to open the listen command. +-- +-- Example of listening and waiting for a notification: +-- +-- @ +-- import System.Exit (die) +-- +-- import Hasql.Connection +-- import Hasql.Notifications +-- +-- main :: IO () +-- main = do +-- dbOrError <- acquire "postgres://localhost/db_name" +-- case dbOrError of +-- Right db -> do +-- let channelToListen = toPgIdentifier "sample-channel" +-- listen db channelToListen +-- waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db +-- _ -> die "Could not open database connection" +-- @ +listen :: + -- | Connection to be used to send the LISTEN command + Connection -> + -- | Channel this connection will be registered to listen to + PgIdentifier -> + IO () listen con channel = void $ withLibPQConnection con execListen where execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel -- | Given a Hasql Connection and a channel sends a unlisten command to the database -unlisten :: Connection -- ^ Connection currently registerd by a previous 'listen' call - -> PgIdentifier -- ^ Channel this connection will be deregistered from - -> IO () +unlisten :: + -- | Connection currently registerd by a previous 'listen' call + Connection -> + -- | Channel this connection will be deregistered from + PgIdentifier -> + IO () unlisten con channel = void $ withLibPQConnection con execListen where execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel - -{-| - Given a function that handles notifications and a Hasql connection it will listen - on the database connection and call the handler everytime a message arrives. - - The message handler passed as first argument needs two parameters channel and payload. - See an example of handling notification on a separate thread: - - @ - import Control.Concurrent.Async (async) - import Control.Monad (void) - import System.Exit (die) - - import Hasql.Connection - import Hasql.Notifications - - notificationHandler :: ByteString -> ByteString -> IO() - notificationHandler channel payload = - void $ async do - print $ "Handle payload " <> payload <> " in its own thread" - - main :: IO () - main = do - dbOrError <- acquire "postgres://localhost/db_name" - case dbOrError of - Right db -> do - let channelToListen = toPgIdentifier "sample-channel" - listen db channelToListen - waitForNotifications notificationHandler db - _ -> die "Could not open database connection" - @ --} - -waitForNotifications :: (ByteString -> ByteString -> IO()) -- ^ Callback function to handle incoming notifications - -> Connection -- ^ Connection where we will listen to - -> IO () +-- | +-- Given a function that handles notifications and a Hasql connection it will listen +-- on the database connection and call the handler everytime a message arrives. +-- +-- The message handler passed as first argument needs two parameters channel and payload. +-- See an example of handling notification on a separate thread: +-- +-- @ +-- import Control.Concurrent.Async (async) +-- import Control.Monad (void) +-- import System.Exit (die) +-- +-- import Hasql.Connection +-- import Hasql.Notifications +-- +-- notificationHandler :: ByteString -> ByteString -> IO() +-- notificationHandler channel payload = +-- void $ async do +-- print $ "Handle payload " <> payload <> " in its own thread" +-- +-- main :: IO () +-- main = do +-- dbOrError <- acquire "postgres://localhost/db_name" +-- case dbOrError of +-- Right db -> do +-- let channelToListen = toPgIdentifier "sample-channel" +-- listen db channelToListen +-- waitForNotifications notificationHandler db +-- _ -> die "Could not open database connection" +-- @ +waitForNotifications :: + -- | Callback function to handle incoming notifications + (ByteString -> ByteString -> IO ()) -> + -- | Connection where we will listen to + Connection -> + IO () waitForNotifications sendNotification con = withLibPQConnection con $ void . forever . pqFetch where @@ -164,11 +173,7 @@ waitForNotifications sendNotification con = Nothing -> do mfd <- PQ.socket pqCon case mfd of - Nothing -> void $ threadDelay 1000000 -#if defined(mingw32_HOST_OS) - Just _ -> do - void $ threadDelay 1000000 -#else + Nothing -> void $ threadDelay 1000000 Just fd -> do void $ threadWaitRead fd @@ -177,6 +182,6 @@ waitForNotifications sendNotification con = mError <- PQ.errorMessage pqCon panic $ maybe "Error checking for PostgreSQL notifications" show mError Just notification -> - sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) + sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) panic :: String -> a panic a = throw (FatalError a) From e44255c125ba87dfd1c1968e93fb3680e38734de Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 13 Mar 2024 09:57:25 -0400 Subject: [PATCH 0953/1204] Add custom show instance to FatalError --- src/Hasql/Notifications.hs | 5 ++++- test/Hasql/NotificationsSpec.hs | 32 ++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index ee7927ecab..7d3602b492 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -14,6 +14,7 @@ module Hasql.Notifications PgIdentifier, toPgIdentifier, fromPgIdentifier, + FatalError (..), ) where @@ -39,10 +40,12 @@ newtype PgIdentifier = PgIdentifier Text deriving (Show) -- | Uncatchable exceptions thrown and never caught. newtype FatalError = FatalError {fatalErrorMessage :: String} - deriving (Show) instance Exception FatalError +instance Show FatalError where + show = fatalErrorMessage + -- | Given a PgIdentifier returns the wrapped text fromPgIdentifier :: PgIdentifier -> Text fromPgIdentifier (PgIdentifier bs) = bs diff --git a/test/Hasql/NotificationsSpec.hs b/test/Hasql/NotificationsSpec.hs index 113fe32324..d944e6e94d 100644 --- a/test/Hasql/NotificationsSpec.hs +++ b/test/Hasql/NotificationsSpec.hs @@ -1,16 +1,14 @@ module Hasql.NotificationsSpec (main, spec) where -import Test.Hspec -import Test.QuickCheck - import Control.Concurrent (forkIO, killThread) import Control.Concurrent.MVar import Control.Monad (void) -import System.Exit (die) import Data.ByteString - import Hasql.Connection import Hasql.Notifications +import System.Exit (die) +import Test.Hspec +import Test.QuickCheck -- `main` is here so that this module can be run from GHCi on its own. It is -- not needed for automatic spec discovery. @@ -24,15 +22,21 @@ spec = do it "should call our notification handler" $ do dbOrError <- acquire "postgres://postgres:roottoor@localhost/hasql_notifications_test" case dbOrError of - Right db -> do - let channelToListen = toPgIdentifier "test-channel" - mailbox <- newEmptyMVar :: IO (MVar ByteString) - listen db channelToListen - threadId <- forkIO $ waitForNotifications (\channel payload -> putMVar mailbox $ "Just got notification on channel " <> channel <> ": " <> payload) db - notify db (toPgIdentifier "test-channel") "Payload" - takeMVar mailbox `shouldReturn` "Just got notification on channel test-channel: Payload" - _ -> die "Could not open database connection" + Right db -> do + let channelToListen = toPgIdentifier "test-channel" + mailbox <- newEmptyMVar :: IO (MVar ByteString) + listen db channelToListen + threadId <- forkIO $ waitForNotifications (\channel payload -> putMVar mailbox $ "Just got notification on channel " <> channel <> ": " <> payload) db + notify db (toPgIdentifier "test-channel") "Payload" + takeMVar mailbox `shouldReturn` "Just got notification on channel test-channel: Payload" + _ -> die "Could not open database connection" + describe "FatalError show instance" $ + it "extracts message" $ + ( show $ + FatalError {fatalErrorMessage = "some message"} + ) + `shouldBe` "some message" describe "toPgIdenfier" $ it "enclose text in quotes doubling existing ones" $ - fromPgIdentifier (toPgIdentifier "some \"identifier\"") `shouldBe` "\"some \"\"identifier\"\"\"" \ No newline at end of file + fromPgIdentifier (toPgIdentifier "some \"identifier\"") `shouldBe` "\"some \"\"identifier\"\"\"" From 61c7c55d194e43b6313da75d4ce88f9441961510 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 13 Mar 2024 10:00:09 -0400 Subject: [PATCH 0954/1204] Decode error message as UTF8 and convert to String when exposing our exception --- src/Hasql/Notifications.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 7d3602b492..1df6ad11a2 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -183,7 +183,7 @@ waitForNotifications sendNotification con = result <- PQ.consumeInput pqCon unless result $ do mError <- PQ.errorMessage pqCon - panic $ maybe "Error checking for PostgreSQL notifications" show mError + panic $ maybe "Error checking for PostgreSQL notifications" (T.unpack . T.decodeUtf8) mError Just notification -> sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) panic :: String -> a From b51d47906baaf200c2ae5964fce57d39d80c751b Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 13 Mar 2024 10:27:09 -0400 Subject: [PATCH 0955/1204] Use lenient decode just in case server error messages bring some invalid UTF8 --- src/Hasql/Notifications.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 1df6ad11a2..d11c6052d1 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -183,7 +183,7 @@ waitForNotifications sendNotification con = result <- PQ.consumeInput pqCon unless result $ do mError <- PQ.errorMessage pqCon - panic $ maybe "Error checking for PostgreSQL notifications" (T.unpack . T.decodeUtf8) mError + panic $ maybe "Error checking for PostgreSQL notifications" (T.unpack . T.decodeUtf8Lenient) mError Just notification -> sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) panic :: String -> a From 4cbcb7f93ca044cc9c0fa431a2516bdd7f8eac39 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 13 Mar 2024 10:46:08 -0400 Subject: [PATCH 0956/1204] We need text 2 to use decodeUtf8Lenient --- hasql-notifications.cabal | 2 +- stack.yaml | 2 +- stack.yaml.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 1d41899d84..8a3e5a3e00 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -18,7 +18,7 @@ library exposed-modules: Hasql.Notifications build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 - , text >= 1.2.3.1 && < 2.2 + , text >= 2 && < 2.2 , hasql-pool >= 0.4 && < 0.11 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 diff --git a/stack.yaml b/stack.yaml index 9e202fb1c3..68caf3c73c 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-19.17 +resolver: lts-21.7 packages: - . diff --git a/stack.yaml.lock b/stack.yaml.lock index 9648c3f7f4..0161ee7805 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -6,7 +6,7 @@ packages: [] snapshots: - completed: - size: 619161 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/17.yaml - sha256: 7f47507fd037228a8d23cf830f5844e1f006221acebdd7cb49f2f5fb561e0546 - original: lts-19.17 + sha256: 23bb9bb355bfdb1635252e120a29b712f0d5e8a6c6a65c5ab5bd6692f46c438e + size: 640457 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/7.yaml + original: lts-21.7 From 8bf5ba4b9d475cb99d4876901961c46b18d1270a Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Wed, 13 Mar 2024 11:37:46 -0400 Subject: [PATCH 0957/1204] Bump minor version since now we expose the PostgreSQL error message on listener failures --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 8a3e5a3e00..4b1820c556 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.0.6 +version: 0.2.1.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 11b2e92b88081f008ab529dfc899d305c31b3295 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 11:44:19 +0300 Subject: [PATCH 0958/1204] Correct the docs --- library/Hasql/DynamicStatements/Statement.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index f41d3cd999..36f8bd2f41 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -45,7 +45,7 @@ import qualified Ptr.Poking as Poking -- Encoders.'Encoders.param' (string '>$' Encoders.'Encoders.text') <> -- foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) from <> -- foldMap (\\ x -> Encoders.'Encoders.param' (x '>$' Encoders.'Encoders.int8')) to --- decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' Decoders.'Decoders.text') +-- decoder = Decoders.'Decoders.singleRow' (Decoders.'Decoders.column' (Decoders.'Decoders.nonNullable' Decoders.'Decoders.text')) -- in Statement sql encoder decoder True -- @ -- From 165a44d760343ba068c8cec8d9d8adad9052ec21 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 23 Mar 2024 08:53:17 +0000 Subject: [PATCH 0959/1204] Set package version to 0.3.1.5 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index b1dd86688e..373917acca 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,5 +1,5 @@ name: hasql-dynamic-statements -version: 0.3.1.4 +version: 0.3.1.5 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 4a78d1654ccbaf27dcc7e8b86a3a227542d4a416 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:07:49 +0300 Subject: [PATCH 0960/1204] Clean up --- cabal.project | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cabal.project b/cabal.project index 40feb370a3..e6fdbadb43 100644 --- a/cabal.project +++ b/cabal.project @@ -1,7 +1 @@ packages: . -allow-newer: - , *:base - , *:bytestring - , *:deepseq - , *:primitive - , *:text From ccf4f395a3697f8769e43bdccd6bd1080fed7551 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:08:15 +0300 Subject: [PATCH 0961/1204] Update and correct the docs --- library/Hasql/Statement.hs | 117 +++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index fe3b8df1de..cc37dafc80 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -2,7 +2,7 @@ module Hasql.Statement ( Statement (..), refineResult, - -- * Recipies + -- * Recipes -- ** Insert many -- $insertMany @@ -18,39 +18,50 @@ import qualified Hasql.Encoders as Encoders import Hasql.Prelude -- | --- Specification of a strictly single-statement query, which can be parameterized and prepared. --- --- Consists of the following: --- --- * SQL template, --- * params encoder, --- * result decoder, --- * a flag, determining whether it should be prepared. --- --- The SQL template must be formatted according to Postgres' standard, --- with any non-ASCII characters of the template encoded using UTF-8. --- According to the format, --- parameters must be referred to using a positional notation, as in the following: --- @$1@, @$2@, @$3@ and etc. --- Those references must be used in accordance with the order in which --- the value encoders are specified in 'Encoders.Params'. +-- Specification of a strictly single-statement query, which can be parameterized and prepared, encapsulating the mapping of parameters and results. -- -- Following is an example of a declaration of a prepared statement with its associated codecs. -- -- @ -- selectSum :: 'Statement' (Int64, Int64) Int64 --- selectSum = 'Statement' sql encoder decoder True where --- sql = "select ($1 + $2)" --- encoder = --- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' --- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) --- decoder = Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) +-- selectSum = +-- 'Statement' sql encoder decoder True +-- where +-- sql = +-- \"select ($1 + $2)\" +-- encoder = +-- ('fst' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) '<>' +-- ('snd' '>$<' Encoders.'Hasql.Encoders.param' (Encoders.'Hasql.Encoders.nonNullable' Encoders.'Hasql.Encoders.int8')) +-- decoder = +-- Decoders.'Hasql.Decoders.singleRow' (Decoders.'Hasql.Decoders.column' (Decoders.'Hasql.Decoders.nonNullable' Decoders.'Hasql.Decoders.int8')) -- @ -- -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. data Statement a b - = Statement ByteString (Encoders.Params a) (Decoders.Result b) Bool + = Statement + -- | SQL template. + -- + -- Must be formatted according to the Postgres standard, + -- with any non-ASCII characters of the template encoded using UTF-8. + -- The parameters must be referred to using the positional notation, as in the following: + -- @$1@, @$2@, @$3@ and etc. + -- These references must be used in accordance with the order in which + -- the value encoders are specified in the parameters encoder. + ByteString + -- | Parameters encoder. + (Encoders.Params a) + -- | Decoder of result. + (Decoders.Result b) + -- | Flag, determining whether it should be prepared. + -- + -- Set it to 'True' if your application has a limited amount of queries and doesn't generate the SQL dynamically. + -- This will boost the performance by allowing Postgres to avoid reconstructing the execution plan each time the query gets executed. + -- + -- Note that if you're using proxying applications like @pgbouncer@, such tools may be incompatible with prepared statements. + -- So do consult their docs or just set it to 'False' to stay on the safe side. + -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. + Bool instance Functor (Statement a) where {-# INLINE fmap #-} @@ -62,8 +73,8 @@ instance Profunctor Statement where Statement template (contramap f1 encoder) (fmap f2 decoder) preparable -- | --- Refine a result of a statement, --- causing the running session to fail with the `UnexpectedResult` error in case of refinement failure. +-- Refine the result of a statement, +-- causing the running session to fail with the `UnexpectedResult` error in case of a refinement failure. -- -- This function is especially useful for refining the results of statements produced with -- . @@ -73,47 +84,41 @@ refineResult refiner (Statement template encoder decoder preparable) = -- $insertMany -- --- It is not currently possible to pass in an array of encodable values --- to use in an insert many statement. Instead, PostgreSQL's --- (9.4 or later) @unnest@ function can be used in an analogous way --- to haskell's `zip` function by passing in multiple arrays of values --- to be zipped into the rows we want to insert: +-- Starting from PostgreSQL 9.4 there is an @unnest@ function which we can use in an analogous way +-- to haskell's `zip` to pass in multiple arrays of values +-- to be zipped into the rows to insert as in the following example: -- -- @ -- insertMultipleLocations :: 'Statement' (Vector (UUID, Double, Double)) () --- insertMultipleLocations = 'Statement' sql encoder decoder True where --- sql = "insert into location (id, x, y) select * from unnest ($1, $2, $3)" --- encoder = --- contramap Vector.'Data.Vector.unzip3' $ --- contrazip3 (vector Encoders.'Encoders.uuid') (vector Encoders.'Encoders.float8') (vector Encoders.'Encoders.float8') --- where --- vector = --- Encoders.'Encoders.param' . --- Encoders.'Encoders.nonNullable' . --- Encoders.'Encoders.array' . --- Encoders.'Encoders.dimension' 'foldl'' . --- Encoders.'Encoders.element' . --- Encoders.'Encoders.nonNullable' --- decoder = Decoders.'Decoders.noResult' +-- insertMultipleLocations = +-- 'Statement' sql encoder decoder True +-- where +-- sql = +-- "insert into location (id, x, y) select * from unnest ($1, $2, $3)" +-- encoder = +-- Data.Vector.'Data.Vector.unzip3' '>$<' +-- Contravariant.Extras.'Contravariant.Extras.contrazip3' +-- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.uuid') +-- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.float8') +-- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.float8') +-- decoder = +-- Decoders.'Decoders.noResult' -- @ -- --- This approach is much more efficient than executing a single-row Insert --- statement multiple times. +-- This approach is much more efficient than executing a single-row insert-statement multiple times. -- $inAndNotIn -- --- There is a common misconception that Postgresql supports array --- as a parameter for the @IN@ operator. +-- There is a common misconception that PostgreSQL supports array +-- as the parameter for the @IN@ operator. -- However Postgres only supports a syntactical list of values with it, --- i.e., you have to specify each option as an individual parameter --- (@something IN ($1, $2, $3)@). +-- i.e., you have to specify each option as an individual parameter. +-- E.g., @some_expression IN ($1, $2, $3)@. -- --- Clearly it would be much more convenient to provide an array as a single parameter, --- but the @IN@ operator does not support that. --- Fortunately, Postgres does provide such functionality with other operators: +-- Fortunately, Postgres does provide the expected functionality for arrays with other operators: -- -- * Use @something = ANY($1)@ instead of @something IN ($1)@ -- * Use @something <> ALL($1)@ instead of @something NOT IN ($1)@ -- --- For details see --- . +-- For details refer to +-- . From 4954882a95525ac14a76a4a38c962cc35bbc1eac Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 23 Mar 2024 10:19:14 +0000 Subject: [PATCH 0962/1204] Set package version to 1.6.4.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 5392216eb1..d105e3a548 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.4.1 +version: 1.6.4.2 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From 5760b690c7fc5e310d0391678c9794f90b334a86 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:19:58 +0300 Subject: [PATCH 0963/1204] Correct the docs --- library/Hasql/Statement.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index cc37dafc80..16caf54b67 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -117,8 +117,8 @@ refineResult refiner (Statement template encoder decoder preparable) = -- -- Fortunately, Postgres does provide the expected functionality for arrays with other operators: -- --- * Use @something = ANY($1)@ instead of @something IN ($1)@ --- * Use @something <> ALL($1)@ instead of @something NOT IN ($1)@ +-- * Use @some_expression = ANY($1)@ instead of @some_expression IN ($1)@ +-- * Use @some_expression <> ALL($1)@ instead of @some_expression NOT IN ($1)@ -- -- For details refer to -- . From 3dd072013b857c4454e0e724707f5cb60e713992 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 23 Mar 2024 10:23:20 +0000 Subject: [PATCH 0964/1204] Set package version to 1.6.4.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index d105e3a548..65f133fafa 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.4.2 +version: 1.6.4.3 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From ccedc7deb07673200a50777a8cf942ce28828afc Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:44:22 +0300 Subject: [PATCH 0965/1204] Fix refs --- library/Hasql/Statement.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 16caf54b67..a503e7a7fb 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -97,7 +97,7 @@ refineResult refiner (Statement template encoder decoder preparable) = -- "insert into location (id, x, y) select * from unnest ($1, $2, $3)" -- encoder = -- Data.Vector.'Data.Vector.unzip3' '>$<' --- Contravariant.Extras.'Contravariant.Extras.contrazip3' +-- Contravariant.Extras.contrazip3 -- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.uuid') -- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.float8') -- (Encoders.'Encoders.param' $ Encoders.'Encoders.nonNullable' $ Encoders.'Encoders.foldableArray' $ Encoders.'Encoders.nonNullable' Encoders.'Encoders.float8') From 0353f6c307a53322b7977303b043b71080b5beaf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:48:55 +0300 Subject: [PATCH 0966/1204] Clarify the arg names --- library/Hasql/Statement.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index a503e7a7fb..0b1c9689dd 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -38,7 +38,7 @@ import Hasql.Prelude -- -- The statement above accepts a product of two parameters of type 'Int64' -- and produces a single result of type 'Int64'. -data Statement a b +data Statement params result = Statement -- | SQL template. -- @@ -50,9 +50,9 @@ data Statement a b -- the value encoders are specified in the parameters encoder. ByteString -- | Parameters encoder. - (Encoders.Params a) + (Encoders.Params params) -- | Decoder of result. - (Decoders.Result b) + (Decoders.Result result) -- | Flag, determining whether it should be prepared. -- -- Set it to 'True' if your application has a limited amount of queries and doesn't generate the SQL dynamically. @@ -63,7 +63,7 @@ data Statement a b -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. Bool -instance Functor (Statement a) where +instance Functor (Statement params) where {-# INLINE fmap #-} fmap = rmap From d62949876f487810bd580b7d53c28a8f9a7a4228 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 23 Mar 2024 13:50:39 +0300 Subject: [PATCH 0967/1204] Extend the docs --- library/Hasql/Statement.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 0b1c9689dd..e303b5dd64 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -18,7 +18,8 @@ import qualified Hasql.Encoders as Encoders import Hasql.Prelude -- | --- Specification of a strictly single-statement query, which can be parameterized and prepared, encapsulating the mapping of parameters and results. +-- Specification of a strictly single-statement query, which can be parameterized and prepared. +-- It encapsulates the mapping of parameters and results in association with an SQL template. -- -- Following is an example of a declaration of a prepared statement with its associated codecs. -- From 99988172194c4b876fd9544d353ae06bc3c2e637 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 11 Apr 2024 10:40:43 -0400 Subject: [PATCH 0968/1204] Relax hasql-pool dependency and move CI to cabal --- .github/workflows/ci.yml | 31 +++++++++++++++---------------- hasql-notifications.cabal | 2 +- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72abb77a4b..8a7a821199 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,13 +8,12 @@ on: jobs: stack: - name: stack / ${{ matrix.os }} / ghc ${{ matrix.ghc }} + name: build / ${{ matrix.os }} / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest] - stack: ["2.5.1"] - ghc: ["8.10.4"] + ghc: ["9.6.3"] services: postgres: @@ -31,29 +30,29 @@ jobs: ports: - 5432:5432 steps: - - uses: actions/checkout@v2 - if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' + - uses: actions/checkout@v4 - - uses: haskell/actions/setup@v1 - name: Setup Haskell Stack + - uses: haskell-actions/setup@v2 + name: Setup Haskell with: ghc-version: ${{ matrix.ghc }} - stack-version: ${{ matrix.stack }} - uses: actions/cache@v2.1.3 - name: Cache ~/.stack + name: Cache ~/dist-newstyle with: - path: ~/.stack - key: ${{ matrix.os }}-${{ matrix.ghc }}-stack-v3 + path: ~/dist-newstyle + key: ${{ matrix.os }}-${{ matrix.ghc }}-v3 - name: Build Dependencies run: | - stack build --system-ghc --test --no-run-tests --only-dependencies + cabal build --only-dependencies + cabal install hspec-discover - name: Build run: | - stack build --system-ghc --test --no-run-tests + cabal build + + - name: Test + run: | + cabal test - # - name: Test - # run: | - # stack test --system-ghc diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 4b1820c556..321432cddc 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 2 && < 2.2 - , hasql-pool >= 0.4 && < 0.11 + , hasql-pool >= 0.4 && < 1.1 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 From c8f4956c2ee58ad619faa3a6c21bf968b1190b0c Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 11 Apr 2024 11:45:54 -0400 Subject: [PATCH 0969/1204] bump patch version since we relaxed hsql-pool upper bound --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 321432cddc..d8afae6305 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.1.0 +version: 0.2.1.1 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From b1ecf79e7e43510d63c219836403e455e520344a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 18 Apr 2024 07:05:31 +0300 Subject: [PATCH 0970/1204] Add links to Ants Are Everywhere --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 3f9f26af0b..9fad67d8a5 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,15 @@ Hasql is not just a single library, it is a granular ecosystem of composable lib # Tutorials +## Videos + +There's several videos on Hasql done as part of a nice intro-level series of live Haskell+Bazel coding by the "Ants Are Everywhere" YouTube channel: + +- [Coding Day 20: Switching from postgresql-simple to Hasql](https://youtu.be/ce7bGKETtoA?si=RmY_yDG24EX6i38I) +- [Coding Day 21: Refactoring the Hasql code](https://youtu.be/a9mPNXbT-qw?si=RTtXe6BXnZSQZzh-) + +## Articles + - [Organization of Hasql code in a dedicated library](https://github.com/nikita-volkov/hasql-tutorial1) # Short Example From 2edcd367b820f65aa9fcac266048379e44198817 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 19 Apr 2024 07:34:33 +0300 Subject: [PATCH 0971/1204] Clarify PTI --- hasql.cabal | 2 +- library/Hasql/Encoders/All.hs | 2 +- library/Hasql/Encoders/Array.hs | 2 +- library/Hasql/Encoders/Params.hs | 2 +- library/Hasql/Encoders/Value.hs | 2 +- library/Hasql/{PTI.hs => PostgresTypeInfo.hs} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename library/Hasql/{PTI.hs => PostgresTypeInfo.hs} (99%) diff --git a/hasql.cabal b/hasql.cabal index 65f133fafa..c52e7b63c2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -101,9 +101,9 @@ library Hasql.Encoders.Value Hasql.Errors Hasql.IO + Hasql.PostgresTypeInfo Hasql.Prelude Hasql.PreparedStatementRegistry - Hasql.PTI Hasql.Session.Core Hasql.Settings diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 8691e8193c..9ecb33d5b3 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -7,7 +7,7 @@ import qualified Data.ByteString.Lazy as LazyByteString import qualified Hasql.Encoders.Array as Array import qualified Hasql.Encoders.Params as Params import qualified Hasql.Encoders.Value as Value -import qualified Hasql.PTI as PTI +import qualified Hasql.PostgresTypeInfo as PTI import Hasql.Prelude hiding (bool) import qualified Hasql.Prelude as Prelude import qualified Network.IP.Addr as NetworkIp diff --git a/library/Hasql/Encoders/Array.hs b/library/Hasql/Encoders/Array.hs index e1d943503d..b1e9f119e2 100644 --- a/library/Hasql/Encoders/Array.hs +++ b/library/Hasql/Encoders/Array.hs @@ -1,6 +1,6 @@ module Hasql.Encoders.Array where -import qualified Hasql.PTI as B +import qualified Hasql.PostgresTypeInfo as B import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Text.Builder as C diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 63715cfcd5..179d3fcdda 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -2,7 +2,7 @@ module Hasql.Encoders.Params where import qualified Database.PostgreSQL.LibPQ as A import qualified Hasql.Encoders.Value as C -import qualified Hasql.PTI as D +import qualified Hasql.PostgresTypeInfo as D import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Text.Builder as E diff --git a/library/Hasql/Encoders/Value.hs b/library/Hasql/Encoders/Value.hs index a08a8d0402..1dd3dca8a0 100644 --- a/library/Hasql/Encoders/Value.hs +++ b/library/Hasql/Encoders/Value.hs @@ -1,6 +1,6 @@ module Hasql.Encoders.Value where -import qualified Hasql.PTI as PTI +import qualified Hasql.PostgresTypeInfo as PTI import Hasql.Prelude import qualified PostgreSQL.Binary.Encoding as B import qualified Text.Builder as C diff --git a/library/Hasql/PTI.hs b/library/Hasql/PostgresTypeInfo.hs similarity index 99% rename from library/Hasql/PTI.hs rename to library/Hasql/PostgresTypeInfo.hs index 648c1dd14f..2b2769b843 100644 --- a/library/Hasql/PTI.hs +++ b/library/Hasql/PostgresTypeInfo.hs @@ -1,4 +1,4 @@ -module Hasql.PTI where +module Hasql.PostgresTypeInfo where import qualified Database.PostgreSQL.LibPQ as LibPQ import Hasql.Prelude hiding (bool) From f2f747e6c673635834d92934295219d92dcc85c0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 19 Apr 2024 07:38:30 +0300 Subject: [PATCH 0972/1204] Switch to ImportQualifiedPost --- .github/workflows/check.yaml | 2 +- benchmarks/Main.hs | 8 ++++---- hasql.cabal | 3 ++- library/Hasql/Commands.hs | 4 ++-- library/Hasql/Connection/Core.hs | 8 ++++---- library/Hasql/Decoders/All.hs | 22 +++++++++++----------- library/Hasql/Decoders/Array.hs | 2 +- library/Hasql/Decoders/Composite.hs | 2 +- library/Hasql/Decoders/Result.hs | 14 +++++++------- library/Hasql/Decoders/Results.hs | 6 +++--- library/Hasql/Decoders/Row.hs | 6 +++--- library/Hasql/Decoders/Value.hs | 2 +- library/Hasql/Encoders/All.hs | 20 ++++++++++---------- library/Hasql/Encoders/Array.hs | 6 +++--- library/Hasql/Encoders/Params.hs | 10 +++++----- library/Hasql/Encoders/Value.hs | 6 +++--- library/Hasql/Errors.hs | 2 +- library/Hasql/IO.hs | 12 ++++++------ library/Hasql/PostgresTypeInfo.hs | 2 +- library/Hasql/Prelude.hs | 8 ++++---- library/Hasql/PreparedStatementRegistry.hs | 4 ++-- library/Hasql/Session/Core.hs | 14 +++++++------- library/Hasql/Settings.hs | 6 +++--- library/Hasql/Statement.hs | 6 +++--- profiling/Main.hs | 10 +++++----- tasty/Main.hs | 14 +++++++------- tasty/Main/Connection.hs | 2 +- tasty/Main/DSL.hs | 4 ++-- tasty/Main/Statements.hs | 4 ++-- threads-test/Main.hs | 6 +++--- threads-test/Main/Statements.hs | 4 ++-- 31 files changed, 110 insertions(+), 109 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 9938564243..6a7c0e0db7 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -11,7 +11,7 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" ignore-haddock: "true" - ghc: latest diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index fe53edd21b..a4cdd2c1c9 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -2,10 +2,10 @@ module Main where import Criterion import Criterion.Main -import qualified Hasql.Connection as A -import qualified Hasql.Decoders as D -import qualified Hasql.Session as B -import qualified Hasql.Statement as C +import Hasql.Connection qualified as A +import Hasql.Decoders qualified as D +import Hasql.Session qualified as B +import Hasql.Statement qualified as C import Prelude main :: IO () diff --git a/hasql.cabal b/hasql.cabal index c52e7b63c2..bb76c36b6e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -44,6 +44,7 @@ common base FunctionalDependencies GADTs GeneralizedNewtypeDeriving + ImportQualifiedPost LambdaCase LiberalTypeSynonyms MagicHash @@ -110,7 +111,7 @@ library build-depends: , aeson >=2 && <3 , attoparsec >=0.10 && <0.15 - , base >=4.13 && <5 + , base >=4.14 && <5 , bytestring >=0.10 && <0.13 , bytestring-strict-builder >=0.4.5.1 && <0.5 , contravariant >=1.3 && <2 diff --git a/library/Hasql/Commands.hs b/library/Hasql/Commands.hs index 2c7227f1d0..a1b52f46dc 100644 --- a/library/Hasql/Commands.hs +++ b/library/Hasql/Commands.hs @@ -6,8 +6,8 @@ module Hasql.Commands ) where -import qualified Data.ByteString.Builder as BB -import qualified Data.ByteString.Lazy as BL +import Data.ByteString.Builder qualified as BB +import Data.ByteString.Lazy qualified as BL import Hasql.Prelude newtype Commands diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index 9bf613c0bf..77452cc059 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -2,11 +2,11 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection.Core where -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.IO as IO +import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.IO qualified as IO import Hasql.Prelude -import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -import qualified Hasql.Settings as Settings +import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry +import Hasql.Settings qualified as Settings -- | -- A single connection to the database. diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index d5305f2abc..0281e1faea 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -2,18 +2,18 @@ -- A DSL for declaration of result decoders. module Hasql.Decoders.All where -import qualified Data.Aeson as Aeson -import qualified Data.Vector.Generic as GenericVector -import qualified Hasql.Decoders.Array as Array -import qualified Hasql.Decoders.Composite as Composite -import qualified Hasql.Decoders.Result as Result -import qualified Hasql.Decoders.Results as Results -import qualified Hasql.Decoders.Row as Row -import qualified Hasql.Decoders.Value as Value +import Data.Aeson qualified as Aeson +import Data.Vector.Generic qualified as GenericVector +import Hasql.Decoders.Array qualified as Array +import Hasql.Decoders.Composite qualified as Composite +import Hasql.Decoders.Result qualified as Result +import Hasql.Decoders.Results qualified as Results +import Hasql.Decoders.Row qualified as Row +import Hasql.Decoders.Value qualified as Value import Hasql.Prelude hiding (bool, maybe) -import qualified Hasql.Prelude as Prelude -import qualified Network.IP.Addr as NetworkIp -import qualified PostgreSQL.Binary.Decoding as A +import Hasql.Prelude qualified as Prelude +import Network.IP.Addr qualified as NetworkIp +import PostgreSQL.Binary.Decoding qualified as A -- * Result diff --git a/library/Hasql/Decoders/Array.hs b/library/Hasql/Decoders/Array.hs index 24604a2822..8c40bff6c9 100644 --- a/library/Hasql/Decoders/Array.hs +++ b/library/Hasql/Decoders/Array.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Array where import Hasql.Prelude -import qualified PostgreSQL.Binary.Decoding as A +import PostgreSQL.Binary.Decoding qualified as A newtype Array a = Array (ReaderT Bool A.Array a) diff --git a/library/Hasql/Decoders/Composite.hs b/library/Hasql/Decoders/Composite.hs index 081e8554a9..9a372c567d 100644 --- a/library/Hasql/Decoders/Composite.hs +++ b/library/Hasql/Decoders/Composite.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Composite where import Hasql.Prelude -import qualified PostgreSQL.Binary.Decoding as A +import PostgreSQL.Binary.Decoding qualified as A newtype Composite a = Composite (ReaderT Bool A.Composite a) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index efac6bc27d..8bd3d55f35 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -1,14 +1,14 @@ module Hasql.Decoders.Result where -import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec -import qualified Data.ByteString as ByteString -import qualified Data.Vector as Vector -import qualified Data.Vector.Mutable as MutableVector -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoders.Row as Row +import Data.Attoparsec.ByteString.Char8 qualified as Attoparsec +import Data.ByteString qualified as ByteString +import Data.Vector qualified as Vector +import Data.Vector.Mutable qualified as MutableVector +import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.Decoders.Row qualified as Row import Hasql.Errors import Hasql.Prelude hiding (many, maybe) -import qualified Hasql.Prelude as Prelude +import Hasql.Prelude qualified as Prelude newtype Result a = Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 2fa2e86d34..26f218a5aa 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -10,11 +10,11 @@ -- * Row-by-row fetching. module Hasql.Decoders.Results where -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoders.Result as Result +import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.Decoders.Result qualified as Result import Hasql.Errors import Hasql.Prelude hiding (many, maybe) -import qualified Hasql.Prelude as Prelude +import Hasql.Prelude qualified as Prelude newtype Results a = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs index 381918be75..69f291bd9a 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -1,10 +1,10 @@ module Hasql.Decoders.Row where -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Decoders.Value as Value +import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.Decoders.Value qualified as Value import Hasql.Errors import Hasql.Prelude hiding (error) -import qualified PostgreSQL.Binary.Decoding as A +import PostgreSQL.Binary.Decoding qualified as A newtype Row a = Row (ReaderT Env (ExceptT RowError IO) a) diff --git a/library/Hasql/Decoders/Value.hs b/library/Hasql/Decoders/Value.hs index 7913fb7499..8f79e2feae 100644 --- a/library/Hasql/Decoders/Value.hs +++ b/library/Hasql/Decoders/Value.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Value where import Hasql.Prelude -import qualified PostgreSQL.Binary.Decoding as A +import PostgreSQL.Binary.Decoding qualified as A newtype Value a = Value (Bool -> A.Value a) diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 9ecb33d5b3..d53150554a 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -2,17 +2,17 @@ -- A DSL for declaration of query parameter encoders. module Hasql.Encoders.All where -import qualified Data.Aeson as Aeson -import qualified Data.ByteString.Lazy as LazyByteString -import qualified Hasql.Encoders.Array as Array -import qualified Hasql.Encoders.Params as Params -import qualified Hasql.Encoders.Value as Value -import qualified Hasql.PostgresTypeInfo as PTI +import Data.Aeson qualified as Aeson +import Data.ByteString.Lazy qualified as LazyByteString +import Hasql.Encoders.Array qualified as Array +import Hasql.Encoders.Params qualified as Params +import Hasql.Encoders.Value qualified as Value +import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude hiding (bool) -import qualified Hasql.Prelude as Prelude -import qualified Network.IP.Addr as NetworkIp -import qualified PostgreSQL.Binary.Encoding as A -import qualified Text.Builder as C +import Hasql.Prelude qualified as Prelude +import Network.IP.Addr qualified as NetworkIp +import PostgreSQL.Binary.Encoding qualified as A +import Text.Builder qualified as C -- * Parameters Product Encoder diff --git a/library/Hasql/Encoders/Array.hs b/library/Hasql/Encoders/Array.hs index b1e9f119e2..24f955c7ca 100644 --- a/library/Hasql/Encoders/Array.hs +++ b/library/Hasql/Encoders/Array.hs @@ -1,9 +1,9 @@ module Hasql.Encoders.Array where -import qualified Hasql.PostgresTypeInfo as B +import Hasql.PostgresTypeInfo qualified as B import Hasql.Prelude -import qualified PostgreSQL.Binary.Encoding as A -import qualified Text.Builder as C +import PostgreSQL.Binary.Encoding qualified as A +import Text.Builder qualified as C data Array a = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 179d3fcdda..de4cd81be9 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -1,11 +1,11 @@ module Hasql.Encoders.Params where -import qualified Database.PostgreSQL.LibPQ as A -import qualified Hasql.Encoders.Value as C -import qualified Hasql.PostgresTypeInfo as D +import Database.PostgreSQL.LibPQ qualified as A +import Hasql.Encoders.Value qualified as C +import Hasql.PostgresTypeInfo qualified as D import Hasql.Prelude -import qualified PostgreSQL.Binary.Encoding as B -import qualified Text.Builder as E +import PostgreSQL.Binary.Encoding qualified as B +import Text.Builder qualified as E -- | -- Encoder of some representation of a parameters product. diff --git a/library/Hasql/Encoders/Value.hs b/library/Hasql/Encoders/Value.hs index 1dd3dca8a0..89e31acd6d 100644 --- a/library/Hasql/Encoders/Value.hs +++ b/library/Hasql/Encoders/Value.hs @@ -1,9 +1,9 @@ module Hasql.Encoders.Value where -import qualified Hasql.PostgresTypeInfo as PTI +import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude -import qualified PostgreSQL.Binary.Encoding as B -import qualified Text.Builder as C +import PostgreSQL.Binary.Encoding qualified as B +import Text.Builder qualified as C data Value a = Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 63bc9ec146..8cc290d3c8 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -10,7 +10,7 @@ -- * Row-by-row fetching. module Hasql.Errors where -import qualified Data.ByteString.Char8 as BC +import Data.ByteString.Char8 qualified as BC import Hasql.Prelude -- | diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 47c4b3a01a..b434b89e8e 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -2,14 +2,14 @@ -- An API of low-level IO operations. module Hasql.IO where -import qualified Database.PostgreSQL.LibPQ as LibPQ -import qualified Hasql.Commands as Commands -import qualified Hasql.Decoders.Result as ResultDecoders -import qualified Hasql.Decoders.Results as ResultsDecoders -import qualified Hasql.Encoders.Params as ParamsEncoders +import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.Commands qualified as Commands +import Hasql.Decoders.Result qualified as ResultDecoders +import Hasql.Decoders.Results qualified as ResultsDecoders +import Hasql.Encoders.Params qualified as ParamsEncoders import Hasql.Errors import Hasql.Prelude -import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry {-# INLINE acquireConnection #-} acquireConnection :: ByteString -> IO LibPQ.Connection diff --git a/library/Hasql/PostgresTypeInfo.hs b/library/Hasql/PostgresTypeInfo.hs index 2b2769b843..b7978b13b0 100644 --- a/library/Hasql/PostgresTypeInfo.hs +++ b/library/Hasql/PostgresTypeInfo.hs @@ -1,6 +1,6 @@ module Hasql.PostgresTypeInfo where -import qualified Database.PostgreSQL.LibPQ as LibPQ +import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.Prelude hiding (bool) -- | A Postgresql type info diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 18ab4c3097..c6d2403d26 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -34,8 +34,8 @@ import Data.Bifunctor as Exports import Data.Bits as Exports import Data.Bool as Exports import Data.ByteString as Exports (ByteString) -import qualified Data.ByteString.Builder -import qualified Data.ByteString.Lazy +import Data.ByteString.Builder qualified +import Data.ByteString.Lazy qualified import Data.Char as Exports import Data.Coerce as Exports import Data.Complex as Exports @@ -68,8 +68,8 @@ import Data.Scientific as Exports (Scientific) import Data.Semigroup as Exports hiding (First (..), Last (..)) import Data.String as Exports import Data.Text as Exports (Text) -import qualified Data.Text.Lazy -import qualified Data.Text.Lazy.Builder +import Data.Text.Lazy qualified +import Data.Text.Lazy.Builder qualified import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index 8b5b5f3896..e5d837c87e 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -6,8 +6,8 @@ module Hasql.PreparedStatementRegistry ) where -import qualified ByteString.StrictBuilder as B -import qualified Data.HashTable.IO as A +import ByteString.StrictBuilder qualified as B +import Data.HashTable.IO qualified as A import Hasql.Prelude hiding (lookup) data PreparedStatementRegistry diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 09f1ffe1a1..f57c9d09f6 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -1,14 +1,14 @@ module Hasql.Session.Core where -import qualified Hasql.Connection.Core as Connection -import qualified Hasql.Decoders.Result as Decoders.Result -import qualified Hasql.Decoders.Results as Decoders.Results -import qualified Hasql.Encoders.All as Encoders -import qualified Hasql.Encoders.Params as Encoders.Params +import Hasql.Connection.Core qualified as Connection +import Hasql.Decoders.Result qualified as Decoders.Result +import Hasql.Decoders.Results qualified as Decoders.Results +import Hasql.Encoders.All qualified as Encoders +import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors -import qualified Hasql.IO as IO +import Hasql.IO qualified as IO import Hasql.Prelude -import qualified Hasql.Statement as Statement +import Hasql.Statement qualified as Statement -- | -- A batch of actions to be executed in the context of a database connection. diff --git a/library/Hasql/Settings.hs b/library/Hasql/Settings.hs index 8c286c9a70..56cc5b41f0 100644 --- a/library/Hasql/Settings.hs +++ b/library/Hasql/Settings.hs @@ -1,8 +1,8 @@ module Hasql.Settings where -import qualified Data.ByteString as B -import qualified Data.ByteString.Builder as BB -import qualified Data.ByteString.Lazy as BL +import Data.ByteString qualified as B +import Data.ByteString.Builder qualified as BB +import Data.ByteString.Lazy qualified as BL import Hasql.Prelude -- | diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index e303b5dd64..5bc0aaf092 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -12,9 +12,9 @@ module Hasql.Statement ) where -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Decoders.All as Decoders -import qualified Hasql.Encoders as Encoders +import Hasql.Decoders qualified as Decoders +import Hasql.Decoders.All qualified as Decoders +import Hasql.Encoders qualified as Encoders import Hasql.Prelude -- | diff --git a/profiling/Main.hs b/profiling/Main.hs index 4747963422..35180e46b2 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -1,10 +1,10 @@ module Main where -import qualified Data.Vector as F -import qualified Hasql.Connection as A -import qualified Hasql.Decoders as D -import qualified Hasql.Session as B -import qualified Hasql.Statement as C +import Data.Vector qualified as F +import Hasql.Connection qualified as A +import Hasql.Decoders qualified as D +import Hasql.Session qualified as B +import Hasql.Statement qualified as C import Prelude main :: IO () diff --git a/tasty/Main.hs b/tasty/Main.hs index 36fbb420b7..05626aeecb 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -1,14 +1,14 @@ module Main where import Contravariant.Extras -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Session as Session -import qualified Hasql.Statement as Statement -import qualified Main.Connection as Connection -import qualified Main.DSL as DSL +import Hasql.Decoders qualified as Decoders +import Hasql.Encoders qualified as Encoders +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Main.Connection qualified as Connection +import Main.DSL qualified as DSL import Main.Prelude hiding (assert) -import qualified Main.Statements as Statements +import Main.Statements qualified as Statements import Test.QuickCheck.Instances () import Test.Tasty import Test.Tasty.HUnit diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index d54f2db26a..a4924d6847 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -1,6 +1,6 @@ module Main.Connection where -import qualified Hasql.Connection as HC +import Hasql.Connection qualified as HC import Main.Prelude with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs index 7d3bf52760..f9641576b7 100644 --- a/tasty/Main/DSL.hs +++ b/tasty/Main/DSL.hs @@ -7,8 +7,8 @@ module Main.DSL ) where -import qualified Hasql.Connection as HC -import qualified Hasql.Session +import Hasql.Connection qualified as HC +import Hasql.Session qualified import Main.Prelude type Session = diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs index d910df591a..258de53582 100644 --- a/tasty/Main/Statements.hs +++ b/tasty/Main/Statements.hs @@ -1,7 +1,7 @@ module Main.Statements where -import qualified Hasql.Decoders as HD -import qualified Hasql.Statement as HQ +import Hasql.Decoders qualified as HD +import Hasql.Statement qualified as HQ import Main.Prelude plain :: ByteString -> HQ.Statement () () diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 15c334f410..31e68b5709 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -1,8 +1,8 @@ module Main where -import qualified Hasql.Connection -import qualified Hasql.Session -import qualified Main.Statements as Statements +import Hasql.Connection qualified +import Hasql.Session qualified +import Main.Statements qualified as Statements import Prelude main :: IO () diff --git a/threads-test/Main/Statements.hs b/threads-test/Main/Statements.hs index dcf47159f3..be9807c577 100644 --- a/threads-test/Main/Statements.hs +++ b/threads-test/Main/Statements.hs @@ -1,7 +1,7 @@ module Main.Statements where -import qualified Hasql.Decoders as D -import qualified Hasql.Encoders as E +import Hasql.Decoders qualified as D +import Hasql.Encoders qualified as E import Hasql.Statement import Prelude From 195427a6763ed29f6f4882795106c68908f1f22d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 19 Apr 2024 07:54:48 +0300 Subject: [PATCH 0973/1204] Format --- hasql.cabal | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index bb76c36b6e..c7c2719e00 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -25,6 +25,7 @@ source-repository head location: git://github.com/nikita-volkov/hasql.git common base + default-language: Haskell2010 default-extensions: NoImplicitPrelude NoMonomorphismRestriction @@ -65,8 +66,6 @@ common base TypeOperators UnboxedTuples - default-language: Haskell2010 - common executable import: base ghc-options: From ee73f4e5045d7f0d7b0925d808063b0e188a64b4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 19 Apr 2024 07:26:53 +0300 Subject: [PATCH 0974/1204] Switch to newer libpq --- cabal.project | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cabal.project b/cabal.project index e6fdbadb43..38aa2e751d 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,9 @@ packages: . + +source-repository-package + type: git + location: https://github.com/GulinSS/postgresql-libpq/ + tag: 30b69e55855cabf3356e186c30a1756b4b0c6c95 + +allow-newer: + postgresql-libpq:base From f1fa1f86dd1d366067773501da735475f6662452 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 19 Apr 2024 08:01:49 +0300 Subject: [PATCH 0975/1204] Sketch Pipeline No testing has been done yet --- hasql.cabal | 3 ++ library/Hasql/Decoders/Result.hs | 7 +++- library/Hasql/Encoders/Params.hs | 7 ++++ library/Hasql/Pipeline.hs | 7 ++++ library/Hasql/Pipeline/Core.hs | 66 ++++++++++++++++++++++++++++++++ library/Hasql/Session/Core.hs | 18 ++++----- 6 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 library/Hasql/Pipeline.hs create mode 100644 library/Hasql/Pipeline/Core.hs diff --git a/hasql.cabal b/hasql.cabal index c7c2719e00..0ea4f23055 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -31,6 +31,7 @@ common base NoMonomorphismRestriction Arrows BangPatterns + BlockArguments ConstraintKinds DataKinds DefaultSignatures @@ -82,6 +83,7 @@ library Hasql.Connection Hasql.Decoders Hasql.Encoders + Hasql.Pipeline Hasql.Session Hasql.Statement @@ -101,6 +103,7 @@ library Hasql.Encoders.Value Hasql.Errors Hasql.IO + Hasql.Pipeline.Core Hasql.PostgresTypeInfo Hasql.Prelude Hasql.PreparedStatementRegistry diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 8bd3d55f35..434bbe9cbd 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -25,6 +25,7 @@ noResult = checkExecStatus $ \case LibPQ.CommandOk -> True LibPQ.TuplesOk -> True + LibPQ.PipelineSync -> True _ -> False {-# INLINE rowsAffected #-} @@ -66,7 +67,11 @@ checkExecStatus predicate = LibPQ.NonfatalError -> serverError LibPQ.FatalError -> serverError LibPQ.EmptyQuery -> return () - _ -> Result $ lift $ ExceptT $ pure $ Left $ UnexpectedResult $ "Unexpected result status: " <> (fromString $ show status) + _ -> unexpectedResult $ "Unexpected result status: " <> (fromString $ show status) + +unexpectedResult :: Text -> Result a +unexpectedResult = + Result . lift . ExceptT . pure . Left . UnexpectedResult {-# INLINE serverError #-} serverError :: Result () diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index de4cd81be9..43cd7798a5 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -7,6 +7,13 @@ import Hasql.Prelude import PostgreSQL.Binary.Encoding qualified as B import Text.Builder qualified as E +renderReadable :: Params a -> a -> [Text] +renderReadable (Params (Op encoderOp)) params = + foldr step [] (encoderOp params) + where + step (_, _, _, rendering) acc = + rendering : acc + -- | -- Encoder of some representation of a parameters product. newtype Params a diff --git a/library/Hasql/Pipeline.hs b/library/Hasql/Pipeline.hs new file mode 100644 index 0000000000..dce834f590 --- /dev/null +++ b/library/Hasql/Pipeline.hs @@ -0,0 +1,7 @@ +module Hasql.Pipeline + ( Pipeline, + statement, + ) +where + +import Hasql.Pipeline.Core diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs new file mode 100644 index 0000000000..440fd20207 --- /dev/null +++ b/library/Hasql/Pipeline/Core.hs @@ -0,0 +1,66 @@ +module Hasql.Pipeline.Core where + +import Database.PostgreSQL.LibPQ qualified as Pq +import Hasql.Connection.Core qualified as Connection +import Hasql.Decoders.All qualified as Decoders +import Hasql.Encoders.All qualified as Encoders +import Hasql.Encoders.Params qualified as Encoders.Params +import Hasql.Errors +import Hasql.IO qualified as IO +import Hasql.Prelude +import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry +import Hasql.Statement qualified as Statement + +run :: Pipeline a -> Connection.Connection -> IO (Either QueryError a) +run (Pipeline send recv) (Connection.Connection pqConnectionRef integerDatetimes registry) = + withMVar pqConnectionRef \pqConnection -> do + Pq.enterPipelineMode pqConnection + sendResult <- send pqConnection integerDatetimes registry + Pq.pipelineSync pqConnection + recvResult <- recv pqConnection integerDatetimes + Pq.exitPipelineMode pqConnection + pure (sendResult *> recvResult) + +data Pipeline a + = Pipeline + -- | Send commands. + (Pq.Connection -> Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> IO (Either QueryError ())) + -- | Receive results. + (Pq.Connection -> Bool -> IO (Either QueryError a)) + deriving (Functor) + +instance Applicative Pipeline where + pure a = + Pipeline send recv + where + send _ _ _ = + pure (Right ()) + recv _ _ = + pure (Right a) + + Pipeline lSend lRecv <*> Pipeline rSend rRecv = + Pipeline send recv + where + send pqConn idt pReg = do + lSendRes <- lSend pqConn idt pReg + rSendRes <- rSend pqConn idt pReg + pure (lSendRes *> rSendRes) + recv pqConn idt = do + lRecvRes <- lRecv pqConn idt + rRecvRes <- rRecv pqConn idt + pure (lRecvRes <*> rRecvRes) + +statement :: params -> Statement.Statement params result -> Pipeline result +statement params (Statement.Statement template (Encoders.Params paramsEncoder) (Decoders.Result decoder) preparable) = + Pipeline send recv + where + send pqConnection integerDatetimes registry = + mapLeft commandToQueryError + <$> IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable params + + recv pqConnection integerDatetimes = + mapLeft commandToQueryError + <$> IO.getResults pqConnection integerDatetimes decoder + + commandToQueryError = + QueryError template (Encoders.Params.renderReadable paramsEncoder params) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index f57c9d09f6..1b7176e774 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -1,12 +1,14 @@ module Hasql.Session.Core where import Hasql.Connection.Core qualified as Connection +import Hasql.Decoders.All qualified as Decoders import Hasql.Decoders.Result qualified as Decoders.Result import Hasql.Decoders.Results qualified as Decoders.Results import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors import Hasql.IO qualified as IO +import Hasql.Pipeline.Core qualified as Pipeline import Hasql.Prelude import Hasql.Statement qualified as Statement @@ -46,20 +48,18 @@ sql sql = -- | -- Parameters and a specification of a parametric single-statement query to apply them to. statement :: params -> Statement.Statement params result -> Session result -statement input (Statement.Statement template (Encoders.Params paramsEncoder) decoder preparable) = +statement input (Statement.Statement template (Encoders.Params paramsEncoder) (Decoders.Result decoder) preparable) = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (mapLeft (QueryError template inputReps)) + $ fmap (mapLeft (QueryError template (Encoders.Params.renderReadable paramsEncoder input))) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input - r2 <- IO.getResults pqConnection integerDatetimes (unsafeCoerce decoder) + r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 - where - inputReps = - let Encoders.Params.Params (Op encoderOp) = paramsEncoder - step (_, _, _, rendering) acc = - rendering : acc - in foldr step [] (encoderOp input) + +pipeline :: Pipeline.Pipeline result -> Session result +pipeline pipeline = + Session $ ReaderT $ ExceptT . Pipeline.run pipeline From cbea968ac4b298d129fc103ccdf8cdf824359db8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 13:22:26 +0300 Subject: [PATCH 0976/1204] Update the actions --- .github/workflows/check.yaml | 5 ++++- .github/workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 6a7c0e0db7..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -13,8 +13,10 @@ jobs: include: - ghc: 8.10.1 ghc-options: "" - ignore-haddock: "true" + ignore-haddock: true + ignore-cabal-check: true - ghc: latest + ignore-cabal-check: true runs-on: ubuntu-latest @@ -40,3 +42,4 @@ jobs: ghc: ${{matrix.ghc}} ghc-options: ${{matrix.ghc-options}} ignore-haddock: ${{matrix.ignore-haddock}} + ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 7e14ae2e26..4a8dd27464 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -7,7 +7,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 19636d01d4..1e89639b8d 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -13,7 +13,7 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v1 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 secrets: inherit check: @@ -24,7 +24,7 @@ jobs: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v1 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 secrets: inherit with: prefix-tag-with-v: false From ad9f2d6bf13b751a4ded3b95f2bd8ce7ad008385 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 20 Apr 2024 10:23:08 +0000 Subject: [PATCH 0977/1204] Format --- hasql.cabal | 152 ++++++++++++++++++++++++++++------------------------ 1 file changed, 81 insertions(+), 71 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index c7c2719e00..c849200f73 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,34 +1,32 @@ -cabal-version: 3.0 -name: hasql -version: 1.6.4.3 -category: Hasql, Database, PostgreSQL -synopsis: An efficient PostgreSQL driver with a flexible mapping API +cabal-version: 3.0 +name: hasql +version: 1.6.4.3 +category: Hasql, Database, PostgreSQL +synopsis: An efficient PostgreSQL driver with a flexible mapping API description: Root of the \"hasql\" ecosystem. For details and tutorials see . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. -homepage: https://github.com/nikita-volkov/hasql -bug-reports: https://github.com/nikita-volkov/hasql/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2014, Nikita Volkov -license: MIT -license-file: LICENSE +homepage: https://github.com/nikita-volkov/hasql +bug-reports: https://github.com/nikita-volkov/hasql/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2014, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md README.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql.git common base - default-language: Haskell2010 + default-language: Haskell2010 default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction Arrows BangPatterns ConstraintKinds @@ -51,6 +49,8 @@ common base MagicHash MultiParamTypeClasses MultiWayIf + NoImplicitPrelude + NoMonomorphismRestriction OverloadedStrings ParallelListComp PatternGuards @@ -67,17 +67,23 @@ common base UnboxedTuples common executable - import: base + import: base ghc-options: - -O2 -threaded -with-rtsopts=-N -rtsopts -funbox-strict-fields + -O2 + -threaded + -with-rtsopts=-N + -rtsopts + -funbox-strict-fields common test - import: base - ghc-options: -threaded -with-rtsopts=-N + import: base + ghc-options: + -threaded + -with-rtsopts=-N library - import: base - hs-source-dirs: library + import: base + hs-source-dirs: library exposed-modules: Hasql.Connection Hasql.Decoders @@ -108,33 +114,33 @@ library Hasql.Settings build-depends: - , aeson >=2 && <3 - , attoparsec >=0.10 && <0.15 - , base >=4.14 && <5 - , bytestring >=0.10 && <0.13 - , bytestring-strict-builder >=0.4.5.1 && <0.5 - , contravariant >=1.3 && <2 - , dlist >=0.8 && <0.9 || >=1 && <2 - , hashable >=1.2 && <2 - , hashtables >=1.1 && <2 - , mtl >=2 && <3 - , network-ip >=0.3.0.3 && <0.4 - , postgresql-binary >=0.13.1 && <0.14 - , postgresql-libpq >=0.9 && <0.11 - , profunctors >=5.1 && <6 - , scientific >=0.3 && <0.4 - , text >=1 && <3 - , text-builder >=0.6.7 && <0.7 - , time >=1.9 && <2 - , transformers >=0.3 && <0.7 - , uuid >=1.3 && <2 - , vector >=0.10 && <0.14 + aeson >=2 && <3, + attoparsec >=0.10 && <0.15, + base >=4.14 && <5, + bytestring >=0.10 && <0.13, + bytestring-strict-builder >=0.4.5.1 && <0.5, + contravariant >=1.3 && <2, + dlist >=0.8 && <0.9 || >=1 && <2, + hashable >=1.2 && <2, + hashtables >=1.1 && <2, + mtl >=2 && <3, + network-ip >=0.3.0.3 && <0.4, + postgresql-binary >=0.13.1 && <0.14, + postgresql-libpq >=0.9 && <0.11, + profunctors >=5.1 && <6, + scientific >=0.3 && <0.4, + text >=1 && <3, + text-builder >=0.6.7 && <0.7, + time >=1.9 && <2, + transformers >=0.3 && <0.7, + uuid >=1.3 && <2, + vector >=0.10 && <0.14, test-suite tasty - import: base - type: exitcode-stdio-1.0 + import: base + type: exitcode-stdio-1.0 hs-source-dirs: tasty - main-is: Main.hs + main-is: Main.hs other-modules: Main.Connection Main.DSL @@ -142,40 +148,44 @@ test-suite tasty Main.Statements build-depends: - , contravariant-extras >=0.3.5.2 && <0.4 - , hasql - , quickcheck-instances >=0.3.11 && <0.4 - , rerebase <2 - , tasty >=0.12 && <2 - , tasty-hunit >=0.9 && <0.11 - , tasty-quickcheck >=0.9 && <0.11 + contravariant-extras >=0.3.5.2 && <0.4, + hasql, + quickcheck-instances >=0.3.11 && <0.4, + rerebase <2, + tasty >=0.12 && <2, + tasty-hunit >=0.9 && <0.11, + tasty-quickcheck >=0.9 && <0.11, test-suite threads-test - import: test - type: exitcode-stdio-1.0 + import: test + type: exitcode-stdio-1.0 hs-source-dirs: threads-test - main-is: Main.hs - other-modules: Main.Statements + main-is: Main.hs + other-modules: Main.Statements build-depends: - , hasql - , rerebase + hasql, + rerebase, benchmark benchmarks - import: executable - type: exitcode-stdio-1.0 + import: executable + type: exitcode-stdio-1.0 hs-source-dirs: benchmarks - main-is: Main.hs + main-is: Main.hs build-depends: - , criterion >=1.6 && <2 - , hasql - , rerebase <2 + criterion >=1.6 && <2, + hasql, + rerebase <2, test-suite profiling - import: base - type: exitcode-stdio-1.0 + import: base + type: exitcode-stdio-1.0 hs-source-dirs: profiling - main-is: Main.hs - ghc-options: -O2 -threaded -rtsopts + main-is: Main.hs + ghc-options: + -O2 + -threaded + -rtsopts + build-depends: - , hasql - , rerebase >=1 && <2 + hasql, + rerebase >=1 && <2, From 463559446dec3d4738eb044cf6c8cb03c564fae8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 13:46:51 +0300 Subject: [PATCH 0978/1204] Isolate testing utils --- hasql.cabal | 12 +++- tasty/Main.hs | 78 ++++++++++----------- tasty/Main/DSL.hs | 42 ----------- testing-utils/Hasql/TestingUtils/Session.hs | 45 ++++++++++++ 4 files changed, 95 insertions(+), 82 deletions(-) delete mode 100644 tasty/Main/DSL.hs create mode 100644 testing-utils/Hasql/TestingUtils/Session.hs diff --git a/hasql.cabal b/hasql.cabal index c849200f73..4ea6717380 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -136,6 +136,16 @@ library uuid >=1.3 && <2, vector >=0.10 && <0.14, +library testing-utils + import: base + hs-source-dirs: testing-utils + exposed-modules: + Hasql.TestingUtils.Session + + build-depends: + hasql, + rerebase <2, + test-suite tasty import: base type: exitcode-stdio-1.0 @@ -143,13 +153,13 @@ test-suite tasty main-is: Main.hs other-modules: Main.Connection - Main.DSL Main.Prelude Main.Statements build-depends: contravariant-extras >=0.3.5.2 && <0.4, hasql, + hasql:testing-utils, quickcheck-instances >=0.3.11 && <0.4, rerebase <2, tasty >=0.12 && <2, diff --git a/tasty/Main.hs b/tasty/Main.hs index 05626aeecb..0dff5c276f 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -5,8 +5,8 @@ import Hasql.Decoders qualified as Decoders import Hasql.Encoders qualified as Encoders import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement +import Hasql.TestingUtils.Session qualified as Session import Main.Connection qualified as Connection -import Main.DSL qualified as DSL import Main.Prelude hiding (assert) import Main.Statements qualified as Statements import Test.QuickCheck.Instances () @@ -136,19 +136,19 @@ tree = assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, testGroup "unknownEnum" $ [ testCase "" $ do - res <- DSL.session $ do + res <- Session.runSession $ do let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "drop type if exists mood" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql encoder decoder True where @@ -158,7 +158,7 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) encoder = Encoders.param (Encoders.nonNullable (Encoders.unknownEnum id)) - in DSL.statement "ok" statement + in Session.statement "ok" statement assertEqual "" (Right "ok") res ], @@ -301,12 +301,12 @@ tree = s <- Session.statement (1, 1) sumStatement Session.sql "end;" return s - in DSL.session session >>= \x -> assertEqual (show x) (Right 2) x, + in Session.runSession session >>= \x -> assertEqual (show x) (Right 2) x, testCase "Executing the same query twice" $ pure (), testCase "Interval Encoding" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql encoder decoder True where @@ -316,11 +316,11 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement + in Session.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right True) x, testCase "Interval Decoding" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql encoder decoder True where @@ -330,11 +330,11 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) encoder = Encoders.noParams - in DSL.statement () statement + in Session.statement () statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, testCase "Interval Encoding/Decoding" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql encoder decoder True where @@ -344,23 +344,23 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) encoder = Encoders.param (Encoders.nonNullable (Encoders.interval)) - in DSL.statement (10 :: DiffTime) statement + in Session.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, testCase "Unknown" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "drop type if exists mood" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql encoder decoder True where @@ -370,23 +370,23 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) encoder = Encoders.param (Encoders.nonNullable (Encoders.unknown)) - in DSL.statement "ok" statement + in Session.statement "ok" statement in actualIO >>= assertEqual "" (Right True), testCase "Textual Unknown" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql encoder decoder True where @@ -396,23 +396,23 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) encoder = contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) - in DSL.statement ["1", "2", "4", "5", "6"] statement + in Session.statement ["1", "2", "4", "5", "6"] statement in actualIO >>= assertEqual "" (Right "3456"), testCase "Enum" $ let actualIO = - DSL.session $ do + Session.runSession $ do let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "drop type if exists mood" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql mempty Decoders.noResult True where sql = "create type mood as enum ('sad', 'ok', 'happy')" - in DSL.statement () statement + in Session.statement () statement let statement = Statement.Statement sql encoder decoder True where @@ -422,13 +422,13 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) encoder = Encoders.param (Encoders.nonNullable ((Encoders.enum id))) - in DSL.statement "ok" statement + in Session.statement "ok" statement in actualIO >>= assertEqual "" (Right "ok"), testCase "The same prepared statement used on different types" $ let actualIO = - DSL.session $ do + Session.runSession $ do let effect1 = - DSL.statement "ok" statement + Session.statement "ok" statement where statement = Statement.Statement sql encoder decoder True @@ -440,7 +440,7 @@ tree = decoder = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) effect2 = - DSL.statement 1 statement + Session.statement 1 statement where statement = Statement.Statement sql encoder decoder True @@ -456,26 +456,26 @@ tree = testCase "Affected rows counting" $ replicateM_ 13 $ let actualIO = - DSL.session $ do + Session.runSession $ do dropTable createTable replicateM_ 100 insertRow deleteRows <* dropTable where dropTable = - DSL.statement () + Session.statement () $ Statements.plain $ "drop table if exists a" createTable = - DSL.statement () + Session.statement () $ Statements.plain $ "create table a (id bigserial not null, name varchar not null, primary key (id))" insertRow = - DSL.statement () + Session.statement () $ Statements.plain $ "insert into a (name) values ('a')" deleteRows = - DSL.statement () $ Statement.Statement sql mempty decoder False + Session.statement () $ Statement.Statement sql mempty decoder False where sql = "delete from a" @@ -484,16 +484,16 @@ tree = in actualIO >>= assertEqual "" (Right 100), testCase "Result of an auto-incremented column" $ let actualIO = - DSL.session $ do - DSL.statement () $ Statements.plain $ "drop table if exists a" - DSL.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" - id1 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - id2 <- DSL.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - DSL.statement () $ Statements.plain $ "drop table if exists a" + Session.runSession $ do + Session.statement () $ Statements.plain $ "drop table if exists a" + Session.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" + id1 <- Session.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + id2 <- Session.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False + Session.statement () $ Statements.plain $ "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO, testCase "List decoding" $ let actualIO = - DSL.session $ DSL.statement () $ Statements.selectList + Session.runSession $ Session.statement () $ Statements.selectList in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/tasty/Main/DSL.hs b/tasty/Main/DSL.hs deleted file mode 100644 index f9641576b7..0000000000 --- a/tasty/Main/DSL.hs +++ /dev/null @@ -1,42 +0,0 @@ -module Main.DSL - ( Session, - SessionError (..), - session, - Hasql.Session.statement, - Hasql.Session.sql, - ) -where - -import Hasql.Connection qualified as HC -import Hasql.Session qualified -import Main.Prelude - -type Session = - Hasql.Session.Session - -data SessionError - = ConnectionError (HC.ConnectionError) - | SessionError (Hasql.Session.QueryError) - deriving (Show, Eq) - -session :: Session a -> IO (Either SessionError a) -session session = - runExceptT $ acquire >>= \connection -> use connection <* release connection - where - acquire = - ExceptT $ fmap (mapLeft ConnectionError) $ HC.acquire settings - where - settings = - HC.settings host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "postgres" - database = "postgres" - use connection = - ExceptT - $ fmap (mapLeft SessionError) - $ Hasql.Session.run session connection - release connection = - lift $ HC.release connection diff --git a/testing-utils/Hasql/TestingUtils/Session.hs b/testing-utils/Hasql/TestingUtils/Session.hs new file mode 100644 index 0000000000..f9fe86515f --- /dev/null +++ b/testing-utils/Hasql/TestingUtils/Session.hs @@ -0,0 +1,45 @@ +module Hasql.TestingUtils.Session + ( Session.Session, + SessionError (..), + Session.QueryError (..), + Session.CommandError (..), + runSession, + runStatementInSession, + ) +where + +import Hasql.Connection qualified as Connection +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Prelude + +data SessionError + = ConnectionError (Connection.ConnectionError) + | SessionError (Session.QueryError) + deriving (Show, Eq) + +runSession :: Session.Session a -> IO (Either SessionError a) +runSession session = + runExceptT $ acquire >>= \connection -> use connection <* release connection + where + acquire = + ExceptT $ fmap (mapLeft ConnectionError) $ Connection.acquire settings + where + settings = + Connection.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "postgres" + database = "postgres" + use connection = + ExceptT + $ fmap (mapLeft SessionError) + $ Session.run session connection + release connection = + lift $ Connection.release connection + +runStatementInSession :: Statement.Statement a b -> a -> Session.Session b +runStatementInSession statement params = + Session.statement params statement From 1d891e929130b5f237eaba7e96d110627f46b36e Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 20 Apr 2024 10:53:44 +0000 Subject: [PATCH 0979/1204] Format --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 3d1895ff42..9881d0a668 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -41,6 +41,8 @@ common base-settings MagicHash MultiParamTypeClasses MultiWayIf + NoImplicitPrelude + NoMonomorphismRestriction NumericUnderscores OverloadedStrings ParallelListComp @@ -57,8 +59,6 @@ common base-settings TypeFamilies TypeOperators UnboxedTuples - NoImplicitPrelude - NoMonomorphismRestriction default-language: Haskell2010 From b49c94ed2a2b81a3f134ec44984555cbda38a02a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 13:59:11 +0300 Subject: [PATCH 0980/1204] Factor constants out --- hasql.cabal | 3 ++- tasty/Main.hs | 2 +- testing-utils/Hasql/TestingUtils/Constants.hs | 13 +++++++++++++ .../TestingUtils/{Session.hs => TestingDsl.hs} | 14 +++----------- 4 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 testing-utils/Hasql/TestingUtils/Constants.hs rename testing-utils/Hasql/TestingUtils/{Session.hs => TestingDsl.hs} (76%) diff --git a/hasql.cabal b/hasql.cabal index 4ea6717380..b58132537e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -140,7 +140,8 @@ library testing-utils import: base hs-source-dirs: testing-utils exposed-modules: - Hasql.TestingUtils.Session + Hasql.TestingUtils.Constants + Hasql.TestingUtils.TestingDsl build-depends: hasql, diff --git a/tasty/Main.hs b/tasty/Main.hs index 0dff5c276f..1f57ef3764 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -5,7 +5,7 @@ import Hasql.Decoders qualified as Decoders import Hasql.Encoders qualified as Encoders import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Hasql.TestingUtils.Session qualified as Session +import Hasql.TestingUtils.TestingDsl qualified as Session import Main.Connection qualified as Connection import Main.Prelude hiding (assert) import Main.Statements qualified as Statements diff --git a/testing-utils/Hasql/TestingUtils/Constants.hs b/testing-utils/Hasql/TestingUtils/Constants.hs new file mode 100644 index 0000000000..be657f7fd1 --- /dev/null +++ b/testing-utils/Hasql/TestingUtils/Constants.hs @@ -0,0 +1,13 @@ +module Hasql.TestingUtils.Constants where + +import Hasql.Connection qualified as Connection + +localConnectionSettings :: Connection.Settings +localConnectionSettings = + Connection.settings host port user password database + where + host = "localhost" + port = 5432 + user = "postgres" + password = "postgres" + database = "postgres" diff --git a/testing-utils/Hasql/TestingUtils/Session.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs similarity index 76% rename from testing-utils/Hasql/TestingUtils/Session.hs rename to testing-utils/Hasql/TestingUtils/TestingDsl.hs index f9fe86515f..9a82667a77 100644 --- a/testing-utils/Hasql/TestingUtils/Session.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -1,4 +1,4 @@ -module Hasql.TestingUtils.Session +module Hasql.TestingUtils.TestingDsl ( Session.Session, SessionError (..), Session.QueryError (..), @@ -11,6 +11,7 @@ where import Hasql.Connection qualified as Connection import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement +import Hasql.TestingUtils.Constants qualified as Constants import Prelude data SessionError @@ -23,16 +24,7 @@ runSession session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ fmap (mapLeft ConnectionError) $ Connection.acquire settings - where - settings = - Connection.settings host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "postgres" - database = "postgres" + ExceptT $ fmap (mapLeft ConnectionError) $ Connection.acquire Constants.localConnectionSettings use connection = ExceptT $ fmap (mapLeft SessionError) From 84292fb75509f2598fe6864af32861c73dc20a0c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 14:01:58 +0300 Subject: [PATCH 0981/1204] Rename runSession to runSessionOnLocalDb --- tasty/Main.hs | 24 +++++++++---------- .../Hasql/TestingUtils/TestingDsl.hs | 6 ++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tasty/Main.hs b/tasty/Main.hs index 1f57ef3764..132e16ba2a 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -136,7 +136,7 @@ tree = assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, testGroup "unknownEnum" $ [ testCase "" $ do - res <- Session.runSession $ do + res <- Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql mempty Decoders.noResult True where @@ -301,12 +301,12 @@ tree = s <- Session.statement (1, 1) sumStatement Session.sql "end;" return s - in Session.runSession session >>= \x -> assertEqual (show x) (Right 2) x, + in Session.runSessionOnLocalDb session >>= \x -> assertEqual (show x) (Right 2) x, testCase "Executing the same query twice" $ pure (), testCase "Interval Encoding" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql encoder decoder True where @@ -320,7 +320,7 @@ tree = in actualIO >>= \x -> assertEqual (show x) (Right True) x, testCase "Interval Decoding" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql encoder decoder True where @@ -334,7 +334,7 @@ tree = in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, testCase "Interval Encoding/Decoding" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql encoder decoder True where @@ -348,7 +348,7 @@ tree = in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, testCase "Unknown" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql mempty Decoders.noResult True where @@ -374,7 +374,7 @@ tree = in actualIO >>= assertEqual "" (Right True), testCase "Textual Unknown" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql mempty Decoders.noResult True where @@ -400,7 +400,7 @@ tree = in actualIO >>= assertEqual "" (Right "3456"), testCase "Enum" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql mempty Decoders.noResult True where @@ -426,7 +426,7 @@ tree = in actualIO >>= assertEqual "" (Right "ok"), testCase "The same prepared statement used on different types" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do let effect1 = Session.statement "ok" statement where @@ -456,7 +456,7 @@ tree = testCase "Affected rows counting" $ replicateM_ 13 $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do dropTable createTable replicateM_ 100 insertRow @@ -484,7 +484,7 @@ tree = in actualIO >>= assertEqual "" (Right 100), testCase "Result of an auto-incremented column" $ let actualIO = - Session.runSession $ do + Session.runSessionOnLocalDb $ do Session.statement () $ Statements.plain $ "drop table if exists a" Session.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" id1 <- Session.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False @@ -494,6 +494,6 @@ tree = in assertEqual "" (Right (1, 2)) =<< actualIO, testCase "List decoding" $ let actualIO = - Session.runSession $ Session.statement () $ Statements.selectList + Session.runSessionOnLocalDb $ Session.statement () $ Statements.selectList in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs index 9a82667a77..c5cacfb983 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -3,7 +3,7 @@ module Hasql.TestingUtils.TestingDsl SessionError (..), Session.QueryError (..), Session.CommandError (..), - runSession, + runSessionOnLocalDb, runStatementInSession, ) where @@ -19,8 +19,8 @@ data SessionError | SessionError (Session.QueryError) deriving (Show, Eq) -runSession :: Session.Session a -> IO (Either SessionError a) -runSession session = +runSessionOnLocalDb :: Session.Session a -> IO (Either SessionError a) +runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = From b587235bc6387e13ac4f23b0ee5d83abba1ddfa7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 16:40:11 +0300 Subject: [PATCH 0982/1204] Add test --- hasql.cabal | 19 +++++++- hspec/Hasql/PipelineSpec.hs | 24 ++++++++++ hspec/Main.hs | 1 + library/Hasql/Session.hs | 1 + .../TestingUtils/Statements/GenerateSeries.hs | 44 +++++++++++++++++++ .../Hasql/TestingUtils/TestingDsl.hs | 13 ++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 hspec/Hasql/PipelineSpec.hs create mode 100644 hspec/Main.hs create mode 100644 testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs diff --git a/hasql.cabal b/hasql.cabal index 138ff2ae9a..ea9f460553 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -28,6 +28,7 @@ common base default-language: Haskell2010 default-extensions: Arrows + ApplicativeDo BangPatterns BlockArguments ConstraintKinds @@ -53,6 +54,7 @@ common base NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings + OverloadedRecordDot ParallelListComp PatternGuards QuasiQuotes @@ -145,7 +147,7 @@ library testing-utils exposed-modules: Hasql.TestingUtils.Constants Hasql.TestingUtils.TestingDsl - + Hasql.TestingUtils.Statements.GenerateSeries build-depends: hasql, rerebase <2, @@ -203,3 +205,18 @@ test-suite profiling build-depends: hasql, rerebase >=1 && <2, + +test-suite hspec + import: test + type: exitcode-stdio-1.0 + hs-source-dirs: hspec + main-is: Main.hs + other-modules: + Hasql.PipelineSpec + + + build-tool-depends: hspec-discover:hspec-discover + build-depends: + hasql:testing-utils, + hspec, + rerebase >=1 && <2, diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs new file mode 100644 index 0000000000..214ef7f824 --- /dev/null +++ b/hspec/Hasql/PipelineSpec.hs @@ -0,0 +1,24 @@ +module Hasql.PipelineSpec (spec) where + +import Hasql.TestingUtils.Statements.GenerateSeries qualified as GenerateSeries +import Hasql.TestingUtils.TestingDsl qualified as Dsl +import Test.Hspec +import Prelude + +spec :: Spec +spec = do + describe "Normally" do + describe "On prepared statements" do + it "Collects results" do + _result <- + Dsl.runPipelineOnLocalDb + $ (,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 1000} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 1000} + pending + describe "On unprepared statements" do + it "Works" do + pending + describe "When some part fails" do + it "Works" do + pending diff --git a/hspec/Main.hs b/hspec/Main.hs new file mode 100644 index 0000000000..a824f8c30c --- /dev/null +++ b/hspec/Main.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover #-} diff --git a/library/Hasql/Session.hs b/library/Hasql/Session.hs index 6f3a37059b..79690235d8 100644 --- a/library/Hasql/Session.hs +++ b/library/Hasql/Session.hs @@ -2,6 +2,7 @@ module Hasql.Session ( Session, sql, statement, + pipeline, -- * Execution run, diff --git a/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs b/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs new file mode 100644 index 0000000000..bb0e4b498f --- /dev/null +++ b/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs @@ -0,0 +1,44 @@ +module Hasql.TestingUtils.Statements.GenerateSeries where + +import Hasql.Decoders qualified as Decoders +import Hasql.Encoders qualified as Encoders +import Hasql.Pipeline qualified as Pipeline +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Prelude + +data Params = Params + { start :: Int64, + end :: Int64 + } + +type Result = Vector Int64 + +session :: Bool -> Params -> Session.Session Result +session prepared params = + Session.statement params (statement prepared) + +pipeline :: Bool -> Params -> Pipeline.Pipeline Result +pipeline prepared params = + Pipeline.statement params (statement prepared) + +statement :: Bool -> Statement.Statement Params Result +statement = + Statement.Statement sql encoder decoder + +sql :: ByteString +sql = + "SELECT generate_series($1, $2)" + +encoder :: Encoders.Params Params +encoder = + mconcat + [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), + (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + ] + +decoder :: Decoders.Result Result +decoder = + Decoders.rowVector + ( Decoders.column (Decoders.nonNullable Decoders.int8) + ) diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs index c5cacfb983..59144aaede 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -3,12 +3,17 @@ module Hasql.TestingUtils.TestingDsl SessionError (..), Session.QueryError (..), Session.CommandError (..), + Pipeline.Pipeline, + Statement.Statement (..), runSessionOnLocalDb, + runPipelineOnLocalDb, runStatementInSession, + runPipelineInSession, ) where import Hasql.Connection qualified as Connection +import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement import Hasql.TestingUtils.Constants qualified as Constants @@ -32,6 +37,14 @@ runSessionOnLocalDb session = release connection = lift $ Connection.release connection +runPipelineOnLocalDb :: Pipeline.Pipeline a -> IO (Either SessionError a) +runPipelineOnLocalDb = + runSessionOnLocalDb . Session.pipeline + runStatementInSession :: Statement.Statement a b -> a -> Session.Session b runStatementInSession statement params = Session.statement params statement + +runPipelineInSession :: Pipeline.Pipeline a -> Session.Session a +runPipelineInSession = + Session.pipeline From f96af01f082697f6549e774da5dfb4a2160d27d4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 20 Apr 2024 18:35:32 +0300 Subject: [PATCH 0983/1204] Progress --- hspec/Hasql/PipelineSpec.hs | 36 ++++++++++++++----- library/Hasql/Decoders/Results.hs | 10 +++--- library/Hasql/IO.hs | 14 ++++---- library/Hasql/Pipeline/Core.hs | 27 +++++++++++--- .../TestingUtils/Statements/GenerateSeries.hs | 4 +-- 5 files changed, 65 insertions(+), 26 deletions(-) diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 214ef7f824..291e3d388e 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -7,18 +7,38 @@ import Prelude spec :: Spec spec = do + describe "Single-statement" do + describe "Unprepared" do + it "Collects results and sends params" do + result <- + Dsl.runPipelineOnLocalDb + $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} + shouldBe result (Right [0 .. 2]) + + describe "Prepared and sends params" do + fit "Collects results and sends params" do + result <- + Dsl.runPipelineOnLocalDb + $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + shouldBe result (Right [0 .. 2]) + describe "Normally" do describe "On prepared statements" do - it "Collects results" do - _result <- + it "Collects results and sends params" do + result <- Dsl.runPipelineOnLocalDb - $ (,) - <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 1000} - <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 1000} - pending + $ replicateM 2 + $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + shouldBe result (Right [[0 .. 2], [0 .. 2]]) + describe "On unprepared statements" do - it "Works" do - pending + it "Collects results and sends params" do + result <- + Dsl.runPipelineOnLocalDb + $ replicateM 2 + $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} + shouldBe result (Right [[0 .. 2], [0 .. 2]]) + describe "When some part fails" do it "Works" do pending diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 26f218a5aa..040ec3834c 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -21,9 +21,9 @@ newtype Results a deriving (Functor, Applicative, Monad) {-# INLINE run #-} -run :: Results a -> (Bool, LibPQ.Connection) -> IO (Either CommandError a) -run (Results stack) env = - runExceptT (runReaderT stack env) +run :: Results a -> LibPQ.Connection -> Bool -> IO (Either CommandError a) +run (Results stack) conn idt = + runExceptT (runReaderT stack (idt, conn)) {-# INLINE clientError #-} clientError :: Results a @@ -87,8 +87,8 @@ dropRemainders = ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) refine :: (a -> Either Text b) -> Results a -> Results b -refine refiner results = Results +refine refiner (Results stack) = Results $ ReaderT $ \env -> ExceptT $ do - resultEither <- run results env + resultEither <- runExceptT $ runReaderT stack env return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index b434b89e8e..c47840bb16 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -62,9 +62,9 @@ getResults connection integerDatetimes decoder = (<*) <$> get <*> dropRemainders where get = - ResultsDecoders.run decoder (integerDatetimes, connection) + ResultsDecoders.run decoder connection integerDatetimes dropRemainders = - ResultsDecoders.run ResultsDecoders.dropRemainders (integerDatetimes, connection) + ResultsDecoders.run ResultsDecoders.dropRemainders connection integerDatetimes {-# INLINE getPreparedStatementKey #-} getPreparedStatementKey :: @@ -85,12 +85,12 @@ getPreparedStatementKey connection registry template oidList = onNewRemoteKey key = do sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - let resultsDecoder = - if sent - then ResultsDecoders.single ResultDecoders.noResult - else ResultsDecoders.clientError - fmap resultsMapping $ getResults connection undefined resultsDecoder + fmap resultsMapping $ getResults connection undefined (resultsDecoder sent) where + resultsDecoder sent = + if sent + then ResultsDecoders.single ResultDecoders.noResult + else ResultsDecoders.clientError resultsMapping = \case Left x -> (False, Left x) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 440fd20207..5d2debe09b 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -3,6 +3,7 @@ module Hasql.Pipeline.Core where import Database.PostgreSQL.LibPQ qualified as Pq import Hasql.Connection.Core qualified as Connection import Hasql.Decoders.All qualified as Decoders +import Hasql.Decoders.Results qualified as Decoders.Results import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors @@ -10,16 +11,33 @@ import Hasql.IO qualified as IO import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement +import System.IO (BufferMode (NoBuffering), hSetBuffering, stdout) run :: Pipeline a -> Connection.Connection -> IO (Either QueryError a) -run (Pipeline send recv) (Connection.Connection pqConnectionRef integerDatetimes registry) = +run (Pipeline send recv) (Connection.Connection pqConnectionRef integerDatetimes registry) = do + hSetBuffering stdout NoBuffering withMVar pqConnectionRef \pqConnection -> do - Pq.enterPipelineMode pqConnection + putStrLn "enterPipelineMode" + runCommandFailing pqConnection $ Pq.enterPipelineMode pqConnection + putStrLn "send" sendResult <- send pqConnection integerDatetimes registry - Pq.pipelineSync pqConnection + putStrLn "pipelineSync" + runCommandFailing pqConnection $ Pq.pipelineSync pqConnection + putStrLn "recv" recvResult <- recv pqConnection integerDatetimes - Pq.exitPipelineMode pqConnection + putStrLn "exitPipelineMode" + handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes + putStrLn "exitPipelineMode" + runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection + putStrLn "return" pure (sendResult *> recvResult) + where + runCommandFailing :: Pq.Connection -> IO Bool -> IO () + runCommandFailing pqConn runCmd = + IO.checkedSend pqConn runCmd >>= handleEither + handleEither = \case + Right a -> pure a + Left err -> fail $ show err data Pipeline a = Pipeline @@ -60,6 +78,7 @@ statement params (Statement.Statement template (Encoders.Params paramsEncoder) ( recv pqConnection integerDatetimes = mapLeft commandToQueryError + -- <$> Decoders.Results.run decoder (integerDatetimes, pqConnection) <$> IO.getResults pqConnection integerDatetimes decoder commandToQueryError = diff --git a/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs b/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs index bb0e4b498f..67937e2960 100644 --- a/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs +++ b/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs @@ -12,7 +12,7 @@ data Params = Params end :: Int64 } -type Result = Vector Int64 +type Result = [Int64] session :: Bool -> Params -> Session.Session Result session prepared params = @@ -39,6 +39,6 @@ encoder = decoder :: Decoders.Result Result decoder = - Decoders.rowVector + Decoders.rowList ( Decoders.column (Decoders.nonNullable Decoders.int8) ) From a86cfd0873942efa9a55fa6a806bbd22f16505ab Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 06:25:01 +0300 Subject: [PATCH 0984/1204] Get rid of the decidable instance --- CHANGELOG.md | 4 ++ library/Hasql/Encoders/All.hs | 2 +- library/Hasql/Encoders/Params.hs | 77 +++++++++++++++++++++++++------- library/Hasql/IO.hs | 32 +++++++------ library/Hasql/Session/Core.hs | 8 ++-- tasty/Main.hs | 26 ----------- 6 files changed, 88 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a96c1de6dd..73f6ac7004 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.7 + +- Decidable instance on `Encoders.Params` removed. It was useless and limited the design. + # 1.6.3.1 - Moved to "postgresql-libpq-0.10" diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 8691e8193c..c2c4d24e17 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -61,7 +61,7 @@ import qualified Text.Builder as C -- Female -> "female" -- @ newtype Params a = Params (Params.Params a) - deriving (Contravariant, Divisible, Decidable, Monoid, Semigroup) + deriving (Contravariant, Divisible, Monoid, Semigroup) -- | -- No parameters. Same as `mempty` and `conquered`. diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 63715cfcd5..51e2cf846d 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -9,23 +9,70 @@ import qualified Text.Builder as E -- | -- Encoder of some representation of a parameters product. -newtype Params a - = Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a) - deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid) +data Params a = Params + { size :: !Int, + columnsMetadata :: !(DList (A.Oid, A.Format)), + serializer :: Bool -> a -> DList (Maybe ByteString), + printer :: a -> DList Text + } + +instance Contravariant Params where + contramap fn (Params size columnsMetadata oldSerializer oldPrinter) = Params {..} + where + serializer idt = oldSerializer idt . fn + printer = oldPrinter . fn + +instance Divisible Params where + divide + divisor + (Params leftSize leftColumnsMetadata leftSerializer leftPrinter) + (Params rightSize rightColumnsMetadata rightSerializer rightPrinter) = + Params + { size = leftSize + rightSize, + columnsMetadata = leftColumnsMetadata <> rightColumnsMetadata, + serializer = \idt input -> case divisor input of + (leftInput, rightInput) -> leftSerializer idt leftInput <> rightSerializer idt rightInput, + printer = \input -> case divisor input of + (leftInput, rightInput) -> leftPrinter leftInput <> rightPrinter rightInput + } + conquer = + Params + { size = 0, + columnsMetadata = mempty, + serializer = mempty, + printer = mempty + } + +instance Semigroup (Params a) where + Params leftSize leftColumnsMetadata leftSerializer leftPrinter <> Params rightSize rightColumnsMetadata rightSerializer rightPrinter = + Params + { size = leftSize + rightSize, + columnsMetadata = leftColumnsMetadata <> rightColumnsMetadata, + serializer = \idt input -> leftSerializer idt input <> rightSerializer idt input, + printer = \input -> leftPrinter input <> rightPrinter input + } + +instance Monoid (Params a) where + mempty = conquer value :: C.Value a -> Params a -value = - contramap Just . nullableValue +value (C.Value valueOID _ serialize print) = + Params + { size = 1, + columnsMetadata = pure (pqOid, format), + serializer = \idt -> pure . Just . B.encodingBytes . serialize idt, + printer = pure . E.run . print + } + where + D.OID _ pqOid format = valueOID nullableValue :: C.Value a -> Params (Maybe a) -nullableValue (C.Value valueOID arrayOID encode render) = +nullableValue (C.Value valueOID _ serialize print) = Params - $ Op - $ \input -> - let D.OID _ pqOid format = - valueOID - encoder env = - fmap (B.encodingBytes . encode env) input - rendering = - maybe "null" (E.run . render) input - in pure (pqOid, format, encoder, rendering) + { size = 1, + columnsMetadata = pure (pqOid, format), + serializer = \idt -> pure . fmap (B.encodingBytes . serialize idt), + printer = pure . maybe "null" (E.run . print) + } + where + D.OID _ pqOid format = valueOID diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 47c4b3a01a..db9dd94613 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -114,16 +114,17 @@ sendPreparedParametricStatement :: ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = - let (oidList, valueAndFormatList) = - let step (oid, format, encoder, _) ~(oidList, bytesAndFormatList) = - (,) - (oid : oidList) - (fmap (\bytes -> (bytes, format)) (encoder integerDatetimes) : bytesAndFormatList) - in foldr step ([], []) (encoderOp input) - in runExceptT $ do - key <- ExceptT $ getPreparedStatementKey connection registry template oidList - ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary +sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params size columnsMetadata serializer _) input = + runExceptT $ do + key <- ExceptT $ getPreparedStatementKey connection registry template oidList + ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary + where + (oidList, formatList) = + columnsMetadata & toList & unzip + valueAndFormatList = + serializer integerDatetimes input + & toList + & zipWith (\format encoding -> (,format) <$> encoding) formatList {-# INLINE sendUnpreparedParametricStatement #-} sendUnpreparedParametricStatement :: @@ -133,11 +134,14 @@ sendUnpreparedParametricStatement :: ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params (Op encoderOp)) input = +sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params _ columnsMetadata serializer printer) input = let params = - let step (oid, format, encoder, _) acc = - ((,,) <$> pure oid <*> encoder integerDatetimes <*> pure format) : acc - in foldr step [] (encoderOp input) + zipWith + ( \(oid, format) encoding -> + (,,) <$> pure oid <*> encoding <*> pure format + ) + (toList columnsMetadata) + (toList (serializer integerDatetimes input)) in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary {-# INLINE sendParametricStatement #-} diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 09f1ffe1a1..febafd8f2d 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -46,7 +46,7 @@ sql sql = -- | -- Parameters and a specification of a parametric single-statement query to apply them to. statement :: params -> Statement.Statement params result -> Session result -statement input (Statement.Statement template (Encoders.Params paramsEncoder) decoder preparable) = +statement input (Statement.Statement template (Encoders.Params paramsEncoder@(Encoders.Params.Params _ _ _ printer)) decoder preparable) = Session $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> @@ -59,7 +59,5 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) de return $ r1 *> r2 where inputReps = - let Encoders.Params.Params (Op encoderOp) = paramsEncoder - step (_, _, _, rendering) acc = - rendering : acc - in foldr step [] (encoderOp input) + printer input + & toList diff --git a/tasty/Main.hs b/tasty/Main.hs index 36fbb420b7..560e79eb18 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -372,32 +372,6 @@ tree = Encoders.param (Encoders.nonNullable (Encoders.unknown)) in DSL.statement "ok" statement in actualIO >>= assertEqual "" (Right True), - testCase "Textual Unknown" - $ let actualIO = - DSL.session $ do - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a int, b int) returns int as $$ select a + b $$ language sql;" - in DSL.statement () statement - let statement = - Statement.Statement sql mempty Decoders.noResult True - where - sql = - "create or replace function overloaded(a text, b text, c text) returns text as $$ select a || b || c $$ language sql;" - in DSL.statement () statement - let statement = - Statement.Statement sql encoder decoder True - where - sql = - "select overloaded($1, $2) || overloaded($3, $4, $5)" - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) - encoder = - contramany (Encoders.param (Encoders.nonNullable (Encoders.unknown))) - in DSL.statement ["1", "2", "4", "5", "6"] statement - in actualIO >>= assertEqual "" (Right "3456"), testCase "Enum" $ let actualIO = DSL.session $ do From eeab1db2be846caafeb739fed71be233f6d8d929 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Apr 2024 03:38:04 +0000 Subject: [PATCH 0985/1204] Set package version to 1.6.4.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index b58132537e..a1e86b1048 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.4.3 +version: 1.6.4.4 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From e366b3febaf9696e0ac3853111aa680564bb378a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 07:56:16 +0300 Subject: [PATCH 0986/1204] Simplify --- library/Hasql/IO.hs | 5 +---- library/Hasql/PreparedStatementRegistry.hs | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 534b75ea0a..05323d684d 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -78,10 +78,7 @@ getPreparedStatementKey connection registry template oidList = PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry where localKey = - PreparedStatementRegistry.LocalKey template wordOIDList - where - wordOIDList = - map (\(LibPQ.Oid x) -> fromIntegral x) oidList + PreparedStatementRegistry.LocalKey template oidList onNewRemoteKey key = do sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index e5d837c87e..9ae7503435 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -9,6 +9,7 @@ where import ByteString.StrictBuilder qualified as B import Data.HashTable.IO qualified as A import Hasql.Prelude hiding (lookup) +import qualified Database.PostgreSQL.LibPQ as Pq data PreparedStatementRegistry = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) @@ -44,7 +45,7 @@ update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table c -- | -- Local statement key. data LocalKey - = LocalKey !ByteString ![Word32] + = LocalKey !ByteString ![Pq.Oid] deriving (Show, Eq) instance Hashable LocalKey where From 117ebc3d0eef0db4e3053bce70253df3a4cc9929 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 08:14:25 +0300 Subject: [PATCH 0987/1204] Factor out the reusable pieces --- library/Hasql/Encoders/Params.hs | 20 ++++++++++++++++++++ library/Hasql/IO.hs | 26 ++++++++++---------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 710acc7ac7..8a4640b0ae 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -12,6 +12,26 @@ renderReadable (Params _ _ _ printer) params = printer params & toList +compilePreparedStatementData :: Params a -> Bool -> a -> ([A.Oid], [Maybe (ByteString, A.Format)]) +compilePreparedStatementData (Params _ columnsMetadata serializer _) integerDatetimes input = + (oidList, valueAndFormatList) + where + (oidList, formatList) = + columnsMetadata & toList & unzip + valueAndFormatList = + serializer integerDatetimes input + & toList + & zipWith (\format encoding -> (,format) <$> encoding) formatList + +compileUnpreparedStatementData :: Params a -> Bool -> a -> [Maybe (A.Oid, ByteString, A.Format)] +compileUnpreparedStatementData (Params _ columnsMetadata serializer printer) integerDatetimes input = + zipWith + ( \(oid, format) encoding -> + (,,) <$> pure oid <*> encoding <*> pure format + ) + (toList columnsMetadata) + (toList (serializer integerDatetimes input)) + -- | -- Encoder of some representation of a parameters product. data Params a = Params diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 05323d684d..9facdb17f6 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -111,17 +111,13 @@ sendPreparedParametricStatement :: ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params size columnsMetadata serializer _) input = +sendPreparedParametricStatement connection registry integerDatetimes template encoder input = runExceptT $ do key <- ExceptT $ getPreparedStatementKey connection registry template oidList ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary where - (oidList, formatList) = - columnsMetadata & toList & unzip - valueAndFormatList = - serializer integerDatetimes input - & toList - & zipWith (\format encoding -> (,format) <$> encoding) formatList + (oidList, valueAndFormatList) = + ParamsEncoders.compilePreparedStatementData encoder integerDatetimes input {-# INLINE sendUnpreparedParametricStatement #-} sendUnpreparedParametricStatement :: @@ -131,15 +127,13 @@ sendUnpreparedParametricStatement :: ParamsEncoders.Params a -> a -> IO (Either CommandError ()) -sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params _ columnsMetadata serializer printer) input = - let params = - zipWith - ( \(oid, format) encoding -> - (,,) <$> pure oid <*> encoding <*> pure format - ) - (toList columnsMetadata) - (toList (serializer integerDatetimes input)) - in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary +sendUnpreparedParametricStatement connection integerDatetimes template encoder input = + checkedSend connection + $ LibPQ.sendQueryParams + connection + template + (ParamsEncoders.compileUnpreparedStatementData encoder integerDatetimes input) + LibPQ.Binary {-# INLINE sendParametricStatement #-} sendParametricStatement :: From 851444711bf0401185bfe051f66865d6861fa95a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 08:54:52 +0300 Subject: [PATCH 0988/1204] Progress --- library/Hasql/Pipeline/Core.hs | 113 ++++++++++++++++++++------------- 1 file changed, 69 insertions(+), 44 deletions(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 5d2debe09b..39328cceeb 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -1,3 +1,5 @@ +{-# OPTIONS_GHC -Wno-unused-imports -Wno-unused-binds #-} + module Hasql.Pipeline.Core where import Database.PostgreSQL.LibPQ qualified as Pq @@ -14,23 +16,30 @@ import Hasql.Statement qualified as Statement import System.IO (BufferMode (NoBuffering), hSetBuffering, stdout) run :: Pipeline a -> Connection.Connection -> IO (Either QueryError a) -run (Pipeline send recv) (Connection.Connection pqConnectionRef integerDatetimes registry) = do +run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes registry) = do hSetBuffering stdout NoBuffering withMVar pqConnectionRef \pqConnection -> do putStrLn "enterPipelineMode" runCommandFailing pqConnection $ Pq.enterPipelineMode pqConnection putStrLn "send" - sendResult <- send pqConnection integerDatetimes registry - putStrLn "pipelineSync" - runCommandFailing pqConnection $ Pq.pipelineSync pqConnection - putStrLn "recv" - recvResult <- recv pqConnection integerDatetimes - putStrLn "exitPipelineMode" - handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes - putStrLn "exitPipelineMode" - runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection - putStrLn "return" - pure (sendResult *> recvResult) + sendResult <- send pqConnection registry integerDatetimes + case sendResult of + Left err -> do + pure (Left err) + Right recv -> do + putStrLn "pipelineSync" + runCommandFailing pqConnection $ Pq.pipelineSync pqConnection + putStrLn "recv" + recvResult <- recv + case recvResult of + Left err -> pure (Left err) + Right res -> do + putStrLn "dropRemainders" + handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes + putStrLn "exitPipelineMode" + runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection + putStrLn "return" + pure (sendResult *> recvResult) where runCommandFailing :: Pq.Connection -> IO Bool -> IO () runCommandFailing pqConn runCmd = @@ -39,47 +48,63 @@ run (Pipeline send recv) (Connection.Connection pqConnectionRef integerDatetimes Right a -> pure a Left err -> fail $ show err -data Pipeline a +newtype Pipeline a = Pipeline - -- | Send commands. - (Pq.Connection -> Bool -> PreparedStatementRegistry.PreparedStatementRegistry -> IO (Either QueryError ())) - -- | Receive results. - (Pq.Connection -> Bool -> IO (Either QueryError a)) + ( Pq.Connection -> + PreparedStatementRegistry.PreparedStatementRegistry -> + Bool -> + IO (Either QueryError (IO (Either QueryError a))) + ) deriving (Functor) instance Applicative Pipeline where pure a = - Pipeline send recv - where - send _ _ _ = - pure (Right ()) - recv _ _ = - pure (Right a) + Pipeline (\_ _ _ -> pure (Right (pure (Right a)))) - Pipeline lSend lRecv <*> Pipeline rSend rRecv = - Pipeline send recv - where - send pqConn idt pReg = do - lSendRes <- lSend pqConn idt pReg - rSendRes <- rSend pqConn idt pReg - pure (lSendRes *> rSendRes) - recv pqConn idt = do - lRecvRes <- lRecv pqConn idt - rRecvRes <- rRecv pqConn idt - pure (lRecvRes <*> rRecvRes) + Pipeline lSend <*> Pipeline rSend = + Pipeline \conn reg integerDatetimes -> + lSend conn reg integerDatetimes >>= \case + Left sendErr -> + pure (Left sendErr) + Right lRecv -> + rSend conn reg integerDatetimes <&> \case + Left sendErr -> + Left sendErr + Right rRecv -> + Right (liftA2 (<*>) lRecv rRecv) statement :: params -> Statement.Statement params result -> Pipeline result -statement params (Statement.Statement template (Encoders.Params paramsEncoder) (Decoders.Result decoder) preparable) = - Pipeline send recv +statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Result decoder) preparable) = + Pipeline run where - send pqConnection integerDatetimes registry = - mapLeft commandToQueryError - <$> IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable params + run connection registry integerDatetimes = do + error "TODO" + where + (oidList, valueAndFormatList) = + Encoders.Params.compilePreparedStatementData encoder integerDatetimes params - recv pqConnection integerDatetimes = - mapLeft commandToQueryError - -- <$> Decoders.Results.run decoder (integerDatetimes, pqConnection) - <$> IO.getResults pqConnection integerDatetimes decoder + resolvePreparedStatementKey :: IO (Either QueryError (ByteString, IO (Either QueryError ()))) + resolvePreparedStatementKey = + PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry + where + localKey = + PreparedStatementRegistry.LocalKey sql oidList + onNewRemoteKey key = + do + sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) + if sent + then pure (True, Right (key, recv)) + else (False,) . Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + where + recv :: IO (Either QueryError ()) + recv = do + Pq.getResult connection >>= \case + Nothing -> + Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + Just result -> + error "TODO" + onOldRemoteKey key = + pure (Right (key, pure (Right ()))) commandToQueryError = - QueryError template (Encoders.Params.renderReadable paramsEncoder params) + QueryError sql (Encoders.Params.renderReadable encoder params) From b07dc536feb07278130f4d126c0070c53287c7a3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 08:59:15 +0300 Subject: [PATCH 0989/1204] Clean up --- library/Hasql/Decoders/Result.hs | 6 +++--- library/Hasql/Decoders/Results.hs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 434bbe9cbd..61a13a202c 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -15,9 +15,9 @@ newtype Result a deriving (Functor, Applicative, Monad) {-# INLINE run #-} -run :: Result a -> (Bool, LibPQ.Result) -> IO (Either ResultError a) -run (Result reader) env = - runExceptT (runReaderT reader env) +run :: Result a -> Bool -> LibPQ.Result -> IO (Either ResultError a) +run (Result reader) idt result = + runExceptT (runReaderT reader (idt, result)) {-# INLINE noResult #-} noResult :: Result () diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 040ec3834c..0add158b80 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -45,7 +45,7 @@ single resultDec = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - mapLeft ResultError <$> Result.run resultDec (integerDatetimes, result) + mapLeft ResultError <$> Result.run resultDec integerDatetimes result Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) @@ -84,7 +84,7 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult (integerDatetimes, result) + ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult integerDatetimes result refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results From 3c36ebf3d7d82c82242a578df5b5556af086f7c4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 09:02:28 +0300 Subject: [PATCH 0990/1204] Progress --- hspec/Hasql/PipelineSpec.hs | 6 +- library/Hasql/Decoders/Result.hs | 1 - library/Hasql/Pipeline/Core.hs | 95 ++++++++++++++++++++------------ 3 files changed, 64 insertions(+), 38 deletions(-) diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 291e3d388e..082dfe4be1 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -9,14 +9,14 @@ spec :: Spec spec = do describe "Single-statement" do describe "Unprepared" do - it "Collects results and sends params" do + fit "Collects results and sends params" do result <- Dsl.runPipelineOnLocalDb $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} shouldBe result (Right [0 .. 2]) - describe "Prepared and sends params" do - fit "Collects results and sends params" do + describe "Prepared" do + it "Collects results and sends params" do result <- Dsl.runPipelineOnLocalDb $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 61a13a202c..c47e52860d 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -25,7 +25,6 @@ noResult = checkExecStatus $ \case LibPQ.CommandOk -> True LibPQ.TuplesOk -> True - LibPQ.PipelineSync -> True _ -> False {-# INLINE rowsAffected #-} diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 39328cceeb..ee7f04e7e5 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -5,6 +5,7 @@ module Hasql.Pipeline.Core where import Database.PostgreSQL.LibPQ qualified as Pq import Hasql.Connection.Core qualified as Connection import Hasql.Decoders.All qualified as Decoders +import Hasql.Decoders.Result qualified as Decoders.Result import Hasql.Decoders.Results qualified as Decoders.Results import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params @@ -31,15 +32,12 @@ run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes regi runCommandFailing pqConnection $ Pq.pipelineSync pqConnection putStrLn "recv" recvResult <- recv - case recvResult of - Left err -> pure (Left err) - Right res -> do - putStrLn "dropRemainders" - handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes - putStrLn "exitPipelineMode" - runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection - putStrLn "return" - pure (sendResult *> recvResult) + putStrLn "dropRemainders" + handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes + putStrLn "exitPipelineMode" + runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection + putStrLn "return" + pure recvResult where runCommandFailing :: Pq.Connection -> IO Bool -> IO () runCommandFailing pqConn runCmd = @@ -77,34 +75,63 @@ statement :: params -> Statement.Statement params result -> Pipeline result statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Result decoder) preparable) = Pipeline run where - run connection registry integerDatetimes = do - error "TODO" + run connection registry integerDatetimes = + if preparable + then runPrepared + else runUnprepared where - (oidList, valueAndFormatList) = - Encoders.Params.compilePreparedStatementData encoder integerDatetimes params - - resolvePreparedStatementKey :: IO (Either QueryError (ByteString, IO (Either QueryError ()))) - resolvePreparedStatementKey = - PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry + runPrepared = runExceptT do + (key, keyRecv) <- ExceptT resolvePreparedStatementKey + queryRecv <- ExceptT (sendQuery key) + pure (keyRecv *> queryRecv) where - localKey = - PreparedStatementRegistry.LocalKey sql oidList - onNewRemoteKey key = - do - sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) - if sent - then pure (True, Right (key, recv)) - else (False,) . Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + (oidList, valueAndFormatList) = + Encoders.Params.compilePreparedStatementData encoder integerDatetimes params + + resolvePreparedStatementKey = + PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry + where + localKey = + PreparedStatementRegistry.LocalKey sql oidList + onNewRemoteKey key = + do + sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) + if sent + then pure (True, Right (key, recv)) + else (False,) . Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + where + recv :: IO (Either QueryError ()) + recv = do + Pq.getResult connection >>= \case + Nothing -> + Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + Just result -> + mapLeft (commandToQueryError . ResultError) + <$> Decoders.Result.run Decoders.Result.noResult integerDatetimes result + onOldRemoteKey key = + pure (Right (key, pure (Right ()))) + + sendQuery key = + Pq.sendQueryPrepared connection key valueAndFormatList Pq.Binary >>= \case + False -> Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + True -> pure (Right recv) where - recv :: IO (Either QueryError ()) - recv = do - Pq.getResult connection >>= \case - Nothing -> - Left . commandToQueryError . ClientError <$> Pq.errorMessage connection - Just result -> - error "TODO" - onOldRemoteKey key = - pure (Right (key, pure (Right ()))) + recv = + fmap (mapLeft commandToQueryError) + $ (<*) + <$> Decoders.Results.run decoder connection integerDatetimes + <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes + + runUnprepared = + Pq.sendQueryParams connection sql (Encoders.Params.compileUnpreparedStatementData encoder integerDatetimes params) Pq.Binary >>= \case + False -> Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + True -> pure (Right recv) + where + recv = + fmap (mapLeft commandToQueryError) + $ (<*) + <$> Decoders.Results.run decoder connection integerDatetimes + <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes commandToQueryError = QueryError sql (Encoders.Params.renderReadable encoder params) From c2ab043911b0555d46de6c5ebd8ff50eefa0b827 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 12:12:15 +0300 Subject: [PATCH 0991/1204] Refactor status checking --- library/Hasql/Decoders/Result.hs | 37 ++++++++++---------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index c47e52860d..85cbe1be7e 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -22,18 +22,13 @@ run (Result reader) idt result = {-# INLINE noResult #-} noResult :: Result () noResult = - checkExecStatus $ \case - LibPQ.CommandOk -> True - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.CommandOk, LibPQ.TuplesOk] {-# INLINE rowsAffected #-} rowsAffected :: Result Int64 rowsAffected = do - checkExecStatus $ \case - LibPQ.CommandOk -> True - _ -> False + checkExecStatus [LibPQ.CommandOk] Result $ ReaderT $ \(_, result) -> @@ -55,18 +50,18 @@ rowsAffected = $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} -checkExecStatus :: (LibPQ.ExecStatus -> Bool) -> Result () -checkExecStatus predicate = +checkExecStatus :: [LibPQ.ExecStatus] -> Result () +checkExecStatus expectedList = {-# SCC "checkExecStatus" #-} do status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result - unless (predicate status) $ do + unless (elem status expectedList) $ do case status of LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError LibPQ.FatalError -> serverError LibPQ.EmptyQuery -> return () - _ -> unexpectedResult $ "Unexpected result status: " <> (fromString $ show status) + _ -> unexpectedResult $ "Unexpected result status: " <> fromString (show status) <> ". Expecting one of the following: " <> fromString (show expectedList) unexpectedResult :: Text -> Result a unexpectedResult = @@ -103,9 +98,7 @@ serverError = maybe :: Row.Row a -> Result (Maybe a) maybe rowDec = do - checkExecStatus $ \case - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.TuplesOk] Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do @@ -125,9 +118,7 @@ maybe rowDec = single :: Row.Row a -> Result a single rowDec = do - checkExecStatus $ \case - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.TuplesOk] Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do @@ -146,9 +137,7 @@ single rowDec = vector :: Row.Row a -> Result (Vector a) vector rowDec = do - checkExecStatus $ \case - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.TuplesOk] Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do @@ -175,9 +164,7 @@ foldl :: (a -> b -> a) -> a -> Row.Row b -> Result a foldl step init rowDec = {-# SCC "foldl" #-} do - checkExecStatus $ \case - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.TuplesOk] Result $ ReaderT $ \(integerDatetimes, result) -> @@ -207,9 +194,7 @@ foldr :: (b -> a -> a) -> a -> Row.Row b -> Result a foldr step init rowDec = {-# SCC "foldr" #-} do - checkExecStatus $ \case - LibPQ.TuplesOk -> True - _ -> False + checkExecStatus [LibPQ.TuplesOk] Result $ ReaderT $ \(integerDatetimes, result) -> ExceptT $ do From eac7e7ccb7ca5bf7ffd1daed61b2b5edebbeb6b6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 12:12:35 +0300 Subject: [PATCH 0992/1204] Progress --- hspec/Hasql/PipelineSpec.hs | 10 +++++----- library/Hasql/Decoders/Result.hs | 5 +++++ library/Hasql/Pipeline/Core.hs | 17 +++++++---------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 082dfe4be1..ea93c39a50 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -9,7 +9,7 @@ spec :: Spec spec = do describe "Single-statement" do describe "Unprepared" do - fit "Collects results and sends params" do + it "Collects results and sends params" do result <- Dsl.runPipelineOnLocalDb $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} @@ -23,20 +23,20 @@ spec = do shouldBe result (Right [0 .. 2]) describe "Normally" do - describe "On prepared statements" do + describe "On unprepared statements" do it "Collects results and sends params" do result <- Dsl.runPipelineOnLocalDb $ replicateM 2 - $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} shouldBe result (Right [[0 .. 2], [0 .. 2]]) - describe "On unprepared statements" do + describe "On prepared statements" do it "Collects results and sends params" do result <- Dsl.runPipelineOnLocalDb $ replicateM 2 - $ GenerateSeries.pipeline False GenerateSeries.Params {start = 0, end = 2} + $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} shouldBe result (Right [[0 .. 2], [0 .. 2]]) describe "When some part fails" do diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 85cbe1be7e..5c7de42943 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -19,6 +19,11 @@ run :: Result a -> Bool -> LibPQ.Result -> IO (Either ResultError a) run (Result reader) idt result = runExceptT (runReaderT reader (idt, result)) +{-# INLINE pipelineSync #-} +pipelineSync :: Result () +pipelineSync = + checkExecStatus [LibPQ.PipelineSync] + {-# INLINE noResult #-} noResult :: Result () noResult = diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index ee7f04e7e5..cf1ba6d1f5 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -32,8 +32,8 @@ run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes regi runCommandFailing pqConnection $ Pq.pipelineSync pqConnection putStrLn "recv" recvResult <- recv - putStrLn "dropRemainders" - handleEither =<< Decoders.Results.run Decoders.Results.dropRemainders pqConnection integerDatetimes + putStrLn "pipelineSync" + handleEither =<< Decoders.Results.run (Decoders.Results.single Decoders.Result.pipelineSync) pqConnection integerDatetimes putStrLn "exitPipelineMode" runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection putStrLn "return" @@ -100,14 +100,11 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re then pure (True, Right (key, recv)) else (False,) . Left . commandToQueryError . ClientError <$> Pq.errorMessage connection where - recv :: IO (Either QueryError ()) - recv = do - Pq.getResult connection >>= \case - Nothing -> - Left . commandToQueryError . ClientError <$> Pq.errorMessage connection - Just result -> - mapLeft (commandToQueryError . ResultError) - <$> Decoders.Result.run Decoders.Result.noResult integerDatetimes result + recv = + fmap (mapLeft commandToQueryError) + $ (<*) + <$> Decoders.Results.run (Decoders.Results.single Decoders.Result.noResult) connection integerDatetimes + <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes onOldRemoteKey key = pure (Right (key, pure (Right ()))) From e76af7c5593621c35c6b750a1a2f02f1ae4acbac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 12:26:28 +0300 Subject: [PATCH 0993/1204] Remove debugging --- library/Hasql/Pipeline/Core.hs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index cf1ba6d1f5..e551f57505 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -14,29 +14,20 @@ import Hasql.IO qualified as IO import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement -import System.IO (BufferMode (NoBuffering), hSetBuffering, stdout) run :: Pipeline a -> Connection.Connection -> IO (Either QueryError a) -run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes registry) = do - hSetBuffering stdout NoBuffering +run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes registry) = withMVar pqConnectionRef \pqConnection -> do - putStrLn "enterPipelineMode" runCommandFailing pqConnection $ Pq.enterPipelineMode pqConnection - putStrLn "send" sendResult <- send pqConnection registry integerDatetimes case sendResult of Left err -> do pure (Left err) Right recv -> do - putStrLn "pipelineSync" runCommandFailing pqConnection $ Pq.pipelineSync pqConnection - putStrLn "recv" recvResult <- recv - putStrLn "pipelineSync" handleEither =<< Decoders.Results.run (Decoders.Results.single Decoders.Result.pipelineSync) pqConnection integerDatetimes - putStrLn "exitPipelineMode" runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection - putStrLn "return" pure recvResult where runCommandFailing :: Pq.Connection -> IO Bool -> IO () From 3c831284bdf122c503bb2579913df8072080a5bb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 12:34:19 +0300 Subject: [PATCH 0994/1204] Repurpose QueryError as a more general SessionError --- library/Hasql/Errors.hs | 17 ++++++++-------- library/Hasql/Pipeline/Core.hs | 20 +++++++++---------- library/Hasql/Session/Core.hs | 10 +++++----- tasty/Main.hs | 4 ++-- .../Hasql/TestingUtils/TestingDsl.hs | 12 +++++------ 5 files changed, 32 insertions(+), 31 deletions(-) diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 8cc290d3c8..600871dfc8 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -13,15 +13,16 @@ module Hasql.Errors where import Data.ByteString.Char8 qualified as BC import Hasql.Prelude --- | --- An error during the execution of a query. --- Comes packed with the query template and a textual representation of the provided params. -data QueryError - = QueryError ByteString [Text] CommandError +-- | Error during execution of a session. +data SessionError + = -- | + -- An error during the execution of a query. + -- Comes packed with the query template and a textual representation of the provided params. + QuerySessionError ByteString [Text] CommandError deriving (Show, Eq, Typeable) -instance Exception QueryError where - displayException (QueryError query params commandError) = +instance Exception SessionError where + displayException (QuerySessionError query params commandError) = let queryContext :: Maybe (ByteString, Int) queryContext = case commandError of ClientError _ -> Nothing @@ -59,7 +60,7 @@ instance Exception QueryError where prettyQuery = case queryContext of Nothing -> query Just (message, pos) -> formatErrorContext query message pos - in "QueryError!\n" + in "QuerySessionError!\n" <> "\n Query:\n" <> BC.unpack prettyQuery <> "\n" diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index e551f57505..5af7371e92 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -15,7 +15,7 @@ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement -run :: Pipeline a -> Connection.Connection -> IO (Either QueryError a) +run :: Pipeline a -> Connection.Connection -> IO (Either SessionError a) run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes registry) = withMVar pqConnectionRef \pqConnection -> do runCommandFailing pqConnection $ Pq.enterPipelineMode pqConnection @@ -42,7 +42,7 @@ newtype Pipeline a ( Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> - IO (Either QueryError (IO (Either QueryError a))) + IO (Either SessionError (IO (Either SessionError a))) ) deriving (Functor) @@ -89,10 +89,10 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) if sent then pure (True, Right (key, recv)) - else (False,) . Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + else (False,) . Left . commandToSessionError . ClientError <$> Pq.errorMessage connection where recv = - fmap (mapLeft commandToQueryError) + fmap (mapLeft commandToSessionError) $ (<*) <$> Decoders.Results.run (Decoders.Results.single Decoders.Result.noResult) connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes @@ -101,25 +101,25 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sendQuery key = Pq.sendQueryPrepared connection key valueAndFormatList Pq.Binary >>= \case - False -> Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = - fmap (mapLeft commandToQueryError) + fmap (mapLeft commandToSessionError) $ (<*) <$> Decoders.Results.run decoder connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes runUnprepared = Pq.sendQueryParams connection sql (Encoders.Params.compileUnpreparedStatementData encoder integerDatetimes params) Pq.Binary >>= \case - False -> Left . commandToQueryError . ClientError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = - fmap (mapLeft commandToQueryError) + fmap (mapLeft commandToSessionError) $ (<*) <$> Decoders.Results.run decoder connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes - commandToQueryError = - QueryError sql (Encoders.Params.renderReadable encoder params) + commandToSessionError = + QuerySessionError sql (Encoders.Params.renderReadable encoder params) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 1b7176e774..62164d60d8 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -15,12 +15,12 @@ import Hasql.Statement qualified as Statement -- | -- A batch of actions to be executed in the context of a database connection. newtype Session a - = Session (ReaderT Connection.Connection (ExceptT QueryError IO) a) - deriving (Functor, Applicative, Monad, MonadError QueryError, MonadIO, MonadReader Connection.Connection) + = Session (ReaderT Connection.Connection (ExceptT SessionError IO) a) + deriving (Functor, Applicative, Monad, MonadError SessionError, MonadIO, MonadReader Connection.Connection) -- | -- Executes a bunch of commands on the provided connection. -run :: Session a -> Connection.Connection -> IO (Either QueryError a) +run :: Session a -> Connection.Connection -> IO (Either SessionError a) run (Session impl) connection = runExceptT $ runReaderT impl connection @@ -35,7 +35,7 @@ sql sql = $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (mapLeft (QueryError sql [])) + $ fmap (mapLeft (QuerySessionError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendNonparametricStatement pqConnection sql @@ -53,7 +53,7 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (mapLeft (QueryError template (Encoders.Params.renderReadable paramsEncoder input))) + $ fmap (mapLeft (QuerySessionError template (Encoders.Params.renderReadable paramsEncoder input))) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input diff --git a/tasty/Main.hs b/tasty/Main.hs index a2ffce5e8c..0ec1393250 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -56,7 +56,7 @@ tree = in do x <- Connection.with (Session.run session) assertBool (show x) $ case x of - Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True + Right (Left (Session.QuerySessionError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True _ -> False, testCase "IN simulation" $ let statement = @@ -218,7 +218,7 @@ tree = where resultTest = \case - Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False + Right (Left (Session.QuerySessionError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs index 59144aaede..a7a450f154 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -1,7 +1,7 @@ module Hasql.TestingUtils.TestingDsl ( Session.Session, - SessionError (..), - Session.QueryError (..), + Error (..), + Session.SessionError (..), Session.CommandError (..), Pipeline.Pipeline, Statement.Statement (..), @@ -19,12 +19,12 @@ import Hasql.Statement qualified as Statement import Hasql.TestingUtils.Constants qualified as Constants import Prelude -data SessionError +data Error = ConnectionError (Connection.ConnectionError) - | SessionError (Session.QueryError) + | SessionError (Session.SessionError) deriving (Show, Eq) -runSessionOnLocalDb :: Session.Session a -> IO (Either SessionError a) +runSessionOnLocalDb :: Session.Session a -> IO (Either Error a) runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where @@ -37,7 +37,7 @@ runSessionOnLocalDb session = release connection = lift $ Connection.release connection -runPipelineOnLocalDb :: Pipeline.Pipeline a -> IO (Either SessionError a) +runPipelineOnLocalDb :: Pipeline.Pipeline a -> IO (Either Error a) runPipelineOnLocalDb = runSessionOnLocalDb . Session.pipeline From d88476e2a951bf6a7fb3a9908d71345eba0581fa Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 21 Apr 2024 13:08:03 +0000 Subject: [PATCH 0995/1204] Format --- library/Hasql/PreparedStatementRegistry.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index 9ae7503435..4aad8b2454 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -8,8 +8,8 @@ where import ByteString.StrictBuilder qualified as B import Data.HashTable.IO qualified as A +import Database.PostgreSQL.LibPQ qualified as Pq import Hasql.Prelude hiding (lookup) -import qualified Database.PostgreSQL.LibPQ as Pq data PreparedStatementRegistry = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) From 5e8147b737e4586110764359b2f7d44584fabd7e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 21 Apr 2024 16:15:51 +0300 Subject: [PATCH 0996/1204] Revise errors --- hasql.cabal | 1 + library/Hasql/Decoders/All.hs | 2 +- library/Hasql/Decoders/Result.hs | 26 ++- library/Hasql/Decoders/Results.hs | 16 +- library/Hasql/Decoders/Row.hs | 16 +- library/Hasql/Errors.hs | 187 +++++++++--------- library/Hasql/IO.hs | 16 +- library/Hasql/Pipeline/Core.hs | 6 +- library/Hasql/Statement.hs | 2 +- tasty/Main.hs | 2 +- .../Hasql/TestingUtils/TestingDsl.hs | 2 +- 11 files changed, 143 insertions(+), 133 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 21a412a82e..9621fff80d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -63,6 +63,7 @@ common base RoleAnnotations ScopedTypeVariables StandaloneDeriving + StrictData TemplateHaskell TupleSections TypeFamilies diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index 0281e1faea..64d327d587 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -38,7 +38,7 @@ rowsAffected = Result (Results.single Result.rowsAffected) -- | -- Exactly one row. --- Will raise the 'Errors.UnexpectedAmountOfRows' error if it's any other. +-- Will raise the 'Errors.UnexpectedAmountOfRowsResultError' error if it's any other. {-# INLINEABLE singleRow #-} singleRow :: Row a -> Result a singleRow (Row row) = Result (Results.single (Result.single row)) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 5c7de42943..54e395e1cd 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -45,13 +45,13 @@ rowsAffected = notNothing >=> notEmpty >=> decimal where notNothing = - Prelude.maybe (Left (UnexpectedResult "No bytes")) Right + Prelude.maybe (Left (UnexpectedResultError "No bytes")) Right notEmpty bytes = if ByteString.null bytes - then Left (UnexpectedResult "Empty bytes") + then Left (UnexpectedResultError "Empty bytes") else Right bytes decimal bytes = - mapLeft (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) + mapLeft (\m -> UnexpectedResultError ("Decimal parsing failure: " <> fromString m)) $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} @@ -70,7 +70,7 @@ checkExecStatus expectedList = unexpectedResult :: Text -> Result a unexpectedResult = - Result . lift . ExceptT . pure . Left . UnexpectedResult + Result . lift . ExceptT . pure . Left . UnexpectedResultError {-# INLINE serverError #-} serverError :: Result () @@ -90,7 +90,7 @@ serverError = LibPQ.resultErrorField result LibPQ.DiagMessageHint position <- parsePosition <$> LibPQ.resultErrorField result LibPQ.DiagStatementPosition - pure $ Left $ ServerError code message detail hint position + pure $ Left $ ServerResultError code message detail hint position where parsePosition = \case Nothing -> Nothing @@ -112,9 +112,8 @@ maybe rowDec = 0 -> return (Right Nothing) 1 -> do maxCols <- LibPQ.nfields result - let fromRowError (col, err) = RowError 0 col err - fmap (fmap Just . mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + fmap (fmap Just . mapLeft (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -131,9 +130,8 @@ single rowDec = case maxRows of 1 -> do maxCols <- LibPQ.nfields result - let fromRowError (col, err) = RowError 0 col err - fmap (mapLeft fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) + fmap (mapLeft (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -153,7 +151,7 @@ vector rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) Right !x -> MutableVector.unsafeWrite mvector rowIndex x readIORef failureRef >>= \case Nothing -> Right <$> Vector.unsafeFreeze mvector @@ -183,7 +181,7 @@ foldl step init rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) Right !x -> modifyIORef' accRef (\acc -> step acc x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef @@ -210,7 +208,7 @@ foldr step init rowDec = forMToZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) Right !x -> modifyIORef accRef (\acc -> step x acc) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 0add158b80..437c509dd4 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -17,11 +17,11 @@ import Hasql.Prelude hiding (many, maybe) import Hasql.Prelude qualified as Prelude newtype Results a - = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) + = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT QueryError IO) a) deriving (Functor, Applicative, Monad) {-# INLINE run #-} -run :: Results a -> LibPQ.Connection -> Bool -> IO (Either CommandError a) +run :: Results a -> LibPQ.Connection -> Bool -> IO (Either QueryError a) run (Results stack) conn idt = runExceptT (runReaderT stack (idt, conn)) @@ -32,7 +32,7 @@ clientError = $ ReaderT $ \(_, connection) -> ExceptT - $ fmap (Left . ClientError) (LibPQ.errorMessage connection) + $ fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) -- | -- Parse a single result. @@ -45,9 +45,9 @@ single resultDec = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - mapLeft ResultError <$> Result.run resultDec integerDatetimes result + mapLeft ResultQueryError <$> Result.run resultDec integerDatetimes result Nothing -> - fmap (Left . ClientError) (LibPQ.errorMessage connection) + fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. @@ -60,7 +60,7 @@ getResult = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> pure (Right result) - Nothing -> fmap (Left . ClientError) (LibPQ.errorMessage connection) + Nothing -> fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. @@ -84,11 +84,11 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (mapLeft ResultError) $ Result.run Result.noResult integerDatetimes result + ExceptT $ fmap (mapLeft ResultQueryError) $ Result.run Result.noResult integerDatetimes result refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results $ ReaderT $ \env -> ExceptT $ do resultEither <- runExceptT $ runReaderT stack env - return $ resultEither >>= mapLeft (ResultError . UnexpectedResult) . refiner + return $ resultEither >>= mapLeft (ResultQueryError . UnexpectedResultError) . refiner diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs index 69f291bd9a..cf8d71dfc5 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -7,11 +7,11 @@ import Hasql.Prelude hiding (error) import PostgreSQL.Binary.Decoding qualified as A newtype Row a - = Row (ReaderT Env (ExceptT RowError IO) a) + = Row (ReaderT Env (ExceptT ColumnError IO) a) deriving (Functor, Applicative, Monad) instance MonadFail Row where - fail = error . ValueError . fromString + fail = error . ValueColumnError . fromString data Env = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) @@ -19,7 +19,7 @@ data Env -- * Functions {-# INLINE run #-} -run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either (Int, RowError) a) +run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either RowError a) run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 @@ -27,11 +27,11 @@ run (Row impl) (result, row, columnsAmount, integerDatetimes) = Left e -> do LibPQ.Col col <- readIORef columnRef -- -1 because succ is applied before the error is returned - pure $ Left (fromIntegral col - 1, e) + pure $ Left (ColumnRowError (fromIntegral col - 1) e) Right x -> pure $ Right x {-# INLINE error #-} -error :: RowError -> Row a +error :: ColumnError -> Row a error x = Row (ReaderT (const (ExceptT (pure (Left x))))) @@ -55,9 +55,9 @@ value valueDec = Right Nothing Just value -> fmap Just - $ mapLeft ValueError + $ mapLeft ValueColumnError $ {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value - else pure (Left EndOfInput) + else pure (Left EndOfInputColumnError) -- | -- Next value, decoded using the provided value decoder. @@ -65,4 +65,4 @@ value valueDec = nonNullValue :: Value.Value a -> Row a nonNullValue valueDec = {-# SCC "nonNullValue" #-} - value valueDec >>= maybe (error UnexpectedNull) pure + value valueDec >>= maybe (error UnexpectedNullColumnError) pure diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 600871dfc8..05c428aca5 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -1,13 +1,3 @@ --- | --- An API for retrieval of multiple results. --- Can be used to handle: --- --- * A single result, --- --- * Individual results of a multi-statement query --- with the help of "Applicative" and "Monad", --- --- * Row-by-row fetching. module Hasql.Errors where import Data.ByteString.Char8 qualified as BC @@ -18,90 +8,97 @@ data SessionError = -- | -- An error during the execution of a query. -- Comes packed with the query template and a textual representation of the provided params. - QuerySessionError ByteString [Text] CommandError + QuerySessionError + -- | SQL template. + ByteString + -- | Parameters rendered as human-readable SQL literals. + [Text] + -- | Error details + QueryError deriving (Show, Eq, Typeable) instance Exception SessionError where - displayException (QuerySessionError query params commandError) = - let queryContext :: Maybe (ByteString, Int) - queryContext = case commandError of - ClientError _ -> Nothing - ResultError resultError -> case resultError of - ServerError _ message _ _ (Just position) -> Just (message, position) - _ -> Nothing + displayException = \case + QuerySessionError query params commandError -> + let queryContext :: Maybe (ByteString, Int) + queryContext = case commandError of + ClientQueryError _ -> Nothing + ResultQueryError resultError -> case resultError of + ServerResultError _ message _ _ (Just position) -> Just (message, position) + _ -> Nothing - -- find the line number and position of the error - findLineAndPos :: ByteString -> Int -> (Int, Int) - findLineAndPos byteString errorPos = - let (_, line, pos) = - BC.foldl' - ( \(total, line, pos) c -> - case total + 1 of - 0 -> (total, line, pos) - cursor - | cursor == errorPos -> (-1, line, pos + 1) - | c == '\n' -> (total + 1, line + 1, 0) - | otherwise -> (total + 1, line, pos + 1) - ) - (0, 1, 0) - byteString - in (line, pos) + -- find the line number and position of the error + findLineAndPos :: ByteString -> Int -> (Int, Int) + findLineAndPos byteString errorPos = + let (_, line, pos) = + BC.foldl' + ( \(total, line, pos) c -> + case total + 1 of + 0 -> (total, line, pos) + cursor + | cursor == errorPos -> (-1, line, pos + 1) + | c == '\n' -> (total + 1, line + 1, 0) + | otherwise -> (total + 1, line, pos + 1) + ) + (0, 1, 0) + byteString + in (line, pos) - formatErrorContext :: ByteString -> ByteString -> Int -> ByteString - formatErrorContext query message errorPos = - let lines = BC.lines query - (lineNum, linePos) = findLineAndPos query errorPos - in BC.unlines (take lineNum lines) - <> BC.replicate (linePos - 1) ' ' - <> "^ " - <> message + formatErrorContext :: ByteString -> ByteString -> Int -> ByteString + formatErrorContext query message errorPos = + let lines = BC.lines query + (lineNum, linePos) = findLineAndPos query errorPos + in BC.unlines (take lineNum lines) + <> BC.replicate (linePos - 1) ' ' + <> "^ " + <> message - prettyQuery :: ByteString - prettyQuery = case queryContext of - Nothing -> query - Just (message, pos) -> formatErrorContext query message pos - in "QuerySessionError!\n" - <> "\n Query:\n" - <> BC.unpack prettyQuery - <> "\n" - <> "\n Params: " - <> show params - <> "\n Error: " - <> case commandError of - ClientError (Just message) -> "Client error: " <> show message - ClientError Nothing -> "Unknown client error" - ResultError resultError -> case resultError of - ServerError code message details hint position -> - "Server error " - <> BC.unpack code - <> ": " - <> BC.unpack message - <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details - <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint - UnexpectedResult message -> "Unexpected result: " <> show message - RowError row column rowError -> - "Row error: " <> show row <> ":" <> show column <> " " <> show rowError - UnexpectedAmountOfRows amount -> - "Unexpected amount of rows: " <> show amount + prettyQuery :: ByteString + prettyQuery = case queryContext of + Nothing -> query + Just (message, pos) -> formatErrorContext query message pos + in "QuerySessionError!\n" + <> "\n Query:\n" + <> BC.unpack prettyQuery + <> "\n" + <> "\n Params: " + <> show params + <> "\n Error: " + <> case commandError of + ClientQueryError (Just message) -> "Client error: " <> show message + ClientQueryError Nothing -> "Client error without details" + ResultQueryError resultError -> case resultError of + ServerResultError code message details hint position -> + "Server error " + <> BC.unpack code + <> ": " + <> BC.unpack message + <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details + <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint + UnexpectedResultError message -> "Unexpected result: " <> show message + RowResultError row (ColumnRowError column rowError) -> + "Row error: " <> show row <> ":" <> show column <> " " <> show rowError + UnexpectedAmountOfRowsResultError amount -> + "Unexpected amount of rows: " <> show amount -- | -- An error of some command in the session. -data CommandError +data QueryError = -- | -- An error on the client-side, - -- with a message generated by the \"libpq\" library. + -- with a message generated by the \"libpq\" driver. -- Usually indicates problems with connection. - ClientError (Maybe ByteString) + ClientQueryError (Maybe ByteString) | -- | -- Some error with a command result. - ResultError ResultError + ResultQueryError ResultError deriving (Show, Eq) -- | -- An error with a command result. data ResultError = -- | An error reported by the DB. - ServerError + ServerResultError -- | __Code__. The SQLSTATE code for the error. It's recommended to use -- to work with those. @@ -120,29 +117,43 @@ data ResultError -- | __Position__. Error cursor position as an index into the original -- statement string. Positions are measured in characters not bytes. (Maybe Int) - | -- | - -- The database returned an unexpected result. + | -- | The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. - UnexpectedResult Text - | -- | - -- An error of the row reader, preceded by the indexes of the row and column. - RowError Int Int RowError - | -- | - -- An unexpected amount of rows. - UnexpectedAmountOfRows Int + UnexpectedResultError + -- | Details. + Text + | -- | Error decoding a specific row. + RowResultError + -- | Row index. + Int + -- | Details. + RowError + | -- | Unexpected amount of rows. + UnexpectedAmountOfRowsResultError + -- | Actual amount of rows in the result. + Int deriving (Show, Eq) --- | --- An error during the decoding of a specific row. data RowError + = -- | Error at a specific column. + ColumnRowError + -- | Column index. + Int + -- | Error details. + ColumnError + deriving (Show, Eq) + +-- | +-- Error during the decoding of a specific column. +data ColumnError = -- | -- Appears on the attempt to parse more columns than there are in the result. - EndOfInput + EndOfInputColumnError | -- | -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNull + UnexpectedNullColumnError | -- | -- Appears when a wrong value parser is used. -- Comes with the error details. - ValueError Text + ValueColumnError Text deriving (Show, Eq) diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 9facdb17f6..dbd3e887cb 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -56,7 +56,7 @@ initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either CommandError a) +getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either QueryError a) getResults connection integerDatetimes decoder = {-# SCC "getResults" #-} (<*) <$> get <*> dropRemainders @@ -72,7 +72,7 @@ getPreparedStatementKey :: PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> - IO (Either CommandError ByteString) + IO (Either QueryError ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry @@ -96,10 +96,10 @@ getPreparedStatementKey connection registry template oidList = pure (pure key) {-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either CommandError ()) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either QueryError ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ClientError) $ LibPQ.errorMessage connection + False -> fmap (Left . ClientQueryError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricStatement #-} @@ -110,7 +110,7 @@ sendPreparedParametricStatement :: ByteString -> ParamsEncoders.Params a -> a -> - IO (Either CommandError ()) + IO (Either QueryError ()) sendPreparedParametricStatement connection registry integerDatetimes template encoder input = runExceptT $ do key <- ExceptT $ getPreparedStatementKey connection registry template oidList @@ -126,7 +126,7 @@ sendUnpreparedParametricStatement :: ByteString -> ParamsEncoders.Params a -> a -> - IO (Either CommandError ()) + IO (Either QueryError ()) sendUnpreparedParametricStatement connection integerDatetimes template encoder input = checkedSend connection $ LibPQ.sendQueryParams @@ -144,7 +144,7 @@ sendParametricStatement :: ParamsEncoders.Params a -> Bool -> a -> - IO (Either CommandError ()) + IO (Either QueryError ()) sendParametricStatement connection integerDatetimes registry template encoder prepared params = {-# SCC "sendParametricStatement" #-} if prepared @@ -152,6 +152,6 @@ sendParametricStatement connection integerDatetimes registry template encoder pr else sendUnpreparedParametricStatement connection integerDatetimes template encoder params {-# INLINE sendNonparametricStatement #-} -sendNonparametricStatement :: LibPQ.Connection -> ByteString -> IO (Either CommandError ()) +sendNonparametricStatement :: LibPQ.Connection -> ByteString -> IO (Either QueryError ()) sendNonparametricStatement connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 5af7371e92..9b4a388ca8 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -89,7 +89,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) if sent then pure (True, Right (key, recv)) - else (False,) . Left . commandToSessionError . ClientError <$> Pq.errorMessage connection + else (False,) . Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection where recv = fmap (mapLeft commandToSessionError) @@ -101,7 +101,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sendQuery key = Pq.sendQueryPrepared connection key valueAndFormatList Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = @@ -112,7 +112,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re runUnprepared = Pq.sendQueryParams connection sql (Encoders.Params.compileUnpreparedStatementData encoder integerDatetimes params) Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 5bc0aaf092..1b3a7e0b03 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -75,7 +75,7 @@ instance Profunctor Statement where -- | -- Refine the result of a statement, --- causing the running session to fail with the `UnexpectedResult` error in case of a refinement failure. +-- causing the running session to fail with the `UnexpectedResultError` error in case of a refinement failure. -- -- This function is especially useful for refining the results of statements produced with -- . diff --git a/tasty/Main.hs b/tasty/Main.hs index 0ec1393250..cfb338f312 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -218,7 +218,7 @@ tree = where resultTest = \case - Right (Left (Session.QuerySessionError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False + Right (Left (Session.QuerySessionError _ _ (Session.ResultQueryError (Session.ServerResultError "26000" _ _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs index a7a450f154..82e166c6d2 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -2,7 +2,7 @@ module Hasql.TestingUtils.TestingDsl ( Session.Session, Error (..), Session.SessionError (..), - Session.CommandError (..), + Session.QueryError (..), Pipeline.Pipeline, Statement.Statement (..), runSessionOnLocalDb, From 8f5d6f7e819e20040fd1f1436f6c01633e6b1b5a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 07:02:26 +0300 Subject: [PATCH 0997/1204] Implement pipeline errors --- hasql.cabal | 2 +- library/Hasql/Decoders/Results.hs | 16 ++--- library/Hasql/Errors.hs | 56 +++++++++------- library/Hasql/IO.hs | 16 ++--- library/Hasql/Pipeline/Core.hs | 67 +++++++++++-------- library/Hasql/Prelude.hs | 2 +- library/Hasql/Session/Core.hs | 4 +- tasty/Main.hs | 2 +- .../Hasql/TestingUtils/TestingDsl.hs | 2 +- 9 files changed, 95 insertions(+), 72 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 9621fff80d..f638445ba2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -138,7 +138,7 @@ library text >=1 && <3, text-builder >=0.6.7 && <0.7, time >=1.9 && <2, - transformers >=0.3 && <0.7, + transformers >=0.6 && <0.7, uuid >=1.3 && <2, vector >=0.10 && <0.14, diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 437c509dd4..87c92d0d68 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -17,11 +17,11 @@ import Hasql.Prelude hiding (many, maybe) import Hasql.Prelude qualified as Prelude newtype Results a - = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT QueryError IO) a) + = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) deriving (Functor, Applicative, Monad) {-# INLINE run #-} -run :: Results a -> LibPQ.Connection -> Bool -> IO (Either QueryError a) +run :: Results a -> LibPQ.Connection -> Bool -> IO (Either CommandError a) run (Results stack) conn idt = runExceptT (runReaderT stack (idt, conn)) @@ -32,7 +32,7 @@ clientError = $ ReaderT $ \(_, connection) -> ExceptT - $ fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) + $ fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) -- | -- Parse a single result. @@ -45,9 +45,9 @@ single resultDec = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - mapLeft ResultQueryError <$> Result.run resultDec integerDatetimes result + mapLeft ResultCommandError <$> Result.run resultDec integerDatetimes result Nothing -> - fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) + fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. @@ -60,7 +60,7 @@ getResult = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> pure (Right result) - Nothing -> fmap (Left . ClientQueryError) (LibPQ.errorMessage connection) + Nothing -> fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) -- | -- Fetch a single result. @@ -84,11 +84,11 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (mapLeft ResultQueryError) $ Result.run Result.noResult integerDatetimes result + ExceptT $ fmap (mapLeft ResultCommandError) $ Result.run Result.noResult integerDatetimes result refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results $ ReaderT $ \env -> ExceptT $ do resultEither <- runExceptT $ runReaderT stack env - return $ resultEither >>= mapLeft (ResultQueryError . UnexpectedResultError) . refiner + return $ resultEither >>= mapLeft (ResultCommandError . UnexpectedResultError) . refiner diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 05c428aca5..e4b72dfa1a 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -13,8 +13,12 @@ data SessionError ByteString -- | Parameters rendered as human-readable SQL literals. [Text] - -- | Error details - QueryError + -- | Error details. + CommandError + | -- | Error during the execution of a pipeline. + PipelineSessionError + -- | Error details. + CommandError deriving (Show, Eq, Typeable) instance Exception SessionError where @@ -22,8 +26,8 @@ instance Exception SessionError where QuerySessionError query params commandError -> let queryContext :: Maybe (ByteString, Int) queryContext = case commandError of - ClientQueryError _ -> Nothing - ResultQueryError resultError -> case resultError of + ClientCommandError _ -> Nothing + ResultCommandError resultError -> case resultError of ServerResultError _ message _ _ (Just position) -> Just (message, position) _ -> Nothing @@ -63,35 +67,39 @@ instance Exception SessionError where <> "\n" <> "\n Params: " <> show params - <> "\n Error: " - <> case commandError of - ClientQueryError (Just message) -> "Client error: " <> show message - ClientQueryError Nothing -> "Client error without details" - ResultQueryError resultError -> case resultError of - ServerResultError code message details hint position -> - "Server error " - <> BC.unpack code - <> ": " - <> BC.unpack message - <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details - <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint - UnexpectedResultError message -> "Unexpected result: " <> show message - RowResultError row (ColumnRowError column rowError) -> - "Row error: " <> show row <> ":" <> show column <> " " <> show rowError - UnexpectedAmountOfRowsResultError amount -> - "Unexpected amount of rows: " <> show amount + <> "\n Reason: " + <> renderCommandErrorAsReason commandError + PipelineSessionError commandError -> + "PipelineSessionError!\n Reason: " <> renderCommandErrorAsReason commandError + where + renderCommandErrorAsReason = \case + ClientCommandError (Just message) -> "Client error: " <> show message + ClientCommandError Nothing -> "Client error without details" + ResultCommandError resultError -> case resultError of + ServerResultError code message details hint position -> + "Server error " + <> BC.unpack code + <> ": " + <> BC.unpack message + <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details + <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint + UnexpectedResultError message -> "Unexpected result: " <> show message + RowResultError row (ColumnRowError column rowError) -> + "Row error: " <> show row <> ":" <> show column <> " " <> show rowError + UnexpectedAmountOfRowsResultError amount -> + "Unexpected amount of rows: " <> show amount -- | -- An error of some command in the session. -data QueryError +data CommandError = -- | -- An error on the client-side, -- with a message generated by the \"libpq\" driver. -- Usually indicates problems with connection. - ClientQueryError (Maybe ByteString) + ClientCommandError (Maybe ByteString) | -- | -- Some error with a command result. - ResultQueryError ResultError + ResultCommandError ResultError deriving (Show, Eq) -- | diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index dbd3e887cb..05edf74b2f 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -56,7 +56,7 @@ initConnection c = void $ LibPQ.exec c (Commands.asBytes (Commands.setEncodersToUTF8 <> Commands.setMinClientMessagesToWarning)) {-# INLINE getResults #-} -getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either QueryError a) +getResults :: LibPQ.Connection -> Bool -> ResultsDecoders.Results a -> IO (Either CommandError a) getResults connection integerDatetimes decoder = {-# SCC "getResults" #-} (<*) <$> get <*> dropRemainders @@ -72,7 +72,7 @@ getPreparedStatementKey :: PreparedStatementRegistry.PreparedStatementRegistry -> ByteString -> [LibPQ.Oid] -> - IO (Either QueryError ByteString) + IO (Either CommandError ByteString) getPreparedStatementKey connection registry template oidList = {-# SCC "getPreparedStatementKey" #-} PreparedStatementRegistry.update localKey onNewRemoteKey onOldRemoteKey registry @@ -96,10 +96,10 @@ getPreparedStatementKey connection registry template oidList = pure (pure key) {-# INLINE checkedSend #-} -checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either QueryError ()) +checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either CommandError ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ClientQueryError) $ LibPQ.errorMessage connection + False -> fmap (Left . ClientCommandError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricStatement #-} @@ -110,7 +110,7 @@ sendPreparedParametricStatement :: ByteString -> ParamsEncoders.Params a -> a -> - IO (Either QueryError ()) + IO (Either CommandError ()) sendPreparedParametricStatement connection registry integerDatetimes template encoder input = runExceptT $ do key <- ExceptT $ getPreparedStatementKey connection registry template oidList @@ -126,7 +126,7 @@ sendUnpreparedParametricStatement :: ByteString -> ParamsEncoders.Params a -> a -> - IO (Either QueryError ()) + IO (Either CommandError ()) sendUnpreparedParametricStatement connection integerDatetimes template encoder input = checkedSend connection $ LibPQ.sendQueryParams @@ -144,7 +144,7 @@ sendParametricStatement :: ParamsEncoders.Params a -> Bool -> a -> - IO (Either QueryError ()) + IO (Either CommandError ()) sendParametricStatement connection integerDatetimes registry template encoder prepared params = {-# SCC "sendParametricStatement" #-} if prepared @@ -152,6 +152,6 @@ sendParametricStatement connection integerDatetimes registry template encoder pr else sendUnpreparedParametricStatement connection integerDatetimes template encoder params {-# INLINE sendNonparametricStatement #-} -sendNonparametricStatement :: LibPQ.Connection -> ByteString -> IO (Either QueryError ()) +sendNonparametricStatement :: LibPQ.Connection -> ByteString -> IO (Either CommandError ()) sendNonparametricStatement connection sql = checkedSend connection $ LibPQ.sendQuery connection sql diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 9b4a388ca8..e73d60a759 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -1,41 +1,54 @@ -{-# OPTIONS_GHC -Wno-unused-imports -Wno-unused-binds #-} - module Hasql.Pipeline.Core where import Database.PostgreSQL.LibPQ qualified as Pq -import Hasql.Connection.Core qualified as Connection import Hasql.Decoders.All qualified as Decoders import Hasql.Decoders.Result qualified as Decoders.Result import Hasql.Decoders.Results qualified as Decoders.Results import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors -import Hasql.IO qualified as IO import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement -run :: Pipeline a -> Connection.Connection -> IO (Either SessionError a) -run (Pipeline send) (Connection.Connection pqConnectionRef integerDatetimes registry) = - withMVar pqConnectionRef \pqConnection -> do - runCommandFailing pqConnection $ Pq.enterPipelineMode pqConnection - sendResult <- send pqConnection registry integerDatetimes - case sendResult of - Left err -> do - pure (Left err) - Right recv -> do - runCommandFailing pqConnection $ Pq.pipelineSync pqConnection - recvResult <- recv - handleEither =<< Decoders.Results.run (Decoders.Results.single Decoders.Result.pipelineSync) pqConnection integerDatetimes - runCommandFailing pqConnection $ Pq.exitPipelineMode pqConnection - pure recvResult +run :: forall a. Pipeline a -> Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> IO (Either SessionError a) +run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do + runExceptT do + enterPipelineMode + flip finallyE exitPipelineMode do + recvQueries <- sendQueries + pipelineSync + queriesResult <- recvQueries + recvPipelineSync + pure queriesResult where - runCommandFailing :: Pq.Connection -> IO Bool -> IO () - runCommandFailing pqConn runCmd = - IO.checkedSend pqConn runCmd >>= handleEither - handleEither = \case - Right a -> pure a - Left err -> fail $ show err + enterPipelineMode :: ExceptT SessionError IO () + enterPipelineMode = + runCommand $ Pq.enterPipelineMode connection + + exitPipelineMode :: ExceptT SessionError IO () + exitPipelineMode = + runCommand $ Pq.exitPipelineMode connection + + sendQueries :: ExceptT SessionError IO (ExceptT SessionError IO a) + sendQueries = + fmap ExceptT $ ExceptT $ sendQueriesInIO connection registry integerDatetimes + + pipelineSync :: ExceptT SessionError IO () + pipelineSync = + runCommand $ Pq.pipelineSync connection + + recvPipelineSync :: ExceptT SessionError IO () + recvPipelineSync = + ExceptT + $ fmap (mapLeft PipelineSessionError) + $ Decoders.Results.run (Decoders.Results.single Decoders.Result.pipelineSync) connection integerDatetimes + + runCommand :: IO Bool -> ExceptT SessionError IO () + runCommand action = + lift action >>= \case + True -> pure () + False -> ExceptT (Left . PipelineSessionError . ClientCommandError <$> Pq.errorMessage connection) newtype Pipeline a = Pipeline @@ -89,7 +102,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) if sent then pure (True, Right (key, recv)) - else (False,) . Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection + else (False,) . Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection where recv = fmap (mapLeft commandToSessionError) @@ -101,7 +114,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sendQuery key = Pq.sendQueryPrepared connection key valueAndFormatList Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = @@ -112,7 +125,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re runUnprepared = Pq.sendQueryParams connection sql (Encoders.Params.compileUnpreparedStatementData encoder integerDatetimes params) Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientQueryError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index c6d2403d26..88e6911e6f 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -25,7 +25,7 @@ import Control.Monad.Reader.Class as Exports (MonadReader (..)) import Control.Monad.ST as Exports import Control.Monad.Trans.Class as Exports import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) -import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, finallyE, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) import Control.Monad.Trans.Maybe as Exports import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 62164d60d8..23c3db035d 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -62,4 +62,6 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D pipeline :: Pipeline.Pipeline result -> Session result pipeline pipeline = - Session $ ReaderT $ ExceptT . Pipeline.run pipeline + Session $ ReaderT \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + ExceptT $ withMVar pqConnectionRef \pqConnection -> + Pipeline.run pipeline pqConnection registry integerDatetimes diff --git a/tasty/Main.hs b/tasty/Main.hs index cfb338f312..71149e2cff 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -218,7 +218,7 @@ tree = where resultTest = \case - Right (Left (Session.QuerySessionError _ _ (Session.ResultQueryError (Session.ServerResultError "26000" _ _ _ _)))) -> False + Right (Left (Session.QuerySessionError _ _ (Session.ResultCommandError (Session.ServerResultError "26000" _ _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-utils/Hasql/TestingUtils/TestingDsl.hs index 82e166c6d2..a7a450f154 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-utils/Hasql/TestingUtils/TestingDsl.hs @@ -2,7 +2,7 @@ module Hasql.TestingUtils.TestingDsl ( Session.Session, Error (..), Session.SessionError (..), - Session.QueryError (..), + Session.CommandError (..), Pipeline.Pipeline, Statement.Statement (..), runSessionOnLocalDb, From b4ed0eab56584bb3ed122b40a9ef9ecebcb2d40a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 07:32:56 +0300 Subject: [PATCH 0998/1204] Rename testing-utils to testing-kit --- hasql.cabal | 14 +++++++------- hspec/Hasql/PipelineSpec.hs | 4 ++-- tasty/Main.hs | 2 +- .../Hasql/TestingKit}/Constants.hs | 2 +- .../Hasql/TestingKit}/Statements/GenerateSeries.hs | 2 +- .../Hasql/TestingKit}/TestingDsl.hs | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) rename {testing-utils/Hasql/TestingUtils => testing-kit/Hasql/TestingKit}/Constants.hs (87%) rename {testing-utils/Hasql/TestingUtils => testing-kit/Hasql/TestingKit}/Statements/GenerateSeries.hs (94%) rename {testing-utils/Hasql/TestingUtils => testing-kit/Hasql/TestingKit}/TestingDsl.hs (93%) diff --git a/hasql.cabal b/hasql.cabal index f638445ba2..dc0f775197 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -142,13 +142,13 @@ library uuid >=1.3 && <2, vector >=0.10 && <0.14, -library testing-utils +library testing-kit import: base - hs-source-dirs: testing-utils + hs-source-dirs: testing-kit exposed-modules: - Hasql.TestingUtils.Constants - Hasql.TestingUtils.Statements.GenerateSeries - Hasql.TestingUtils.TestingDsl + Hasql.TestingKit.Constants + Hasql.TestingKit.Statements.GenerateSeries + Hasql.TestingKit.TestingDsl build-depends: hasql, @@ -167,7 +167,7 @@ test-suite tasty build-depends: contravariant-extras >=0.3.5.2 && <0.4, hasql, - hasql:testing-utils, + hasql:testing-kit, quickcheck-instances >=0.3.11 && <0.4, rerebase <2, tasty >=0.12 && <2, @@ -218,6 +218,6 @@ test-suite hspec build-tool-depends: hspec-discover:hspec-discover build-depends: - hasql:testing-utils, + hasql:testing-kit, hspec, rerebase >=1 && <2, diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index ea93c39a50..56d172ae36 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -1,7 +1,7 @@ module Hasql.PipelineSpec (spec) where -import Hasql.TestingUtils.Statements.GenerateSeries qualified as GenerateSeries -import Hasql.TestingUtils.TestingDsl qualified as Dsl +import Hasql.TestingKit.Statements.GenerateSeries qualified as GenerateSeries +import Hasql.TestingKit.TestingDsl qualified as Dsl import Test.Hspec import Prelude diff --git a/tasty/Main.hs b/tasty/Main.hs index 71149e2cff..f6eee91806 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -5,7 +5,7 @@ import Hasql.Decoders qualified as Decoders import Hasql.Encoders qualified as Encoders import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Hasql.TestingUtils.TestingDsl qualified as Session +import Hasql.TestingKit.TestingDsl qualified as Session import Main.Connection qualified as Connection import Main.Prelude hiding (assert) import Main.Statements qualified as Statements diff --git a/testing-utils/Hasql/TestingUtils/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs similarity index 87% rename from testing-utils/Hasql/TestingUtils/Constants.hs rename to testing-kit/Hasql/TestingKit/Constants.hs index be657f7fd1..584550e9a1 100644 --- a/testing-utils/Hasql/TestingUtils/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -1,4 +1,4 @@ -module Hasql.TestingUtils.Constants where +module Hasql.TestingKit.Constants where import Hasql.Connection qualified as Connection diff --git a/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs similarity index 94% rename from testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs rename to testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs index 67937e2960..4cf98b6c8d 100644 --- a/testing-utils/Hasql/TestingUtils/Statements/GenerateSeries.hs +++ b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs @@ -1,4 +1,4 @@ -module Hasql.TestingUtils.Statements.GenerateSeries where +module Hasql.TestingKit.Statements.GenerateSeries where import Hasql.Decoders qualified as Decoders import Hasql.Encoders qualified as Encoders diff --git a/testing-utils/Hasql/TestingUtils/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs similarity index 93% rename from testing-utils/Hasql/TestingUtils/TestingDsl.hs rename to testing-kit/Hasql/TestingKit/TestingDsl.hs index a7a450f154..ba762d0bf8 100644 --- a/testing-utils/Hasql/TestingUtils/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -1,4 +1,4 @@ -module Hasql.TestingUtils.TestingDsl +module Hasql.TestingKit.TestingDsl ( Session.Session, Error (..), Session.SessionError (..), @@ -16,7 +16,7 @@ import Hasql.Connection qualified as Connection import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Hasql.TestingUtils.Constants qualified as Constants +import Hasql.TestingKit.Constants qualified as Constants import Prelude data Error From 30665a331e86edb8cfe7a3007b0dae26eb9f348b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 07:45:41 +0300 Subject: [PATCH 0999/1204] Implement more tests and discover bugs --- hasql.cabal | 2 + hspec/Hasql/PipelineSpec.hs | 55 +++++++++++++++++-- library/Hasql/Errors.hs | 3 +- .../TestingKit/Statements/BrokenSyntax.hs | 44 +++++++++++++++ .../TestingKit/Statements/WrongDecoder.hs | 44 +++++++++++++++ testing-kit/Hasql/TestingKit/TestingDsl.hs | 10 +++- 6 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs create mode 100644 testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs diff --git a/hasql.cabal b/hasql.cabal index dc0f775197..be7234ffd5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -147,7 +147,9 @@ library testing-kit hs-source-dirs: testing-kit exposed-modules: Hasql.TestingKit.Constants + Hasql.TestingKit.Statements.BrokenSyntax Hasql.TestingKit.Statements.GenerateSeries + Hasql.TestingKit.Statements.WrongDecoder Hasql.TestingKit.TestingDsl build-depends: diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 56d172ae36..25bc1799df 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -1,6 +1,8 @@ module Hasql.PipelineSpec (spec) where +import Hasql.TestingKit.Statements.BrokenSyntax qualified as BrokenSyntax import Hasql.TestingKit.Statements.GenerateSeries qualified as GenerateSeries +import Hasql.TestingKit.Statements.WrongDecoder qualified as WrongDecoder import Hasql.TestingKit.TestingDsl qualified as Dsl import Test.Hspec import Prelude @@ -22,7 +24,7 @@ spec = do $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} shouldBe result (Right [0 .. 2]) - describe "Normally" do + describe "Multi-statement" do describe "On unprepared statements" do it "Collects results and sends params" do result <- @@ -39,6 +41,51 @@ spec = do $ GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} shouldBe result (Right [[0 .. 2], [0 .. 2]]) - describe "When some part fails" do - it "Works" do - pending + describe "When a part in the middle fails" do + describe "With query error" do + it "Captures the error" do + result <- + Dsl.runPipelineOnLocalDb + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + case result of + Left (Dsl.SessionError (Dsl.QuerySessionError _ _ _)) -> pure () + _ -> expectationFailure $ "Unexpected result: " <> show result + + it "Leaves the connection usable" do + result <- + Dsl.runSessionOnLocalDb do + tryError + $ Dsl.runPipelineInSession + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + GenerateSeries.session True GenerateSeries.Params {start = 0, end = 0} + shouldBe result (Right [0]) + + describe "With decoding error" do + it "Captures the error" do + result <- + Dsl.runPipelineOnLocalDb + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + case result of + Left (Dsl.SessionError (Dsl.QuerySessionError _ _ _)) -> pure () + _ -> expectationFailure $ "Unexpected result: " <> show result + + it "Leaves the connection usable" do + result <- + Dsl.runSessionOnLocalDb do + tryError + $ Dsl.runPipelineInSession + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + GenerateSeries.session True GenerateSeries.Params {start = 0, end = 0} + shouldBe result (Right [0]) diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index e4b72dfa1a..85e7eb1b29 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -5,8 +5,7 @@ import Hasql.Prelude -- | Error during execution of a session. data SessionError - = -- | - -- An error during the execution of a query. + = -- | Error during the execution of a query. -- Comes packed with the query template and a textual representation of the provided params. QuerySessionError -- | SQL template. diff --git a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs new file mode 100644 index 0000000000..1d47e7077a --- /dev/null +++ b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs @@ -0,0 +1,44 @@ +module Hasql.TestingKit.Statements.BrokenSyntax where + +import Hasql.Decoders qualified as Decoders +import Hasql.Encoders qualified as Encoders +import Hasql.Pipeline qualified as Pipeline +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Prelude + +data Params = Params + { start :: Int64, + end :: Int64 + } + +type Result = [Int64] + +session :: Bool -> Params -> Session.Session Result +session prepared params = + Session.statement params (statement prepared) + +pipeline :: Bool -> Params -> Pipeline.Pipeline Result +pipeline prepared params = + Pipeline.statement params (statement prepared) + +statement :: Bool -> Statement.Statement Params Result +statement = + Statement.Statement sql encoder decoder + +sql :: ByteString +sql = + "S" + +encoder :: Encoders.Params Params +encoder = + mconcat + [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), + (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + ] + +decoder :: Decoders.Result Result +decoder = + Decoders.rowList + ( Decoders.column (Decoders.nonNullable Decoders.int8) + ) diff --git a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs new file mode 100644 index 0000000000..d1393279d2 --- /dev/null +++ b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs @@ -0,0 +1,44 @@ +module Hasql.TestingKit.Statements.WrongDecoder where + +import Hasql.Decoders qualified as Decoders +import Hasql.Encoders qualified as Encoders +import Hasql.Pipeline qualified as Pipeline +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Prelude + +data Params = Params + { start :: Int64, + end :: Int64 + } + +type Result = [UUID] + +session :: Bool -> Params -> Session.Session Result +session prepared params = + Session.statement params (statement prepared) + +pipeline :: Bool -> Params -> Pipeline.Pipeline Result +pipeline prepared params = + Pipeline.statement params (statement prepared) + +statement :: Bool -> Statement.Statement Params Result +statement = + Statement.Statement sql encoder decoder + +sql :: ByteString +sql = + "SELECT generate_series($1, $2)" + +encoder :: Encoders.Params Params +encoder = + mconcat + [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), + (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + ] + +decoder :: Decoders.Result Result +decoder = + Decoders.rowList + ( Decoders.column (Decoders.nonNullable Decoders.uuid) + ) diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index ba762d0bf8..51839395d0 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -1,10 +1,18 @@ module Hasql.TestingKit.TestingDsl - ( Session.Session, + ( -- * Errors Error (..), Session.SessionError (..), Session.CommandError (..), + Session.ResultError (..), + Session.RowError (..), + Session.ColumnError (..), + + -- * Abstractions + Session.Session, Pipeline.Pipeline, Statement.Statement (..), + + -- * Execution runSessionOnLocalDb, runPipelineOnLocalDb, runStatementInSession, From cc2c4db3c5cddb4a818a253757f187c40dc42d19 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 08:16:19 +0300 Subject: [PATCH 1000/1204] Clean up --- library/Hasql/Decoders/Results.hs | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 87c92d0d68..caef949c59 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -49,26 +49,6 @@ single resultDec = Nothing -> fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) --- | --- Fetch a single result. -{-# INLINE getResult #-} -getResult :: Results LibPQ.Result -getResult = - Results - $ ReaderT - $ \(_, connection) -> ExceptT $ do - resultMaybe <- LibPQ.getResult connection - case resultMaybe of - Just result -> pure (Right result) - Nothing -> fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) - --- | --- Fetch a single result. -{-# INLINE getResultMaybe #-} -getResultMaybe :: Results (Maybe LibPQ.Result) -getResultMaybe = - Results $ ReaderT $ \(_, connection) -> lift $ LibPQ.getResult connection - {-# INLINE dropRemainders #-} dropRemainders :: Results () dropRemainders = From 1544e3d783ad9514273521965f1b582a20d8edc8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 09:52:37 +0300 Subject: [PATCH 1001/1204] Fix --- library/Hasql/Pipeline/Core.hs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index e73d60a759..ba2c37e763 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -15,12 +15,14 @@ run :: forall a. Pipeline a -> Pq.Connection -> PreparedStatementRegistry.Prepar run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do runExceptT do enterPipelineMode - flip finallyE exitPipelineMode do - recvQueries <- sendQueries - pipelineSync - queriesResult <- recvQueries - recvPipelineSync - pure queriesResult + finallyE + do + recvQueries <- sendQueries + pipelineSync + recvQueries + do + recvPipelineSync + exitPipelineMode where enterPipelineMode :: ExceptT SessionError IO () enterPipelineMode = @@ -40,9 +42,14 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do recvPipelineSync :: ExceptT SessionError IO () recvPipelineSync = + runResultsDecoder + $ Decoders.Results.single Decoders.Result.pipelineSync + + runResultsDecoder :: forall a. Decoders.Results.Results a -> ExceptT SessionError IO a + runResultsDecoder decoder = ExceptT $ fmap (mapLeft PipelineSessionError) - $ Decoders.Results.run (Decoders.Results.single Decoders.Result.pipelineSync) connection integerDatetimes + $ Decoders.Results.run decoder connection integerDatetimes runCommand :: IO Bool -> ExceptT SessionError IO () runCommand action = From f99f7797a3dfa012251bb4f794fb8f613d921686 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 09:58:30 +0300 Subject: [PATCH 1002/1204] Ditch OverloadedRecordDot for compatiblity with GHC <9.2 --- hasql.cabal | 1 - testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs | 4 ++-- testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs | 4 ++-- testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index be7234ffd5..303ee27971 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -53,7 +53,6 @@ common base MultiWayIf NoImplicitPrelude NoMonomorphismRestriction - OverloadedRecordDot OverloadedStrings ParallelListComp PatternGuards diff --git a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs index 1d47e7077a..6508beaaa1 100644 --- a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs +++ b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs @@ -33,8 +33,8 @@ sql = encoder :: Encoders.Params Params encoder = mconcat - [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), - (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + [ start >$< Encoders.param (Encoders.nonNullable Encoders.int8), + end >$< Encoders.param (Encoders.nonNullable Encoders.int8) ] decoder :: Decoders.Result Result diff --git a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs index 4cf98b6c8d..20fc044bdf 100644 --- a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs +++ b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs @@ -33,8 +33,8 @@ sql = encoder :: Encoders.Params Params encoder = mconcat - [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), - (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + [ start >$< Encoders.param (Encoders.nonNullable Encoders.int8), + end >$< Encoders.param (Encoders.nonNullable Encoders.int8) ] decoder :: Decoders.Result Result diff --git a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs index d1393279d2..5a9a302e7b 100644 --- a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs +++ b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs @@ -33,8 +33,8 @@ sql = encoder :: Encoders.Params Params encoder = mconcat - [ (.start) >$< Encoders.param (Encoders.nonNullable Encoders.int8), - (.end) >$< Encoders.param (Encoders.nonNullable Encoders.int8) + [ start >$< Encoders.param (Encoders.nonNullable Encoders.int8), + end >$< Encoders.param (Encoders.nonNullable Encoders.int8) ] decoder :: Decoders.Result Result From 7dd3b2b72a2e2f8adb261647f83107c427bb3c8f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 20:08:18 +0300 Subject: [PATCH 1003/1204] Add benchmarks --- benchmarks/Main.hs | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index a4cdd2c1c9..32ff52e308 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -4,6 +4,7 @@ import Criterion import Criterion.Main import Hasql.Connection qualified as A import Hasql.Decoders qualified as D +import Hasql.Pipeline qualified as E import Hasql.Session qualified as B import Hasql.Statement qualified as C import Prelude @@ -21,40 +22,42 @@ main = [ sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector, sessionBench "largeResultInList" sessionWithSingleLargeResultInList, sessionBench "manyLargeResults" sessionWithManyLargeResults, - sessionBench "manySmallResults" sessionWithManySmallResults + sessionBench "manyLargeResultsViaPipeline" sessionWithManyLargeResultsViaPipeline, + sessionBench "manySmallResults" sessionWithManySmallResults, + sessionBench "manySmallResultsViaPipeline" sessionWithManySmallResultsViaPipeline ] where sessionBench :: (NFData a) => String -> B.Session a -> Benchmark sessionBench name session = - bench name (nfIO (fmap (either (error "") id) (B.run session connection))) + bench name (nfIO (B.run session connection >>= either (fail . show) pure)) -- * Sessions -sessionWithManySmallParameters :: Vector (Int64, Int64) -> B.Session () -sessionWithManySmallParameters = - error "TODO: sessionWithManySmallParameters" - sessionWithSingleLargeResultInVector :: B.Session (Vector (Int64, Int64)) sessionWithSingleLargeResultInVector = B.statement () statementWithManyRowsInVector -sessionWithManyLargeResults :: B.Session [Vector (Int64, Int64)] -sessionWithManyLargeResults = - replicateM 1000 (B.statement () statementWithManyRowsInVector) - sessionWithSingleLargeResultInList :: B.Session [(Int64, Int64)] sessionWithSingleLargeResultInList = B.statement () statementWithManyRowsInList +sessionWithManyLargeResults :: B.Session [Vector (Int64, Int64)] +sessionWithManyLargeResults = + replicateM 100 (B.statement () statementWithManyRowsInVector) + sessionWithManySmallResults :: B.Session [(Int64, Int64)] sessionWithManySmallResults = - replicateM 1000 (B.statement () statementWithSingleRow) + replicateM 100 (B.statement () statementWithSingleRow) --- * Statements +sessionWithManyLargeResultsViaPipeline :: B.Session [Vector (Int64, Int64)] +sessionWithManyLargeResultsViaPipeline = + B.pipeline (replicateM 100 (E.statement () statementWithManyRowsInVector)) -statementWithManyParameters :: C.Statement (Vector (Int64, Int64)) () -statementWithManyParameters = - error "TODO: statementWithManyParameters" +sessionWithManySmallResultsViaPipeline :: B.Session [(Int64, Int64)] +sessionWithManySmallResultsViaPipeline = + B.pipeline (replicateM 100 (E.statement () statementWithSingleRow)) + +-- * Statements statementWithSingleRow :: C.Statement () (Int64, Int64) statementWithSingleRow = From c7d76a6f97ee1c4a3eab276c659d6a0a274ba419 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 20:18:35 +0300 Subject: [PATCH 1004/1204] Add changelog check --- .github/workflows/on-pr.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/on-pr.yaml diff --git a/.github/workflows/on-pr.yaml b/.github/workflows/on-pr.yaml new file mode 100644 index 0000000000..aae0922ee7 --- /dev/null +++ b/.github/workflows/on-pr.yaml @@ -0,0 +1,17 @@ +on: + pull_request: + types: [assigned, opened, synchronize, reopened, labeled, unlabeled] + branches: + - master + - major + - minor + - patch + +jobs: + check-changelog: + name: Check Changelog Action + runs-on: ubuntu-20.04 + steps: + - uses: tarides/changelog-check-action@v2 + with: + changelog: CHANGELOG.md From e0326c6803e9c842f883c64e6ef6411898fbf6d3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 22 Apr 2024 20:23:00 +0300 Subject: [PATCH 1005/1204] Update the workflows --- .github/workflows/on-pr.yaml | 9 +++++++++ ...-push-to-master-or-pr.yaml => on-push-to-master.yaml} | 1 - 2 files changed, 9 insertions(+), 1 deletion(-) rename .github/workflows/{on-push-to-master-or-pr.yaml => on-push-to-master.yaml} (94%) diff --git a/.github/workflows/on-pr.yaml b/.github/workflows/on-pr.yaml index aae0922ee7..cd0c0b5600 100644 --- a/.github/workflows/on-pr.yaml +++ b/.github/workflows/on-pr.yaml @@ -8,6 +8,15 @@ on: - patch jobs: + + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit + check-changelog: name: Check Changelog Action runs-on: ubuntu-20.04 diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master.yaml similarity index 94% rename from .github/workflows/on-push-to-master-or-pr.yaml rename to .github/workflows/on-push-to-master.yaml index 4a8dd27464..5a6b86a67c 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master.yaml @@ -2,7 +2,6 @@ on: push: branches: - master - pull_request: jobs: From ddd667acb8008b1821bbb323082b1f44c8a43b8c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 23 Apr 2024 12:20:47 +0300 Subject: [PATCH 1006/1204] Correct the use of finally --- library/Hasql/Pipeline/Core.hs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index ba2c37e763..3c420c3940 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -15,14 +15,11 @@ run :: forall a. Pipeline a -> Pq.Connection -> PreparedStatementRegistry.Prepar run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do runExceptT do enterPipelineMode - finallyE - do - recvQueries <- sendQueries - pipelineSync - recvQueries - do - recvPipelineSync - exitPipelineMode + recvQueries <- sendQueries + pipelineSync + finallyE recvQueries do + recvPipelineSync + exitPipelineMode where enterPipelineMode :: ExceptT SessionError IO () enterPipelineMode = From 5ccde7bc98616f67f5747dd175e8d6d420908eb4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 07:33:08 +0300 Subject: [PATCH 1007/1204] Add observation status model --- arch/observation-status-model.mmd | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 arch/observation-status-model.mmd diff --git a/arch/observation-status-model.mmd b/arch/observation-status-model.mmd new file mode 100644 index 0000000000..f8f7149973 --- /dev/null +++ b/arch/observation-status-model.mmd @@ -0,0 +1,10 @@ +stateDiagram-v2 + +[*] --> Connecting +Connecting --> ReadyForUse +ReadyForUse --> InUse +InUse --> ReadyForUse +Connecting --> Terminated +ReadyForUse --> Terminated +InUse --> Terminated +Terminated --> [*] From 1452f49b27553023f1fbfe5c8e09749c6ae71c86 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 07:39:58 +0300 Subject: [PATCH 1008/1204] Extend the ready for use model --- src/library/exposed/Hasql/Pool.hs | 6 +++--- src/library/exposed/Hasql/Pool/Observation.hs | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 29f88e21ee..ff2d1b1e72 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -170,7 +170,7 @@ use Pool {..} sess = do atomically $ modifyTVar' poolCapacity succ return $ Left $ ConnectionUsageError connErr Right connection -> do - poolObserver (ConnectionObservation id ReadyForUseConnectionStatus) + poolObserver (ConnectionObservation id (ReadyForUseConnectionStatus EstablishedConnectionReadyForUseReason)) onLiveConn reuseVar (Entry connection now now id) onConn reuseVar entry = do @@ -205,11 +205,11 @@ use Pool {..} sess = do return $ Left $ SessionUsageError err _ -> do returnConn - poolObserver (ConnectionObservation (entryId entry) ReadyForUseConnectionStatus) + poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionFailedConnectionReadyForUseReason)) return $ Left $ SessionUsageError err Right (Right res) -> do returnConn - poolObserver (ConnectionObservation (entryId entry) ReadyForUseConnectionStatus) + poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionSucceededConnectionReadyForUseReason)) return $ Right res where returnConn = diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index 1a207b518e..bdee683047 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -25,6 +25,8 @@ data ConnectionStatus ConnectingConnectionStatus | -- | Connection is established and not occupied. ReadyForUseConnectionStatus + -- | Whether the connection has just been established. + ConnectionReadyForUseReason | -- | Is being used by some session. -- -- After it's done the status will transition to 'ReadyForUseConnectionStatus' or 'TerminatedConnectionStatus'. @@ -33,6 +35,15 @@ data ConnectionStatus TerminatedConnectionStatus ConnectionTerminationReason deriving (Show, Eq) +data ConnectionReadyForUseReason + = -- | Connection just got established. + EstablishedConnectionReadyForUseReason + | -- | Session execution ended with a failure that does not require a connection reset. + SessionFailedConnectionReadyForUseReason + | -- | Session execution ended with success. + SessionSucceededConnectionReadyForUseReason + deriving (Show, Eq) + -- | Explanation of why a connection was terminated. data ConnectionTerminationReason = -- | The age timeout of the connection has passed. From de055fb4152d868fa57cdf2d24c24adf82c230d4 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 25 Apr 2024 04:46:50 +0000 Subject: [PATCH 1009/1204] Format --- hasql-pool.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 3d1895ff42..9881d0a668 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -41,6 +41,8 @@ common base-settings MagicHash MultiParamTypeClasses MultiWayIf + NoImplicitPrelude + NoMonomorphismRestriction NumericUnderscores OverloadedStrings ParallelListComp @@ -57,8 +59,6 @@ common base-settings TypeFamilies TypeOperators UnboxedTuples - NoImplicitPrelude - NoMonomorphismRestriction default-language: Haskell2010 From edbaf5627f81ebebf9be81bb7c9b6d35329d6684 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 08:42:12 +0300 Subject: [PATCH 1010/1204] Update the changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1795b410a..b3df37d2db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.1 + +- `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details + # 1 - Optional observability event stream added. Provides a flexible mechanism for monitoring the healthiness of the pool via logs and metrics. From 7b77c5b37b68817dfc26753bddd19e1391093cad Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 08:42:25 +0300 Subject: [PATCH 1011/1204] Add image to doc --- diagrams-output/observation-status-model.png | Bin 0 -> 16434 bytes {arch => diagrams}/observation-status-model.mmd | 0 hasql-pool.cabal | 9 ++++++++- src/library/exposed/Hasql/Pool/Observation.hs | 6 +++--- 4 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 diagrams-output/observation-status-model.png rename {arch => diagrams}/observation-status-model.mmd (100%) diff --git a/diagrams-output/observation-status-model.png b/diagrams-output/observation-status-model.png new file mode 100644 index 0000000000000000000000000000000000000000..8e62825ec59d46d3ef0dfd2608592efd4a2e7f4d GIT binary patch literal 16434 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 copyright: (c) 2015, Nikita Volkov license: MIT license-file: LICENSE -extra-source-files: CHANGELOG.md +extra-source-files: + CHANGELOG.md + diagrams-output/*.png + diagrams-output/*.svg + +extra-doc-files: + diagrams-output/*.png + diagrams-output/*.svg source-repository head type: git diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index bdee683047..3d7fd33c39 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -18,15 +18,15 @@ data Observation deriving (Show, Eq) -- | Status of a connection. +-- +-- <> data ConnectionStatus = -- | Connection is being established. -- -- This is the initial status of every connection. ConnectingConnectionStatus | -- | Connection is established and not occupied. - ReadyForUseConnectionStatus - -- | Whether the connection has just been established. - ConnectionReadyForUseReason + ReadyForUseConnectionStatus ConnectionReadyForUseReason | -- | Is being used by some session. -- -- After it's done the status will transition to 'ReadyForUseConnectionStatus' or 'TerminatedConnectionStatus'. From bf5750d260ce86f85a38e2a382b454283de479e3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 08:44:09 +0300 Subject: [PATCH 1012/1204] Add error details --- src/library/exposed/Hasql/Pool.hs | 2 +- src/library/exposed/Hasql/Pool/Observation.hs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index ff2d1b1e72..0da4abd098 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -205,7 +205,7 @@ use Pool {..} sess = do return $ Left $ SessionUsageError err _ -> do returnConn - poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionFailedConnectionReadyForUseReason)) + poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err))) return $ Left $ SessionUsageError err Right (Right res) -> do returnConn diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index 3d7fd33c39..26f451a94d 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -5,6 +5,7 @@ module Hasql.Pool.Observation where import Hasql.Pool.Prelude +import qualified Hasql.Session as Hasql -- | An observation of a change of the state of a pool. data Observation @@ -39,7 +40,7 @@ data ConnectionReadyForUseReason = -- | Connection just got established. EstablishedConnectionReadyForUseReason | -- | Session execution ended with a failure that does not require a connection reset. - SessionFailedConnectionReadyForUseReason + SessionFailedConnectionReadyForUseReason Hasql.QueryError | -- | Session execution ended with success. SessionSucceededConnectionReadyForUseReason deriving (Show, Eq) From 4b36900ac813a59f114edc4ede67dd3ece1c2bae Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 09:44:14 +0300 Subject: [PATCH 1013/1204] Lint --- hasql-pool.cabal | 2 -- 1 file changed, 2 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index d82ecf0563..6dd55525fa 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -13,11 +13,9 @@ license-file: LICENSE extra-source-files: CHANGELOG.md diagrams-output/*.png - diagrams-output/*.svg extra-doc-files: diagrams-output/*.png - diagrams-output/*.svg source-repository head type: git From da10d73298d94bc6132c4b43f8ceec2a9d084734 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 09:52:46 +0300 Subject: [PATCH 1014/1204] Update the changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3df37d2db..cdbbc2a8bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 1.1 -- `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details +- `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details. +- `initSession` setting added. # 1 From 9d96e80a110af8a38ba7e19a13e5ae7d88fc6e33 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 25 Apr 2024 06:57:23 +0000 Subject: [PATCH 1015/1204] Set package version to 1.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 6dd55525fa..c336099cc8 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.0.1 +version: 1.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 5455fd7f71604edb32f5fb78a40eeec826c099be Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 25 Apr 2024 10:00:30 +0300 Subject: [PATCH 1016/1204] Correct naming --- ...observation-status-model.mmd => connection-status-model.mmd} | 0 src/library/exposed/Hasql/Pool/Observation.hs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename diagrams/{observation-status-model.mmd => connection-status-model.mmd} (100%) diff --git a/diagrams/observation-status-model.mmd b/diagrams/connection-status-model.mmd similarity index 100% rename from diagrams/observation-status-model.mmd rename to diagrams/connection-status-model.mmd diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index f873331440..151b04343d 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -20,7 +20,7 @@ data Observation -- | Status of a connection. -- --- <> +-- <> data ConnectionStatus = -- | Connection is being established. -- From 14d78fb0787f78c17cad9d9f43d6710a96f868f3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 07:33:08 +0300 Subject: [PATCH 1017/1204] Replace mapLeft with first --- library/Hasql/Decoders/Result.hs | 6 +++--- library/Hasql/Decoders/Results.hs | 6 +++--- library/Hasql/Decoders/Row.hs | 2 +- library/Hasql/Pipeline/Core.hs | 8 ++++---- library/Hasql/Prelude.hs | 6 ------ library/Hasql/Session/Core.hs | 4 ++-- testing-kit/Hasql/TestingKit/TestingDsl.hs | 4 ++-- 7 files changed, 15 insertions(+), 21 deletions(-) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 54e395e1cd..38fce656c6 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -51,7 +51,7 @@ rowsAffected = then Left (UnexpectedResultError "Empty bytes") else Right bytes decimal bytes = - mapLeft (\m -> UnexpectedResultError ("Decimal parsing failure: " <> fromString m)) + first (\m -> UnexpectedResultError ("Decimal parsing failure: " <> fromString m)) $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} @@ -112,7 +112,7 @@ maybe rowDec = 0 -> return (Right Nothing) 1 -> do maxCols <- LibPQ.nfields result - fmap (fmap Just . mapLeft (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + fmap (fmap Just . first (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -130,7 +130,7 @@ single rowDec = case maxRows of 1 -> do maxCols <- LibPQ.nfields result - fmap (mapLeft (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + fmap (first (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index caef949c59..99d7a7fd21 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -45,7 +45,7 @@ single resultDec = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - mapLeft ResultCommandError <$> Result.run resultDec integerDatetimes result + first ResultCommandError <$> Result.run resultDec integerDatetimes result Nothing -> fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) @@ -64,11 +64,11 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (mapLeft ResultCommandError) $ Result.run Result.noResult integerDatetimes result + ExceptT $ fmap (first ResultCommandError) $ Result.run Result.noResult integerDatetimes result refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results $ ReaderT $ \env -> ExceptT $ do resultEither <- runExceptT $ runReaderT stack env - return $ resultEither >>= mapLeft (ResultCommandError . UnexpectedResultError) . refiner + return $ resultEither >>= first (ResultCommandError . UnexpectedResultError) . refiner diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs index cf8d71dfc5..98c0ec0590 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -55,7 +55,7 @@ value valueDec = Right Nothing Just value -> fmap Just - $ mapLeft ValueColumnError + $ first ValueColumnError $ {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value else pure (Left EndOfInputColumnError) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 3c420c3940..6c1b6855ef 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -45,7 +45,7 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do runResultsDecoder :: forall a. Decoders.Results.Results a -> ExceptT SessionError IO a runResultsDecoder decoder = ExceptT - $ fmap (mapLeft PipelineSessionError) + $ fmap (first PipelineSessionError) $ Decoders.Results.run decoder connection integerDatetimes runCommand :: IO Bool -> ExceptT SessionError IO () @@ -109,7 +109,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re else (False,) . Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection where recv = - fmap (mapLeft commandToSessionError) + fmap (first commandToSessionError) $ (<*) <$> Decoders.Results.run (Decoders.Results.single Decoders.Result.noResult) connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes @@ -122,7 +122,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re True -> pure (Right recv) where recv = - fmap (mapLeft commandToSessionError) + fmap (first commandToSessionError) $ (<*) <$> Decoders.Results.run decoder connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes @@ -133,7 +133,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re True -> pure (Right recv) where recv = - fmap (mapLeft commandToSessionError) + fmap (first commandToSessionError) $ (<*) <$> Decoders.Results.run decoder connection integerDatetimes <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index 88e6911e6f..cf80c9b4e3 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -7,7 +7,6 @@ module Hasql.Prelude forMToZero_, forMFromZero_, strictCons, - mapLeft, ) where @@ -130,8 +129,3 @@ forMFromZero_ !endN f = strictCons :: a -> [a] -> [a] strictCons !a b = let !c = a : b in c - -{-# INLINE mapLeft #-} -mapLeft :: (a -> c) -> Either a b -> Either c b -mapLeft f = - either (Left . f) Right diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 23c3db035d..c84fcb74d2 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -35,7 +35,7 @@ sql sql = $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (mapLeft (QuerySessionError sql [])) + $ fmap (first (QuerySessionError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendNonparametricStatement pqConnection sql @@ -53,7 +53,7 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (mapLeft (QuerySessionError template (Encoders.Params.renderReadable paramsEncoder input))) + $ fmap (first (QuerySessionError template (Encoders.Params.renderReadable paramsEncoder input))) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index 51839395d0..3d9181089a 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -37,10 +37,10 @@ runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ fmap (mapLeft ConnectionError) $ Connection.acquire Constants.localConnectionSettings + ExceptT $ fmap (first ConnectionError) $ Connection.acquire Constants.localConnectionSettings use connection = ExceptT - $ fmap (mapLeft SessionError) + $ fmap (first SessionError) $ Session.run session connection release connection = lift $ Connection.release connection From e40be8555956ca22a33996e04f40768ae1e66d8b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 07:36:22 +0300 Subject: [PATCH 1018/1204] Add DerivingVia --- hasql.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/hasql.cabal b/hasql.cabal index 303ee27971..4770cd3faf 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -39,6 +39,7 @@ common base DeriveFunctor DeriveGeneric DeriveTraversable + DerivingVia EmptyDataDecls FlexibleContexts FlexibleInstances From 01a5dd2ddcde96198e47a8dc959a9390aeefc839 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 19:44:12 +0300 Subject: [PATCH 1019/1204] Update the changelog --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73f6ac7004..9af9957022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # 1.7 +- Error model completely revised: + - All sum-types now follow the convention of having constructors suffixed with the type name. In particular the following transformations occurred: + - `QueryError` type got renamed to `SessionError` + - `QueryError` constructor got renamed to `QuerySessionError` + - New `PipelineSessionError` constructor got added to the `SessionError` type + - `ClientError` constructor got renamed to `ClientCommandError` + - `ResultError` constructor got renamed to `ResultCommandError` + - `ServerError` constructor got renamed to `ServerResultError` + - `UnexpectedResult` constructor got renamed to `UnexpectedResultError` + - `RowResult` constructor got renamed to `RowResultError` + - `RowError` type got renamed to `ColumnError` + - `EndOfInput` constructor got renamed to `EndOfInputColumnError` + - `UnexpectedNull` constructor got renamed to `UnexpectedNullColumnError` + - `ValueError` constructor got renamed to `UnexpectedNull` + - New `RowError` type got created + - `RowResult` constructor's column field go transferred into the new `RowError` type + - Decidable instance on `Encoders.Params` removed. It was useless and limited the design. # 1.6.3.1 From c3a83eb1bf014240a3051cb040df7eb409ce6aae Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 18:43:39 +0300 Subject: [PATCH 1020/1204] Bundle extensions for libpq14 --- cabal.project | 8 --- hasql.cabal | 9 ++- library/Hasql/Connection/Core.hs | 2 +- library/Hasql/Decoders/Result.hs | 2 +- library/Hasql/Decoders/Results.hs | 2 +- library/Hasql/Decoders/Row.hs | 2 +- library/Hasql/Encoders/Params.hs | 2 +- library/Hasql/IO.hs | 2 +- library/Hasql/LibPq14.hs | 83 ++++++++++++++++++++++ library/Hasql/LibPq14/Ffi.hs | 25 +++++++ library/Hasql/LibPq14/Mappings.hsc | 71 ++++++++++++++++++ library/Hasql/Pipeline/Core.hs | 2 +- library/Hasql/PostgresTypeInfo.hs | 2 +- library/Hasql/PreparedStatementRegistry.hs | 2 +- 14 files changed, 192 insertions(+), 22 deletions(-) create mode 100644 library/Hasql/LibPq14.hs create mode 100644 library/Hasql/LibPq14/Ffi.hs create mode 100644 library/Hasql/LibPq14/Mappings.hsc diff --git a/cabal.project b/cabal.project index 38aa2e751d..e6fdbadb43 100644 --- a/cabal.project +++ b/cabal.project @@ -1,9 +1 @@ packages: . - -source-repository-package - type: git - location: https://github.com/GulinSS/postgresql-libpq/ - tag: 30b69e55855cabf3356e186c30a1756b4b0c6c95 - -allow-newer: - postgresql-libpq:base diff --git a/hasql.cabal b/hasql.cabal index 4770cd3faf..09001f2f6c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -49,13 +49,11 @@ common base ImportQualifiedPost LambdaCase LiberalTypeSynonyms - MagicHash MultiParamTypeClasses MultiWayIf NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings - ParallelListComp PatternGuards QuasiQuotes RankNTypes @@ -64,11 +62,9 @@ common base ScopedTypeVariables StandaloneDeriving StrictData - TemplateHaskell TupleSections TypeFamilies TypeOperators - UnboxedTuples common executable import: base @@ -112,6 +108,9 @@ library Hasql.Encoders.Value Hasql.Errors Hasql.IO + Hasql.LibPq14 + Hasql.LibPq14.Ffi + Hasql.LibPq14.Mappings Hasql.Pipeline.Core Hasql.PostgresTypeInfo Hasql.Prelude @@ -132,7 +131,7 @@ library mtl >=2 && <3, network-ip >=0.3.0.3 && <0.4, postgresql-binary >=0.13.1 && <0.14, - postgresql-libpq >=0.9 && <0.11, + postgresql-libpq ==0.10.1.0, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, text >=1 && <3, diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index 77452cc059..1dbe9f0f87 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -2,8 +2,8 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection.Core where -import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.IO qualified as IO +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Settings qualified as Settings diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 38fce656c6..85666df3e2 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -4,9 +4,9 @@ import Data.Attoparsec.ByteString.Char8 qualified as Attoparsec import Data.ByteString qualified as ByteString import Data.Vector qualified as Vector import Data.Vector.Mutable qualified as MutableVector -import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.Decoders.Row qualified as Row import Hasql.Errors +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude hiding (many, maybe) import Hasql.Prelude qualified as Prelude diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 99d7a7fd21..a92d5d7838 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -10,9 +10,9 @@ -- * Row-by-row fetching. module Hasql.Decoders.Results where -import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.Decoders.Result qualified as Result import Hasql.Errors +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude hiding (many, maybe) import Hasql.Prelude qualified as Prelude diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs index 98c0ec0590..fb505723b1 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -1,8 +1,8 @@ module Hasql.Decoders.Row where -import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.Decoders.Value qualified as Value import Hasql.Errors +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude hiding (error) import PostgreSQL.Binary.Decoding qualified as A diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 8a4640b0ae..e2c4af2c46 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -1,7 +1,7 @@ module Hasql.Encoders.Params where -import Database.PostgreSQL.LibPQ qualified as A import Hasql.Encoders.Value qualified as C +import Hasql.LibPq14 qualified as A import Hasql.PostgresTypeInfo qualified as D import Hasql.Prelude import PostgreSQL.Binary.Encoding qualified as B diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 05edf74b2f..4262f0a427 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -2,12 +2,12 @@ -- An API of low-level IO operations. module Hasql.IO where -import Database.PostgreSQL.LibPQ qualified as LibPQ import Hasql.Commands qualified as Commands import Hasql.Decoders.Result qualified as ResultDecoders import Hasql.Decoders.Results qualified as ResultsDecoders import Hasql.Encoders.Params qualified as ParamsEncoders import Hasql.Errors +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry diff --git a/library/Hasql/LibPq14.hs b/library/Hasql/LibPq14.hs new file mode 100644 index 0000000000..d762dfb009 --- /dev/null +++ b/library/Hasql/LibPq14.hs @@ -0,0 +1,83 @@ +module Hasql.LibPq14 + ( module Base, + + -- * Updated and new types + Mappings.ExecStatus (..), + Mappings.PipelineStatus (..), + + -- * Updated and new procedures + resultStatus, + pipelineStatus, + enterPipelineMode, + exitPipelineMode, + pipelineSync, + sendFlushRequest, + ) +where + +import Database.PostgreSQL.LibPQ as Base hiding (ExecStatus (..), resultStatus) +import Database.PostgreSQL.LibPQ.Internal qualified as BaseInternal +import Hasql.LibPq14.Ffi qualified as Ffi +import Hasql.LibPq14.Mappings qualified as Mappings +import Hasql.Prelude + +resultStatus :: Result -> IO Mappings.ExecStatus +resultStatus result = do + -- Unsafe-coercing because the constructor is not exposed by the lib, + -- but it's implemented as a newtype over ForeignPtr. + -- Since internal changes in the \"postgresql-lipbq\" may break this, + -- it requires us to avoid using an open dependency range on it. + ffiStatus <- withForeignPtr (unsafeCoerce result) Ffi.resultStatus + decodeProcedureResult "resultStatus" Mappings.decodeExecStatus ffiStatus + +pipelineStatus :: + Connection -> + IO Mappings.PipelineStatus +pipelineStatus = + parameterlessProcedure "pipelineStatus" Ffi.pipelineStatus Mappings.decodePipelineStatus + +enterPipelineMode :: + Connection -> + IO Bool +enterPipelineMode = + parameterlessProcedure "enterPipelineMode" Ffi.enterPipelineMode Mappings.decodeBool + +exitPipelineMode :: + Connection -> + IO Bool +exitPipelineMode = + parameterlessProcedure "exitPipelineMode" Ffi.exitPipelineMode Mappings.decodeBool + +pipelineSync :: + Connection -> + IO Bool +pipelineSync = + parameterlessProcedure "pipelineSync" Ffi.pipelineSync Mappings.decodeBool + +sendFlushRequest :: + Connection -> + IO Bool +sendFlushRequest = + parameterlessProcedure "sendFlushRequest" Ffi.sendFlushRequest Mappings.decodeBool + +parameterlessProcedure :: + (Show a) => + String -> + (Ptr BaseInternal.PGconn -> IO a) -> + (a -> Maybe b) -> + Connection -> + IO b +parameterlessProcedure label procedure decoder connection = do + ffiResult <- BaseInternal.withConn connection procedure + decodeProcedureResult label decoder ffiResult + +decodeProcedureResult :: + (Show a) => + String -> + (a -> Maybe b) -> + a -> + IO b +decodeProcedureResult label decoder ffiResult = + case decoder ffiResult of + Just res -> pure res + Nothing -> fail ("Failed to decode result of " <> label <> " from: " <> show ffiResult) diff --git a/library/Hasql/LibPq14/Ffi.hs b/library/Hasql/LibPq14/Ffi.hs new file mode 100644 index 0000000000..1df9317a08 --- /dev/null +++ b/library/Hasql/LibPq14/Ffi.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE CApiFFI #-} + +module Hasql.LibPq14.Ffi where + +import Database.PostgreSQL.LibPQ.Internal +import Foreign.C.Types (CInt (..)) +import Hasql.Prelude + +foreign import capi "libpq-fe.h PQresultStatus" + resultStatus :: Ptr () -> IO CInt + +foreign import capi "libpq-fe.h PQpipelineStatus" + pipelineStatus :: Ptr PGconn -> IO CInt + +foreign import capi "libpq-fe.h PQenterPipelineMode" + enterPipelineMode :: Ptr PGconn -> IO CInt + +foreign import capi "libpq-fe.h PQexitPipelineMode" + exitPipelineMode :: Ptr PGconn -> IO CInt + +foreign import capi "libpq-fe.h PQpipelineSync" + pipelineSync :: Ptr PGconn -> IO CInt + +foreign import capi "libpq-fe.h PQsendFlushRequest" + sendFlushRequest :: Ptr PGconn -> IO CInt diff --git a/library/Hasql/LibPq14/Mappings.hsc b/library/Hasql/LibPq14/Mappings.hsc new file mode 100644 index 0000000000..120e67cdf0 --- /dev/null +++ b/library/Hasql/LibPq14/Mappings.hsc @@ -0,0 +1,71 @@ +module Hasql.LibPq14.Mappings where + +#include "libpq-fe.h" + +import Foreign.C.Types (CInt (..)) +import Hasql.Prelude + +data ExecStatus + = EmptyQuery + | CommandOk + | TuplesOk + | CopyOut + | CopyIn + | CopyBoth + | BadResponse + | NonfatalError + | FatalError + | SingleTuple + | PipelineSync + | PipelineAbort + deriving (Eq, Show) + +decodeExecStatus :: CInt -> Maybe ExecStatus +decodeExecStatus = \case + (#const PGRES_EMPTY_QUERY) -> Just EmptyQuery + (#const PGRES_COMMAND_OK) -> Just CommandOk + (#const PGRES_TUPLES_OK) -> Just TuplesOk + (#const PGRES_COPY_OUT) -> Just CopyOut + (#const PGRES_COPY_IN) -> Just CopyIn + (#const PGRES_COPY_BOTH) -> Just CopyBoth + (#const PGRES_BAD_RESPONSE) -> Just BadResponse + (#const PGRES_NONFATAL_ERROR) -> Just NonfatalError + (#const PGRES_FATAL_ERROR) -> Just FatalError + (#const PGRES_SINGLE_TUPLE) -> Just SingleTuple + (#const PGRES_PIPELINE_SYNC) -> Just PipelineSync + (#const PGRES_PIPELINE_ABORTED) -> Just PipelineAbort + _ -> Nothing + +encodeExecStatus :: ExecStatus -> CInt +encodeExecStatus = \case + EmptyQuery -> #const PGRES_EMPTY_QUERY + CommandOk -> #const PGRES_COMMAND_OK + TuplesOk -> #const PGRES_TUPLES_OK + CopyOut -> #const PGRES_COPY_OUT + CopyIn -> #const PGRES_COPY_IN + CopyBoth -> #const PGRES_COPY_BOTH + BadResponse -> #const PGRES_BAD_RESPONSE + NonfatalError -> #const PGRES_NONFATAL_ERROR + FatalError -> #const PGRES_FATAL_ERROR + SingleTuple -> #const PGRES_SINGLE_TUPLE + PipelineSync -> #const PGRES_PIPELINE_SYNC + PipelineAbort -> #const PGRES_PIPELINE_ABORTED + +data PipelineStatus + = PipelineOn + | PipelineOff + | PipelineAborted + deriving (Eq, Show) + +decodePipelineStatus :: CInt -> Maybe PipelineStatus +decodePipelineStatus = \case + (#const PQ_PIPELINE_ON) -> Just PipelineOn + (#const PQ_PIPELINE_OFF) -> Just PipelineOff + (#const PQ_PIPELINE_ABORTED) -> Just PipelineAborted + _ -> Nothing + +decodeBool :: CInt -> Maybe Bool +decodeBool = \case + 0 -> Just False + 1 -> Just True + _ -> Nothing diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 6c1b6855ef..e60559ef76 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -1,12 +1,12 @@ module Hasql.Pipeline.Core where -import Database.PostgreSQL.LibPQ qualified as Pq import Hasql.Decoders.All qualified as Decoders import Hasql.Decoders.Result qualified as Decoders.Result import Hasql.Decoders.Results qualified as Decoders.Results import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors +import Hasql.LibPq14 qualified as Pq import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement diff --git a/library/Hasql/PostgresTypeInfo.hs b/library/Hasql/PostgresTypeInfo.hs index b7978b13b0..fb7cc27e95 100644 --- a/library/Hasql/PostgresTypeInfo.hs +++ b/library/Hasql/PostgresTypeInfo.hs @@ -1,6 +1,6 @@ module Hasql.PostgresTypeInfo where -import Database.PostgreSQL.LibPQ qualified as LibPQ +import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude hiding (bool) -- | A Postgresql type info diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index 4aad8b2454..37fae6a4b6 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -8,7 +8,7 @@ where import ByteString.StrictBuilder qualified as B import Data.HashTable.IO qualified as A -import Database.PostgreSQL.LibPQ qualified as Pq +import Hasql.LibPq14 qualified as Pq import Hasql.Prelude hiding (lookup) data PreparedStatementRegistry From 9b151275d013a48ff1e2c7cb4b0890a2dd7a89e4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 20:59:11 +0300 Subject: [PATCH 1021/1204] Correct changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9af9957022..46ee884262 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,11 @@ - `ResultError` constructor got renamed to `ResultCommandError` - `ServerError` constructor got renamed to `ServerResultError` - `UnexpectedResult` constructor got renamed to `UnexpectedResultError` - - `RowResult` constructor got renamed to `RowResultError` + - `RowError` constructor got renamed to `RowResultError` - `RowError` type got renamed to `ColumnError` - `EndOfInput` constructor got renamed to `EndOfInputColumnError` - `UnexpectedNull` constructor got renamed to `UnexpectedNullColumnError` - - `ValueError` constructor got renamed to `UnexpectedNull` + - `ValueError` constructor got renamed to `ValueColumnError` - New `RowError` type got created - `RowResult` constructor's column field go transferred into the new `RowError` type From 7d24e0d9d39fc6128a9e9c1379dbfc8298376642 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 27 Apr 2024 22:00:08 +0300 Subject: [PATCH 1022/1204] Reduce the amount of changes to the error model for now --- CHANGELOG.md | 19 +---- hspec/Hasql/PipelineSpec.hs | 4 +- library/Hasql/Decoders/All.hs | 2 +- library/Hasql/Decoders/Result.hs | 26 +++---- library/Hasql/Decoders/Results.hs | 10 +-- library/Hasql/Decoders/Row.hs | 16 ++--- library/Hasql/Errors.hs | 84 +++++++++------------- library/Hasql/IO.hs | 2 +- library/Hasql/Pipeline/Core.hs | 12 ++-- library/Hasql/Session/Core.hs | 4 +- library/Hasql/Statement.hs | 2 +- tasty/Main.hs | 4 +- testing-kit/Hasql/TestingKit/TestingDsl.hs | 1 - 13 files changed, 79 insertions(+), 107 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46ee884262..48b3b13b12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,8 @@ # 1.7 -- Error model completely revised: - - All sum-types now follow the convention of having constructors suffixed with the type name. In particular the following transformations occurred: - - `QueryError` type got renamed to `SessionError` - - `QueryError` constructor got renamed to `QuerySessionError` - - New `PipelineSessionError` constructor got added to the `SessionError` type - - `ClientError` constructor got renamed to `ClientCommandError` - - `ResultError` constructor got renamed to `ResultCommandError` - - `ServerError` constructor got renamed to `ServerResultError` - - `UnexpectedResult` constructor got renamed to `UnexpectedResultError` - - `RowError` constructor got renamed to `RowResultError` - - `RowError` type got renamed to `ColumnError` - - `EndOfInput` constructor got renamed to `EndOfInputColumnError` - - `UnexpectedNull` constructor got renamed to `UnexpectedNullColumnError` - - `ValueError` constructor got renamed to `ValueColumnError` - - New `RowError` type got created - - `RowResult` constructor's column field go transferred into the new `RowError` type - - Decidable instance on `Encoders.Params` removed. It was useless and limited the design. +- `QueryError` type renamed to `SessionError`. +- `PipelineError` constructor added to the `SessionError` type. # 1.6.3.1 diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 25bc1799df..7b88c23aaa 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -51,7 +51,7 @@ spec = do <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} case result of - Left (Dsl.SessionError (Dsl.QuerySessionError _ _ _)) -> pure () + Left (Dsl.SessionError (Dsl.QueryError _ _ _)) -> pure () _ -> expectationFailure $ "Unexpected result: " <> show result it "Leaves the connection usable" do @@ -75,7 +75,7 @@ spec = do <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} case result of - Left (Dsl.SessionError (Dsl.QuerySessionError _ _ _)) -> pure () + Left (Dsl.SessionError (Dsl.QueryError _ _ _)) -> pure () _ -> expectationFailure $ "Unexpected result: " <> show result it "Leaves the connection usable" do diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index 64d327d587..0281e1faea 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -38,7 +38,7 @@ rowsAffected = Result (Results.single Result.rowsAffected) -- | -- Exactly one row. --- Will raise the 'Errors.UnexpectedAmountOfRowsResultError' error if it's any other. +-- Will raise the 'Errors.UnexpectedAmountOfRows' error if it's any other. {-# INLINEABLE singleRow #-} singleRow :: Row a -> Result a singleRow (Row row) = Result (Results.single (Result.single row)) diff --git a/library/Hasql/Decoders/Result.hs b/library/Hasql/Decoders/Result.hs index 85666df3e2..ed67b3bdca 100644 --- a/library/Hasql/Decoders/Result.hs +++ b/library/Hasql/Decoders/Result.hs @@ -45,13 +45,13 @@ rowsAffected = notNothing >=> notEmpty >=> decimal where notNothing = - Prelude.maybe (Left (UnexpectedResultError "No bytes")) Right + Prelude.maybe (Left (UnexpectedResult "No bytes")) Right notEmpty bytes = if ByteString.null bytes - then Left (UnexpectedResultError "Empty bytes") + then Left (UnexpectedResult "Empty bytes") else Right bytes decimal bytes = - first (\m -> UnexpectedResultError ("Decimal parsing failure: " <> fromString m)) + first (\m -> UnexpectedResult ("Decimal parsing failure: " <> fromString m)) $ Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) bytes {-# INLINE checkExecStatus #-} @@ -70,7 +70,7 @@ checkExecStatus expectedList = unexpectedResult :: Text -> Result a unexpectedResult = - Result . lift . ExceptT . pure . Left . UnexpectedResultError + Result . lift . ExceptT . pure . Left . UnexpectedResult {-# INLINE serverError #-} serverError :: Result () @@ -90,7 +90,7 @@ serverError = LibPQ.resultErrorField result LibPQ.DiagMessageHint position <- parsePosition <$> LibPQ.resultErrorField result LibPQ.DiagStatementPosition - pure $ Left $ ServerResultError code message detail hint position + pure $ Left $ ServerError code message detail hint position where parsePosition = \case Nothing -> Nothing @@ -112,8 +112,9 @@ maybe rowDec = 0 -> return (Right Nothing) 1 -> do maxCols <- LibPQ.nfields result - fmap (fmap Just . first (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) + let fromRowError (col, err) = RowError 0 col err + fmap (fmap Just . first fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -130,8 +131,9 @@ single rowDec = case maxRows of 1 -> do maxCols <- LibPQ.nfields result - fmap (first (RowResultError 0)) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) - _ -> return (Left (UnexpectedAmountOfRowsResultError (rowToInt maxRows))) + let fromRowError (col, err) = RowError 0 col err + fmap (first fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = fromIntegral n @@ -151,7 +153,7 @@ vector rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> MutableVector.unsafeWrite mvector rowIndex x readIORef failureRef >>= \case Nothing -> Right <$> Vector.unsafeFreeze mvector @@ -181,7 +183,7 @@ foldl step init rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> modifyIORef' accRef (\acc -> step acc x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef @@ -208,7 +210,7 @@ foldr step init rowDec = forMToZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !rowError -> writeIORef failureRef (Just (RowResultError rowIndex rowError)) + Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> modifyIORef accRef (\acc -> step x acc) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index a92d5d7838..9d5da13515 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -32,7 +32,7 @@ clientError = $ ReaderT $ \(_, connection) -> ExceptT - $ fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) + $ fmap (Left . ClientError) (LibPQ.errorMessage connection) -- | -- Parse a single result. @@ -45,9 +45,9 @@ single resultDec = resultMaybe <- LibPQ.getResult connection case resultMaybe of Just result -> - first ResultCommandError <$> Result.run resultDec integerDatetimes result + first ResultError <$> Result.run resultDec integerDatetimes result Nothing -> - fmap (Left . ClientCommandError) (LibPQ.errorMessage connection) + fmap (Left . ClientError) (LibPQ.errorMessage connection) {-# INLINE dropRemainders #-} dropRemainders :: Results () @@ -64,11 +64,11 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (first ResultCommandError) $ Result.run Result.noResult integerDatetimes result + ExceptT $ fmap (first ResultError) $ Result.run Result.noResult integerDatetimes result refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results $ ReaderT $ \env -> ExceptT $ do resultEither <- runExceptT $ runReaderT stack env - return $ resultEither >>= first (ResultCommandError . UnexpectedResultError) . refiner + return $ resultEither >>= first (ResultError . UnexpectedResult) . refiner diff --git a/library/Hasql/Decoders/Row.hs b/library/Hasql/Decoders/Row.hs index fb505723b1..cbbd47a164 100644 --- a/library/Hasql/Decoders/Row.hs +++ b/library/Hasql/Decoders/Row.hs @@ -7,11 +7,11 @@ import Hasql.Prelude hiding (error) import PostgreSQL.Binary.Decoding qualified as A newtype Row a - = Row (ReaderT Env (ExceptT ColumnError IO) a) + = Row (ReaderT Env (ExceptT RowError IO) a) deriving (Functor, Applicative, Monad) instance MonadFail Row where - fail = error . ValueColumnError . fromString + fail = error . ValueError . fromString data Env = Env !LibPQ.Result !LibPQ.Row !LibPQ.Column !Bool !(IORef LibPQ.Column) @@ -19,7 +19,7 @@ data Env -- * Functions {-# INLINE run #-} -run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either RowError a) +run :: Row a -> (LibPQ.Result, LibPQ.Row, LibPQ.Column, Bool) -> IO (Either (Int, RowError) a) run (Row impl) (result, row, columnsAmount, integerDatetimes) = do columnRef <- newIORef 0 @@ -27,11 +27,11 @@ run (Row impl) (result, row, columnsAmount, integerDatetimes) = Left e -> do LibPQ.Col col <- readIORef columnRef -- -1 because succ is applied before the error is returned - pure $ Left (ColumnRowError (fromIntegral col - 1) e) + pure $ Left (fromIntegral col - 1, e) Right x -> pure $ Right x {-# INLINE error #-} -error :: ColumnError -> Row a +error :: RowError -> Row a error x = Row (ReaderT (const (ExceptT (pure (Left x))))) @@ -55,9 +55,9 @@ value valueDec = Right Nothing Just value -> fmap Just - $ first ValueColumnError + $ first ValueError $ {-# SCC "decode" #-} A.valueParser (Value.run valueDec integerDatetimes) value - else pure (Left EndOfInputColumnError) + else pure (Left EndOfInput) -- | -- Next value, decoded using the provided value decoder. @@ -65,4 +65,4 @@ value valueDec = nonNullValue :: Value.Value a -> Row a nonNullValue valueDec = {-# SCC "nonNullValue" #-} - value valueDec >>= maybe (error UnexpectedNullColumnError) pure + value valueDec >>= maybe (error UnexpectedNull) pure diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 85e7eb1b29..c7fe084f88 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -7,7 +7,7 @@ import Hasql.Prelude data SessionError = -- | Error during the execution of a query. -- Comes packed with the query template and a textual representation of the provided params. - QuerySessionError + QueryError -- | SQL template. ByteString -- | Parameters rendered as human-readable SQL literals. @@ -15,19 +15,19 @@ data SessionError -- | Error details. CommandError | -- | Error during the execution of a pipeline. - PipelineSessionError + PipelineError -- | Error details. CommandError deriving (Show, Eq, Typeable) instance Exception SessionError where displayException = \case - QuerySessionError query params commandError -> + QueryError query params commandError -> let queryContext :: Maybe (ByteString, Int) queryContext = case commandError of - ClientCommandError _ -> Nothing - ResultCommandError resultError -> case resultError of - ServerResultError _ message _ _ (Just position) -> Just (message, position) + ClientError _ -> Nothing + ResultError resultError -> case resultError of + ServerError _ message _ _ (Just position) -> Just (message, position) _ -> Nothing -- find the line number and position of the error @@ -60,32 +60,32 @@ instance Exception SessionError where prettyQuery = case queryContext of Nothing -> query Just (message, pos) -> formatErrorContext query message pos - in "QuerySessionError!\n" + in "QueryError!\n" <> "\n Query:\n" <> BC.unpack prettyQuery <> "\n" <> "\n Params: " <> show params - <> "\n Reason: " + <> "\n Error: " <> renderCommandErrorAsReason commandError - PipelineSessionError commandError -> - "PipelineSessionError!\n Reason: " <> renderCommandErrorAsReason commandError + PipelineError commandError -> + "PipelineError!\n Reason: " <> renderCommandErrorAsReason commandError where renderCommandErrorAsReason = \case - ClientCommandError (Just message) -> "Client error: " <> show message - ClientCommandError Nothing -> "Client error without details" - ResultCommandError resultError -> case resultError of - ServerResultError code message details hint position -> + ClientError (Just message) -> "Client error: " <> show message + ClientError Nothing -> "Client error without details" + ResultError resultError -> case resultError of + ServerError code message details hint position -> "Server error " <> BC.unpack code <> ": " <> BC.unpack message <> maybe "" (\d -> "\n Details: " <> BC.unpack d) details <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint - UnexpectedResultError message -> "Unexpected result: " <> show message - RowResultError row (ColumnRowError column rowError) -> + UnexpectedResult message -> "Unexpected result: " <> show message + RowError row column rowError -> "Row error: " <> show row <> ":" <> show column <> " " <> show rowError - UnexpectedAmountOfRowsResultError amount -> + UnexpectedAmountOfRows amount -> "Unexpected amount of rows: " <> show amount -- | @@ -93,19 +93,19 @@ instance Exception SessionError where data CommandError = -- | -- An error on the client-side, - -- with a message generated by the \"libpq\" driver. + -- with a message generated by the \"libpq\" library. -- Usually indicates problems with connection. - ClientCommandError (Maybe ByteString) + ClientError (Maybe ByteString) | -- | -- Some error with a command result. - ResultCommandError ResultError + ResultError ResultError deriving (Show, Eq) -- | -- An error with a command result. data ResultError = -- | An error reported by the DB. - ServerResultError + ServerError -- | __Code__. The SQLSTATE code for the error. It's recommended to use -- to work with those. @@ -124,43 +124,29 @@ data ResultError -- | __Position__. Error cursor position as an index into the original -- statement string. Positions are measured in characters not bytes. (Maybe Int) - | -- | The database returned an unexpected result. + | -- | + -- The database returned an unexpected result. -- Indicates an improper statement or a schema mismatch. - UnexpectedResultError - -- | Details. - Text - | -- | Error decoding a specific row. - RowResultError - -- | Row index. - Int - -- | Details. - RowError - | -- | Unexpected amount of rows. - UnexpectedAmountOfRowsResultError - -- | Actual amount of rows in the result. - Int - deriving (Show, Eq) - -data RowError - = -- | Error at a specific column. - ColumnRowError - -- | Column index. - Int - -- | Error details. - ColumnError + UnexpectedResult Text + | -- | + -- An error of the row reader, preceded by the indexes of the row and column. + RowError Int Int RowError + | -- | + -- An unexpected amount of rows. + UnexpectedAmountOfRows Int deriving (Show, Eq) -- | --- Error during the decoding of a specific column. -data ColumnError +-- An error during the decoding of a specific row. +data RowError = -- | -- Appears on the attempt to parse more columns than there are in the result. - EndOfInputColumnError + EndOfInput | -- | -- Appears on the attempt to parse a @NULL@ as some value. - UnexpectedNullColumnError + UnexpectedNull | -- | -- Appears when a wrong value parser is used. -- Comes with the error details. - ValueColumnError Text + ValueError Text deriving (Show, Eq) diff --git a/library/Hasql/IO.hs b/library/Hasql/IO.hs index 4262f0a427..fdbbbb69d7 100644 --- a/library/Hasql/IO.hs +++ b/library/Hasql/IO.hs @@ -99,7 +99,7 @@ getPreparedStatementKey connection registry template oidList = checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either CommandError ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ClientCommandError) $ LibPQ.errorMessage connection + False -> fmap (Left . ClientError) $ LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricStatement #-} diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index e60559ef76..4c76ae41bc 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -45,14 +45,14 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do runResultsDecoder :: forall a. Decoders.Results.Results a -> ExceptT SessionError IO a runResultsDecoder decoder = ExceptT - $ fmap (first PipelineSessionError) + $ fmap (first PipelineError) $ Decoders.Results.run decoder connection integerDatetimes runCommand :: IO Bool -> ExceptT SessionError IO () runCommand action = lift action >>= \case True -> pure () - False -> ExceptT (Left . PipelineSessionError . ClientCommandError <$> Pq.errorMessage connection) + False -> ExceptT (Left . PipelineError . ClientError <$> Pq.errorMessage connection) newtype Pipeline a = Pipeline @@ -106,7 +106,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sent <- Pq.sendPrepare connection key sql (mfilter (not . null) (Just oidList)) if sent then pure (True, Right (key, recv)) - else (False,) . Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection + else (False,) . Left . commandToSessionError . ClientError <$> Pq.errorMessage connection where recv = fmap (first commandToSessionError) @@ -118,7 +118,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re sendQuery key = Pq.sendQueryPrepared connection key valueAndFormatList Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = @@ -129,7 +129,7 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re runUnprepared = Pq.sendQueryParams connection sql (Encoders.Params.compileUnpreparedStatementData encoder integerDatetimes params) Pq.Binary >>= \case - False -> Left . commandToSessionError . ClientCommandError <$> Pq.errorMessage connection + False -> Left . commandToSessionError . ClientError <$> Pq.errorMessage connection True -> pure (Right recv) where recv = @@ -139,4 +139,4 @@ statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Re <*> Decoders.Results.run Decoders.Results.dropRemainders connection integerDatetimes commandToSessionError = - QuerySessionError sql (Encoders.Params.renderReadable encoder params) + QueryError sql (Encoders.Params.renderReadable encoder params) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index c84fcb74d2..8a8d381d06 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -35,7 +35,7 @@ sql sql = $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (first (QuerySessionError sql [])) + $ fmap (first (QueryError sql [])) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendNonparametricStatement pqConnection sql @@ -53,7 +53,7 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D $ ReaderT $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> ExceptT - $ fmap (first (QuerySessionError template (Encoders.Params.renderReadable paramsEncoder input))) + $ fmap (first (QueryError template (Encoders.Params.renderReadable paramsEncoder input))) $ withMVar pqConnectionRef $ \pqConnection -> do r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 1b3a7e0b03..5bc0aaf092 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -75,7 +75,7 @@ instance Profunctor Statement where -- | -- Refine the result of a statement, --- causing the running session to fail with the `UnexpectedResultError` error in case of a refinement failure. +-- causing the running session to fail with the `UnexpectedResult` error in case of a refinement failure. -- -- This function is especially useful for refining the results of statements produced with -- . diff --git a/tasty/Main.hs b/tasty/Main.hs index f6eee91806..9c4802aaf1 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -56,7 +56,7 @@ tree = in do x <- Connection.with (Session.run session) assertBool (show x) $ case x of - Right (Left (Session.QuerySessionError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True + Right (Left (Session.QueryError "select true where 1 = any ($1) and $2" ["[3, 7]", "\"a\""] _)) -> True _ -> False, testCase "IN simulation" $ let statement = @@ -218,7 +218,7 @@ tree = where resultTest = \case - Right (Left (Session.QuerySessionError _ _ (Session.ResultCommandError (Session.ServerResultError "26000" _ _ _ _)))) -> False + Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False _ -> True session = catchError session (const (pure ())) *> session diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index 3d9181089a..d86de7596b 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -5,7 +5,6 @@ module Hasql.TestingKit.TestingDsl Session.CommandError (..), Session.ResultError (..), Session.RowError (..), - Session.ColumnError (..), -- * Abstractions Session.Session, From 9150f4f13524e47749fedfd6e2cfeffdb3278323 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Apr 2024 09:37:53 +0300 Subject: [PATCH 1023/1204] Add docs --- library/Hasql/Pipeline/Core.hs | 19 +++++++++++++++++++ library/Hasql/Session/Core.hs | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 4c76ae41bc..d12e74d3c2 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -54,6 +54,23 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do True -> pure () False -> ExceptT (Left . PipelineError . ClientError <$> Pq.errorMessage connection) +-- | +-- Abstraction over the pipelining mode of execution of queries. +-- +-- It allows you to issue multiple queries to the server in much fewer network transactions. +-- If the amounts of sent and received data do not surpass the buffer sizes it will be just a single roundtrip. +-- Usually the buffer size is 8KB. +-- +-- This execution mode is much more efficient than running queries directly from 'Hasql.Session.Session', because in session every statement execution involves a dedicated network roundtrip. +-- An obvious question rises then: why not execute all queries like that? +-- +-- In situations where the parameters depend on the result of another query it is impossible to execute them in parallel, because the client needs to receive the results of one query before sending the request to execute the next query. +-- This reasoning is essentially the same as the one for the difference between 'Applicative' and 'Monad'. +-- That\'s why 'Pipeline' does not have the 'Monad' instance. +-- +-- To execute 'Pipeline' lift it into 'Session' via 'Hasql.Session.pipeline'. +-- +-- __Attention__: using this feature requires \"libpq\" of version >14. newtype Pipeline a = Pipeline ( Pq.Connection -> @@ -79,6 +96,8 @@ instance Applicative Pipeline where Right rRecv -> Right (liftA2 (<*>) lRecv rRecv) +-- | +-- Execute a statement in pipelining mode. statement :: params -> Statement.Statement params result -> Pipeline result statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Result decoder) preparable) = Pipeline run diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 8a8d381d06..0e5d139c23 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -46,7 +46,7 @@ sql sql = Decoders.Results.single Decoders.Result.noResult -- | --- Parameters and a specification of a parametric single-statement query to apply them to. +-- Execute a statement by providing parameters to it. statement :: params -> Statement.Statement params result -> Session result statement input (Statement.Statement template (Encoders.Params paramsEncoder) (Decoders.Result decoder) preparable) = Session @@ -60,6 +60,8 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 +-- | +-- Execute a pipeline. pipeline :: Pipeline.Pipeline result -> Session result pipeline pipeline = Session $ ReaderT \(Connection.Connection pqConnectionRef integerDatetimes registry) -> From ed10244e6fc6291f3f4e71ca216fb858e5952e1e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Apr 2024 12:56:31 +0300 Subject: [PATCH 1024/1204] Extend the docs --- hasql.cabal | 5 ++++ library/Hasql/Pipeline/Core.hs | 55 ++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 09001f2f6c..3e228fcb0d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -9,6 +9,11 @@ description: . The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. + This library requires to have the \"libpq\" library installed on the running system. + It comes distributed with PostgreSQL. + To be able to use the \"Pipeline\" feature you'll need \"libpq\" of version >14. + This feature does not however put any requirements on the version of the PostgreSQL server. + homepage: https://github.com/nikita-volkov/hasql bug-reports: https://github.com/nikita-volkov/hasql/issues author: Nikita Volkov diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index d12e74d3c2..ab70f84e97 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -55,22 +55,67 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do False -> ExceptT (Left . PipelineError . ClientError <$> Pq.errorMessage connection) -- | --- Abstraction over the pipelining mode of execution of queries. +-- Composable abstraction over the execution of queries in [the pipeline mode](https://www.postgresql.org/docs/current/libpq-pipeline-mode.html). -- -- It allows you to issue multiple queries to the server in much fewer network transactions. --- If the amounts of sent and received data do not surpass the buffer sizes it will be just a single roundtrip. --- Usually the buffer size is 8KB. +-- If the amounts of sent and received data do not surpass the buffer sizes in the driver and on the server it will be just a single roundtrip. +-- Typically the buffer size is 8KB. -- -- This execution mode is much more efficient than running queries directly from 'Hasql.Session.Session', because in session every statement execution involves a dedicated network roundtrip. -- An obvious question rises then: why not execute all queries like that? -- --- In situations where the parameters depend on the result of another query it is impossible to execute them in parallel, because the client needs to receive the results of one query before sending the request to execute the next query. +-- In situations where the parameters depend on the result of another query it is impossible to execute them in parallel, because the client needs to receive the results of one query before sending the request to execute the next. -- This reasoning is essentially the same as the one for the difference between 'Applicative' and 'Monad'. -- That\'s why 'Pipeline' does not have the 'Monad' instance. -- --- To execute 'Pipeline' lift it into 'Session' via 'Hasql.Session.pipeline'. +-- To execute 'Pipeline' lift it into 'Hasql.Session.Session' via 'Hasql.Session.pipeline'. -- -- __Attention__: using this feature requires \"libpq\" of version >14. +-- +-- == __Examples__ +-- +-- === Insert-Many or Batch-Insert +-- +-- You can use pipeline to turn a single-row insert query into an efficient multi-row insertion session. +-- In effect this should be comparable in performance to issuing a single multi-row insert statement. +-- +-- Given the following definition in a Statements module: +-- +-- @ +-- insertOrder :: 'Hasql.Statement.Statement' OrderDetails OrderId +-- @ +-- +-- You can lift it into the following session +-- +-- @ +-- insertOrders :: [OrderDetails] -> 'Hasql.Session.Session' [OrderId] +-- insertOrders songs = +-- 'Hasql.Session.pipeline' $ +-- forM songs $ \song -> +-- 'Hasql.Pipeline.statement' song Statements.insertOrder +-- @ +-- +-- === Combining Queries +-- +-- Given the following definitions in a Statements module: +-- +-- @ +-- selectOrderDetails :: 'Hasql.Statement.Statement' OrderId (Maybe OrderDetails) +-- selectOrderProducts :: 'Hasql.Statement.Statement' OrderId [OrderProduct] +-- selectOrderFinancialTransactions :: 'Hasql.Statement.Statement' OrderId [FinancialTransaction] +-- @ +-- +-- You can combine them into a session using the `ApplicativeDo` extension as follows: +-- +-- @ +-- selectEverythingAboutOrder :: OrderId -> 'Hasql.Session.Session' (Maybe OrderDetails, [OrderProduct], [FinancialTransaction]) +-- selectEverythingAboutOrder orderId = +-- 'Hasql.Session.pipeline' $ do +-- details <- 'Hasql.Pipeline.statement' orderId Statements.selectOrderDetails +-- products <- 'Hasql.Pipeline.statement' orderId Statements.selectOrderProducts +-- transactions <- 'Hasql.Pipeline.statement' orderId Statements.selectOrderFinancialTransactions +-- pure (details, products, transactions) +-- @ newtype Pipeline a = Pipeline ( Pq.Connection -> From 864767b86af595ee869b961ef9d43a1bb420664b Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Apr 2024 15:12:50 +0300 Subject: [PATCH 1025/1204] Remove rerebase from the internal library deps As a workaround for Hackage including the dependencies of internal libs in the public list of package dependencies. --- hasql.cabal | 6 +++++- testing-kit/Hasql/TestingKit/Preludes/Base.hs | 13 +++++++++++++ .../Hasql/TestingKit/Statements/BrokenSyntax.hs | 2 +- .../Hasql/TestingKit/Statements/GenerateSeries.hs | 2 +- .../Hasql/TestingKit/Statements/WrongDecoder.hs | 2 +- testing-kit/Hasql/TestingKit/TestingDsl.hs | 2 +- 6 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 testing-kit/Hasql/TestingKit/Preludes/Base.hs diff --git a/hasql.cabal b/hasql.cabal index 3e228fcb0d..0ea08f148e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -151,14 +151,18 @@ library testing-kit hs-source-dirs: testing-kit exposed-modules: Hasql.TestingKit.Constants + Hasql.TestingKit.Preludes.Base Hasql.TestingKit.Statements.BrokenSyntax Hasql.TestingKit.Statements.GenerateSeries Hasql.TestingKit.Statements.WrongDecoder Hasql.TestingKit.TestingDsl build-depends: + base, + bytestring, hasql, - rerebase <2, + transformers, + uuid, test-suite tasty import: base diff --git a/testing-kit/Hasql/TestingKit/Preludes/Base.hs b/testing-kit/Hasql/TestingKit/Preludes/Base.hs new file mode 100644 index 0000000000..544e13c685 --- /dev/null +++ b/testing-kit/Hasql/TestingKit/Preludes/Base.hs @@ -0,0 +1,13 @@ +module Hasql.TestingKit.Preludes.Base + ( module Exports, + ) +where + +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, finallyE, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) +import Data.Bifunctor as Exports +import Data.ByteString as Exports (ByteString) +import Data.Functor.Contravariant as Exports +import Data.Int as Exports +import Data.UUID as Exports (UUID) +import Prelude as Exports diff --git a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs index 6508beaaa1..9eac728b01 100644 --- a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs +++ b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs @@ -5,7 +5,7 @@ import Hasql.Encoders qualified as Encoders import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Prelude +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, diff --git a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs index 20fc044bdf..c19e0e7b1e 100644 --- a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs +++ b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs @@ -5,7 +5,7 @@ import Hasql.Encoders qualified as Encoders import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Prelude +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, diff --git a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs index 5a9a302e7b..27882aa991 100644 --- a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs +++ b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs @@ -5,7 +5,7 @@ import Hasql.Encoders qualified as Encoders import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Prelude +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index d86de7596b..15821d5632 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -24,7 +24,7 @@ import Hasql.Pipeline qualified as Pipeline import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement import Hasql.TestingKit.Constants qualified as Constants -import Prelude +import Hasql.TestingKit.Preludes.Base data Error = ConnectionError (Connection.ConnectionError) From 6c6c71930f67a1c0d88b0ce912403599a947540d Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Apr 2024 15:42:06 +0300 Subject: [PATCH 1026/1204] Update actions --- .github/workflows/format.yaml | 9 +++++++++ .github/workflows/{on-pr.yaml => on-pull-request.yaml} | 5 ++++- .github/workflows/on-push-to-master.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/format.yaml rename .github/workflows/{on-pr.yaml => on-pull-request.yaml} (72%) diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..243bc33f15 --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,9 @@ +name: Format + +on: + workflow_call: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit diff --git a/.github/workflows/on-pr.yaml b/.github/workflows/on-pull-request.yaml similarity index 72% rename from .github/workflows/on-pr.yaml rename to .github/workflows/on-pull-request.yaml index cd0c0b5600..bff6acaf18 100644 --- a/.github/workflows/on-pr.yaml +++ b/.github/workflows/on-pull-request.yaml @@ -3,6 +3,7 @@ on: types: [assigned, opened, synchronize, reopened, labeled, unlabeled] branches: - master + - supermajor - major - minor - patch @@ -10,10 +11,12 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + if: ${{github.event.pull_request.changed_files > 0}} + uses: ./.github/workflows/format.yaml secrets: inherit check: + if: ${{github.event.pull_request.changed_files > 0}} uses: ./.github/workflows/check.yaml secrets: inherit diff --git a/.github/workflows/on-push-to-master.yaml b/.github/workflows/on-push-to-master.yaml index 5a6b86a67c..e263b20a24 100644 --- a/.github/workflows/on-push-to-master.yaml +++ b/.github/workflows/on-push-to-master.yaml @@ -6,7 +6,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + uses: ./.github/workflows/format.yaml secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 1e89639b8d..82dcce473a 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -13,7 +13,7 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + uses: ./.github/workflows/format.yaml secrets: inherit check: From dde6c3953f13ecb0a3bd62dcc1948c0d667c1518 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 28 Apr 2024 15:50:51 +0300 Subject: [PATCH 1027/1204] Update the actions --- .github/workflows/on-pull-request-to-master.yaml | 14 ++++++++++++++ ...equest.yaml => on-pull-request-to-release.yaml} | 4 ---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/on-pull-request-to-master.yaml rename .github/workflows/{on-pull-request.yaml => on-pull-request-to-release.yaml} (68%) diff --git a/.github/workflows/on-pull-request-to-master.yaml b/.github/workflows/on-pull-request-to-master.yaml new file mode 100644 index 0000000000..eb79d34ddc --- /dev/null +++ b/.github/workflows/on-pull-request-to-master.yaml @@ -0,0 +1,14 @@ +on: + pull_request: + branches: + - master + +jobs: + + format: + uses: ./.github/workflows/format.yaml + secrets: inherit + + check: + uses: ./.github/workflows/check.yaml + secrets: inherit diff --git a/.github/workflows/on-pull-request.yaml b/.github/workflows/on-pull-request-to-release.yaml similarity index 68% rename from .github/workflows/on-pull-request.yaml rename to .github/workflows/on-pull-request-to-release.yaml index bff6acaf18..c931ab22cd 100644 --- a/.github/workflows/on-pull-request.yaml +++ b/.github/workflows/on-pull-request-to-release.yaml @@ -1,8 +1,6 @@ on: pull_request: - types: [assigned, opened, synchronize, reopened, labeled, unlabeled] branches: - - master - supermajor - major - minor @@ -11,12 +9,10 @@ on: jobs: format: - if: ${{github.event.pull_request.changed_files > 0}} uses: ./.github/workflows/format.yaml secrets: inherit check: - if: ${{github.event.pull_request.changed_files > 0}} uses: ./.github/workflows/check.yaml secrets: inherit From e8e5ee0ec3b0ce6f1f25aa51eabcfb89a9e44882 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 2 May 2024 07:44:02 +0300 Subject: [PATCH 1028/1204] Move the generated image --- ...status-model.png => connection-status-model.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename diagrams-output/{observation-status-model.png => connection-status-model.png} (100%) diff --git a/diagrams-output/observation-status-model.png b/diagrams-output/connection-status-model.png similarity index 100% rename from diagrams-output/observation-status-model.png rename to diagrams-output/connection-status-model.png From 3272c6470cb32094a419e2960f106c5951ff4044 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 2 May 2024 04:48:35 +0000 Subject: [PATCH 1029/1204] Set package version to 1.7 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 0ea08f148e..b019a220ee 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.6.4.4 +version: 1.7 category: Hasql, Database, PostgreSQL synopsis: An efficient PostgreSQL driver with a flexible mapping API description: From b2593b06299c3709dcffb0453cdd67ff104275af Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 2 May 2024 07:56:49 +0300 Subject: [PATCH 1030/1204] Update github actions --- .github/workflows/format.yaml | 9 +++++++++ .github/workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/format.yaml diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..243bc33f15 --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,9 @@ +name: Format + +on: + workflow_call: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 5144337b7c..aa9171eb3b 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -9,7 +9,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + uses: ./.github/workflows/format.yaml secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 32895c6be8..3c002ad7f2 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -15,9 +15,9 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + uses: ./.github/workflows/format.yaml secrets: inherit - + check: uses: ./.github/workflows/check.yaml secrets: inherit From 2fe9d8099eca8a067766e7024cbb2d8590a96563 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 2 May 2024 08:15:27 +0300 Subject: [PATCH 1031/1204] Migrate to hasql 1.7 --- .github/workflows/check.yaml | 2 +- CHANGELOG.md | 5 +++ hasql-pool.cabal | 3 +- src/library/exposed/Hasql/Pool.hs | 38 +++++++++++-------- src/library/exposed/Hasql/Pool/Observation.hs | 4 +- .../Hasql/Pool/SessionErrorDestructors.hs | 10 +++++ 6 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 src/library/other/Hasql/Pool/SessionErrorDestructors.hs diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index b39bceefae..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -11,7 +11,7 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" ignore-haddock: true ignore-cabal-check: true diff --git a/CHANGELOG.md b/CHANGELOG.md index cdbbc2a8bd..e4a8390fa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.2 + +- Migrated to `hasql-1.7` +- Changed references to `QueryError` in observations to `SessionError` + # 1.1 - `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details. diff --git a/hasql-pool.cabal b/hasql-pool.cabal index c336099cc8..61e3fdbee1 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -85,11 +85,12 @@ library Hasql.Pool.Config.Config Hasql.Pool.Config.Setting Hasql.Pool.Prelude + Hasql.Pool.SessionErrorDestructors build-depends: base >=4.11 && <5, bytestring >=0.10 && <0.14, - hasql >=1.6.0.1 && <1.7, + hasql >=1.7 && <1.8, stm >=2.5 && <3, text >=1.2 && <3, time >=1.9 && <2, diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 633fdc339e..0f7484c826 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -18,6 +18,7 @@ import qualified Hasql.Connection as Connection import qualified Hasql.Pool.Config.Config as Config import Hasql.Pool.Observation import Hasql.Pool.Prelude +import qualified Hasql.Pool.SessionErrorDestructors as ErrorsDestruction import qualified Hasql.Session as Session -- | A connection tagged with metadata. @@ -175,11 +176,12 @@ use Pool {..} sess = do Session.run poolInitSession connection >>= \case Left err -> do Connection.release connection - case err of - Session.QueryError _ _ (Session.ClientError details) -> do - poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) - _ -> - poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err))) + ErrorsDestruction.reset + ( \details -> do + poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) + ) + (poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err)))) + err return $ Left $ SessionUsageError err Right () -> do poolObserver (ConnectionObservation id (ReadyForUseConnectionStatus EstablishedConnectionReadyForUseReason)) @@ -209,16 +211,20 @@ use Pool {..} sess = do Left exc -> do returnConn throwIO exc - Right (Left err) -> case err of - Session.QueryError _ _ (Session.ClientError details) -> do - Connection.release (entryConnection entry) - atomically $ modifyTVar' poolCapacity succ - poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) - return $ Left $ SessionUsageError err - _ -> do - returnConn - poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err))) - return $ Left $ SessionUsageError err + Right (Left err) -> + ErrorsDestruction.reset + ( \details -> do + Connection.release (entryConnection entry) + atomically $ modifyTVar' poolCapacity succ + poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details)))) + return $ Left $ SessionUsageError err + ) + ( do + returnConn + poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err))) + return $ Left $ SessionUsageError err + ) + err Right (Right res) -> do returnConn poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionSucceededConnectionReadyForUseReason)) @@ -239,7 +245,7 @@ data UsageError = -- | Attempt to establish a connection failed. ConnectionUsageError Connection.ConnectionError | -- | Session execution failed. - SessionUsageError Session.QueryError + SessionUsageError Session.SessionError | -- | Timeout acquiring a connection. AcquisitionTimeoutUsageError deriving (Show, Eq) diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index 151b04343d..ede595448b 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -40,7 +40,7 @@ data ConnectionReadyForUseReason = -- | Connection just got established. EstablishedConnectionReadyForUseReason | -- | Session execution ended with a failure that does not require a connection reset. - SessionFailedConnectionReadyForUseReason Session.QueryError + SessionFailedConnectionReadyForUseReason Session.SessionError | -- | Session execution ended with success. SessionSucceededConnectionReadyForUseReason deriving (Show, Eq) @@ -56,5 +56,5 @@ data ConnectionTerminationReason | -- | User has invoked the 'Hasql.Pool.release' procedure. ReleaseConnectionTerminationReason | -- | Initialization session failure. - InitializationErrorTerminationReason Session.QueryError + InitializationErrorTerminationReason Session.SessionError deriving (Show, Eq) diff --git a/src/library/other/Hasql/Pool/SessionErrorDestructors.hs b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs new file mode 100644 index 0000000000..a0e62948e2 --- /dev/null +++ b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs @@ -0,0 +1,10 @@ +module Hasql.Pool.SessionErrorDestructors where + +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session + +reset :: (Maybe ByteString -> x) -> x -> Session.SessionError -> x +reset onReset onNoReset = \case + Session.QueryError _ _ (Session.ClientError details) -> onReset details + Session.PipelineError (Session.ClientError details) -> onReset details + _ -> onNoReset From 4339d1c99a0e35cad4dbf78ebd009765787867fe Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 2 May 2024 08:16:46 +0300 Subject: [PATCH 1032/1204] Update the extensions --- hasql-pool.cabal | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 61e3fdbee1..0dc1954ca3 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -22,7 +22,10 @@ source-repository head location: git://github.com/nikita-volkov/hasql-pool.git common base-settings + default-language: Haskell2010 default-extensions: + ApplicativeDo + Arrows BangPatterns BlockArguments ConstraintKinds @@ -40,32 +43,27 @@ common base-settings FunctionalDependencies GADTs GeneralizedNewtypeDeriving - InstanceSigs + ImportQualifiedPost LambdaCase LiberalTypeSynonyms - MagicHash MultiParamTypeClasses MultiWayIf NoImplicitPrelude NoMonomorphismRestriction NumericUnderscores OverloadedStrings - ParallelListComp PatternGuards QuasiQuotes RankNTypes RecordWildCards + RoleAnnotations ScopedTypeVariables StandaloneDeriving StrictData - TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators - UnboxedTuples - - default-language: Haskell2010 library import: base-settings From b5758a14c9ff72ce8ba801d268cb48057bd000ec Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 2 May 2024 05:17:54 +0000 Subject: [PATCH 1033/1204] Format --- src/library/exposed/Hasql/Pool.hs | 14 ++++++------- src/library/exposed/Hasql/Pool/Config.hs | 4 ++-- .../exposed/Hasql/Pool/Config/Defaults.hs | 4 ++-- src/library/exposed/Hasql/Pool/Observation.hs | 2 +- src/library/other/Hasql/Pool/Config/Config.hs | 6 +++--- .../other/Hasql/Pool/Config/Setting.hs | 6 +++--- .../Hasql/Pool/SessionErrorDestructors.hs | 2 +- src/test/Main.hs | 20 +++++++++---------- 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 0f7484c826..3e38aa6ef8 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -10,16 +10,16 @@ module Hasql.Pool ) where -import qualified Data.Text.Encoding as Text -import qualified Data.Text.Encoding.Error as Text -import qualified Data.UUID.V4 as Uuid +import Data.Text.Encoding qualified as Text +import Data.Text.Encoding.Error qualified as Text +import Data.UUID.V4 qualified as Uuid import Hasql.Connection (Connection) -import qualified Hasql.Connection as Connection -import qualified Hasql.Pool.Config.Config as Config +import Hasql.Connection qualified as Connection +import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation import Hasql.Pool.Prelude -import qualified Hasql.Pool.SessionErrorDestructors as ErrorsDestruction -import qualified Hasql.Session as Session +import Hasql.Pool.SessionErrorDestructors qualified as ErrorsDestruction +import Hasql.Session qualified as Session -- | A connection tagged with metadata. data Entry = Entry diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs index 28821e43e6..b55b98d656 100644 --- a/src/library/exposed/Hasql/Pool/Config.hs +++ b/src/library/exposed/Hasql/Pool/Config.hs @@ -14,8 +14,8 @@ module Hasql.Pool.Config ) where -import qualified Hasql.Pool.Config.Config as Config -import qualified Hasql.Pool.Config.Setting as Setting +import Hasql.Pool.Config.Config qualified as Config +import Hasql.Pool.Config.Setting qualified as Setting import Hasql.Pool.Prelude -- | Compile config from a list of settings. diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/library/exposed/Hasql/Pool/Config/Defaults.hs index da09ce0e7a..2245ee9f39 100644 --- a/src/library/exposed/Hasql/Pool/Config/Defaults.hs +++ b/src/library/exposed/Hasql/Pool/Config/Defaults.hs @@ -1,9 +1,9 @@ module Hasql.Pool.Config.Defaults where -import qualified Hasql.Connection as Connection +import Hasql.Connection qualified as Connection import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session -- | -- 3 connections. diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs index ede595448b..e364b0074b 100644 --- a/src/library/exposed/Hasql/Pool/Observation.hs +++ b/src/library/exposed/Hasql/Pool/Observation.hs @@ -5,7 +5,7 @@ module Hasql.Pool.Observation where import Hasql.Pool.Prelude -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session -- | An observation of a change of the state of a pool. data Observation diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 12329cd6fd..60ed09239e 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -1,10 +1,10 @@ module Hasql.Pool.Config.Config where -import qualified Hasql.Connection as Connection -import qualified Hasql.Pool.Config.Defaults as Defaults +import Hasql.Connection qualified as Connection +import Hasql.Pool.Config.Defaults qualified as Defaults import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session -- | Configufation for Hasql connection pool. data Config = Config diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index 9d02065d31..c978c01be3 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -1,11 +1,11 @@ module Hasql.Pool.Config.Setting where -import qualified Hasql.Connection as Connection +import Hasql.Connection qualified as Connection import Hasql.Pool.Config.Config (Config) -import qualified Hasql.Pool.Config.Config as Config +import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session apply :: Setting -> Config -> Config apply (Setting run) = run diff --git a/src/library/other/Hasql/Pool/SessionErrorDestructors.hs b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs index a0e62948e2..1d41a45cc7 100644 --- a/src/library/other/Hasql/Pool/SessionErrorDestructors.hs +++ b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs @@ -1,7 +1,7 @@ module Hasql.Pool.SessionErrorDestructors where import Hasql.Pool.Prelude -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session reset :: (Maybe ByteString -> x) -> x -> Session.SessionError -> x reset onReset onNoReset = \case diff --git a/src/test/Main.hs b/src/test/Main.hs index fc159ac65c..609dbce7a3 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -1,17 +1,17 @@ module Main where import Control.Concurrent.Async (race) -import qualified Data.ByteString.Char8 as B8 -import qualified Data.Text as Text -import qualified Hasql.Connection as Connection -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders as Encoders +import Data.ByteString.Char8 qualified as B8 +import Data.Text qualified as Text +import Hasql.Connection qualified as Connection +import Hasql.Decoders qualified as Decoders +import Hasql.Encoders qualified as Encoders import Hasql.Pool -import qualified Hasql.Pool.Config as Config -import qualified Hasql.Session as Session -import qualified Hasql.Statement as Statement -import qualified System.Environment -import qualified System.Random.Stateful as Random +import Hasql.Pool.Config qualified as Config +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import System.Environment qualified +import System.Random.Stateful qualified as Random import Test.Hspec import Prelude From d408f004803d732c2d48a691c9a08e5c17772096 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Thu, 2 May 2024 05:30:47 +0000 Subject: [PATCH 1034/1204] Set package version to 1.2 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 0dc1954ca3..7ff862a08f 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.1 +version: 1.2 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 088cb6f7ec9194d9987c308b25ae23ce5fd0bce3 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 2 May 2024 13:39:39 -0400 Subject: [PATCH 1035/1204] Report errors when LISTEN or UNLISTEN fail --- src/Hasql/Notifications.hs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index d11c6052d1..0060066c9f 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -20,9 +20,10 @@ where import Control.Concurrent (threadDelay, threadWaitRead) import Control.Exception (Exception, throw) -import Control.Monad (forever, unless, void) +import Control.Monad (forever, unless, void, when) import Data.ByteString.Char8 (ByteString) import Data.Functor.Contravariant (contramap) +import Data.Maybe (isNothing) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T @@ -117,7 +118,11 @@ listen :: listen con channel = void $ withLibPQConnection con execListen where - execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel + execListen pqCon = do + result <- PQ.exec pqCon $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel + when (isNothing result) $ do + mError <- PQ.errorMessage pqCon + panic $ maybe "Error executing LISTEN" (T.unpack . T.decodeUtf8Lenient) mError -- | Given a Hasql Connection and a channel sends a unlisten command to the database unlisten :: @@ -127,9 +132,13 @@ unlisten :: PgIdentifier -> IO () unlisten con channel = - void $ withLibPQConnection con execListen + void $ withLibPQConnection con execUnlisten where - execListen pqCon = void $ PQ.exec pqCon $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel + execUnlisten pqCon = do + result <- PQ.exec pqCon $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel + when (isNothing result) $ do + mError <- PQ.errorMessage pqCon + panic $ maybe "Error executing UNLISTEN" (T.unpack . T.decodeUtf8Lenient) mError -- | -- Given a function that handles notifications and a Hasql connection it will listen @@ -186,5 +195,6 @@ waitForNotifications sendNotification con = panic $ maybe "Error checking for PostgreSQL notifications" (T.unpack . T.decodeUtf8Lenient) mError Just notification -> sendNotification (PQ.notifyRelname notification) (PQ.notifyExtra notification) - panic :: String -> a - panic a = throw (FatalError a) + +panic :: String -> a +panic a = throw (FatalError a) From 490179571542f17c4549ade2d3e86a8166857ae1 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 2 May 2024 13:48:36 -0400 Subject: [PATCH 1036/1204] Extract executeOrPanic --- src/Hasql/Notifications.hs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 0060066c9f..903e7ccc24 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -118,11 +118,7 @@ listen :: listen con channel = void $ withLibPQConnection con execListen where - execListen pqCon = do - result <- PQ.exec pqCon $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel - when (isNothing result) $ do - mError <- PQ.errorMessage pqCon - panic $ maybe "Error executing LISTEN" (T.unpack . T.decodeUtf8Lenient) mError + execListen = executeOrPanic $ T.encodeUtf8 $ "LISTEN " <> fromPgIdentifier channel -- | Given a Hasql Connection and a channel sends a unlisten command to the database unlisten :: @@ -134,11 +130,14 @@ unlisten :: unlisten con channel = void $ withLibPQConnection con execUnlisten where - execUnlisten pqCon = do - result <- PQ.exec pqCon $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel - when (isNothing result) $ do - mError <- PQ.errorMessage pqCon - panic $ maybe "Error executing UNLISTEN" (T.unpack . T.decodeUtf8Lenient) mError + execUnlisten = executeOrPanic $ T.encodeUtf8 $ "UNLISTEN " <> fromPgIdentifier channel + +executeOrPanic :: ByteString -> PQ.Connection -> IO () +executeOrPanic cmd pqCon = do + result <- PQ.exec pqCon cmd + when (isNothing result) $ do + mError <- PQ.errorMessage pqCon + panic $ maybe ("Error executing" <> show cmd) (T.unpack . T.decodeUtf8Lenient) mError -- | -- Given a function that handles notifications and a Hasql connection it will listen From f1758f700b3fda0bd74cc643a45ac4f4975fae94 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 4 May 2024 18:37:41 -0400 Subject: [PATCH 1037/1204] Now we have the proper error handling in case the LISTEN or UNLISTEN fail --- src/Hasql/Notifications.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 903e7ccc24..09d2952c29 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -23,7 +23,6 @@ import Control.Exception (Exception, throw) import Control.Monad (forever, unless, void, when) import Data.ByteString.Char8 (ByteString) import Data.Functor.Contravariant (contramap) -import Data.Maybe (isNothing) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T @@ -134,10 +133,16 @@ unlisten con channel = executeOrPanic :: ByteString -> PQ.Connection -> IO () executeOrPanic cmd pqCon = do - result <- PQ.exec pqCon cmd - when (isNothing result) $ do - mError <- PQ.errorMessage pqCon - panic $ maybe ("Error executing" <> show cmd) (T.unpack . T.decodeUtf8Lenient) mError + mResult <- PQ.exec pqCon cmd + case mResult of + Nothing -> do + mError <- PQ.errorMessage pqCon + panic $ maybe ("Error executing" <> show cmd) (T.unpack . T.decodeUtf8Lenient) mError + Just result -> do + status <- PQ.resultStatus result + when (status == PQ.FatalError) $ do + mError <- PQ.resultErrorMessage result + panic $ maybe ("Error executing" <> show cmd) (T.unpack . T.decodeUtf8Lenient) mError -- | -- Given a function that handles notifications and a Hasql connection it will listen From 34b68be3921f7b8abb396bd39312240ac9e93b9e Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 5 May 2024 16:00:01 -0400 Subject: [PATCH 1038/1204] Remove stack from repo since I am currently working only with cabal --- .github/workflows/ci.yml | 4 ++-- stack.yaml | 7 ------- stack.yaml.lock | 12 ------------ 3 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 stack.yaml delete mode 100644 stack.yaml.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a7a821199..9e66458423 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: branches: [main] jobs: - stack: + test: name: build / ${{ matrix.os }} / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: @@ -41,7 +41,7 @@ jobs: name: Cache ~/dist-newstyle with: path: ~/dist-newstyle - key: ${{ matrix.os }}-${{ matrix.ghc }}-v3 + key: ${{ matrix.os }}-${{ matrix.ghc }}-v4 - name: Build Dependencies run: | diff --git a/stack.yaml b/stack.yaml deleted file mode 100644 index 68caf3c73c..0000000000 --- a/stack.yaml +++ /dev/null @@ -1,7 +0,0 @@ -resolver: lts-21.7 - -packages: -- . - -# extra-deps: [] - diff --git a/stack.yaml.lock b/stack.yaml.lock deleted file mode 100644 index 0161ee7805..0000000000 --- a/stack.yaml.lock +++ /dev/null @@ -1,12 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files - -packages: [] -snapshots: -- completed: - sha256: 23bb9bb355bfdb1635252e120a29b712f0d5e8a6c6a65c5ab5bd6692f46c438e - size: 640457 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/7.yaml - original: lts-21.7 From b017d66968b6e87ff96f490bc1252fa73f131bf5 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 5 May 2024 22:16:02 -0400 Subject: [PATCH 1039/1204] Bump minor version number --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index d8afae6305..6dbd19d1cd 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.1.1 +version: 0.2.2.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 4ef3839ea9ffbdc1aad773072ebcbd747764815e Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 5 May 2024 17:39:53 -0400 Subject: [PATCH 1040/1204] Upgrade hasql-pool to 1.2. Had to drop compatibility with previous versions since QueryError now is a data constructor for SessionError --- hasql-notifications.cabal | 2 +- src/Hasql/Notifications.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 6dbd19d1cd..030633ada4 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -19,7 +19,7 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 , text >= 2 && < 2.2 - , hasql-pool >= 0.4 && < 1.1 + , hasql-pool >= 1.2 && < 1.3 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 , hasql >= 0.19 diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 09d2952c29..dd75d2ebc8 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -81,7 +81,7 @@ notify :: PgIdentifier -> -- | Payload to be sent with the notification Text -> - IO (Either S.QueryError ()) + IO (Either S.SessionError ()) notify con channel mesg = run (sql $ T.encodeUtf8 ("NOTIFY " <> fromPgIdentifier channel <> ", '" <> mesg <> "'")) con From 48f92a83683c7e7f4a7ee7d7bae2b470e5a9dbdf Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 5 May 2024 22:21:52 -0400 Subject: [PATCH 1041/1204] Add some missing upper bounds --- hasql-notifications.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 030633ada4..c2fc5cfd41 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -17,12 +17,12 @@ library hs-source-dirs: src exposed-modules: Hasql.Notifications build-depends: base >= 4.7 && < 5 - , bytestring >= 0.10.8.2 + , bytestring >= 0.10.8.2 && < 0.12 , text >= 2 && < 2.2 , hasql-pool >= 1.2 && < 1.3 , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 - , hasql >= 0.19 + , hasql >= 0.19 && < 1.8 default-language: Haskell2010 ghc-options: -Wall From 5f5a11596167e4bc21f8f0fd0342ba99e0f4136f Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sun, 5 May 2024 22:40:51 -0400 Subject: [PATCH 1042/1204] Bump minor version number --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index c2fc5cfd41..7e44b888cb 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.2.0 +version: 0.2.3.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From f9746b0c4fd20bbb042ab4fc4a06b9b8512dc6a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 May 2024 08:04:19 +0300 Subject: [PATCH 1043/1204] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9fad67d8a5..44cf8284f6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Summary +# Fast PostgreSQL driver for Haskell with a flexible mapping API Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet flexible mapping API. It targets both the users, who need maximum control, and the users who face the typical tasks of DB-powered applications, providing them with higher-level APIs. Currently it is known to be [the fastest driver](https://nikita-volkov.github.io/hasql-benchmarks/) in the Haskell ecosystem. @@ -7,7 +7,7 @@ Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet fl # Status -[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) +[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) [![Hackage Deps](https://img.shields.io/hackage-deps/v/hasql.svg)](http://packdeps.haskellers.com/reverse/hasql) Hasql is production-ready, actively maintained and the API is pretty stable. It's used by many companies and most notably by the [Postgrest](https://postgrest.org/) project. From 384f22a1a16002c8bb7e877a2fa3142c7253ac6e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 May 2024 08:10:05 +0300 Subject: [PATCH 1044/1204] Update synopsis --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index b019a220ee..78e7584149 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -2,7 +2,7 @@ cabal-version: 3.0 name: hasql version: 1.7 category: Hasql, Database, PostgreSQL -synopsis: An efficient PostgreSQL driver with a flexible mapping API +synopsis: Fast PostgreSQL driver with a flexible mapping API description: Root of the \"hasql\" ecosystem. For details and tutorials see From 023a047d9beb530066e6fe433fc4f3ca0f9051cd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 May 2024 09:30:21 +0300 Subject: [PATCH 1045/1204] Modernize and format --- .github/workflows/format.yaml | 9 ++ .../workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 9 +- hasql-transaction.cabal | 143 ++++++++---------- 4 files changed, 78 insertions(+), 85 deletions(-) create mode 100644 .github/workflows/format.yaml diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..243bc33f15 --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,9 @@ +name: Format + +on: + workflow_call: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 79c21f5dcc..aa9171eb3b 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -9,7 +9,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 9024112507..dd3f3b3ca4 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -10,14 +10,14 @@ on: concurrency: group: release - cancel-in-progress: false + cancel-in-progress: true jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit - + check: uses: ./.github/workflows/check.yaml secrets: inherit @@ -26,7 +26,8 @@ jobs: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 secrets: inherit with: prefix-tag-with-v: false + docs: true diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 02c14b6cbe..9d96b026c8 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,31 +1,29 @@ -name: hasql-transaction -version: 1.1.0.1 -category: Hasql, Database, PostgreSQL +cabal-version: 3.0 +name: hasql-transaction +version: 1.1.0.1 +category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql -homepage: https://github.com/nikita-volkov/hasql-transaction -bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE -build-type: Simple -cabal-version: >=1.10 +homepage: https://github.com/nikita-volkov/hasql-transaction +bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2015, Nikita Volkov +license: MIT +license-file: LICENSE extra-source-files: CHANGELOG.md source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-transaction.git -library - hs-source-dirs: library +common base + default-language: Haskell2010 default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows + ApplicativeDo BangPatterns + BlockArguments ConstraintKinds DataKinds DefaultSignatures @@ -34,32 +32,51 @@ library DeriveFunctor DeriveGeneric DeriveTraversable + DerivingVia EmptyDataDecls FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving + ImportQualifiedPost LambdaCase LiberalTypeSynonyms - MagicHash MultiParamTypeClasses MultiWayIf + NoImplicitPrelude + NoMonomorphismRestriction OverloadedStrings - ParallelListComp PatternGuards QuasiQuotes RankNTypes RecordWildCards + RoleAnnotations ScopedTypeVariables StandaloneDeriving - TemplateHaskell + StrictData TupleSections TypeFamilies TypeOperators - UnboxedTuples - default-language: Haskell2010 +common executable + import: base + ghc-options: + -O2 + -threaded + -with-rtsopts=-N + -rtsopts + -funbox-strict-fields + +common test + import: base + ghc-options: + -threaded + -with-rtsopts=-N + +library + import: base + hs-source-dirs: library exposed-modules: Hasql.Transaction Hasql.Transaction.Sessions @@ -67,72 +84,38 @@ library other-modules: Hasql.Transaction.Config Hasql.Transaction.Private.Prelude - Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.SQL + Hasql.Transaction.Private.Sessions Hasql.Transaction.Private.Statements Hasql.Transaction.Private.Transaction build-depends: - base >=4.12 && <5 - , bytestring >=0.10 && <0.13 - , bytestring-tree-builder >=0.2.7.8 && <0.3 - , contravariant >=1.3 && <2 - , contravariant-extras >=0.3 && <0.4 - , hasql >=1.6 && <1.7 - , mtl >=2.2 && <3 - , transformers >=0.5 && <0.7 + base >=4.12 && <5, + bytestring >=0.10 && <0.13, + bytestring-tree-builder >=0.2.7.8 && <0.3, + contravariant >=1.3 && <2, + contravariant-extras >=0.3 && <0.4, + hasql >=1.6 && <1.7, + mtl >=2.2 && <3, + transformers >=0.5 && <0.7, test-suite conflicts-test - type: exitcode-stdio-1.0 - hs-source-dirs: conflicts-test - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 - main-is: Main.hs + import: test + type: exitcode-stdio-1.0 + hs-source-dirs: conflicts-test + main-is: Main.hs other-modules: Main.Statements Main.Transactions - ghc-options: -O2 -threaded -with-rtsopts=-N + ghc-options: + -O2 + -threaded + -with-rtsopts=-N + build-depends: - async >=2.1 && <3 - , contravariant-extras >=0.3 && <0.4 - , hasql - , hasql-transaction - , rerebase >=1.11 && <2 + async >=2.1 && <3, + contravariant-extras >=0.3 && <0.4, + hasql, + hasql-transaction, + rerebase >=1.11 && <2, From 6939fa776d22d015b7c99e6e3c998abb8cf0bb77 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 7 May 2024 06:36:57 +0000 Subject: [PATCH 1046/1204] Format --- conflicts-test/Main.hs | 14 +++++++------- conflicts-test/Main/Statements.hs | 4 ++-- conflicts-test/Main/Transactions.hs | 2 +- library/Hasql/Transaction/Private/SQL.hs | 2 +- library/Hasql/Transaction/Private/Sessions.hs | 2 +- library/Hasql/Transaction/Private/Statements.hs | 8 ++++---- library/Hasql/Transaction/Private/Transaction.hs | 6 +++--- library/Hasql/Transaction/Sessions.hs | 6 +++--- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 1dda5c3a91..4a733b50bd 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -1,12 +1,12 @@ module Main where -import qualified Control.Concurrent.Async as F -import qualified Hasql.Connection as A -import qualified Hasql.Session as B -import qualified Hasql.Transaction as C -import qualified Hasql.Transaction.Sessions as G -import qualified Main.Statements as D -import qualified Main.Transactions as E +import Control.Concurrent.Async qualified as F +import Hasql.Connection qualified as A +import Hasql.Session qualified as B +import Hasql.Transaction qualified as C +import Hasql.Transaction.Sessions qualified as G +import Main.Statements qualified as D +import Main.Transactions qualified as E import Prelude main :: IO () diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index d7c0b6fd0f..676c459fa8 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,8 +1,8 @@ module Main.Statements where import Contravariant.Extras -import qualified Hasql.Decoders as D -import qualified Hasql.Encoders as E +import Hasql.Decoders qualified as D +import Hasql.Encoders qualified as E import Hasql.Statement import Prelude diff --git a/conflicts-test/Main/Transactions.hs b/conflicts-test/Main/Transactions.hs index 8e0001c72f..69b45360cf 100644 --- a/conflicts-test/Main/Transactions.hs +++ b/conflicts-test/Main/Transactions.hs @@ -1,7 +1,7 @@ module Main.Transactions where import Hasql.Transaction -import qualified Main.Statements as A +import Main.Statements qualified as A import Prelude createSchema :: Transaction () diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs index 6c7b80d813..130501754e 100644 --- a/library/Hasql/Transaction/Private/SQL.hs +++ b/library/Hasql/Transaction/Private/SQL.hs @@ -1,6 +1,6 @@ module Hasql.Transaction.Private.SQL where -import qualified ByteString.TreeBuilder as D +import ByteString.TreeBuilder qualified as D import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 8db6433b21..52744439af 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -3,7 +3,7 @@ module Hasql.Transaction.Private.Sessions where import Hasql.Session import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude -import qualified Hasql.Transaction.Private.Statements as Statements +import Hasql.Transaction.Private.Statements qualified as Statements {- We may want to diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 7eb43c6ee3..9ab5e4ae12 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -1,11 +1,11 @@ module Hasql.Transaction.Private.Statements where -import qualified Hasql.Decoders as C -import qualified Hasql.Encoders as B -import qualified Hasql.Statement as A +import Hasql.Decoders qualified as C +import Hasql.Encoders qualified as B +import Hasql.Statement qualified as A import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude -import qualified Hasql.Transaction.Private.SQL as D +import Hasql.Transaction.Private.SQL qualified as D -- * Transactions diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index e2a03436a8..7f15e2cef0 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -1,10 +1,10 @@ module Hasql.Transaction.Private.Transaction where -import qualified Hasql.Session as B -import qualified Hasql.Statement as A +import Hasql.Session qualified as B +import Hasql.Statement qualified as A import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude -import qualified Hasql.Transaction.Private.Sessions as D +import Hasql.Transaction.Private.Sessions qualified as D -- | -- A composable abstraction over the retryable transactions. diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 018ec3136c..2b2dc56513 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -9,9 +9,9 @@ module Hasql.Transaction.Sessions where import Data.Bool -import qualified Hasql.Session as B -import qualified Hasql.Transaction.Config as C -import qualified Hasql.Transaction.Private.Transaction as A +import Hasql.Session qualified as B +import Hasql.Transaction.Config qualified as C +import Hasql.Transaction.Private.Transaction qualified as A -- | -- Execute the transaction using the provided isolation level and mode. From b6b52a9feab4a677103d73edac5e025cca62a239 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 May 2024 09:37:42 +0300 Subject: [PATCH 1047/1204] Update the hasql dep --- .github/workflows/check.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 2 +- hasql-transaction.cabal | 2 +- library/Hasql/Transaction/Private/Sessions.hs | 17 +++++++++++------ 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index b39bceefae..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -11,7 +11,7 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" ignore-haddock: true ignore-cabal-check: true diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index dd3f3b3ca4..1e8cc5169c 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -10,7 +10,7 @@ on: concurrency: group: release - cancel-in-progress: true + cancel-in-progress: false jobs: diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 9d96b026c8..4b43e22dd0 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -95,7 +95,7 @@ library bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, contravariant-extras >=0.3 && <0.4, - hasql >=1.6 && <1.7, + hasql >=1.7 && <1.8, mtl >=2.2 && <3, transformers >=0.5 && <0.7, diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 52744439af..e6ff8db8a3 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -37,10 +37,15 @@ commitOrAbort commit preparable = then statement () (Statements.commitTransaction preparable) else statement () (Statements.abortTransaction preparable) -handleTransactionError :: QueryError -> Session a -> Session a +handleTransactionError :: SessionError -> Session a -> Session a handleTransactionError error onTransactionError = case error of - QueryError _ _ (ResultError (ServerError code _ _ _ _)) -> case code of - "40001" -> onTransactionError - "40P01" -> onTransactionError - _ -> throwError error - error -> throwError error + QueryError _ _ clientError -> onCommandError clientError + PipelineError clientError -> onCommandError clientError + where + onCommandError = \case + ResultError (ServerError code _ _ _ _) -> + case code of + "40001" -> onTransactionError + "40P01" -> onTransactionError + _ -> throwError error + _ -> throwError error From e39b7deb94b2fccb18577fff92f4aa215a4863ba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 May 2024 09:41:02 +0300 Subject: [PATCH 1048/1204] Add tested-with --- hasql-transaction.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 4b43e22dd0..98a1c64d70 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -13,6 +13,7 @@ copyright: (c) 2015, Nikita Volkov license: MIT license-file: LICENSE extra-source-files: CHANGELOG.md +tested-with: GHC == { 9.8.2, 8.10.1 } source-repository head type: git From 46e6c515ca19e3b9e9ad44e6a7018df2ea2d6597 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 7 May 2024 06:42:52 +0000 Subject: [PATCH 1049/1204] Format --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 98a1c64d70..ae0628c779 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -13,7 +13,7 @@ copyright: (c) 2015, Nikita Volkov license: MIT license-file: LICENSE extra-source-files: CHANGELOG.md -tested-with: GHC == { 9.8.2, 8.10.1 } +tested-with: ghc ==9.8.2 || ==8.10.1 source-repository head type: git From 66b32f7407575cb7fd08ed449d9e0c5d9f2d20ef Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 7 May 2024 06:57:23 +0000 Subject: [PATCH 1050/1204] Set package version to 1.1.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index ae0628c779..a3beff2da2 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.1.0.1 +version: 1.1.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 98c18905b0be7211fb3fd47298b1d7bcd6627809 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 07:45:02 +0300 Subject: [PATCH 1051/1204] Update the docs on libpq and etc --- hasql.cabal | 23 +++++++++++++++-------- library/Hasql/Pipeline/Core.hs | 2 -- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 78e7584149..ef5eff7d43 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -5,14 +5,21 @@ category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: Root of the \"hasql\" ecosystem. - For details and tutorials see - . - The API comes free from all kinds of exceptions. All error-reporting is explicit and is presented using the 'Either' type. - - This library requires to have the \"libpq\" library installed on the running system. - It comes distributed with PostgreSQL. - To be able to use the \"Pipeline\" feature you'll need \"libpq\" of version >14. - This feature does not however put any requirements on the version of the PostgreSQL server. + This library provides connection management, execution of queries and mapping of parameters and results. + Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. + For more details and tutorials see . + + The API comes free from all kinds of exceptions. + All error-reporting is explicit and is presented using the 'Either' type. + + \"hasql\" requires you to have the "\libpq\" C-library installed to compile. + Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. + \"libpq\" comes distributed with PostgreSQL, + so typically all you need is just to install the latest PostgreSQL distro. + + Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible + with a wide range of PostgreSQL servers with tests having been conducted starting from + version 8.3. homepage: https://github.com/nikita-volkov/hasql bug-reports: https://github.com/nikita-volkov/hasql/issues diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index ab70f84e97..6abc9b00b2 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -70,8 +70,6 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do -- -- To execute 'Pipeline' lift it into 'Hasql.Session.Session' via 'Hasql.Session.pipeline'. -- --- __Attention__: using this feature requires \"libpq\" of version >14. --- -- == __Examples__ -- -- === Insert-Many or Batch-Insert From db1c49e9c264cf45e73dc4b7ee2d736859c57b68 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 07:53:17 +0300 Subject: [PATCH 1052/1204] Correct haddock --- library/Hasql/Pipeline/Core.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 6abc9b00b2..2bbe612dd5 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -89,7 +89,7 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do -- insertOrders :: [OrderDetails] -> 'Hasql.Session.Session' [OrderId] -- insertOrders songs = -- 'Hasql.Session.pipeline' $ --- forM songs $ \song -> +-- forM songs $ \\song -> -- 'Hasql.Pipeline.statement' song Statements.insertOrder -- @ -- From 063f03a347542aaa33f986929d7ed9944472c119 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 07:57:50 +0300 Subject: [PATCH 1053/1204] Update the actions --- .github/workflows/check.yaml | 2 +- .github/workflows/format.yaml | 9 +++++++++ .github/workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 5 +++-- 4 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/format.yaml diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 86fb7a2577..1af4ce8c41 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -11,7 +11,7 @@ jobs: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" ignore-haddock: true ignore-cabal-check: true diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..243bc33f15 --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,9 @@ +name: Format + +on: + workflow_call: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 79c21f5dcc..aa9171eb3b 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -9,7 +9,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 204c41a91a..b0b812bf95 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -15,7 +15,7 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit check: @@ -26,7 +26,8 @@ jobs: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 secrets: inherit with: prefix-tag-with-v: false + docs: true From cb2ec1d3cf2e525e58ece9ba4049faaed37330ac Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:02:35 +0300 Subject: [PATCH 1054/1204] Clean up --- library/Hasql/Implicits/Prelude.hs | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index fdcad6f587..f4c90f75d6 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -4,8 +4,7 @@ module Hasql.Implicits.Prelude ) where --- base -------------------------- + import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports @@ -18,11 +17,9 @@ import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports --- containers -------------------------- --- bytestring -------------------------- + + import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports @@ -46,24 +43,19 @@ import Data.Ord as Exports import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports --- text -------------------------- --- vector -------------------------- --- scientific -------------------------- + + + import Data.Scientific as Exports (Scientific) import Data.Semigroup as Exports import Data.Sequence as Exports (Seq) import Data.String as Exports import Data.Text as Exports (Text) --- uuid -------------------------- --- time -------------------------- + + import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports @@ -81,8 +73,7 @@ import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWait import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports --- network-ip -------------------------- + import Network.IP.Addr as Exports (IP, NetAddr) import Numeric as Exports import System.Environment as Exports From 91de395ea0bd99610af3931dd4992ba6074d88f2 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:02:51 +0000 Subject: [PATCH 1055/1204] Set package version to 1.7.0.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index ef5eff7d43..a98652dadb 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.7 +version: 1.7.0.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 8117dcbbe1c46726c8b7aa847e83cbdf01ef3624 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:02:55 +0300 Subject: [PATCH 1056/1204] Relax the bounds on all deps --- hasql-implicits.cabal | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 35fa2d9c6f..3b272314a2 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -44,12 +44,12 @@ library build-depends: aeson >=1 && <3 , base >=4.12 && <5 - , bytestring >=0.10 && <0.13 - , containers >=0.6 && <0.7 - , hasql >=1.4 && <1.7 + , bytestring >=0.10 && <1 + , containers >=0.6 && <1 + , hasql >=1.4 && <2 , network-ip >=0.2 && <1 - , scientific >=0.2 && <0.4 + , scientific >=0.2 && <1 , text >=1 && <3 , time >=1.4 && <2 - , uuid >=1.3 && <1.4 - , vector >=0.10 && <0.14 + , uuid >=1.3 && <2 + , vector >=0.10 && <1 From 0443b4121eed26171d72bda09c0cd17ab598be1f Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:03:41 +0000 Subject: [PATCH 1057/1204] Format --- library/Hasql/Implicits/Prelude.hs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index f4c90f75d6..6493ffc6a5 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -4,7 +4,6 @@ module Hasql.Implicits.Prelude ) where - import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports @@ -17,9 +16,6 @@ import Control.Monad.IO.Class as Exports import Control.Monad.ST as Exports import Data.Bits as Exports import Data.Bool as Exports - - - import Data.ByteString as Exports (ByteString) import Data.Char as Exports import Data.Coerce as Exports @@ -43,19 +39,11 @@ import Data.Ord as Exports import Data.Proxy as Exports import Data.Ratio as Exports import Data.STRef as Exports - - - - - import Data.Scientific as Exports (Scientific) import Data.Semigroup as Exports import Data.Sequence as Exports (Seq) import Data.String as Exports import Data.Text as Exports (Text) - - - import Data.Time as Exports import Data.Traversable as Exports import Data.Tuple as Exports @@ -73,7 +61,6 @@ import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWait import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports - import Network.IP.Addr as Exports (IP, NetAddr) import Numeric as Exports import System.Environment as Exports From c9ec3cbb858769d18767e060d8878b3fad819ffd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:12:52 +0300 Subject: [PATCH 1058/1204] Update cabal --- hasql-implicits.cabal | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 3b272314a2..95c5d70773 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,3 +1,4 @@ +cabal-version: 3.0 name: hasql-implicits version: 0.1.1.2 synopsis: @@ -10,8 +11,6 @@ maintainer: Nikita Volkov copyright: (c) 2019, Nikita Volkov license: MIT license-file: LICENSE -build-type: Simple -cabal-version: >=1.10 source-repository head type: git @@ -37,7 +36,6 @@ library TypeApplications TypeFamilies - ghc-options: -funbox-strict-fields default-language: Haskell2010 exposed-modules: Hasql.Implicits.Encoders other-modules: Hasql.Implicits.Prelude From d57b6a7d5379086a4ca383181960a3eff0be88d1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:12:59 +0300 Subject: [PATCH 1059/1204] Clean up in prelude --- library/Hasql/Implicits/Prelude.hs | 2 -- 1 file changed, 2 deletions(-) diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index 6493ffc6a5..db88db979d 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -71,8 +71,6 @@ import System.IO.Unsafe as Exports import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports -import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) import Text.Printf as Exports (hPrintf, printf) import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports From c6d99f8b7f63380bd0ba46af57c89b4cac07a5e6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:13:12 +0300 Subject: [PATCH 1060/1204] Update the actions --- .github/workflows/check.yaml | 21 ++++++++++++++++--- .github/workflows/format.yaml | 9 ++++++++ .../workflows/on-push-to-master-or-pr.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 7 ++++--- 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/format.yaml diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index ca78740be1..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -1,17 +1,17 @@ name: Compile, test and check the docs on: - workflow_call: + workflow_call: jobs: check: - + strategy: fail-fast: false matrix: include: - - ghc: 8.8.1 + - ghc: 8.10.1 ghc-options: "" ignore-haddock: true ignore-cabal-check: true @@ -20,6 +20,21 @@ jobs: runs-on: ubuntu-latest + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml new file mode 100644 index 0000000000..243bc33f15 --- /dev/null +++ b/.github/workflows/format.yaml @@ -0,0 +1,9 @@ +name: Format + +on: + workflow_call: + +jobs: + format: + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + secrets: inherit diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/.github/workflows/on-push-to-master-or-pr.yaml index 79c21f5dcc..aa9171eb3b 100644 --- a/.github/workflows/on-push-to-master-or-pr.yaml +++ b/.github/workflows/on-push-to-master-or-pr.yaml @@ -9,7 +9,7 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit check: diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 204c41a91a..1e8cc5169c 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -15,18 +15,19 @@ concurrency: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v2 + uses: ./.github/workflows/format.yaml secrets: inherit check: uses: ./.github/workflows/check.yaml secrets: inherit - + release: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v2 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 secrets: inherit with: prefix-tag-with-v: false + docs: true From 4699456ad2a1f92927bf6ffec511471c1035c7b1 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:13:50 +0000 Subject: [PATCH 1061/1204] Format --- hasql-implicits.cabal | 52 +++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 95c5d70773..5981b52cf6 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,25 +1,24 @@ cabal-version: 3.0 -name: hasql-implicits -version: 0.1.1.2 +name: hasql-implicits +version: 0.1.1.2 synopsis: Implicit definitions for Hasql, such as default codecs for standard types -homepage: https://github.com/nikita-volkov/hasql-implicits -bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE +homepage: https://github.com/nikita-volkov/hasql-implicits +bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-implicits.git library - hs-source-dirs: library + hs-source-dirs: library default-extensions: - NoImplicitPrelude BangPatterns DeriveDataTypeable DeriveFunctor @@ -29,6 +28,7 @@ library FlexibleInstances GeneralizedNewtypeDeriving LambdaCase + NoImplicitPrelude OverloadedStrings RankNTypes ScopedTypeVariables @@ -36,18 +36,18 @@ library TypeApplications TypeFamilies - default-language: Haskell2010 - exposed-modules: Hasql.Implicits.Encoders - other-modules: Hasql.Implicits.Prelude + default-language: Haskell2010 + exposed-modules: Hasql.Implicits.Encoders + other-modules: Hasql.Implicits.Prelude build-depends: - aeson >=1 && <3 - , base >=4.12 && <5 - , bytestring >=0.10 && <1 - , containers >=0.6 && <1 - , hasql >=1.4 && <2 - , network-ip >=0.2 && <1 - , scientific >=0.2 && <1 - , text >=1 && <3 - , time >=1.4 && <2 - , uuid >=1.3 && <2 - , vector >=0.10 && <1 + aeson >=1 && <3, + base >=4.12 && <5, + bytestring >=0.10 && <1, + containers >=0.6 && <1, + hasql >=1.4 && <2, + network-ip >=0.2 && <1, + scientific >=0.2 && <1, + text >=1 && <3, + time >=1.4 && <2, + uuid >=1.3 && <2, + vector >=0.10 && <1, From bf2ff48de78a95dfe98198ce500ca0020ccb77b3 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:21:09 +0300 Subject: [PATCH 1062/1204] Add doc generation to CD --- .github/workflows/on-push-to-release.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 3c002ad7f2..1e8cc5169c 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -30,3 +30,4 @@ jobs: secrets: inherit with: prefix-tag-with-v: false + docs: true From b01f9c1064988bacb440ca59bb6e28358b38ddff Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:26:03 +0300 Subject: [PATCH 1063/1204] Modernize cabal --- hasql-dynamic-statements.cabal | 95 ++++++++++++++++------------------ 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 373917acca..c6ebf91950 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,3 +1,4 @@ +cabal-version: 3.0 name: hasql-dynamic-statements version: 0.3.1.5 synopsis: Toolkit for constructing Hasql statements dynamically @@ -16,35 +17,70 @@ maintainer: Nikita Volkov copyright: (c) 2019, Nikita Volkov license: MIT license-file: LICENSE -build-type: Simple -cabal-version: >=1.10 source-repository head type: git location: git://github.com/nikita-volkov/hasql-dynamic-statements.git -library - hs-source-dirs: library +common base + default-language: Haskell2010 default-extensions: - NoImplicitPrelude + ApplicativeDo BangPatterns + BlockArguments + ConstraintKinds + DataKinds + DefaultSignatures DeriveDataTypeable + DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable + DerivingVia + EmptyDataDecls FlexibleContexts FlexibleInstances + FunctionalDependencies + GADTs GeneralizedNewtypeDeriving + ImportQualifiedPost LambdaCase + LiberalTypeSynonyms + MultiParamTypeClasses + MultiWayIf + NoImplicitPrelude + NoMonomorphismRestriction OverloadedStrings + PatternGuards + QuasiQuotes RankNTypes + RecordWildCards + RoleAnnotations ScopedTypeVariables StandaloneDeriving - TypeApplications + StrictData + TupleSections TypeFamilies + TypeOperators + +common executable + import: base + ghc-options: + -O2 + -threaded + -with-rtsopts=-N + -rtsopts + -funbox-strict-fields + +common test + import: base + ghc-options: + -threaded + -with-rtsopts=-N - ghc-options: -funbox-strict-fields - default-language: Haskell2010 +library + import: base + hs-source-dirs: library exposed-modules: Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet @@ -55,7 +91,7 @@ library Hasql.DynamicStatements.Snippet.Defs build-depends: - base >=4.12 && <5 + base >=4.14 && <5 , bytestring >=0.10 && <0.13 , containers >=0.6 && <0.8 , hasql >=1.6 && <1.7 @@ -63,49 +99,10 @@ library , ptr >=0.16.7.2 && <0.17 test-suite test + import: test type: exitcode-stdio-1.0 hs-source-dirs: test main-is: Main.hs - default-extensions: - NoImplicitPrelude - NoMonomorphismRestriction - Arrows - BangPatterns - ConstraintKinds - DataKinds - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - EmptyDataDecls - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralizedNewtypeDeriving - LambdaCase - LiberalTypeSynonyms - MagicHash - MultiParamTypeClasses - MultiWayIf - OverloadedStrings - ParallelListComp - PatternGuards - QuasiQuotes - RankNTypes - RecordWildCards - ScopedTypeVariables - StandaloneDeriving - TemplateHaskell - TupleSections - TypeApplications - TypeFamilies - TypeOperators - UnboxedTuples - - default-language: Haskell2010 build-depends: hasql , hasql-dynamic-statements From ce7d629c11900d228bcb82e5647951e661b8311f Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:26:29 +0000 Subject: [PATCH 1064/1204] Set package version to 0.1.1.3 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 5981b52cf6..9ff957696d 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-implicits -version: 0.1.1.2 +version: 0.1.1.3 synopsis: Implicit definitions for Hasql, such as default codecs for standard types From 38ad8edca5bf14669dff07ada45744dd6b119a6c Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:26:56 +0000 Subject: [PATCH 1065/1204] Format --- hasql-dynamic-statements.cabal | 56 +++++++++---------- library/Hasql/DynamicStatements/Session.hs | 8 +-- .../Hasql/DynamicStatements/Snippet/Defs.hs | 4 +- library/Hasql/DynamicStatements/Statement.hs | 10 ++-- test/Main.hs | 22 ++++---- 5 files changed, 50 insertions(+), 50 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index c6ebf91950..f04c8e364c 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,25 +1,25 @@ cabal-version: 3.0 -name: hasql-dynamic-statements -version: 0.3.1.5 -synopsis: Toolkit for constructing Hasql statements dynamically +name: hasql-dynamic-statements +version: 0.3.1.5 +synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, which makes it trivial to construct SQL, while injecting values. It is intended to be used when the SQL of your statement depends on the parameters, that you want to pass in. -homepage: https://github.com/nikita-volkov/hasql-dynamic-statements +homepage: https://github.com/nikita-volkov/hasql-dynamic-statements bug-reports: https://github.com/nikita-volkov/hasql-dynamic-statements/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE +author: Nikita Volkov +maintainer: Nikita Volkov +copyright: (c) 2019, Nikita Volkov +license: MIT +license-file: LICENSE source-repository head - type: git + type: git location: git://github.com/nikita-volkov/hasql-dynamic-statements.git common base @@ -80,7 +80,7 @@ common test library import: base - hs-source-dirs: library + hs-source-dirs: library exposed-modules: Hasql.DynamicStatements.Session Hasql.DynamicStatements.Snippet @@ -91,24 +91,24 @@ library Hasql.DynamicStatements.Snippet.Defs build-depends: - base >=4.14 && <5 - , bytestring >=0.10 && <0.13 - , containers >=0.6 && <0.8 - , hasql >=1.6 && <1.7 - , hasql-implicits >=0.1.1.2 && <0.2 - , ptr >=0.16.7.2 && <0.17 + base >=4.14 && <5, + bytestring >=0.10 && <0.13, + containers >=0.6 && <0.8, + hasql >=1.6 && <1.7, + hasql-implicits >=0.1.1.2 && <0.2, + ptr >=0.16.7.2 && <0.17, test-suite test import: test - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: Main.hs + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs build-depends: - hasql - , hasql-dynamic-statements - , QuickCheck >=2.8.1 && <3 - , quickcheck-instances >=0.3.11 && <0.4 - , rerebase <2 - , tasty >=0.12 && <2 - , tasty-hunit >=0.9 && <0.11 - , tasty-quickcheck >=0.9 && <0.11 + QuickCheck >=2.8.1 && <3, + hasql, + hasql-dynamic-statements, + quickcheck-instances >=0.3.11 && <0.4, + rerebase <2, + tasty >=0.12 && <2, + tasty-hunit >=0.9 && <0.11, + tasty-quickcheck >=0.9 && <0.11, diff --git a/library/Hasql/DynamicStatements/Session.hs b/library/Hasql/DynamicStatements/Session.hs index af75bf6ca9..d7fc39067b 100644 --- a/library/Hasql/DynamicStatements/Session.hs +++ b/library/Hasql/DynamicStatements/Session.hs @@ -1,11 +1,11 @@ module Hasql.DynamicStatements.Session where -import qualified Hasql.Decoders as Decoders +import Hasql.Decoders qualified as Decoders import Hasql.DynamicStatements.Prelude -import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs -import qualified Hasql.DynamicStatements.Statement as Statement +import Hasql.DynamicStatements.Snippet.Defs qualified as SnippetDefs +import Hasql.DynamicStatements.Statement qualified as Statement import Hasql.Session -import qualified Hasql.Session as Session +import Hasql.Session qualified as Session -- | -- Execute a dynamically parameterized statement, providing a result decoder. diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/library/Hasql/DynamicStatements/Snippet/Defs.hs index df73fa7ebb..9bc4eeb114 100644 --- a/library/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/library/Hasql/DynamicStatements/Snippet/Defs.hs @@ -1,8 +1,8 @@ module Hasql.DynamicStatements.Snippet.Defs where import Hasql.DynamicStatements.Prelude -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Implicits.Encoders as Encoders +import Hasql.Encoders qualified as Encoders +import Hasql.Implicits.Encoders qualified as Encoders -- | -- Composable SQL snippet with parameters injected. diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 36f8bd2f41..5aa3f9e27a 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -1,12 +1,12 @@ module Hasql.DynamicStatements.Statement where -import qualified Hasql.Decoders as Decoders +import Hasql.Decoders qualified as Decoders import Hasql.DynamicStatements.Prelude -import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs -import qualified Hasql.Encoders as Encoders +import Hasql.DynamicStatements.Snippet.Defs qualified as SnippetDefs +import Hasql.Encoders qualified as Encoders import Hasql.Statement -import qualified Ptr.ByteString as ByteString -import qualified Ptr.Poking as Poking +import Ptr.ByteString qualified as ByteString +import Ptr.Poking qualified as Poking -- | -- Construct a statement dynamically, specifying the parameters in-place diff --git a/test/Main.hs b/test/Main.hs index d2c148501b..7a2dc97b08 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,16 +1,16 @@ module Main where -import qualified Data.ByteString as ByteString -import qualified Data.ByteString.Char8 as ByteStringChar8 -import qualified Hasql.Connection as Connection -import qualified Hasql.Decoders as Decoders -import qualified Hasql.DynamicStatements.Session as Session -import qualified Hasql.DynamicStatements.Snippet as Snippet -import qualified Hasql.DynamicStatements.Statement as Statement -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Session as Session -import qualified Hasql.Statement as Statement -import qualified Test.QuickCheck as QuickCheck +import Data.ByteString qualified as ByteString +import Data.ByteString.Char8 qualified as ByteStringChar8 +import Hasql.Connection qualified as Connection +import Hasql.Decoders qualified as Decoders +import Hasql.DynamicStatements.Session qualified as Session +import Hasql.DynamicStatements.Snippet qualified as Snippet +import Hasql.DynamicStatements.Statement qualified as Statement +import Hasql.Encoders qualified as Encoders +import Hasql.Session qualified as Session +import Hasql.Statement qualified as Statement +import Test.QuickCheck qualified as QuickCheck import Test.QuickCheck.Instances import Test.Tasty import Test.Tasty.HUnit From f2c3cd0b888c295e0939ec7fa49c39115df08c2f Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 05:31:40 +0000 Subject: [PATCH 1066/1204] Set package version to 1.2.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 7ff862a08f..edc654fb9b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.2 +version: 1.2.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 7d7456d7879c07d5b6832b12329b97171b542554 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 08:47:03 +0300 Subject: [PATCH 1067/1204] Fix the build and update the deps --- hasql-dynamic-statements.cabal | 8 ++------ library/Hasql/DynamicStatements/Prelude.hs | 2 -- library/Hasql/DynamicStatements/Statement.hs | 1 - test/Main.hs | 9 +++------ 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index f04c8e364c..59827ae804 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -28,8 +28,6 @@ common base ApplicativeDo BangPatterns BlockArguments - ConstraintKinds - DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable @@ -60,6 +58,7 @@ common base StandaloneDeriving StrictData TupleSections + TypeApplications TypeFamilies TypeOperators @@ -94,7 +93,7 @@ library base >=4.14 && <5, bytestring >=0.10 && <0.13, containers >=0.6 && <0.8, - hasql >=1.6 && <1.7, + hasql >=1.7 && <1.8, hasql-implicits >=0.1.1.2 && <0.2, ptr >=0.16.7.2 && <0.17, @@ -104,11 +103,8 @@ test-suite test hs-source-dirs: test main-is: Main.hs build-depends: - QuickCheck >=2.8.1 && <3, hasql, hasql-dynamic-statements, - quickcheck-instances >=0.3.11 && <0.4, rerebase <2, tasty >=0.12 && <2, tasty-hunit >=0.9 && <0.11, - tasty-quickcheck >=0.9 && <0.11, diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/library/Hasql/DynamicStatements/Prelude.hs index 78d403884c..fbb2820fae 100644 --- a/library/Hasql/DynamicStatements/Prelude.hs +++ b/library/Hasql/DynamicStatements/Prelude.hs @@ -64,8 +64,6 @@ import System.IO.Unsafe as Exports import System.Mem as Exports import System.Mem.StableName as Exports import System.Timeout as Exports -import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) import Text.Printf as Exports (hPrintf, printf) import Text.Read as Exports (Read (..), readEither, readMaybe) import Unsafe.Coerce as Exports diff --git a/library/Hasql/DynamicStatements/Statement.hs b/library/Hasql/DynamicStatements/Statement.hs index 5aa3f9e27a..e92cb14b5a 100644 --- a/library/Hasql/DynamicStatements/Statement.hs +++ b/library/Hasql/DynamicStatements/Statement.hs @@ -3,7 +3,6 @@ module Hasql.DynamicStatements.Statement where import Hasql.Decoders qualified as Decoders import Hasql.DynamicStatements.Prelude import Hasql.DynamicStatements.Snippet.Defs qualified as SnippetDefs -import Hasql.Encoders qualified as Encoders import Hasql.Statement import Ptr.ByteString qualified as ByteString import Ptr.Poking qualified as Poking diff --git a/test/Main.hs b/test/Main.hs index 7a2dc97b08..f89ad8e685 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -7,20 +7,17 @@ import Hasql.Decoders qualified as Decoders import Hasql.DynamicStatements.Session qualified as Session import Hasql.DynamicStatements.Snippet qualified as Snippet import Hasql.DynamicStatements.Statement qualified as Statement -import Hasql.Encoders qualified as Encoders import Hasql.Session qualified as Session import Hasql.Statement qualified as Statement -import Test.QuickCheck qualified as QuickCheck -import Test.QuickCheck.Instances import Test.Tasty import Test.Tasty.HUnit -import Test.Tasty.QuickCheck -import Test.Tasty.Runners import Prelude hiding (assert) +main :: IO () main = defaultMain tree +tree :: TestTree tree = testGroup "All tests" @@ -54,7 +51,7 @@ tree = ] ] -runSession :: Session.Session a -> IO (Either Connection.ConnectionError (Either Session.QueryError a)) +runSession :: Session.Session a -> IO (Either Connection.ConnectionError (Either Session.SessionError a)) runSession = withConnection . Session.run withConnection :: (Connection.Connection -> IO a) -> IO (Either Connection.ConnectionError a) From a476d7a55dc65f451c9b8efe15bec75ab1d172dc Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 06:13:04 +0000 Subject: [PATCH 1068/1204] Set package version to 0.3.1.6 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 59827ae804..434b7926ac 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-dynamic-statements -version: 0.3.1.5 +version: 0.3.1.6 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 48121b6bdd1e5c407cfe792a25e5a1712029377c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 8 May 2024 09:26:14 +0300 Subject: [PATCH 1069/1204] Correct the docs --- library/Hasql/Pipeline/Core.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 2bbe612dd5..2b83f170eb 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -87,10 +87,10 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do -- -- @ -- insertOrders :: [OrderDetails] -> 'Hasql.Session.Session' [OrderId] --- insertOrders songs = +-- insertOrders orders = -- 'Hasql.Session.pipeline' $ --- forM songs $ \\song -> --- 'Hasql.Pipeline.statement' song Statements.insertOrder +-- forM orders $ \\order -> +-- 'Hasql.Pipeline.statement' order Statements.insertOrder -- @ -- -- === Combining Queries From 94aebd4400c31a56aa8dace6c21205cf2ef0a3fd Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Wed, 8 May 2024 06:36:06 +0000 Subject: [PATCH 1070/1204] Set package version to 1.7.0.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index a98652dadb..48c82bd2b5 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.7.0.1 +version: 1.7.0.2 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 6b63987475fa6aac6eeccc17863468bc22f1cd94 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Mon, 17 Jun 2024 09:56:03 +0200 Subject: [PATCH 1071/1204] Remove contravariant-extras from regular dependencies --- hasql-transaction.cabal | 1 - library/Hasql/Transaction/Private/Prelude.hs | 1 - library/Hasql/Transaction/Private/Statements.hs | 5 ++--- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index a3beff2da2..c287000a83 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -95,7 +95,6 @@ library bytestring >=0.10 && <0.13, bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, - contravariant-extras >=0.3 && <0.4, hasql >=1.7 && <1.8, mtl >=2.2 && <3, transformers >=0.5 && <0.7, diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/library/Hasql/Transaction/Private/Prelude.hs index 89bf947e31..18e76aaf74 100644 --- a/library/Hasql/Transaction/Private/Prelude.hs +++ b/library/Hasql/Transaction/Private/Prelude.hs @@ -4,7 +4,6 @@ module Hasql.Transaction.Private.Prelude ) where -import Contravariant.Extras as Exports import Control.Applicative as Exports import Control.Arrow as Exports import Control.Category as Exports diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 9ab5e4ae12..c8d50fb6a8 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -38,8 +38,7 @@ fetchFromCursor step init rowDec = sql = "FETCH FORWARD $1 FROM $2" encoder = - contrazip2 - ((B.param . B.nonNullable) B.int8) - ((B.param . B.nonNullable) B.bytea) + (fst >$< (B.param . B.nonNullable) B.int8) <> + (snd >$< (B.param . B.nonNullable) B.bytea) decoder = C.foldlRows step init rowDec From 9725220b82cf3e6fdd52ddc7b6a652c874531f4e Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Mon, 17 Jun 2024 09:56:16 +0200 Subject: [PATCH 1072/1204] Remove contravariant-extras from test dependencies --- conflicts-test/Main/Statements.hs | 3 +-- hasql-transaction.cabal | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/conflicts-test/Main/Statements.hs b/conflicts-test/Main/Statements.hs index 676c459fa8..294d25e50a 100644 --- a/conflicts-test/Main/Statements.hs +++ b/conflicts-test/Main/Statements.hs @@ -1,6 +1,5 @@ module Main.Statements where -import Contravariant.Extras import Hasql.Decoders qualified as D import Hasql.Encoders qualified as E import Hasql.Statement @@ -33,7 +32,7 @@ modifyBalance :: Statement (Int64, Scientific) Bool modifyBalance = Statement "update account set balance = balance + $2 where id = $1" - (contrazip2 ((E.param . E.nonNullable) E.int8) ((E.param . E.nonNullable) E.numeric)) + ((fst >$< (E.param . E.nonNullable) E.int8) <> (snd >$< (E.param . E.nonNullable) E.numeric)) (fmap (> 0) D.rowsAffected) True diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index c287000a83..6d6ea3e52f 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -115,7 +115,6 @@ test-suite conflicts-test build-depends: async >=2.1 && <3, - contravariant-extras >=0.3 && <0.4, hasql, hasql-transaction, rerebase >=1.11 && <2, From 7331c5d0beb2328fe486bb81974ff6af15ed873b Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 17 Jun 2024 17:12:59 +0000 Subject: [PATCH 1073/1204] Format --- library/Hasql/Transaction/Private/Statements.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index c8d50fb6a8..6a556639c0 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -38,7 +38,7 @@ fetchFromCursor step init rowDec = sql = "FETCH FORWARD $1 FROM $2" encoder = - (fst >$< (B.param . B.nonNullable) B.int8) <> - (snd >$< (B.param . B.nonNullable) B.bytea) + (fst >$< (B.param . B.nonNullable) B.int8) + <> (snd >$< (B.param . B.nonNullable) B.bytea) decoder = C.foldlRows step init rowDec From 373fe02a890fcd5b6c59b66dfa66d1f45f06c4c0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 17 Jun 2024 20:14:00 +0300 Subject: [PATCH 1074/1204] Fix CI compatibility --- .github/workflows/check.yaml | 2 +- cabal.project | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index e454bb4499..4b8631d44d 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -15,7 +15,7 @@ jobs: ghc-options: "" ignore-haddock: true ignore-cabal-check: true - - ghc: latest + - ghc: 9.8.2 ignore-cabal-check: true runs-on: ubuntu-latest diff --git a/cabal.project b/cabal.project index 8396227c13..e6fdbadb43 100644 --- a/cabal.project +++ b/cabal.project @@ -1,3 +1 @@ packages: . -constraints: - , bytestring >=0.12 From 140920774c49a4de2689c6801fa4cc4829fdc137 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 17 Jun 2024 20:37:33 +0300 Subject: [PATCH 1075/1204] Attempt to fix compatibility --- .github/workflows/check.yaml | 2 +- cabal.project | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 4b8631d44d..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -15,7 +15,7 @@ jobs: ghc-options: "" ignore-haddock: true ignore-cabal-check: true - - ghc: 9.8.2 + - ghc: latest ignore-cabal-check: true runs-on: ubuntu-latest diff --git a/cabal.project b/cabal.project index e6fdbadb43..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,4 @@ packages: . +allow-newer: + , *:base + , *:template-haskell From 6d5513774476d031bae86579db28c6b6a1089914 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 18 Jun 2024 07:52:10 +0000 Subject: [PATCH 1076/1204] Set package version to 1.1.1.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 6d6ea3e52f..df34289199 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.1.1 +version: 1.1.1.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 377aed77603992d359ac7ec078153a24428b73b5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 24 Jun 2024 09:38:02 +0300 Subject: [PATCH 1077/1204] Move to "iproute" from "network-ip" for the "inet" datatype --- CHANGELOG.md | 4 ++++ cabal.project | 3 +++ hasql.cabal | 4 ++-- library/Hasql/Decoders/All.hs | 4 ++-- library/Hasql/Encoders/All.hs | 4 ++-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48b3b13b12..e53d863ce8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.8 + +- Move to "iproute" from "network-ip" for the "inet" datatype (#163). + # 1.7 - Decidable instance on `Encoders.Params` removed. It was useless and limited the design. diff --git a/cabal.project b/cabal.project index e6fdbadb43..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,4 @@ packages: . +allow-newer: + , *:base + , *:template-haskell diff --git a/hasql.cabal b/hasql.cabal index 48c82bd2b5..6d46500c63 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -140,9 +140,9 @@ library dlist >=0.8 && <0.9 || >=1 && <2, hashable >=1.2 && <2, hashtables >=1.1 && <2, + iproute >=1.7 && <1.8, mtl >=2 && <3, - network-ip >=0.3.0.3 && <0.4, - postgresql-binary >=0.13.1 && <0.14, + postgresql-binary >=0.14 && <0.15, postgresql-libpq ==0.10.1.0, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index 0281e1faea..b61eae9a5b 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -3,6 +3,7 @@ module Hasql.Decoders.All where import Data.Aeson qualified as Aeson +import Data.IP qualified as Iproute import Data.Vector.Generic qualified as GenericVector import Hasql.Decoders.Array qualified as Array import Hasql.Decoders.Composite qualified as Composite @@ -12,7 +13,6 @@ import Hasql.Decoders.Row qualified as Row import Hasql.Decoders.Value qualified as Value import Hasql.Prelude hiding (bool, maybe) import Hasql.Prelude qualified as Prelude -import Network.IP.Addr qualified as NetworkIp import PostgreSQL.Binary.Decoding qualified as A -- * Result @@ -255,7 +255,7 @@ uuid = Value (Value.decoder (const A.uuid)) -- | -- Decoder of the @INET@ values. {-# INLINEABLE inet #-} -inet :: Value (NetworkIp.NetAddr NetworkIp.IP) +inet :: Value Iproute.IPRange inet = Value (Value.decoder (const A.inet)) -- | diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index bcf2699084..0a7fd2a29d 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -4,13 +4,13 @@ module Hasql.Encoders.All where import Data.Aeson qualified as Aeson import Data.ByteString.Lazy qualified as LazyByteString +import Data.IP qualified as Iproute import Hasql.Encoders.Array qualified as Array import Hasql.Encoders.Params qualified as Params import Hasql.Encoders.Value qualified as Value import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude hiding (bool) import Hasql.Prelude qualified as Prelude -import Network.IP.Addr qualified as NetworkIp import PostgreSQL.Binary.Encoding qualified as A import Text.Builder qualified as C @@ -209,7 +209,7 @@ uuid = Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) -- | -- Encoder of @INET@ values. {-# INLINEABLE inet #-} -inet :: Value (NetworkIp.NetAddr NetworkIp.IP) +inet :: Value Iproute.IPRange inet = Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) -- | From 25dd8b34b03ba63d411aeb83715adf6b4f56e496 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 24 Jun 2024 06:59:40 +0000 Subject: [PATCH 1078/1204] Set package version to 1.8 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 6d46500c63..bb42e0e6ca 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.7.0.2 +version: 1.8 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 6d3f6b99952f3d8ead69bf640278e501a6fb692e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Jun 2024 08:29:18 +0300 Subject: [PATCH 1079/1204] Provide support for hasql-1.8 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index df34289199..2cbeb817e8 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -95,7 +95,7 @@ library bytestring >=0.10 && <0.13, bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, - hasql >=1.7 && <1.8, + hasql >=1.7 && <1.9, mtl >=2.2 && <3, transformers >=0.5 && <0.7, From 2e4c5b502331062edfe5ed3b26405974c456c9c5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Jun 2024 08:32:21 +0300 Subject: [PATCH 1080/1204] Provide support for hasql-1.8 --- cabal.project | 3 +++ hasql-pool.cabal | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cabal.project b/cabal.project index e6fdbadb43..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,4 @@ packages: . +allow-newer: + , *:base + , *:template-haskell diff --git a/hasql-pool.cabal b/hasql-pool.cabal index edc654fb9b..10d2df393e 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -88,7 +88,7 @@ library build-depends: base >=4.11 && <5, bytestring >=0.10 && <0.14, - hasql >=1.7 && <1.8, + hasql >=1.7 && <1.9, stm >=2.5 && <3, text >=1.2 && <3, time >=1.9 && <2, From 199dff30deb48769fa507c0ab9be72aba8299592 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Jun 2024 08:38:05 +0300 Subject: [PATCH 1081/1204] Provide support for hasql-1.8 --- cabal.project | 3 +++ hasql-implicits.cabal | 4 ++-- library/Hasql/Implicits/Encoders.hs | 2 +- library/Hasql/Implicits/Prelude.hs | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cabal.project b/cabal.project index e6fdbadb43..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,4 @@ packages: . +allow-newer: + , *:base + , *:template-haskell diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 9ff957696d..4064a12251 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -44,8 +44,8 @@ library base >=4.12 && <5, bytestring >=0.10 && <1, containers >=0.6 && <1, - hasql >=1.4 && <2, - network-ip >=0.2 && <1, + hasql >=1.8 && <1.9, + iproute >=1.7 && <1.8, scientific >=0.2 && <1, text >=1 && <3, time >=1.4 && <2, diff --git a/library/Hasql/Implicits/Encoders.hs b/library/Hasql/Implicits/Encoders.hs index 331f442eff..641293cb65 100644 --- a/library/Hasql/Implicits/Encoders.hs +++ b/library/Hasql/Implicits/Encoders.hs @@ -85,7 +85,7 @@ INSTANCES(DiffTime, interval) INSTANCES(TimeOfDay, time) INSTANCES(LocalTime, timestamp) INSTANCES((TimeOfDay, TimeZone), timetz) -INSTANCES((NetAddr IP), inet) +INSTANCES(IPRange, inet) INSTANCES(Bool, bool) {- ORMOLU_ENABLE -} diff --git a/library/Hasql/Implicits/Prelude.hs b/library/Hasql/Implicits/Prelude.hs index db88db979d..cf7172f99f 100644 --- a/library/Hasql/Implicits/Prelude.hs +++ b/library/Hasql/Implicits/Prelude.hs @@ -30,6 +30,7 @@ import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports import Data.Functor.Identity as Exports import Data.IORef as Exports +import Data.IP as Exports (IPRange) import Data.Int as Exports import Data.Ix as Exports import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) @@ -61,7 +62,6 @@ import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWait import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) import GHC.Generics as Exports (Generic, Generic1) import GHC.IO.Exception as Exports -import Network.IP.Addr as Exports (IP, NetAddr) import Numeric as Exports import System.Environment as Exports import System.Exit as Exports From 095ff80f07c584c0d9f6bee2101ec90c9f2c4b36 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 25 Jun 2024 05:46:09 +0000 Subject: [PATCH 1082/1204] Set package version to 1.1.1.2 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 2cbeb817e8..5bd922e2de 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.1.1.1 +version: 1.1.1.2 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From aa86089e0b57b21592f25f5ba7f8f4bca95b99e2 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 25 Jun 2024 05:52:13 +0000 Subject: [PATCH 1083/1204] Set package version to 1.2.0.2 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 10d2df393e..1df16033bf 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.2.0.1 +version: 1.2.0.2 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From eb167199e5c89d32470ce70439195256020fcb63 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 25 Jun 2024 08:43:05 +0300 Subject: [PATCH 1084/1204] Provide support for hasql-1.8 --- cabal.project | 3 +++ hasql-dynamic-statements.cabal | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cabal.project b/cabal.project index e6fdbadb43..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,4 @@ packages: . +allow-newer: + , *:base + , *:template-haskell diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 434b7926ac..0ebc3491eb 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -93,8 +93,8 @@ library base >=4.14 && <5, bytestring >=0.10 && <0.13, containers >=0.6 && <0.8, - hasql >=1.7 && <1.8, - hasql-implicits >=0.1.1.2 && <0.2, + hasql >=1.8 && <1.9, + hasql-implicits >=0.2 && <0.3, ptr >=0.16.7.2 && <0.17, test-suite test From f5db1a2fa3f43f5b4f011d45d2a55bc0749bc8f0 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 25 Jun 2024 06:10:18 +0000 Subject: [PATCH 1085/1204] Set package version to 0.2 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index 4064a12251..a4ff41a2cc 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-implicits -version: 0.1.1.3 +version: 0.2 synopsis: Implicit definitions for Hasql, such as default codecs for standard types From 84571fdcd325d6f6baeaad0cb5edf8b7b6eeb583 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 25 Jun 2024 06:33:29 +0000 Subject: [PATCH 1086/1204] Set package version to 0.3.1.7 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 0ebc3491eb..2ea75e81ab 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-dynamic-statements -version: 0.3.1.6 +version: 0.3.1.7 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From 5537c6e0542aeb5f95a15dc29d72ac1761f8a250 Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Mon, 15 Jul 2024 02:34:18 +0200 Subject: [PATCH 1087/1204] Make row and column number more explicit --- library/Hasql/Errors.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index c7fe084f88..0e8dd344ae 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -84,7 +84,7 @@ instance Exception SessionError where <> maybe "" (\h -> "\n Hint: " <> BC.unpack h) hint UnexpectedResult message -> "Unexpected result: " <> show message RowError row column rowError -> - "Row error: " <> show row <> ":" <> show column <> " " <> show rowError + "Error in row " <> show row <> ", column " <> show column <> ": " <> show rowError UnexpectedAmountOfRows amount -> "Unexpected amount of rows: " <> show amount From d49834b2f4d3829854411f53d067e23727e37947 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 20 Aug 2024 23:37:37 +0300 Subject: [PATCH 1088/1204] Allow newer libpq --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index bb42e0e6ca..cf2ef8e4a4 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -143,7 +143,7 @@ library iproute >=1.7 && <1.8, mtl >=2 && <3, postgresql-binary >=0.14 && <0.15, - postgresql-libpq ==0.10.1.0, + postgresql-libpq >=0.10.1 && <0.10.3, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, text >=1 && <3, From 3ae192c67c08d6a498513bf509c2f0b8ec6c143a Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 20 Aug 2024 20:56:26 +0000 Subject: [PATCH 1089/1204] Set package version to 1.8.0.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index cf2ef8e4a4..57198ddb9b 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8 +version: 1.8.0.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From f75598e0692cd1af7669b89a8ba172a9e74c5da4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 31 Aug 2024 14:46:50 +0300 Subject: [PATCH 1090/1204] Make compatible with latest postgresql-libpq --- hasql.cabal | 2 +- library/Hasql/LibPq14.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 57198ddb9b..4476ea1ef2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -143,7 +143,7 @@ library iproute >=1.7 && <1.8, mtl >=2 && <3, postgresql-binary >=0.14 && <0.15, - postgresql-libpq >=0.10.1 && <0.10.3, + postgresql-libpq >=0.10.1 && <0.12, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, text >=1 && <3, diff --git a/library/Hasql/LibPq14.hs b/library/Hasql/LibPq14.hs index d762dfb009..588c7b98b4 100644 --- a/library/Hasql/LibPq14.hs +++ b/library/Hasql/LibPq14.hs @@ -15,7 +15,7 @@ module Hasql.LibPq14 ) where -import Database.PostgreSQL.LibPQ as Base hiding (ExecStatus (..), resultStatus) +import Database.PostgreSQL.LibPQ as Base hiding (ExecStatus (..), PipelineStatus (..), enterPipelineMode, exitPipelineMode, pipelineStatus, pipelineSync, resultStatus, sendFlushRequest) import Database.PostgreSQL.LibPQ.Internal qualified as BaseInternal import Hasql.LibPq14.Ffi qualified as Ffi import Hasql.LibPq14.Mappings qualified as Mappings From c894fb1691eff38f9470ca47dd1693099204d1fe Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sat, 31 Aug 2024 11:58:05 +0000 Subject: [PATCH 1091/1204] Set package version to 1.8.0.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 4476ea1ef2..eb3a2f246a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.0.1 +version: 1.8.0.2 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 52cfda4e91ea484d22cb038d09e5d2882d692323 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Sep 2024 07:40:00 +0300 Subject: [PATCH 1092/1204] Add connection reset on exceptions in non-idle transaction status --- hasql.cabal | 1 + library/Hasql/Session/Core.hs | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index eb3a2f246a..7e9bedf41f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -75,6 +75,7 @@ common base StandaloneDeriving StrictData TupleSections + TypeApplications TypeFamilies TypeOperators diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index 0e5d139c23..d02900d676 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -8,6 +8,7 @@ import Hasql.Encoders.All qualified as Encoders import Hasql.Encoders.Params qualified as Encoders.Params import Hasql.Errors import Hasql.IO qualified as IO +import Hasql.LibPq14 qualified as Pq import Hasql.Pipeline.Core qualified as Pipeline import Hasql.Prelude import Hasql.Statement qualified as Statement @@ -22,8 +23,20 @@ newtype Session a -- Executes a bunch of commands on the provided connection. run :: Session a -> Connection.Connection -> IO (Either SessionError a) run (Session impl) connection = - runExceptT + handle @SomeException onExc + $ runExceptT $ runReaderT impl connection + where + onExc exc = + case connection of + Connection.Connection pqConnVar _ _ -> + withMVar pqConnVar onPqConn + where + onPqConn pqConn = do + Pq.transactionStatus pqConn >>= \case + Pq.TransIdle -> pure () + _ -> Pq.reset pqConn + throwIO exc -- | -- Possibly a multi-statement query, From 34c540df5fca3e477dc1bee27751cb3c523527e7 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Fri, 13 Sep 2024 04:58:02 +0000 Subject: [PATCH 1093/1204] Set package version to 1.8.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7e9bedf41f..8b2ce78e2c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.0.2 +version: 1.8.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 3f8240c7bac2d9ab345d511b04329291e327ddea Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Sep 2024 10:16:05 +0300 Subject: [PATCH 1094/1204] Extend the changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e53d863ce8..3514c8f204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.8.1 + +- In case of exceptions thrown by user from inside of Session, the connection status gets checked to be out of transaction and unless it is the connection gets reset. + # 1.8 - Move to "iproute" from "network-ip" for the "inet" datatype (#163). From 8c3685e6a994e364a304d4b6d5692dd3483f4a64 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Sep 2024 22:25:20 +0300 Subject: [PATCH 1095/1204] Mask the exception handler --- library/Hasql/Session/Core.hs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index d02900d676..d0e18c9006 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -23,20 +23,17 @@ newtype Session a -- Executes a bunch of commands on the provided connection. run :: Session a -> Connection.Connection -> IO (Either SessionError a) run (Session impl) connection = - handle @SomeException onExc - $ runExceptT - $ runReaderT impl connection + mask $ \restore -> onException (restore main) handler where - onExc exc = + main = + runExceptT $ runReaderT impl connection + handler = case connection of Connection.Connection pqConnVar _ _ -> - withMVar pqConnVar onPqConn - where - onPqConn pqConn = do - Pq.transactionStatus pqConn >>= \case - Pq.TransIdle -> pure () - _ -> Pq.reset pqConn - throwIO exc + withMVar pqConnVar \pqConn -> + Pq.transactionStatus pqConn >>= \case + Pq.TransIdle -> pure () + _ -> Pq.reset pqConn -- | -- Possibly a multi-statement query, From 6bb52d057489220f5410c8756c011ade6b926477 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Fri, 13 Sep 2024 22:42:14 +0300 Subject: [PATCH 1096/1204] Add the resetting of the registry in case of errors --- library/Hasql/PreparedStatementRegistry.hs | 12 +++++++++++- library/Hasql/Session/Core.hs | 7 +++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index 37fae6a4b6..d876f520e2 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -2,6 +2,7 @@ module Hasql.PreparedStatementRegistry ( PreparedStatementRegistry, new, update, + reset, LocalKey (..), ) where @@ -9,7 +10,7 @@ where import ByteString.StrictBuilder qualified as B import Data.HashTable.IO qualified as A import Hasql.LibPq14 qualified as Pq -import Hasql.Prelude hiding (lookup) +import Hasql.Prelude hiding (lookup, reset) data PreparedStatementRegistry = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) @@ -42,6 +43,15 @@ update localKey onNewRemoteKey onOldRemoteKey (PreparedStatementRegistry table c old = onOldRemoteKey +reset :: PreparedStatementRegistry -> IO () +reset (PreparedStatementRegistry table counter) = do + -- TODO: This is a temporary measure. + -- We should just move to a pure implementation. + do + entries <- A.toList table + forM_ entries \(k, _) -> A.delete table k + writeIORef counter 0 + -- | -- Local statement key. data LocalKey diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index d0e18c9006..f5446321ec 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -11,6 +11,7 @@ import Hasql.IO qualified as IO import Hasql.LibPq14 qualified as Pq import Hasql.Pipeline.Core qualified as Pipeline import Hasql.Prelude +import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement -- | @@ -29,11 +30,13 @@ run (Session impl) connection = runExceptT $ runReaderT impl connection handler = case connection of - Connection.Connection pqConnVar _ _ -> + Connection.Connection pqConnVar _ registry -> withMVar pqConnVar \pqConn -> Pq.transactionStatus pqConn >>= \case Pq.TransIdle -> pure () - _ -> Pq.reset pqConn + _ -> do + PreparedStatementRegistry.reset registry + Pq.reset pqConn -- | -- Possibly a multi-statement query, From 914f8afa89983951d610473a6d6f3b99790d06f1 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Fri, 13 Sep 2024 19:51:09 +0000 Subject: [PATCH 1097/1204] Set package version to 1.8.1.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8b2ce78e2c..205213785d 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.1 +version: 1.8.1.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From a9ed279e6292f8a8a7749d3f7e12941dd0da5f7a Mon Sep 17 00:00:00 2001 From: Teo Camarasu Date: Mon, 28 Oct 2024 14:50:45 +0000 Subject: [PATCH 1098/1204] Bump hasql, bytestring (#28) * Bump hasql, bytestring bounds * Remove duplicate bytestring dep --- hasql-notifications.cabal | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 7e44b888cb..144c2c1fae 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -17,12 +17,11 @@ library hs-source-dirs: src exposed-modules: Hasql.Notifications build-depends: base >= 4.7 && < 5 - , bytestring >= 0.10.8.2 && < 0.12 + , bytestring >= 0.10.8.2 && < 0.13 , text >= 2 && < 2.2 , hasql-pool >= 1.2 && < 1.3 - , bytestring >= 0.10 , postgresql-libpq >= 0.9 && < 1.0 - , hasql >= 0.19 && < 1.8 + , hasql >= 0.19 && < 1.9 default-language: Haskell2010 ghc-options: -Wall From 51f123c6794eda970cd237f65cb72e30ca19d587 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Mon, 28 Oct 2024 10:56:50 -0400 Subject: [PATCH 1099/1204] Bump patch version --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 144c2c1fae..1e133398f1 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.3.0 +version: 0.2.3.1 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 5b4434753dce179a2f3c3d6a730e6e1511674899 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 1 Dec 2024 08:02:02 +0300 Subject: [PATCH 1100/1204] Update the docs --- library/Hasql/Statement.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 5bc0aaf092..24df8b630c 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -106,7 +106,7 @@ refineResult refiner (Statement template encoder decoder preparable) = -- Decoders.'Decoders.noResult' -- @ -- --- This approach is much more efficient than executing a single-row insert-statement multiple times. +-- While this approach is much more efficient than executing a single-row insert-statement multiple times from within 'Session', a comparable performance can also be achieved by executing a single-insert statement from within a 'Pipeline'. -- $inAndNotIn -- From e55415bd8d40b2ed0788e43929d4d252476dd7d2 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 1 Dec 2024 05:02:46 +0000 Subject: [PATCH 1101/1204] Format --- testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs | 3 +-- testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs | 3 +-- testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs index 9eac728b01..18e6ea546b 100644 --- a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs +++ b/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs @@ -40,5 +40,4 @@ encoder = decoder :: Decoders.Result Result decoder = Decoders.rowList - ( Decoders.column (Decoders.nonNullable Decoders.int8) - ) + (Decoders.column (Decoders.nonNullable Decoders.int8)) diff --git a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs index c19e0e7b1e..b3b0ec7fde 100644 --- a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs +++ b/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs @@ -40,5 +40,4 @@ encoder = decoder :: Decoders.Result Result decoder = Decoders.rowList - ( Decoders.column (Decoders.nonNullable Decoders.int8) - ) + (Decoders.column (Decoders.nonNullable Decoders.int8)) diff --git a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs index 27882aa991..cde504ad0e 100644 --- a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs +++ b/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs @@ -40,5 +40,4 @@ encoder = decoder :: Decoders.Result Result decoder = Decoders.rowList - ( Decoders.column (Decoders.nonNullable Decoders.uuid) - ) + (Decoders.column (Decoders.nonNullable Decoders.uuid)) From 541adf00f5fce979b70efe9101c052f2b8b39dbc Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 1 Dec 2024 08:55:11 +0000 Subject: [PATCH 1102/1204] Set package version to 1.8.1.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 205213785d..5418da5873 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.1.1 +version: 1.8.1.2 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From a45aa3f458fe6eccee8951165ef8252da1e59c68 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 1 Dec 2024 12:00:06 +0300 Subject: [PATCH 1103/1204] Make the release pipeline generate the docs --- .github/workflows/on-push-to-release.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 82dcce473a..4a880f958c 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -28,3 +28,4 @@ jobs: secrets: inherit with: prefix-tag-with-v: false + docs: true From eec974f2ba34b46c62b2674d011ef4f21b5387f6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 1 Dec 2024 12:04:29 +0300 Subject: [PATCH 1104/1204] Explicitly state that the testing-kit sublib is private --- hasql.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/hasql.cabal b/hasql.cabal index 5418da5873..cfe420f7ac 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -156,6 +156,7 @@ library library testing-kit import: base + visibility: private hs-source-dirs: testing-kit exposed-modules: Hasql.TestingKit.Constants From 9d583dcfb0bd41af103e4fa82d88aa0dd3d09b88 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Sun, 1 Dec 2024 14:17:35 +0000 Subject: [PATCH 1105/1204] Set package version to 1.8.1.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index cfe420f7ac..7d324e1440 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.1.2 +version: 1.8.1.3 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 0b7c0c21a9ee8819952b52e3b4407afd5c6470d1 Mon Sep 17 00:00:00 2001 From: SEKUN Date: Sun, 8 Dec 2024 23:34:25 +0800 Subject: [PATCH 1106/1204] fix: Configufation -> Configuration --- src/library/other/Hasql/Pool/Config/Config.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 60ed09239e..6424439ccf 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -6,7 +6,7 @@ import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude import Hasql.Session qualified as Session --- | Configufation for Hasql connection pool. +-- | Configuration for Hasql connection pool. data Config = Config { size :: Int, acquisitionTimeout :: DiffTime, From cb0c6bd5fc364c0306cbd5ca6b914f9af186a5d9 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 9 Dec 2024 00:25:35 +0000 Subject: [PATCH 1107/1204] Set package version to 1.2.0.3 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 1df16033bf..dff7288238 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.2.0.2 +version: 1.2.0.3 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From fef4664fe475361355f1a880d4cd56ada98324a8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 17 Dec 2024 01:22:24 +0300 Subject: [PATCH 1108/1204] Correct the docs --- library/Hasql/Pipeline/Core.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 2b83f170eb..3c85b62754 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -89,7 +89,7 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do -- insertOrders :: [OrderDetails] -> 'Hasql.Session.Session' [OrderId] -- insertOrders orders = -- 'Hasql.Session.pipeline' $ --- forM orders $ \\order -> +-- for orders $ \\order -> -- 'Hasql.Pipeline.statement' order Statements.insertOrder -- @ -- From 2142b2c8dbe66d26281a7686cf876d9a05f93ae6 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 16 Dec 2024 22:39:29 +0000 Subject: [PATCH 1109/1204] Set package version to 1.8.1.4 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7d324e1440..27f6a38068 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.1.3 +version: 1.8.1.4 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 038daf59db8f73fb13f0c89b325cd9992d9c9973 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 4 Jan 2025 20:26:01 +0300 Subject: [PATCH 1110/1204] Lint --- hspec/Hasql/PipelineSpec.hs | 26 ++++++++++++++------------ library/Hasql/Session/Core.hs | 2 +- profiling/Main.hs | 2 +- tasty/Main.hs | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/hspec/Hasql/PipelineSpec.hs b/hspec/Hasql/PipelineSpec.hs index 7b88c23aaa..57fc2265cd 100644 --- a/hspec/Hasql/PipelineSpec.hs +++ b/hspec/Hasql/PipelineSpec.hs @@ -57,12 +57,13 @@ spec = do it "Leaves the connection usable" do result <- Dsl.runSessionOnLocalDb do - tryError - $ Dsl.runPipelineInSession - $ (,,) - <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} - <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} - <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + _ <- + tryError + $ Dsl.runPipelineInSession + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} GenerateSeries.session True GenerateSeries.Params {start = 0, end = 0} shouldBe result (Right [0]) @@ -81,11 +82,12 @@ spec = do it "Leaves the connection usable" do result <- Dsl.runSessionOnLocalDb do - tryError - $ Dsl.runPipelineInSession - $ (,,) - <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} - <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} - <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + _ <- + tryError + $ Dsl.runPipelineInSession + $ (,,) + <$> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} + <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} + <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} GenerateSeries.session True GenerateSeries.Params {start = 0, end = 0} shouldBe result (Right [0]) diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index f5446321ec..c54a0274df 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -46,7 +46,7 @@ sql :: ByteString -> Session () sql sql = Session $ ReaderT - $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + $ \(Connection.Connection pqConnectionRef integerDatetimes _) -> ExceptT $ fmap (first (QueryError sql [])) $ withMVar pqConnectionRef diff --git a/profiling/Main.hs b/profiling/Main.hs index 35180e46b2..dbe541077c 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -12,7 +12,7 @@ main = do Right connection <- acquireConnection traceEventIO "START Session" - Right result <- B.run sessionWithManySmallResults connection + Right _ <- B.run sessionWithManySmallResults connection traceEventIO "STOP Session" return () where diff --git a/tasty/Main.hs b/tasty/Main.hs index 9c4802aaf1..361c85fb04 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -279,7 +279,7 @@ tree = Session.sql "asldfjsldk" io = Connection.with $ \c -> do - Session.run errorSession c + _ <- Session.run errorSession c Session.run sumSession c in io >>= \x -> assertBool (show x) (either (const False) isRight x), testCase "\"another command is already in progress\" bugfix" From 7b6a959d24b1067a54db5fc76562b4140d1e704a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 4 Jan 2025 20:26:43 +0300 Subject: [PATCH 1111/1204] Add usePreparedStatements --- CHANGELOG.md | 4 +++ benchmarks/Main.hs | 2 +- library/Hasql/Connection/Core.hs | 30 +++++++++++++++++----- library/Hasql/Pipeline/Core.hs | 21 +++++++-------- library/Hasql/Session/Core.hs | 12 ++++----- library/Hasql/Statement.hs | 6 +---- profiling/Main.hs | 2 +- tasty/Main/Connection.hs | 2 +- testing-kit/Hasql/TestingKit/TestingDsl.hs | 2 +- threads-test/Main.hs | 2 +- 10 files changed, 51 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3514c8f204..9603dd4388 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.9 + +- Add a global prepared statements setting + # 1.8.1 - In case of exceptions thrown by user from inside of Session, the connection status gets checked to be out of transaction and unless it is the connection gets reset. diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 32ff52e308..4b3374c3bc 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -16,7 +16,7 @@ main = useConnection connection where acquireConnection = - A.acquire "" + A.acquire True "" useConnection connection = defaultMain [ sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector, diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index 1dbe9f0f87..5b3f1d4fe0 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -11,7 +11,15 @@ import Hasql.Settings qualified as Settings -- | -- A single connection to the database. data Connection - = Connection !(MVar LibPQ.Connection) !Bool !PreparedStatementRegistry.PreparedStatementRegistry + = Connection + -- | Whether prepared statements are allowed. + !Bool + -- | Lower level libpq connection. + !(MVar LibPQ.Connection) + -- | Integer datetimes. + !Bool + -- | Prepared statement registry. + !PreparedStatementRegistry.PreparedStatementRegistry -- | -- Possible details of the connection acquistion error. @@ -20,8 +28,18 @@ type ConnectionError = -- | -- Acquire a connection using the provided settings encoded according to the PostgreSQL format. -acquire :: Settings.Settings -> IO (Either ConnectionError Connection) -acquire settings = +acquire :: + -- | Whether prepared statements are allowed. + -- + -- When 'False', even the statements marked as preparable will be executed without preparation. + -- + -- This is useful when dealing with proxying applications like @pgbouncer@, which may be incompatible with prepared statements. + -- Consult their docs or just set it to 'False' to stay on the safe side. + -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. + Bool -> + Settings.Settings -> + IO (Either ConnectionError Connection) +acquire usePreparedStatements settings = {-# SCC "acquire" #-} runExceptT $ do pqConnection <- lift (IO.acquireConnection settings) @@ -30,12 +48,12 @@ acquire settings = integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) registry <- lift (IO.acquirePreparedStatementRegistry) pqConnectionRef <- lift (newMVar pqConnection) - pure (Connection pqConnectionRef integerDatetimes registry) + pure (Connection usePreparedStatements pqConnectionRef integerDatetimes registry) -- | -- Release the connection. release :: Connection -> IO () -release (Connection pqConnectionRef _ _) = +release (Connection _ pqConnectionRef _ _) = mask_ $ do nullConnection <- LibPQ.newNullConnection pqConnection <- swapMVar pqConnectionRef nullConnection @@ -46,5 +64,5 @@ release (Connection pqConnectionRef _ _) = -- -- The access to the connection is exclusive. withLibPQConnection :: Connection -> (LibPQ.Connection -> IO a) -> IO a -withLibPQConnection (Connection pqConnectionRef _ _) = +withLibPQConnection (Connection _ pqConnectionRef _ _) = withMVar pqConnectionRef diff --git a/library/Hasql/Pipeline/Core.hs b/library/Hasql/Pipeline/Core.hs index 3c85b62754..fce3c5cd18 100644 --- a/library/Hasql/Pipeline/Core.hs +++ b/library/Hasql/Pipeline/Core.hs @@ -11,8 +11,8 @@ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry import Hasql.Statement qualified as Statement -run :: forall a. Pipeline a -> Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> IO (Either SessionError a) -run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do +run :: forall a. Pipeline a -> Bool -> Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> IO (Either SessionError a) +run (Pipeline sendQueriesInIO) usePreparedStatements connection registry integerDatetimes = do runExceptT do enterPipelineMode recvQueries <- sendQueries @@ -31,7 +31,7 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do sendQueries :: ExceptT SessionError IO (ExceptT SessionError IO a) sendQueries = - fmap ExceptT $ ExceptT $ sendQueriesInIO connection registry integerDatetimes + fmap ExceptT $ ExceptT $ sendQueriesInIO usePreparedStatements connection registry integerDatetimes pipelineSync :: ExceptT SessionError IO () pipelineSync = @@ -116,7 +116,8 @@ run (Pipeline sendQueriesInIO) connection registry integerDatetimes = do -- @ newtype Pipeline a = Pipeline - ( Pq.Connection -> + ( Bool -> + Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> IO (Either SessionError (IO (Either SessionError a))) @@ -125,15 +126,15 @@ newtype Pipeline a instance Applicative Pipeline where pure a = - Pipeline (\_ _ _ -> pure (Right (pure (Right a)))) + Pipeline (\_ _ _ _ -> pure (Right (pure (Right a)))) Pipeline lSend <*> Pipeline rSend = - Pipeline \conn reg integerDatetimes -> - lSend conn reg integerDatetimes >>= \case + Pipeline \usePreparedStatements conn reg integerDatetimes -> + lSend usePreparedStatements conn reg integerDatetimes >>= \case Left sendErr -> pure (Left sendErr) Right lRecv -> - rSend conn reg integerDatetimes <&> \case + rSend usePreparedStatements conn reg integerDatetimes <&> \case Left sendErr -> Left sendErr Right rRecv -> @@ -145,8 +146,8 @@ statement :: params -> Statement.Statement params result -> Pipeline result statement params (Statement.Statement sql (Encoders.Params encoder) (Decoders.Result decoder) preparable) = Pipeline run where - run connection registry integerDatetimes = - if preparable + run usePreparedStatements connection registry integerDatetimes = + if usePreparedStatements && preparable then runPrepared else runUnprepared where diff --git a/library/Hasql/Session/Core.hs b/library/Hasql/Session/Core.hs index c54a0274df..b755f814ce 100644 --- a/library/Hasql/Session/Core.hs +++ b/library/Hasql/Session/Core.hs @@ -30,7 +30,7 @@ run (Session impl) connection = runExceptT $ runReaderT impl connection handler = case connection of - Connection.Connection pqConnVar _ registry -> + Connection.Connection _ pqConnVar _ registry -> withMVar pqConnVar \pqConn -> Pq.transactionStatus pqConn >>= \case Pq.TransIdle -> pure () @@ -46,7 +46,7 @@ sql :: ByteString -> Session () sql sql = Session $ ReaderT - $ \(Connection.Connection pqConnectionRef integerDatetimes _) -> + $ \(Connection.Connection _ pqConnectionRef integerDatetimes _) -> ExceptT $ fmap (first (QueryError sql [])) $ withMVar pqConnectionRef @@ -64,12 +64,12 @@ statement :: params -> Statement.Statement params result -> Session result statement input (Statement.Statement template (Encoders.Params paramsEncoder) (Decoders.Result decoder) preparable) = Session $ ReaderT - $ \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + $ \(Connection.Connection usePreparedStatements pqConnectionRef integerDatetimes registry) -> ExceptT $ fmap (first (QueryError template (Encoders.Params.renderReadable paramsEncoder input))) $ withMVar pqConnectionRef $ \pqConnection -> do - r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder preparable input + r1 <- IO.sendParametricStatement pqConnection integerDatetimes registry template paramsEncoder (usePreparedStatements && preparable) input r2 <- IO.getResults pqConnection integerDatetimes decoder return $ r1 *> r2 @@ -77,6 +77,6 @@ statement input (Statement.Statement template (Encoders.Params paramsEncoder) (D -- Execute a pipeline. pipeline :: Pipeline.Pipeline result -> Session result pipeline pipeline = - Session $ ReaderT \(Connection.Connection pqConnectionRef integerDatetimes registry) -> + Session $ ReaderT \(Connection.Connection usePreparedStatements pqConnectionRef integerDatetimes registry) -> ExceptT $ withMVar pqConnectionRef \pqConnection -> - Pipeline.run pipeline pqConnection registry integerDatetimes + Pipeline.run pipeline usePreparedStatements pqConnection registry integerDatetimes diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 24df8b630c..85b04ec347 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -54,14 +54,10 @@ data Statement params result (Encoders.Params params) -- | Decoder of result. (Decoders.Result result) - -- | Flag, determining whether it should be prepared. + -- | Flag, determining whether it can be prepared. -- -- Set it to 'True' if your application has a limited amount of queries and doesn't generate the SQL dynamically. -- This will boost the performance by allowing Postgres to avoid reconstructing the execution plan each time the query gets executed. - -- - -- Note that if you're using proxying applications like @pgbouncer@, such tools may be incompatible with prepared statements. - -- So do consult their docs or just set it to 'False' to stay on the safe side. - -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. Bool instance Functor (Statement params) where diff --git a/profiling/Main.hs b/profiling/Main.hs index dbe541077c..50364b43ec 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -17,7 +17,7 @@ main = return () where acquireConnection = - A.acquire settings + A.acquire True settings where settings = A.settings host port user password database diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index a4924d6847..beb5192bc7 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -8,7 +8,7 @@ with handler = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ HC.acquire settings + ExceptT $ HC.acquire True settings where settings = HC.settings host port user password database diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index 15821d5632..b7ad895ef6 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -36,7 +36,7 @@ runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ fmap (first ConnectionError) $ Connection.acquire Constants.localConnectionSettings + ExceptT $ fmap (first ConnectionError) $ Connection.acquire True Constants.localConnectionSettings use connection = ExceptT $ fmap (first SessionError) diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 31e68b5709..d83a00b4b9 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -15,7 +15,7 @@ main = acquire = join $ fmap (either (fail . show) return) - $ Hasql.Connection.acquire connectionSettings + $ Hasql.Connection.acquire True connectionSettings where connectionSettings = Hasql.Connection.settings "localhost" 5432 "postgres" "postgres" "postgres" From 41cf5173416c4166bdfd7874392aaace4dc3a4bf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 18:07:39 +0300 Subject: [PATCH 1112/1204] Rename the Settings module to ConnectionString --- hasql.cabal | 2 +- library/Hasql/Connection.hs | 2 +- library/Hasql/Connection/Core.hs | 2 +- library/Hasql/{Settings.hs => ConnectionString.hs} | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename library/Hasql/{Settings.hs => ConnectionString.hs} (97%) diff --git a/hasql.cabal b/hasql.cabal index 27f6a38068..4590b1015e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -108,6 +108,7 @@ library other-modules: Hasql.Commands Hasql.Connection.Core + Hasql.ConnectionString Hasql.Decoders.All Hasql.Decoders.Array Hasql.Decoders.Composite @@ -129,7 +130,6 @@ library Hasql.Prelude Hasql.PreparedStatementRegistry Hasql.Session.Core - Hasql.Settings build-depends: aeson >=2 && <3, diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 8dc9996824..1e50f55a7e 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -12,4 +12,4 @@ module Hasql.Connection where import Hasql.Connection.Core -import Hasql.Settings +import Hasql.ConnectionString diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index 5b3f1d4fe0..db538d8da8 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -6,7 +6,7 @@ import Hasql.IO qualified as IO import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry -import Hasql.Settings qualified as Settings +import Hasql.ConnectionString qualified as Settings -- | -- A single connection to the database. diff --git a/library/Hasql/Settings.hs b/library/Hasql/ConnectionString.hs similarity index 97% rename from library/Hasql/Settings.hs rename to library/Hasql/ConnectionString.hs index 56cc5b41f0..cfa6ed30e1 100644 --- a/library/Hasql/Settings.hs +++ b/library/Hasql/ConnectionString.hs @@ -1,4 +1,4 @@ -module Hasql.Settings where +module Hasql.ConnectionString where import Data.ByteString qualified as B import Data.ByteString.Builder qualified as BB From dcc9e036c93d1f5c4ef64454a807b585e40149d5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 18:11:16 +0300 Subject: [PATCH 1113/1204] Rename definitions --- README.md | 2 +- library/Hasql/Connection.hs | 4 ++-- library/Hasql/Connection/Core.hs | 8 ++++---- library/Hasql/ConnectionString.hs | 8 ++++---- profiling/Main.hs | 6 +++--- tasty/Main/Connection.hs | 6 +++--- testing-kit/Hasql/TestingKit/Constants.hs | 4 ++-- threads-test/Main.hs | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 44cf8284f6..6aed9b6b66 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ main = do result <- Session.run (sumAndDivModSession 3 8 3) connection print result where - connectionSettings = Connection.settings "localhost" 5432 "postgres" "" "postgres" + connectionSettings = Connection.connectionString "localhost" 5432 "postgres" "" "postgres" -- * Sessions diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 1e50f55a7e..4878891eb1 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -5,8 +5,8 @@ module Hasql.Connection ConnectionError, acquire, release, - Settings, - settings, + ConnectionString, + connectionString, withLibPQConnection, ) where diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index db538d8da8..cadc27e440 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -2,11 +2,11 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection.Core where +import Hasql.ConnectionString qualified as ConnectionString import Hasql.IO qualified as IO import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry -import Hasql.ConnectionString qualified as Settings -- | -- A single connection to the database. @@ -37,12 +37,12 @@ acquire :: -- Consult their docs or just set it to 'False' to stay on the safe side. -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. Bool -> - Settings.Settings -> + ConnectionString.ConnectionString -> IO (Either ConnectionError Connection) -acquire usePreparedStatements settings = +acquire usePreparedStatements connectionString = {-# SCC "acquire" #-} runExceptT $ do - pqConnection <- lift (IO.acquireConnection settings) + pqConnection <- lift (IO.acquireConnection connectionString) lift (IO.checkConnectionStatus pqConnection) >>= traverse throwError lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) diff --git a/library/Hasql/ConnectionString.hs b/library/Hasql/ConnectionString.hs index cfa6ed30e1..baffab5887 100644 --- a/library/Hasql/ConnectionString.hs +++ b/library/Hasql/ConnectionString.hs @@ -8,14 +8,14 @@ import Hasql.Prelude -- | -- All settings encoded in a single byte-string according to -- . -type Settings = +type ConnectionString = ByteString -- | -- Encode a host, a port, a user, a password and a database into the PostgreSQL settings byte-string. -{-# INLINE settings #-} -settings :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> Settings -settings host port user password database = +{-# INLINE connectionString #-} +connectionString :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> ConnectionString +connectionString host port user password database = BL.toStrict $ BB.toLazyByteString $ mconcat diff --git a/profiling/Main.hs b/profiling/Main.hs index 50364b43ec..1411de661c 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -17,10 +17,10 @@ main = return () where acquireConnection = - A.acquire True settings + A.acquire True connectionString where - settings = - A.settings host port user password database + connectionString = + A.connectionString host port user password database where host = "localhost" port = 5432 diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index beb5192bc7..bda1cff76e 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -8,10 +8,10 @@ with handler = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ HC.acquire True settings + ExceptT $ HC.acquire True connectionString where - settings = - HC.settings host port user password database + connectionString = + HC.connectionString host port user password database where host = "localhost" port = 5432 diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs index 584550e9a1..229a3777a1 100644 --- a/testing-kit/Hasql/TestingKit/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -2,9 +2,9 @@ module Hasql.TestingKit.Constants where import Hasql.Connection qualified as Connection -localConnectionSettings :: Connection.Settings +localConnectionSettings :: Connection.ConnectionString localConnectionSettings = - Connection.settings host port user password database + Connection.connectionString host port user password database where host = "localhost" port = 5432 diff --git a/threads-test/Main.hs b/threads-test/Main.hs index d83a00b4b9..147ed31b95 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -18,7 +18,7 @@ main = $ Hasql.Connection.acquire True connectionSettings where connectionSettings = - Hasql.Connection.settings "localhost" 5432 "postgres" "postgres" "postgres" + Hasql.Connection.connectionString "localhost" 5432 "postgres" "postgres" "postgres" use (connection1, connection2) = do beginVar <- newEmptyMVar From ded121c1780ecb051ecdb50d7c874e8fc54f3639 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 18:17:58 +0300 Subject: [PATCH 1114/1204] Introduce a setting tree --- hasql.cabal | 3 +++ library/Hasql/Connection/Setting.hs | 14 ++++++++++++++ library/Hasql/Connection/Setting/Connection.hs | 14 ++++++++++++++ .../Connection/Setting/Connection/Component.hs | 9 +++++++++ 4 files changed, 40 insertions(+) create mode 100644 library/Hasql/Connection/Setting.hs create mode 100644 library/Hasql/Connection/Setting/Connection.hs create mode 100644 library/Hasql/Connection/Setting/Connection/Component.hs diff --git a/hasql.cabal b/hasql.cabal index 4590b1015e..4eed722ee1 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -108,6 +108,9 @@ library other-modules: Hasql.Commands Hasql.Connection.Core + Hasql.Connection.Setting + Hasql.Connection.Setting.Connection + Hasql.Connection.Setting.Connection.Component Hasql.ConnectionString Hasql.Decoders.All Hasql.Decoders.Array diff --git a/library/Hasql/Connection/Setting.hs b/library/Hasql/Connection/Setting.hs new file mode 100644 index 0000000000..ed02f3e160 --- /dev/null +++ b/library/Hasql/Connection/Setting.hs @@ -0,0 +1,14 @@ +module Hasql.Connection.Setting where + +import Hasql.Connection.Setting.Connection +import Hasql.Prelude + +data Setting + +connectionString :: ConnectionString -> Setting +connectionString = + error "TODO" + +usePreparedStatements :: Bool -> Setting +usePreparedStatements = + error "TODO" diff --git a/library/Hasql/Connection/Setting/Connection.hs b/library/Hasql/Connection/Setting/Connection.hs new file mode 100644 index 0000000000..f57c0265f2 --- /dev/null +++ b/library/Hasql/Connection/Setting/Connection.hs @@ -0,0 +1,14 @@ +module Hasql.Connection.Setting.Connection where + +import Hasql.Connection.Setting.Connection.Component qualified as Component +import Hasql.Prelude + +data ConnectionString + +plain :: Text -> ConnectionString +plain = + error "TODO" + +components :: [Component.Component] -> ConnectionString +components = + error "TODO" diff --git a/library/Hasql/Connection/Setting/Connection/Component.hs b/library/Hasql/Connection/Setting/Connection/Component.hs new file mode 100644 index 0000000000..534951f228 --- /dev/null +++ b/library/Hasql/Connection/Setting/Connection/Component.hs @@ -0,0 +1,9 @@ +module Hasql.Connection.Setting.Connection.Component where + +import Hasql.Prelude + +data Component + +username :: Text -> Component +username = + error "TODO" From e482bec88ac116477d63279973bd1eabe8dbbefd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 18:53:08 +0300 Subject: [PATCH 1115/1204] Introduce Config as the compilation target --- hasql.cabal | 7 ++++--- library/Hasql/Connection/Config.hs | 21 +++++++++++++++++++++ library/Hasql/Connection/Setting.hs | 13 +++++++++++-- 3 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 library/Hasql/Connection/Config.hs diff --git a/hasql.cabal b/hasql.cabal index 4eed722ee1..fe7a37743c 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -99,6 +99,9 @@ library hs-source-dirs: library exposed-modules: Hasql.Connection + Hasql.Connection.Setting + Hasql.Connection.Setting.Connection + Hasql.Connection.Setting.Connection.Component Hasql.Decoders Hasql.Encoders Hasql.Pipeline @@ -107,10 +110,8 @@ library other-modules: Hasql.Commands + Hasql.Connection.Config Hasql.Connection.Core - Hasql.Connection.Setting - Hasql.Connection.Setting.Connection - Hasql.Connection.Setting.Connection.Component Hasql.ConnectionString Hasql.Decoders.All Hasql.Decoders.Array diff --git a/library/Hasql/Connection/Config.hs b/library/Hasql/Connection/Config.hs new file mode 100644 index 0000000000..f10e18a477 --- /dev/null +++ b/library/Hasql/Connection/Config.hs @@ -0,0 +1,21 @@ +module Hasql.Connection.Config where + +import Hasql.Prelude + +data Config = Config + { connectionString :: ByteString, + usePreparedStatements :: Bool + } + +class Updates a where + update :: a -> Config -> Config + +nil :: Config +nil = + Config + { connectionString = "", + usePreparedStatements = True + } + +fromUpdates :: (Updates a) => [a] -> Config +fromUpdates = foldl' (flip update) nil diff --git a/library/Hasql/Connection/Setting.hs b/library/Hasql/Connection/Setting.hs index ed02f3e160..901067bb7f 100644 --- a/library/Hasql/Connection/Setting.hs +++ b/library/Hasql/Connection/Setting.hs @@ -1,9 +1,18 @@ -module Hasql.Connection.Setting where +module Hasql.Connection.Setting + ( Setting, + connectionString, + usePreparedStatements, + ) +where +import Hasql.Connection.Config qualified as Config import Hasql.Connection.Setting.Connection import Hasql.Prelude -data Setting +newtype Setting = Setting (Config.Config -> Config.Config) + +instance Config.Updates Setting where + update (Setting update) = update connectionString :: ConnectionString -> Setting connectionString = From 1c1131a393fbcc5576d4a43a32c74f21cfd7dcbd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 19:13:05 +0300 Subject: [PATCH 1116/1204] Reimplement settings as a tree --- benchmarks/Main.hs | 2 +- hasql.cabal | 5 ++- library/Hasql/Connection.hs | 3 -- .../Connection/Config/ConnectionString.hs | 17 +++++++ .../Config/ConnectionString/Params.hs | 18 ++++++++ library/Hasql/Connection/Core.hs | 21 ++++----- library/Hasql/Connection/Setting.hs | 24 +++++++--- .../Hasql/Connection/Setting/Connection.hs | 27 +++++++---- .../Setting/Connection/Component.hs | 9 ---- .../Connection/Setting/Connection/Param.hs | 45 +++++++++++++++++++ profiling/Main.hs | 24 +++++----- tasty/Main/Connection.hs | 12 +---- testing-kit/Hasql/TestingKit/Constants.hs | 23 ++++++---- testing-kit/Hasql/TestingKit/TestingDsl.hs | 2 +- threads-test/Main.hs | 16 ++++++- 15 files changed, 176 insertions(+), 72 deletions(-) create mode 100644 library/Hasql/Connection/Config/ConnectionString.hs create mode 100644 library/Hasql/Connection/Config/ConnectionString/Params.hs delete mode 100644 library/Hasql/Connection/Setting/Connection/Component.hs create mode 100644 library/Hasql/Connection/Setting/Connection/Param.hs diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs index 4b3374c3bc..8e3c3f8d7d 100644 --- a/benchmarks/Main.hs +++ b/benchmarks/Main.hs @@ -16,7 +16,7 @@ main = useConnection connection where acquireConnection = - A.acquire True "" + A.acquire [] useConnection connection = defaultMain [ sessionBench "largeResultInVector" sessionWithSingleLargeResultInVector, diff --git a/hasql.cabal b/hasql.cabal index fe7a37743c..5ab8bb7a53 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -101,7 +101,7 @@ library Hasql.Connection Hasql.Connection.Setting Hasql.Connection.Setting.Connection - Hasql.Connection.Setting.Connection.Component + Hasql.Connection.Setting.Connection.Param Hasql.Decoders Hasql.Encoders Hasql.Pipeline @@ -111,6 +111,8 @@ library other-modules: Hasql.Commands Hasql.Connection.Config + Hasql.Connection.Config.ConnectionString + Hasql.Connection.Config.ConnectionString.Params Hasql.Connection.Core Hasql.ConnectionString Hasql.Decoders.All @@ -141,6 +143,7 @@ library base >=4.14 && <5, bytestring >=0.10 && <0.13, bytestring-strict-builder >=0.4.5.1 && <0.5, + containers >=0.6 && <0.8, contravariant >=1.3 && <2, dlist >=0.8 && <0.9 || >=1 && <2, hashable >=1.2 && <2, diff --git a/library/Hasql/Connection.hs b/library/Hasql/Connection.hs index 4878891eb1..14c892eb20 100644 --- a/library/Hasql/Connection.hs +++ b/library/Hasql/Connection.hs @@ -5,11 +5,8 @@ module Hasql.Connection ConnectionError, acquire, release, - ConnectionString, - connectionString, withLibPQConnection, ) where import Hasql.Connection.Core -import Hasql.ConnectionString diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs new file mode 100644 index 0000000000..f114c14d20 --- /dev/null +++ b/library/Hasql/Connection/Config/ConnectionString.hs @@ -0,0 +1,17 @@ +module Hasql.Connection.Config.ConnectionString where + +import Data.ByteString qualified as B +import Data.Map.Strict qualified as Map +import Hasql.Connection.Config.ConnectionString.Params qualified as Params +import Hasql.Prelude + +type ConnectionString = ByteString + +class Constructs a where + construct :: a -> ConnectionString + +fromParams :: Params.Params -> ConnectionString +fromParams = + B.intercalate " " . fmap renderParam . Map.toList + where + renderParam (k, v) = mconcat [k, "=", v] diff --git a/library/Hasql/Connection/Config/ConnectionString/Params.hs b/library/Hasql/Connection/Config/ConnectionString/Params.hs new file mode 100644 index 0000000000..f0243ab11a --- /dev/null +++ b/library/Hasql/Connection/Config/ConnectionString/Params.hs @@ -0,0 +1,18 @@ +module Hasql.Connection.Config.ConnectionString.Params where + +import Data.Map.Strict qualified as Map +import Hasql.Prelude + +type Params = Map.Map ByteString ByteString + +class Updates a where + update :: a -> Params -> Params + +nil :: Params +nil = Map.empty + +fromUpdates :: (Updates a) => [a] -> Params +fromUpdates = foldl' (flip update) nil + +setKeyValue :: ByteString -> ByteString -> Params -> Params +setKeyValue key value = Map.insert key value diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index cadc27e440..54964a2e20 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -2,7 +2,8 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection.Core where -import Hasql.ConnectionString qualified as ConnectionString +import Hasql.Connection.Config qualified as Config +import Hasql.Connection.Setting qualified as Setting import Hasql.IO qualified as IO import Hasql.LibPq14 qualified as LibPQ import Hasql.Prelude @@ -29,26 +30,20 @@ type ConnectionError = -- | -- Acquire a connection using the provided settings encoded according to the PostgreSQL format. acquire :: - -- | Whether prepared statements are allowed. - -- - -- When 'False', even the statements marked as preparable will be executed without preparation. - -- - -- This is useful when dealing with proxying applications like @pgbouncer@, which may be incompatible with prepared statements. - -- Consult their docs or just set it to 'False' to stay on the safe side. - -- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. - Bool -> - ConnectionString.ConnectionString -> + [Setting.Setting] -> IO (Either ConnectionError Connection) -acquire usePreparedStatements connectionString = +acquire settings = {-# SCC "acquire" #-} runExceptT $ do - pqConnection <- lift (IO.acquireConnection connectionString) + pqConnection <- lift (IO.acquireConnection (Config.connectionString config)) lift (IO.checkConnectionStatus pqConnection) >>= traverse throwError lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) registry <- lift (IO.acquirePreparedStatementRegistry) pqConnectionRef <- lift (newMVar pqConnection) - pure (Connection usePreparedStatements pqConnectionRef integerDatetimes registry) + pure (Connection (Config.usePreparedStatements config) pqConnectionRef integerDatetimes registry) + where + config = Config.fromUpdates settings -- | -- Release the connection. diff --git a/library/Hasql/Connection/Setting.hs b/library/Hasql/Connection/Setting.hs index 901067bb7f..526b16c614 100644 --- a/library/Hasql/Connection/Setting.hs +++ b/library/Hasql/Connection/Setting.hs @@ -1,12 +1,13 @@ module Hasql.Connection.Setting ( Setting, - connectionString, + connection, usePreparedStatements, ) where import Hasql.Connection.Config qualified as Config -import Hasql.Connection.Setting.Connection +import Hasql.Connection.Config.ConnectionString qualified as Config.ConnectionString +import Hasql.Connection.Setting.Connection qualified as Connection import Hasql.Prelude newtype Setting = Setting (Config.Config -> Config.Config) @@ -14,10 +15,23 @@ newtype Setting = Setting (Config.Config -> Config.Config) instance Config.Updates Setting where update (Setting update) = update -connectionString :: ConnectionString -> Setting -connectionString = - error "TODO" +connection :: Connection.Connection -> Setting +connection setting = + Setting \config -> + config + { Config.connectionString = + Config.ConnectionString.construct setting + } +-- | Whether prepared statements are allowed. +-- +-- When 'False', even the statements marked as preparable will be executed without preparation. +-- +-- This is useful when dealing with proxying applications like @pgbouncer@, which may be incompatible with prepared statements. +-- Consult their docs or just set it to 'False' to stay on the safe side. +-- It should be noted that starting from version @1.21.0@ @pgbouncer@ now does provide support for prepared statements. +-- +-- 'True' by default. usePreparedStatements :: Bool -> Setting usePreparedStatements = error "TODO" diff --git a/library/Hasql/Connection/Setting/Connection.hs b/library/Hasql/Connection/Setting/Connection.hs index f57c0265f2..e9da46e4e5 100644 --- a/library/Hasql/Connection/Setting/Connection.hs +++ b/library/Hasql/Connection/Setting/Connection.hs @@ -1,14 +1,25 @@ -module Hasql.Connection.Setting.Connection where +module Hasql.Connection.Setting.Connection + ( Connection, + string, + params, + ) +where -import Hasql.Connection.Setting.Connection.Component qualified as Component +import Hasql.Connection.Config.ConnectionString qualified as Config.ConnectionString +import Hasql.Connection.Config.ConnectionString.Params qualified as Config.ConnectionString.Params +import Hasql.Connection.Setting.Connection.Param qualified as Param import Hasql.Prelude -data ConnectionString +newtype Connection = Connection ByteString -plain :: Text -> ConnectionString -plain = - error "TODO" +instance Config.ConnectionString.Constructs Connection where + construct = coerce -components :: [Component.Component] -> ConnectionString -components = +-- | Plain connection string according to . +string :: Text -> Connection +string = error "TODO" + +params :: [Param.Param] -> Connection +params = + Connection . Config.ConnectionString.fromParams . Config.ConnectionString.Params.fromUpdates diff --git a/library/Hasql/Connection/Setting/Connection/Component.hs b/library/Hasql/Connection/Setting/Connection/Component.hs deleted file mode 100644 index 534951f228..0000000000 --- a/library/Hasql/Connection/Setting/Connection/Component.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Hasql.Connection.Setting.Connection.Component where - -import Hasql.Prelude - -data Component - -username :: Text -> Component -username = - error "TODO" diff --git a/library/Hasql/Connection/Setting/Connection/Param.hs b/library/Hasql/Connection/Setting/Connection/Param.hs new file mode 100644 index 0000000000..42517c4b81 --- /dev/null +++ b/library/Hasql/Connection/Setting/Connection/Param.hs @@ -0,0 +1,45 @@ +module Hasql.Connection.Setting.Connection.Param + ( Param, + host, + port, + user, + password, + dbname, + other, + ) +where + +import Data.ByteString.Builder qualified as BB +import Data.ByteString.Lazy qualified as BL +import Data.Text.Encoding qualified as Text +import Hasql.Connection.Config.ConnectionString.Params qualified as Config +import Hasql.Prelude + +newtype Param = Param (Config.Params -> Config.Params) + +instance Config.Updates Param where + update = coerce + +host :: Text -> Param +host = + Param . Config.setKeyValue "host" . Text.encodeUtf8 + +port :: Word16 -> Param +port = + Param . Config.setKeyValue "port" . BL.toStrict . BB.toLazyByteString . BB.word16Dec + +user :: Text -> Param +user = + Param . Config.setKeyValue "user" . Text.encodeUtf8 + +password :: Text -> Param +password = + Param . Config.setKeyValue "password" . Text.encodeUtf8 + +dbname :: Text -> Param +dbname = + Param . Config.setKeyValue "dbname" . Text.encodeUtf8 + +other :: Text -> Text -> Param +other name = + Param . Config.setKeyValue (Text.encodeUtf8 name) . Text.encodeUtf8 diff --git a/profiling/Main.hs b/profiling/Main.hs index 1411de661c..290948d24c 100644 --- a/profiling/Main.hs +++ b/profiling/Main.hs @@ -2,6 +2,9 @@ module Main where import Data.Vector qualified as F import Hasql.Connection qualified as A +import Hasql.Connection.Setting qualified as E +import Hasql.Connection.Setting.Connection qualified as F +import Hasql.Connection.Setting.Connection.Param qualified as G import Hasql.Decoders qualified as D import Hasql.Session qualified as B import Hasql.Statement qualified as C @@ -17,16 +20,17 @@ main = return () where acquireConnection = - A.acquire True connectionString - where - connectionString = - A.connectionString host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "postgres" - database = "postgres" + A.acquire + [ E.connection + ( F.params + [ G.host "localhost", + G.port 5432, + G.user "postgres", + G.password "postgres", + G.dbname "postgres" + ] + ) + ] -- * Sessions diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index bda1cff76e..a2879da9d7 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -1,6 +1,7 @@ module Main.Connection where import Hasql.Connection qualified as HC +import Hasql.TestingKit.Constants qualified as Constants import Main.Prelude with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) @@ -8,16 +9,7 @@ with handler = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ HC.acquire True connectionString - where - connectionString = - HC.connectionString host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "postgres" - database = "postgres" + ExceptT $ HC.acquire Constants.localConnectionSettings use connection = lift $ handler connection release connection = diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs index 229a3777a1..8ff8ba9b2d 100644 --- a/testing-kit/Hasql/TestingKit/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -1,13 +1,18 @@ module Hasql.TestingKit.Constants where -import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Setting +import Hasql.Connection.Setting.Connection qualified as Setting.Connection +import Hasql.Connection.Setting.Connection.Param qualified as Setting.Connection.Component -localConnectionSettings :: Connection.ConnectionString +localConnectionSettings :: [Setting.Setting] localConnectionSettings = - Connection.connectionString host port user password database - where - host = "localhost" - port = 5432 - user = "postgres" - password = "postgres" - database = "postgres" + [ Setting.connection + ( Setting.Connection.params + [ Setting.Connection.Component.host "localhost", + Setting.Connection.Component.port 5432, + Setting.Connection.Component.user "postgres", + Setting.Connection.Component.password "postgres", + Setting.Connection.Component.dbname "postgres" + ] + ) + ] diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/testing-kit/Hasql/TestingKit/TestingDsl.hs index b7ad895ef6..15821d5632 100644 --- a/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -36,7 +36,7 @@ runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ fmap (first ConnectionError) $ Connection.acquire True Constants.localConnectionSettings + ExceptT $ fmap (first ConnectionError) $ Connection.acquire Constants.localConnectionSettings use connection = ExceptT $ fmap (first SessionError) diff --git a/threads-test/Main.hs b/threads-test/Main.hs index 147ed31b95..33a749c5a0 100644 --- a/threads-test/Main.hs +++ b/threads-test/Main.hs @@ -1,6 +1,9 @@ module Main where import Hasql.Connection qualified +import Hasql.Connection.Setting qualified +import Hasql.Connection.Setting.Connection qualified +import Hasql.Connection.Setting.Connection.Param qualified import Hasql.Session qualified import Main.Statements qualified as Statements import Prelude @@ -15,10 +18,19 @@ main = acquire = join $ fmap (either (fail . show) return) - $ Hasql.Connection.acquire True connectionSettings + $ Hasql.Connection.acquire connectionSettings where connectionSettings = - Hasql.Connection.connectionString "localhost" 5432 "postgres" "postgres" "postgres" + [ Hasql.Connection.Setting.connection + ( Hasql.Connection.Setting.Connection.params + [ Hasql.Connection.Setting.Connection.Param.host "localhost", + Hasql.Connection.Setting.Connection.Param.port 5432, + Hasql.Connection.Setting.Connection.Param.user "postgres", + Hasql.Connection.Setting.Connection.Param.password "postgres", + Hasql.Connection.Setting.Connection.Param.dbname "postgres" + ] + ) + ] use (connection1, connection2) = do beginVar <- newEmptyMVar From 93d14532d172ba3d6e3cb00b02b125ebc8558ff1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 22:39:19 +0300 Subject: [PATCH 1117/1204] Lint --- library/Hasql/Encoders/All.hs | 4 ++-- library/Hasql/Encoders/Params.hs | 2 +- library/Hasql/Errors.hs | 2 +- library/Hasql/PreparedStatementRegistry.hs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 0a7fd2a29d..f4a3394437 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -406,11 +406,11 @@ instance Monoid (Composite a) where -- | Single field of a row-type. field :: NullableOrNot Value a -> Composite a field = \case - NonNullable (Value (Value.Value elementOID arrayOID encode print)) -> + NonNullable (Value (Value.Value elementOID _ encode print)) -> Composite (\val idt -> A.field (PTI.oidWord32 elementOID) (encode idt val)) (\val -> [print val]) - Nullable (Value (Value.Value elementOID arrayOID encode print)) -> + Nullable (Value (Value.Value elementOID _ encode print)) -> Composite ( \val idt -> case val of Nothing -> A.nullField (PTI.oidWord32 elementOID) diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index e2c4af2c46..4a47a52fce 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -24,7 +24,7 @@ compilePreparedStatementData (Params _ columnsMetadata serializer _) integerDate & zipWith (\format encoding -> (,format) <$> encoding) formatList compileUnpreparedStatementData :: Params a -> Bool -> a -> [Maybe (A.Oid, ByteString, A.Format)] -compileUnpreparedStatementData (Params _ columnsMetadata serializer printer) integerDatetimes input = +compileUnpreparedStatementData (Params _ columnsMetadata serializer _) integerDatetimes input = zipWith ( \(oid, format) encoding -> (,,) <$> pure oid <*> encoding <*> pure format diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 0e8dd344ae..8e36b1bedf 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -75,7 +75,7 @@ instance Exception SessionError where ClientError (Just message) -> "Client error: " <> show message ClientError Nothing -> "Client error without details" ResultError resultError -> case resultError of - ServerError code message details hint position -> + ServerError code message details hint _ -> "Server error " <> BC.unpack code <> ": " diff --git a/library/Hasql/PreparedStatementRegistry.hs b/library/Hasql/PreparedStatementRegistry.hs index d876f520e2..3cd908824e 100644 --- a/library/Hasql/PreparedStatementRegistry.hs +++ b/library/Hasql/PreparedStatementRegistry.hs @@ -60,5 +60,5 @@ data LocalKey instance Hashable LocalKey where {-# INLINE hashWithSalt #-} - hashWithSalt salt (LocalKey template types) = + hashWithSalt salt (LocalKey template _) = hashWithSalt salt template From 69fe290646f616205ab3515b0eb8a54c3cc3e482 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 22:40:24 +0300 Subject: [PATCH 1118/1204] Add setters --- hasql.cabal | 1 + library/Hasql/Connection/Config.hs | 8 ++++++++ library/Hasql/Connection/Setting.hs | 10 +++------- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index 5ab8bb7a53..f39527bd58 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -63,6 +63,7 @@ common base LiberalTypeSynonyms MultiParamTypeClasses MultiWayIf + NamedFieldPuns NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings diff --git a/library/Hasql/Connection/Config.hs b/library/Hasql/Connection/Config.hs index f10e18a477..94f5438c07 100644 --- a/library/Hasql/Connection/Config.hs +++ b/library/Hasql/Connection/Config.hs @@ -19,3 +19,11 @@ nil = fromUpdates :: (Updates a) => [a] -> Config fromUpdates = foldl' (flip update) nil + +setConnectionString :: ByteString -> Config -> Config +setConnectionString connectionString config = + config {connectionString} + +setUsePreparedStatements :: Bool -> Config -> Config +setUsePreparedStatements usePreparedStatements config = + config {usePreparedStatements} diff --git a/library/Hasql/Connection/Setting.hs b/library/Hasql/Connection/Setting.hs index 526b16c614..e0aa01a2f1 100644 --- a/library/Hasql/Connection/Setting.hs +++ b/library/Hasql/Connection/Setting.hs @@ -16,12 +16,8 @@ instance Config.Updates Setting where update (Setting update) = update connection :: Connection.Connection -> Setting -connection setting = - Setting \config -> - config - { Config.connectionString = - Config.ConnectionString.construct setting - } +connection = + Setting . Config.setConnectionString . Config.ConnectionString.construct -- | Whether prepared statements are allowed. -- @@ -34,4 +30,4 @@ connection setting = -- 'True' by default. usePreparedStatements :: Bool -> Setting usePreparedStatements = - error "TODO" + Setting . Config.setUsePreparedStatements From 9444102080000da78de95bbce11912bb3be89ca7 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 23:10:07 +0300 Subject: [PATCH 1119/1204] Add construction from text --- library/Hasql/Connection/Config/ConnectionString.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs index f114c14d20..bc5a0699d2 100644 --- a/library/Hasql/Connection/Config/ConnectionString.hs +++ b/library/Hasql/Connection/Config/ConnectionString.hs @@ -2,6 +2,7 @@ module Hasql.Connection.Config.ConnectionString where import Data.ByteString qualified as B import Data.Map.Strict qualified as Map +import Data.Text.Encoding qualified import Hasql.Connection.Config.ConnectionString.Params qualified as Params import Hasql.Prelude @@ -10,6 +11,9 @@ type ConnectionString = ByteString class Constructs a where construct :: a -> ConnectionString +fromText :: Text -> ConnectionString +fromText = Data.Text.Encoding.encodeUtf8 + fromParams :: Params.Params -> ConnectionString fromParams = B.intercalate " " . fmap renderParam . Map.toList From 1da07c1b6e3d065a24901fba7b7dc0002e02cfba Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 23:25:53 +0300 Subject: [PATCH 1120/1204] Update --- library/Hasql/Connection/Setting/Connection.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Connection/Setting/Connection.hs b/library/Hasql/Connection/Setting/Connection.hs index e9da46e4e5..b188a40db8 100644 --- a/library/Hasql/Connection/Setting/Connection.hs +++ b/library/Hasql/Connection/Setting/Connection.hs @@ -15,11 +15,12 @@ newtype Connection = Connection ByteString instance Config.ConnectionString.Constructs Connection where construct = coerce --- | Plain connection string according to . +-- | From plain connection string according to . string :: Text -> Connection string = - error "TODO" + Connection . Config.ConnectionString.fromText +-- | From structured parameters. params :: [Param.Param] -> Connection params = Connection . Config.ConnectionString.fromParams . Config.ConnectionString.Params.fromUpdates From 4888be06e8e14a3bb315ac9958bb57ffb4525fb1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sun, 5 Jan 2025 23:49:43 +0300 Subject: [PATCH 1121/1204] Add docs --- library/Hasql/Connection/Core.hs | 2 +- library/Hasql/Connection/Setting.hs | 2 ++ library/Hasql/Connection/Setting/Connection.hs | 1 + library/Hasql/Connection/Setting/Connection/Param.hs | 7 +++++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/library/Hasql/Connection/Core.hs b/library/Hasql/Connection/Core.hs index 54964a2e20..642b4db0ab 100644 --- a/library/Hasql/Connection/Core.hs +++ b/library/Hasql/Connection/Core.hs @@ -28,7 +28,7 @@ type ConnectionError = Maybe ByteString -- | --- Acquire a connection using the provided settings encoded according to the PostgreSQL format. +-- Establish a connection according to the provided settings. acquire :: [Setting.Setting] -> IO (Either ConnectionError Connection) diff --git a/library/Hasql/Connection/Setting.hs b/library/Hasql/Connection/Setting.hs index e0aa01a2f1..eee0b56de4 100644 --- a/library/Hasql/Connection/Setting.hs +++ b/library/Hasql/Connection/Setting.hs @@ -10,11 +10,13 @@ import Hasql.Connection.Config.ConnectionString qualified as Config.ConnectionSt import Hasql.Connection.Setting.Connection qualified as Connection import Hasql.Prelude +-- | Setting of a client handle. newtype Setting = Setting (Config.Config -> Config.Config) instance Config.Updates Setting where update (Setting update) = update +-- | Connection details like address of the remote service and authentication info. connection :: Connection.Connection -> Setting connection = Setting . Config.setConnectionString . Config.ConnectionString.construct diff --git a/library/Hasql/Connection/Setting/Connection.hs b/library/Hasql/Connection/Setting/Connection.hs index b188a40db8..5a3c527a5d 100644 --- a/library/Hasql/Connection/Setting/Connection.hs +++ b/library/Hasql/Connection/Setting/Connection.hs @@ -10,6 +10,7 @@ import Hasql.Connection.Config.ConnectionString.Params qualified as Config.Conne import Hasql.Connection.Setting.Connection.Param qualified as Param import Hasql.Prelude +-- | Instructions on how to connect to the database. newtype Connection = Connection ByteString instance Config.ConnectionString.Constructs Connection where diff --git a/library/Hasql/Connection/Setting/Connection/Param.hs b/library/Hasql/Connection/Setting/Connection/Param.hs index 42517c4b81..fd792e6325 100644 --- a/library/Hasql/Connection/Setting/Connection/Param.hs +++ b/library/Hasql/Connection/Setting/Connection/Param.hs @@ -15,31 +15,38 @@ import Data.Text.Encoding qualified as Text import Hasql.Connection.Config.ConnectionString.Params qualified as Config import Hasql.Prelude +-- | Parameter of the connection instructions. newtype Param = Param (Config.Params -> Config.Params) instance Config.Updates Param where update = coerce +-- | Host domain name or IP-address. host :: Text -> Param host = Param . Config.setKeyValue "host" . Text.encodeUtf8 +-- | Port number. port :: Word16 -> Param port = Param . Config.setKeyValue "port" . BL.toStrict . BB.toLazyByteString . BB.word16Dec +-- | User name. user :: Text -> Param user = Param . Config.setKeyValue "user" . Text.encodeUtf8 +-- | Password. password :: Text -> Param password = Param . Config.setKeyValue "password" . Text.encodeUtf8 +-- | Database name. dbname :: Text -> Param dbname = Param . Config.setKeyValue "dbname" . Text.encodeUtf8 +-- | Any other parameter under the provided name according to the LibPQ format. other :: Text -> Text -> Param other name = Param . Config.setKeyValue (Text.encodeUtf8 name) . Text.encodeUtf8 From 498c13a5ff2fed5b52f63fb36c1d5c55d8db775f Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 00:39:35 +0300 Subject: [PATCH 1122/1204] Update the changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9603dd4388..001fea5551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # 1.9 +- Revise the settings construction exposing a tree of modules - Add a global prepared statements setting # 1.8.1 From ae481585cce885b37bf3d37de23f8935a9e44e1e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 00:43:58 +0300 Subject: [PATCH 1123/1204] Ditch the old ConnectionString module --- hasql.cabal | 1 - library/Hasql/ConnectionString.hs | 39 ------------------------------- 2 files changed, 40 deletions(-) delete mode 100644 library/Hasql/ConnectionString.hs diff --git a/hasql.cabal b/hasql.cabal index f39527bd58..668b0ecf84 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -115,7 +115,6 @@ library Hasql.Connection.Config.ConnectionString Hasql.Connection.Config.ConnectionString.Params Hasql.Connection.Core - Hasql.ConnectionString Hasql.Decoders.All Hasql.Decoders.Array Hasql.Decoders.Composite diff --git a/library/Hasql/ConnectionString.hs b/library/Hasql/ConnectionString.hs deleted file mode 100644 index baffab5887..0000000000 --- a/library/Hasql/ConnectionString.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Hasql.ConnectionString where - -import Data.ByteString qualified as B -import Data.ByteString.Builder qualified as BB -import Data.ByteString.Lazy qualified as BL -import Hasql.Prelude - --- | --- All settings encoded in a single byte-string according to --- . -type ConnectionString = - ByteString - --- | --- Encode a host, a port, a user, a password and a database into the PostgreSQL settings byte-string. -{-# INLINE connectionString #-} -connectionString :: ByteString -> Word16 -> ByteString -> ByteString -> ByteString -> ConnectionString -connectionString host port user password database = - BL.toStrict - $ BB.toLazyByteString - $ mconcat - $ intersperse (BB.char7 ' ') - $ catMaybes - $ [ mappend (BB.string7 "host=") - . BB.byteString - <$> mfilter (not . B.null) (pure host), - mappend (BB.string7 "port=") - . BB.word16Dec - <$> mfilter (/= 0) (pure port), - mappend (BB.string7 "user=") - . BB.byteString - <$> mfilter (not . B.null) (pure user), - mappend (BB.string7 "password=") - . BB.byteString - <$> mfilter (not . B.null) (pure password), - mappend (BB.string7 "dbname=") - . BB.byteString - <$> mfilter (not . B.null) (pure database) - ] From c6e879057f469060479397301f54824c081d3436 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 01:47:09 +0300 Subject: [PATCH 1124/1204] Update the CHANGELOG --- CHANGELOG.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 001fea5551..a8055ff1aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,53 @@ # 1.9 -- Revise the settings construction exposing a tree of modules -- Add a global prepared statements setting +- Revised the settings construction exposing a tree of modules +- Added a global prepared statements setting + +## Why the changes? + +To introduce the new global prepared statements setting and to make the settings API ready for extension without backward compatibility breakage. + +## Instructions on upgrading the 1.8 code + +### When explicit connection string is used + +Replace + +```haskell +Hasql.Connection.acquire connectionString +``` + +with + +```haskell +Hasql.Connection.acquire + [ Hasql.Connection.Setting.connection (Hasql.Connection.Setting.Connection.string connectionString) + ] +``` + +### When parameteric connection string is used + +Replace + +```haskell +Hasql.Connection.acquire (Hasql.Connection.settings host port user password dbname) +``` + +with + +```haskell +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 port, + Hasql.Connection.Setting.Connection.Param.user user, + Hasql.Connection.Setting.Connection.Param.password password, + Hasql.Connection.Setting.Connection.Param.dbname dbname + ] + ) + ] +``` # 1.8.1 From 7b611697a9ef885039689d03fc216e87c573a03a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 01:52:29 +0300 Subject: [PATCH 1125/1204] Polish the docs --- library/Hasql/Connection/Setting/Connection.hs | 4 ++-- library/Hasql/Connection/Setting/Connection/Param.hs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/library/Hasql/Connection/Setting/Connection.hs b/library/Hasql/Connection/Setting/Connection.hs index 5a3c527a5d..466eab65c7 100644 --- a/library/Hasql/Connection/Setting/Connection.hs +++ b/library/Hasql/Connection/Setting/Connection.hs @@ -16,12 +16,12 @@ newtype Connection = Connection ByteString instance Config.ConnectionString.Constructs Connection where construct = coerce --- | From plain connection string according to . +-- | Preconstructed connection string according to . string :: Text -> Connection string = Connection . Config.ConnectionString.fromText --- | From structured parameters. +-- | Structured parameters. params :: [Param.Param] -> Connection params = Connection . Config.ConnectionString.fromParams . Config.ConnectionString.Params.fromUpdates diff --git a/library/Hasql/Connection/Setting/Connection/Param.hs b/library/Hasql/Connection/Setting/Connection/Param.hs index fd792e6325..a1e13d3507 100644 --- a/library/Hasql/Connection/Setting/Connection/Param.hs +++ b/library/Hasql/Connection/Setting/Connection/Param.hs @@ -46,7 +46,7 @@ dbname :: Text -> Param dbname = Param . Config.setKeyValue "dbname" . Text.encodeUtf8 --- | Any other parameter under the provided name according to the LibPQ format. +-- | Any other parameter under the provided name according to . other :: Text -> Text -> Param other name = Param . Config.setKeyValue (Text.encodeUtf8 name) . Text.encodeUtf8 From a86b57cc9a2e0ab7b8b061ccbb9d51e63d9c62b8 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 02:04:05 +0300 Subject: [PATCH 1126/1204] Update cabal.project --- cabal.project | 1 + 1 file changed, 1 insertion(+) diff --git a/cabal.project b/cabal.project index 778d40aba8..3a089e387b 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,4 @@ packages: . allow-newer: , *:base , *:template-haskell + , *:ghc-prim From 9d636e5f431c56fdf2588ac781a8eb276c6362a0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 02:30:01 +0300 Subject: [PATCH 1127/1204] Lint --- src/test/Main.hs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/test/Main.hs b/src/test/Main.hs index 609dbce7a3..fe85bb5280 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -44,27 +44,27 @@ main = do Left (SessionUsageError (Session.QueryError _ _ (Session.ClientError _))) -> True _ -> False it "Connection errors cause eviction of connection" $ withDefaultPool $ \pool -> do - res <- use pool $ closeConnSession >> selectOneSession - res <- use pool $ closeConnSession >> selectOneSession - res <- use pool $ closeConnSession >> selectOneSession + _ <- use pool $ closeConnSession >> selectOneSession + _ <- use pool $ closeConnSession >> selectOneSession + _ <- use pool $ closeConnSession >> selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after normal use" $ withDefaultPool $ \pool -> do - res <- use pool $ selectOneSession - res <- use pool $ selectOneSession - res <- use pool $ selectOneSession - res <- use pool $ selectOneSession + _ <- use pool $ selectOneSession + _ <- use pool $ selectOneSession + _ <- use pool $ selectOneSession + _ <- use pool $ selectOneSession res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "Connection gets returned to the pool after non-connection error" $ withDefaultPool $ \pool -> do - res <- use pool $ badQuerySession - res <- use pool $ badQuerySession - res <- use pool $ badQuerySession - res <- use pool $ badQuerySession + _ <- use pool $ badQuerySession + _ <- use pool $ badQuerySession + _ <- use pool $ badQuerySession + _ <- use pool $ badQuerySession res <- use pool $ selectOneSession shouldSatisfy res $ isRight it "The pool remains usable after release" $ withDefaultPool $ \pool -> do - res <- use pool $ selectOneSession + _ <- use pool $ selectOneSession release pool res <- use pool $ selectOneSession shouldSatisfy res $ isRight @@ -145,7 +145,7 @@ main = do res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") -- busy sleep, to keep connection alive - forM_ [1 .. 10] $ \_ -> do + forM_ [1 :: Int .. 10] $ \_ -> do r <- use pool $ selectOneSession r `shouldBe` Right 1 threadDelay 100_000 -- 0.1s From 46f633a95fdebc5d302c3bbeebb872228ab6d543 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 02:31:13 +0300 Subject: [PATCH 1128/1204] Integrate with new hasql settings --- cabal.project | 5 +++ src/library/exposed/Hasql/Pool.hs | 3 +- .../exposed/Hasql/Pool/Config/Defaults.hs | 13 +++--- src/library/other/Hasql/Pool/Config/Config.hs | 4 +- .../other/Hasql/Pool/Config/Setting.hs | 6 +-- src/test/Main.hs | 42 ++++++++++--------- 6 files changed, 43 insertions(+), 30 deletions(-) diff --git a/cabal.project b/cabal.project index 778d40aba8..f3eda08562 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,8 @@ packages: . allow-newer: , *:base , *:template-haskell + +source-repository-package + type: git + location: https://github.com/nikita-volkov/hasql.git + tag: a86b57cc9a2e0ab7b8b061ccbb9d51e63d9c62b8 diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs index 3e38aa6ef8..37e966c962 100644 --- a/src/library/exposed/Hasql/Pool.hs +++ b/src/library/exposed/Hasql/Pool.hs @@ -15,6 +15,7 @@ import Data.Text.Encoding.Error qualified as Text import Data.UUID.V4 qualified as Uuid import Hasql.Connection (Connection) import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Connection.Setting import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation import Hasql.Pool.Prelude @@ -42,7 +43,7 @@ data Pool = Pool { -- | Pool size. poolSize :: Int, -- | Connection settings. - poolFetchConnectionSettings :: IO Connection.Settings, + poolFetchConnectionSettings :: IO [Connection.Setting.Setting], -- | Acquisition timeout, in microseconds. poolAcquisitionTimeout :: Int, -- | Maximal connection lifetime, in nanoseconds. diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/library/exposed/Hasql/Pool/Config/Defaults.hs index 2245ee9f39..bf5ab0229c 100644 --- a/src/library/exposed/Hasql/Pool/Config/Defaults.hs +++ b/src/library/exposed/Hasql/Pool/Config/Defaults.hs @@ -1,6 +1,7 @@ module Hasql.Pool.Config.Defaults where -import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Connection.Setting +import Hasql.Connection.Setting.Connection qualified as Connection.Setting.Connection import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude import Hasql.Session qualified as Session @@ -27,13 +28,15 @@ idlenessTimeout = 60 * 10 -- | -- > "postgresql://postgres:postgres@localhost:5432/postgres" -staticConnectionSettings :: Connection.Settings -staticConnectionSettings = "postgresql://postgres:postgres@localhost:5432/postgres" +staticConnectionSettings :: [Connection.Setting.Setting] +staticConnectionSettings = + [ Connection.Setting.connection (Connection.Setting.Connection.string "postgresql://postgres:postgres@localhost:5432/postgres") + ] -- | -- > pure "postgresql://postgres:postgres@localhost:5432/postgres" -dynamicConnectionSettings :: IO Connection.Settings -dynamicConnectionSettings = pure "postgresql://postgres:postgres@localhost:5432/postgres" +dynamicConnectionSettings :: IO [Connection.Setting.Setting] +dynamicConnectionSettings = pure staticConnectionSettings -- | -- > const (pure ()) diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs index 6424439ccf..b2bb395106 100644 --- a/src/library/other/Hasql/Pool/Config/Config.hs +++ b/src/library/other/Hasql/Pool/Config/Config.hs @@ -1,6 +1,6 @@ module Hasql.Pool.Config.Config where -import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Connection.Setting import Hasql.Pool.Config.Defaults qualified as Defaults import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude @@ -12,7 +12,7 @@ data Config = Config acquisitionTimeout :: DiffTime, agingTimeout :: DiffTime, idlenessTimeout :: DiffTime, - connectionSettingsProvider :: IO Connection.Settings, + connectionSettingsProvider :: IO [Connection.Setting.Setting], observationHandler :: Observation -> IO (), initSession :: Session.Session () } diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index c978c01be3..317817b70d 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -1,6 +1,6 @@ module Hasql.Pool.Config.Setting where -import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Connection.Setting import Hasql.Pool.Config.Config (Config) import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation (Observation) @@ -56,7 +56,7 @@ idlenessTimeout x = -- By default it is: -- -- > "postgresql://postgres:postgres@localhost:5432/postgres" -staticConnectionSettings :: Connection.Settings -> Setting +staticConnectionSettings :: [Connection.Setting.Setting] -> Setting staticConnectionSettings x = Setting (\config -> config {Config.connectionSettingsProvider = pure x}) @@ -70,7 +70,7 @@ staticConnectionSettings x = -- By default it is: -- -- > pure "postgresql://postgres:postgres@localhost:5432/postgres" -dynamicConnectionSettings :: IO Connection.Settings -> Setting +dynamicConnectionSettings :: IO [Connection.Setting.Setting] -> Setting dynamicConnectionSettings x = Setting (\config -> config {Config.connectionSettingsProvider = x}) diff --git a/src/test/Main.hs b/src/test/Main.hs index fe85bb5280..84804f8ae7 100644 --- a/src/test/Main.hs +++ b/src/test/Main.hs @@ -1,9 +1,10 @@ module Main where import Control.Concurrent.Async (race) -import Data.ByteString.Char8 qualified as B8 import Data.Text qualified as Text import Hasql.Connection qualified as Connection +import Hasql.Connection.Setting qualified as Connection.Setting +import Hasql.Connection.Setting.Connection qualified as Connection.Setting.Connection import Hasql.Decoders qualified as Decoders import Hasql.Encoders qualified as Encoders import Hasql.Pool @@ -17,8 +18,8 @@ import Prelude main :: IO () main = do - connectionSettings <- getConnectionSettings - let withPool poolSize acqTimeout maxLifetime maxIdletime connectionSettings = + connectionString <- getConnectionString + let withPool poolSize acqTimeout maxLifetime maxIdletime connectionString = bracket ( acquire ( Config.settings @@ -26,13 +27,16 @@ main = do Config.acquisitionTimeout acqTimeout, Config.agingTimeout maxLifetime, Config.idlenessTimeout maxIdletime, - Config.staticConnectionSettings connectionSettings + Config.staticConnectionSettings + [ Connection.Setting.connection + (Connection.Setting.Connection.string connectionString) + ] ] ) ) release withDefaultPool = - withPool 3 10 1_800 1_800 connectionSettings + withPool 3 10 1_800 1_800 connectionString hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withDefaultPool $ \pool -> do @@ -75,12 +79,12 @@ main = do setSettingSession "testing.foo" "hello world" getSettingSession "testing.foo" res `shouldBe` Right (Just "hello world") - it "Session variables stay set when a connection gets reused" $ withPool 1 10 1_800 1_800 connectionSettings $ \pool -> do + it "Session variables stay set when a connection gets reused" $ withPool 1 10 1_800 1_800 connectionString $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" res2 `shouldBe` Right (Just "hello world") - it "Releasing the pool resets session variables" $ withPool 1 10 1_800 1_800 connectionSettings $ \pool -> do + it "Releasing the pool resets session variables" $ withPool 1 10 1_800 1_800 connectionString $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () release pool @@ -89,7 +93,7 @@ main = do it "Times out connection acquisition" $ -- 1ms timeout - withPool 1 0.001 1_800 1_800 connectionSettings + withPool 1 0.001 1_800 1_800 connectionString $ \pool -> do sleeping <- newEmptyMVar t0 <- getCurrentTime @@ -111,7 +115,7 @@ main = do it "Passively times out old connections (maxLifetime)" $ -- 0.5s connection lifetime - withPool 1 10 0.5 1_800 connectionSettings + withPool 1 10 0.5 1_800 connectionString $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () @@ -121,14 +125,14 @@ main = do res3 <- use pool $ getSettingSession "testing.foo" res3 `shouldBe` Right Nothing it "Counts active connections" $ do - (taggedConnectionSettings, appName) <- tagConnection connectionSettings + (taggedConnectionSettings, appName) <- tagConnection connectionString withPool 3 10 1_800 1_800 taggedConnectionSettings $ \pool -> do res <- use pool $ countConnectionsSession appName res `shouldBe` Right 1 it "Actively times out old connections (maxLifetime)" $ do withDefaultPool $ \countPool -> do - (taggedConnectionSettings, appName) <- tagConnection connectionSettings + (taggedConnectionSettings, appName) <- tagConnection connectionString withPool 3 10 0.5 1_800 taggedConnectionSettings $ \limitedPool -> do res <- use limitedPool $ selectOneSession res `shouldBe` Right 1 @@ -139,7 +143,7 @@ main = do res3 `shouldBe` Right 0 it "Times out old connections (maxIdletime)" $ do -- 0.5s connection idle time - withPool 1 10 1_800 0.5 connectionSettings $ \pool -> do + withPool 1 10 1_800 0.5 connectionString $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" res `shouldBe` Right () res2 <- use pool $ getSettingSession "testing.foo" @@ -156,9 +160,9 @@ main = do res4 <- use pool $ getSettingSession "testing.foo" res4 `shouldBe` Right Nothing -getConnectionSettings :: IO Connection.Settings -getConnectionSettings = - B8.unwords +getConnectionString :: IO Text +getConnectionString = + Text.unwords . catMaybes <$> sequence [ setting "host" $ defaultEnv "POSTGRES_HOST" "localhost", @@ -168,17 +172,17 @@ getConnectionSettings = setting "dbname" $ defaultEnv "POSTGRES_DBNAME" "postgres" ] where - maybeEnv env = fmap B8.pack <$> System.Environment.lookupEnv env + maybeEnv env = fmap Text.pack <$> System.Environment.lookupEnv env defaultEnv env val = Just . fromMaybe val <$> maybeEnv env setting label getEnv = do val <- getEnv return $ (\v -> label <> "=" <> v) <$> val -tagConnection :: Connection.Settings -> IO (Connection.Settings, Text) -tagConnection connectionSettings = do +tagConnection :: Text -> IO (Text, Text) +tagConnection connectionString = do tag <- Random.uniformWord32 Random.globalStdGen let appName = "hasql-pool-test-" <> show tag - return (connectionSettings <> " application_name=" <> B8.pack appName, Text.pack appName) + return (connectionString <> " application_name=" <> Text.pack appName, Text.pack appName) selectOneSession :: Session.Session Int64 selectOneSession = From e85caa064fe4e727387b89c5bc7028e410e7b6bf Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 14:42:49 +0300 Subject: [PATCH 1129/1204] Allow hasql 1.9 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index a4ff41a2cc..c0f263621e 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -44,7 +44,7 @@ library base >=4.12 && <5, bytestring >=0.10 && <1, containers >=0.6 && <1, - hasql >=1.8 && <1.9, + hasql >=1.8 && <1.10, iproute >=1.7 && <1.8, scientific >=0.2 && <1, text >=1 && <3, From bc8d2780df65453ff5fe67d541ad612918fbb796 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 14:44:54 +0300 Subject: [PATCH 1130/1204] Allow hasql 1.9 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index 2ea75e81ab..ea299d51f9 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -93,7 +93,7 @@ library base >=4.14 && <5, bytestring >=0.10 && <0.13, containers >=0.6 && <0.8, - hasql >=1.8 && <1.9, + hasql >=1.8 && <1.10, hasql-implicits >=0.2 && <0.3, ptr >=0.16.7.2 && <0.17, From ec64bd32f20136c8fdcaca8e2efcea046b9a943e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 14:47:59 +0300 Subject: [PATCH 1131/1204] Allow hasql 1.9 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 5bd922e2de..69cc43838d 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -95,7 +95,7 @@ library bytestring >=0.10 && <0.13, bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, - hasql >=1.7 && <1.9, + hasql >=1.7 && <1.10, mtl >=2.2 && <3, transformers >=0.5 && <0.7, From 2713cee750ef5153f7ccb47632a23b3a54142a4e Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 11:51:55 +0000 Subject: [PATCH 1132/1204] Set package version to 1.9 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 668b0ecf84..b5b5155907 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.8.1.4 +version: 1.9 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 428e9d1d1c508fe8d5ad115eb2dfb09b29e1403c Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 14:56:27 +0300 Subject: [PATCH 1133/1204] Update the deps --- cabal.project | 5 ----- hasql-pool.cabal | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/cabal.project b/cabal.project index f3eda08562..778d40aba8 100644 --- a/cabal.project +++ b/cabal.project @@ -2,8 +2,3 @@ packages: . allow-newer: , *:base , *:template-haskell - -source-repository-package - type: git - location: https://github.com/nikita-volkov/hasql.git - tag: a86b57cc9a2e0ab7b8b061ccbb9d51e63d9c62b8 diff --git a/hasql-pool.cabal b/hasql-pool.cabal index dff7288238..596071eba2 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -88,7 +88,7 @@ library build-depends: base >=4.11 && <5, bytestring >=0.10 && <0.14, - hasql >=1.7 && <1.9, + hasql >=1.9 && <1.10, stm >=2.5 && <3, text >=1.2 && <3, time >=1.9 && <2, From d43e17b4a26d4fb4278fbc2939b00f3cabb986c5 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 14:58:30 +0300 Subject: [PATCH 1134/1204] Allow newer ghc-prim for the deps --- cabal.project | 1 + 1 file changed, 1 insertion(+) diff --git a/cabal.project b/cabal.project index 778d40aba8..3a089e387b 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,4 @@ packages: . allow-newer: , *:base , *:template-haskell + , *:ghc-prim From 3750870c138b70e9e9b85f7e002d0ae8883bfda4 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 15:04:24 +0300 Subject: [PATCH 1135/1204] Allow newer ghc-prim for the deps --- cabal.project | 1 + 1 file changed, 1 insertion(+) diff --git a/cabal.project b/cabal.project index 778d40aba8..3a089e387b 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,4 @@ packages: . allow-newer: , *:base , *:template-haskell + , *:ghc-prim From 69d6ceeedcc098526690c1a99f2c587954087c32 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 15:06:38 +0300 Subject: [PATCH 1136/1204] Allow newer basic deps --- cabal.project | 1 + 1 file changed, 1 insertion(+) diff --git a/cabal.project b/cabal.project index 778d40aba8..3a089e387b 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,4 @@ packages: . allow-newer: , *:base , *:template-haskell + , *:ghc-prim From e9e54c937f93331b2cd7d1e76a8d9fbb9a2c0707 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 15:06:54 +0300 Subject: [PATCH 1137/1204] Allow newer basic deps --- cabal.project | 1 + 1 file changed, 1 insertion(+) diff --git a/cabal.project b/cabal.project index 778d40aba8..3a089e387b 100644 --- a/cabal.project +++ b/cabal.project @@ -2,3 +2,4 @@ packages: . allow-newer: , *:base , *:template-haskell + , *:ghc-prim From f62109423364adc48361754450783c3187ae5d72 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 12:17:22 +0000 Subject: [PATCH 1138/1204] Set package version to 1.3 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 596071eba2..03fbcc672c 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.2.0.3 +version: 1.3 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From f7477827734a6a1d7ff3fd2bd0c1df0f99b163d6 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 15:17:54 +0300 Subject: [PATCH 1139/1204] Adapt the test suite --- conflicts-test/Main.hs | 14 +++++++++++++- hasql-transaction.cabal | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 4a733b50bd..88bbaaf281 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -2,6 +2,9 @@ module Main where import Control.Concurrent.Async qualified as F import Hasql.Connection qualified as A +import Hasql.Connection.Setting qualified as H +import Hasql.Connection.Setting.Connection qualified as I +import Hasql.Connection.Setting.Connection.Param qualified as J import Hasql.Session qualified as B import Hasql.Transaction qualified as C import Hasql.Transaction.Sessions qualified as G @@ -22,7 +25,16 @@ main = $ A.acquire connectionSettings where connectionSettings = - A.settings "localhost" 5432 "postgres" "postgres" "postgres" + [ H.connection + ( I.params + [ J.host "localhost", + J.port 5432, + J.user "postgres", + J.password "postgres", + J.dbname "postgres" + ] + ) + ] release (connection1, connection2) = do transaction connection1 E.dropSchema diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 69cc43838d..b47ad5a13f 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -115,6 +115,6 @@ test-suite conflicts-test build-depends: async >=2.1 && <3, - hasql, + hasql >=1.9, hasql-transaction, rerebase >=1.11 && <2, From 1d06a12d86a64c40e1b8e060d7e67cd11157a56b Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 12:21:30 +0000 Subject: [PATCH 1140/1204] Set package version to 0.2.0.1 --- hasql-implicits.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-implicits.cabal b/hasql-implicits.cabal index c0f263621e..315eeb2be7 100644 --- a/hasql-implicits.cabal +++ b/hasql-implicits.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-implicits -version: 0.2 +version: 0.2.0.1 synopsis: Implicit definitions for Hasql, such as default codecs for standard types From 81faa499fdb5a070c8b8ba305e1e67e7db7e7c8e Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 12:26:05 +0000 Subject: [PATCH 1141/1204] Set package version to 0.3.1.8 --- hasql-dynamic-statements.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-dynamic-statements.cabal b/hasql-dynamic-statements.cabal index ea299d51f9..584ebce4e0 100644 --- a/hasql-dynamic-statements.cabal +++ b/hasql-dynamic-statements.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-dynamic-statements -version: 0.3.1.7 +version: 0.3.1.8 synopsis: Toolkit for constructing Hasql statements dynamically description: This library introduces into the Hasql ecosystem a new abstraction named Snippet, From a37951cd4c3dcbe79956418e2af01db35b0d6837 Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 12:28:11 +0000 Subject: [PATCH 1142/1204] Set package version to 1.1.1.3 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index b47ad5a13f..57c93cd94e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.1.1.2 +version: 1.1.1.3 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 15058e2bb0d113776f8b6bef521fbe2785ca3734 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 16:35:54 +0300 Subject: [PATCH 1143/1204] Remove unpreparedTransaction --- CHANGELOG.md | 4 ++++ library/Hasql/Transaction/Private/Sessions.hs | 24 +++++++++---------- .../Hasql/Transaction/Private/Statements.hs | 18 +++++++------- .../Hasql/Transaction/Private/Transaction.hs | 6 ++--- library/Hasql/Transaction/Sessions.hs | 14 +---------- 5 files changed, 29 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 558d44713a..ea14246816 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.2 + +- Removed the `unpreparedTransaction` session because the same effects can now be achieved via the connection settings in Hasql + # 1.1 - Add automatic retry on deadlock errors (code 40P01) diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index e6ff8db8a3..5dd52db593 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -10,32 +10,32 @@ We may want to do one transaction retry in case of the 23505 error, and fail if an identical error is seen. -} -inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session a -inRetryingTransaction level mode session preparable = +inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session a +inRetryingTransaction level mode session = fix $ \retry -> do - attemptRes <- tryTransaction level mode session preparable + attemptRes <- tryTransaction level mode session case attemptRes of Just a -> return a Nothing -> retry -tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Bool -> Session (Maybe a) -tryTransaction level mode body preparable = do - statement () (Statements.beginTransaction level mode preparable) +tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session (Maybe a) +tryTransaction level mode body = do + statement () (Statements.beginTransaction level mode) bodyRes <- catchError (fmap Just body) $ \error -> do - statement () (Statements.abortTransaction preparable) + statement () Statements.abortTransaction handleTransactionError error $ return Nothing case bodyRes of - Just (res, commit) -> catchError (commitOrAbort commit preparable $> Just res) $ \error -> do + Just (res, commit) -> catchError (commitOrAbort commit $> Just res) $ \error -> do handleTransactionError error $ return Nothing Nothing -> return Nothing -commitOrAbort :: Bool -> Bool -> Session () -commitOrAbort commit preparable = +commitOrAbort :: Bool -> Session () +commitOrAbort commit = if commit - then statement () (Statements.commitTransaction preparable) - else statement () (Statements.abortTransaction preparable) + then statement () Statements.commitTransaction + else statement () Statements.abortTransaction handleTransactionError :: SessionError -> Session a -> Session a handleTransactionError error onTransactionError = case error of diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index 6a556639c0..bacc134c19 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -9,17 +9,17 @@ import Hasql.Transaction.Private.SQL qualified as D -- * Transactions -beginTransaction :: IsolationLevel -> Mode -> Bool -> A.Statement () () -beginTransaction isolation mode preparable = - A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult preparable +beginTransaction :: IsolationLevel -> Mode -> A.Statement () () +beginTransaction isolation mode = + A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult True -commitTransaction :: Bool -> A.Statement () () -commitTransaction preparable = - A.Statement "COMMIT" B.noParams C.noResult preparable +commitTransaction :: A.Statement () () +commitTransaction = + A.Statement "COMMIT" B.noParams C.noResult True -abortTransaction :: Bool -> A.Statement () () -abortTransaction preparable = - A.Statement "ABORT" B.noParams C.noResult preparable +abortTransaction :: A.Statement () () +abortTransaction = + A.Statement "ABORT" B.noParams C.noResult True -- * Streaming diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index 7f15e2cef0..b3b10a6d2b 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -25,9 +25,9 @@ instance (Monoid a) => Monoid (Transaction a) where -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> Bool -> B.Session a -run (Transaction session) isolation mode preparable = - D.inRetryingTransaction isolation mode (runStateT session True) preparable +run :: Transaction a -> IsolationLevel -> Mode -> B.Session a +run (Transaction session) isolation mode = + D.inRetryingTransaction isolation mode (runStateT session True) -- | -- Possibly a multi-statement query, diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 2b2dc56513..35383eb3f6 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,6 +1,5 @@ module Hasql.Transaction.Sessions ( transaction, - unpreparedTransaction, -- * Transaction settings C.Mode (..), @@ -8,7 +7,6 @@ module Hasql.Transaction.Sessions ) where -import Data.Bool import Hasql.Session qualified as B import Hasql.Transaction.Config qualified as C import Hasql.Transaction.Private.Transaction qualified as A @@ -18,14 +16,4 @@ import Hasql.Transaction.Private.Transaction qualified as A {-# INLINE transaction #-} transaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a transaction isolation mode transaction = - A.run transaction isolation mode True - --- | --- Execute the transaction using the provided isolation level and mode, --- and specifying that the generated BEGIN, COMMIT and ABORT statements should not be prepared. --- --- Helps with transaction pooling due to its incompatibility with prepared statements. -{-# INLINE unpreparedTransaction #-} -unpreparedTransaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a -unpreparedTransaction isolation mode transaction = - A.run transaction isolation mode False + A.run transaction isolation mode From 0da21b27e1c039235ac417539b939dc70ba6fcb0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 6 Jan 2025 16:40:41 +0300 Subject: [PATCH 1144/1204] Clean up --- library/Hasql/Transaction/Private/SQL.hs | 8 ------- .../Hasql/Transaction/Private/Statements.hs | 24 ------------------- 2 files changed, 32 deletions(-) diff --git a/library/Hasql/Transaction/Private/SQL.hs b/library/Hasql/Transaction/Private/SQL.hs index 130501754e..c1277153df 100644 --- a/library/Hasql/Transaction/Private/SQL.hs +++ b/library/Hasql/Transaction/Private/SQL.hs @@ -20,11 +20,3 @@ beginTransaction isolation mode = case mode of Write -> "READ WRITE" Read -> "READ ONLY" - -declareCursor :: ByteString -> ByteString -> ByteString -declareCursor name sql = - D.toByteString - $ "DECLARE " - <> D.byteString name - <> " NO SCROLL CURSOR FOR " - <> D.byteString sql diff --git a/library/Hasql/Transaction/Private/Statements.hs b/library/Hasql/Transaction/Private/Statements.hs index bacc134c19..9a3bef0517 100644 --- a/library/Hasql/Transaction/Private/Statements.hs +++ b/library/Hasql/Transaction/Private/Statements.hs @@ -7,8 +7,6 @@ import Hasql.Transaction.Config import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.SQL qualified as D --- * Transactions - beginTransaction :: IsolationLevel -> Mode -> A.Statement () () beginTransaction isolation mode = A.Statement (D.beginTransaction isolation mode) B.noParams C.noResult True @@ -20,25 +18,3 @@ commitTransaction = abortTransaction :: A.Statement () () abortTransaction = A.Statement "ABORT" B.noParams C.noResult True - --- * Streaming - -declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a () -declareCursor name sql encoder = - A.Statement (D.declareCursor name sql) encoder C.noResult False - -closeCursor :: A.Statement ByteString () -closeCursor = - A.Statement "CLOSE $1" ((B.param . B.nonNullable) B.bytea) C.noResult True - -fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Statement (Int64, ByteString) b -fetchFromCursor step init rowDec = - A.Statement sql encoder decoder True - where - sql = - "FETCH FORWARD $1 FROM $2" - encoder = - (fst >$< (B.param . B.nonNullable) B.int8) - <> (snd >$< (B.param . B.nonNullable) B.bytea) - decoder = - C.foldlRows step init rowDec From f00a1a3734552838dbed60132170bc27cf74405f Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Mon, 6 Jan 2025 16:33:15 +0000 Subject: [PATCH 1145/1204] Set package version to 1.2 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 57c93cd94e..5b513a751a 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.1.1.3 +version: 1.2 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 8a567e79c9057227cee3cb80af85ed4aad8070b9 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 7 Jan 2025 16:39:18 +0300 Subject: [PATCH 1146/1204] Correct the dep bounds on hasql --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 5b513a751a..a6af2f23bf 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -95,7 +95,7 @@ library bytestring >=0.10 && <0.13, bytestring-tree-builder >=0.2.7.8 && <0.3, contravariant >=1.3 && <2, - hasql >=1.7 && <1.10, + hasql >=1.9 && <1.10, mtl >=2.2 && <3, transformers >=0.5 && <0.7, From cfadb84d31c7f2be50ba5f0730bc6849ef5b9c2b Mon Sep 17 00:00:00 2001 From: nikita-volkov Date: Tue, 7 Jan 2025 13:49:51 +0000 Subject: [PATCH 1147/1204] Set package version to 1.2.0.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index a6af2f23bf..90b92aa3ec 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.2 +version: 1.2.0.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From 01a901e58db633199f20128f4ee18da3deb7dcaa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 15 Jan 2025 10:01:06 +0300 Subject: [PATCH 1148/1204] Integrate with witherable --- hasql.cabal | 1 + library/Hasql/Decoders/All.hs | 6 +++--- library/Hasql/Decoders/Results.hs | 5 +++++ library/Hasql/Decoders/Value.hs | 11 +++++++++++ library/Hasql/Prelude.hs | 7 ++++--- library/Hasql/Statement.hs | 5 +++++ 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index b5b5155907..8e9936fb67 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -160,6 +160,7 @@ library transformers >=0.6 && <0.7, uuid >=1.3 && <2, vector >=0.10 && <0.14, + witherable >=0.5 && <0.6, library testing-kit import: base diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index b61eae9a5b..3217c7687d 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -19,7 +19,7 @@ import PostgreSQL.Binary.Decoding qualified as A -- | -- Decoder of a query result. -newtype Result a = Result (Results.Results a) deriving (Functor) +newtype Result a = Result (Results.Results a) deriving (Functor, Filterable) -- | -- Decode no value from the result. @@ -129,7 +129,7 @@ nullable = Nullable -- | -- Decoder of a value. newtype Value a = Value (Value.Value a) - deriving (Functor) + deriving (Functor, Filterable) type role Value representational @@ -292,7 +292,7 @@ custom fn = Value (Value.decoderFn fn) -- Refine a value decoder, lifting the possible error to the session level. {-# INLINEABLE refine #-} refine :: (a -> Either Text b) -> Value a -> Value b -refine fn (Value v) = Value (Value.Value (\b -> A.refine fn (Value.run v b))) +refine fn (Value v) = Value (Value.refine fn v) -- | -- A generic decoder of @HSTORE@ values. diff --git a/library/Hasql/Decoders/Results.hs b/library/Hasql/Decoders/Results.hs index 9d5da13515..72ae9bc502 100644 --- a/library/Hasql/Decoders/Results.hs +++ b/library/Hasql/Decoders/Results.hs @@ -20,6 +20,11 @@ newtype Results a = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) deriving (Functor, Applicative, Monad) +instance Filterable Results where + {-# INLINE mapMaybe #-} + mapMaybe fn = + refine (Prelude.maybe (Left "Invalid result") Right . fn) + {-# INLINE run #-} run :: Results a -> LibPQ.Connection -> Bool -> IO (Either CommandError a) run (Results stack) conn idt = diff --git a/library/Hasql/Decoders/Value.hs b/library/Hasql/Decoders/Value.hs index 8f79e2feae..678eee6c2f 100644 --- a/library/Hasql/Decoders/Value.hs +++ b/library/Hasql/Decoders/Value.hs @@ -7,6 +7,11 @@ newtype Value a = Value (Bool -> A.Value a) deriving (Functor) +instance Filterable Value where + {-# INLINE mapMaybe #-} + mapMaybe fn = + refine (maybe (Left "Invalid value") Right . fn) + {-# INLINE run #-} run :: Value a -> Bool -> A.Value a run (Value imp) integerDatetimes = @@ -22,3 +27,9 @@ decoder = decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a decoderFn fn = Value $ \integerDatetimes -> A.fn $ fn integerDatetimes + +-- | +-- Refine a value decoder, lifting the possible error to the session level. +{-# INLINE refine #-} +refine :: (a -> Either Text b) -> Value a -> Value b +refine fn (Value run) = Value (A.refine fn . run) diff --git a/library/Hasql/Prelude.hs b/library/Hasql/Prelude.hs index cf80c9b4e3..0f694b84e0 100644 --- a/library/Hasql/Prelude.hs +++ b/library/Hasql/Prelude.hs @@ -54,9 +54,9 @@ import Data.Hashable as Exports (Hashable (..)) import Data.IORef as Exports import Data.Int as Exports import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) +import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, filter, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) import Data.List.NonEmpty as Exports (NonEmpty (..)) -import Data.Maybe as Exports +import Data.Maybe as Exports hiding (catMaybes, mapMaybe) import Data.Monoid as Exports hiding (Alt, (<>)) import Data.Ord as Exports import Data.Profunctor.Unsafe as Exports @@ -101,7 +101,8 @@ import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P) import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) import Text.Printf as Exports (hPrintf, printf) import Unsafe.Coerce as Exports -import Prelude as Exports hiding (Read, all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Witherable as Exports +import Prelude as Exports hiding (Read, all, and, any, concat, concatMap, elem, fail, filter, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) type LazyByteString = Data.ByteString.Lazy.ByteString diff --git a/library/Hasql/Statement.hs b/library/Hasql/Statement.hs index 85b04ec347..4def967e0a 100644 --- a/library/Hasql/Statement.hs +++ b/library/Hasql/Statement.hs @@ -64,6 +64,11 @@ instance Functor (Statement params) where {-# INLINE fmap #-} fmap = rmap +instance Filterable (Statement params) where + {-# INLINE mapMaybe #-} + mapMaybe filtrator (Statement template encoder decoder preparable) = + Statement template encoder (mapMaybe filtrator decoder) preparable + instance Profunctor Statement where {-# INLINE dimap #-} dimap f1 f2 (Statement template encoder decoder preparable) = From e86187e4852b3d60f5fd39a014c72065a36470e1 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Wed, 15 Jan 2025 07:17:50 +0000 Subject: [PATCH 1149/1204] Set package version to 1.9.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 8e9936fb67..4e7ec070a7 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.9 +version: 1.9.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 710b8c2061e6e919910141c6f4f5664c79ccbb4a Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Wed, 15 Jan 2025 12:45:24 +0300 Subject: [PATCH 1150/1204] Correct repo location --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 4e7ec070a7..809d14541e 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -34,7 +34,7 @@ extra-source-files: source-repository head type: git - location: git://github.com/nikita-volkov/hasql.git + location: https://github.com/nikita-volkov/hasql common base default-language: Haskell2010 From c5acb412239617475ffb975a0f0728d36bb2c2dc Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 25 Jan 2025 15:09:49 -0500 Subject: [PATCH 1151/1204] threadWaitRead does not work on windows. A fix was introduced in 243f01b5aea2aebf188b86bb1f51c2555b9d4db0 The conditional was removed by mistake in 769ca47f4da421b75b97a87102613b406d46d0d3 To fix the regression the conditional will be reintroduced. --- src/Hasql/Notifications.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index dd75d2ebc8..50720e6b36 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -17,8 +17,11 @@ module Hasql.Notifications FatalError (..), ) where - -import Control.Concurrent (threadDelay, threadWaitRead) +#if defined(mingw32_HOST_OS) +import Control.Concurrent ( threadDelay ) +#else +import Control.Concurrent (threadWaitRead, threadDelay) +#endif import Control.Exception (Exception, throw) import Control.Monad (forever, unless, void, when) import Data.ByteString.Char8 (ByteString) @@ -190,9 +193,13 @@ waitForNotifications sendNotification con = mfd <- PQ.socket pqCon case mfd of Nothing -> void $ threadDelay 1000000 +#if defined(mingw32_HOST_OS) + Just _ -> do + void $ threadDelay 1000000 +#else Just fd -> do void $ threadWaitRead fd - +#endif result <- PQ.consumeInput pqCon unless result $ do mError <- PQ.errorMessage pqCon From b58a83f7d4144cb4258bb19f08420fb82661ce90 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Sat, 25 Jan 2025 15:37:02 -0500 Subject: [PATCH 1152/1204] Bump patch version --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index 1e133398f1..cce2912b44 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.3.1 +version: 0.2.3.2 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 179910aec425040a8a3b2305c00bb416210b63bd Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 2 Feb 2025 12:25:07 +0100 Subject: [PATCH 1153/1204] Allow tasty-quickcheck 0.11 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 809d14541e..4af3a956c2 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -199,7 +199,7 @@ test-suite tasty rerebase <2, tasty >=0.12 && <2, tasty-hunit >=0.9 && <0.11, - tasty-quickcheck >=0.9 && <0.11, + tasty-quickcheck >=0.9 && <0.12, test-suite threads-test import: test From 45d19e76b4cf8c18fae88bd8650b80f5cc57f775 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Sun, 2 Feb 2025 19:53:45 +0000 Subject: [PATCH 1154/1204] Set package version to 1.9.1.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 4af3a956c2..7b1f67048a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.9.1 +version: 1.9.1.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 176783652faab85a2537914fef6b2a58db60aac1 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 8 Apr 2025 02:56:05 +0300 Subject: [PATCH 1155/1204] Update CI --- .github/workflows/format.yaml | 2 +- .github/workflows/on-push-to-release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml index 243bc33f15..1e0d3268e3 100644 --- a/.github/workflows/format.yaml +++ b/.github/workflows/format.yaml @@ -5,5 +5,5 @@ on: jobs: format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v4 secrets: inherit diff --git a/.github/workflows/on-push-to-release.yaml b/.github/workflows/on-push-to-release.yaml index 4a880f958c..c1fbf50a3b 100644 --- a/.github/workflows/on-push-to-release.yaml +++ b/.github/workflows/on-push-to-release.yaml @@ -24,7 +24,7 @@ jobs: needs: - format - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 + uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v4 secrets: inherit with: prefix-tag-with-v: false From 00bd089626aacb2d489d64f924e1469b11200428 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 8 Apr 2025 02:56:12 +0300 Subject: [PATCH 1156/1204] Clean up --- cabal.project | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cabal.project b/cabal.project index 3a089e387b..e6fdbadb43 100644 --- a/cabal.project +++ b/cabal.project @@ -1,5 +1 @@ packages: . -allow-newer: - , *:base - , *:template-haskell - , *:ghc-prim From ed5389c646df4b2a25950c57d1d70a2c80c94a84 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 8 Apr 2025 02:59:05 +0300 Subject: [PATCH 1157/1204] Relax bounds --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 7b1f67048a..d184cd95ef 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -143,7 +143,7 @@ library base >=4.14 && <5, bytestring >=0.10 && <0.13, bytestring-strict-builder >=0.4.5.1 && <0.5, - containers >=0.6 && <0.8, + containers >=0.6 && <0.9, contravariant >=1.3 && <2, dlist >=0.8 && <0.9 || >=1 && <2, hashable >=1.2 && <2, From d35b304e9cd9cac6156a1718e2ea7268649d8846 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 8 Apr 2025 03:07:49 +0300 Subject: [PATCH 1158/1204] Adapt to the upcoming text-builder release --- cabal.project | 5 +++++ library/Hasql/Encoders/All.hs | 4 ++-- library/Hasql/Encoders/Array.hs | 12 ++++++------ library/Hasql/Encoders/Params.hs | 6 +++--- library/Hasql/Encoders/Value.hs | 6 +++--- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/cabal.project b/cabal.project index e6fdbadb43..6ba5d7022e 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,6 @@ packages: . + +source-repository-package + type: git + location: https://github.com/nikita-volkov/text-builder + tag: 006ca066738f229b0c813b9c01e96a6cfe71e856 diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index f4a3394437..2f71aa71f2 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -12,7 +12,7 @@ import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude hiding (bool) import Hasql.Prelude qualified as Prelude import PostgreSQL.Binary.Encoding qualified as A -import Text.Builder qualified as C +import TextBuilder qualified as C -- * Parameters Product Encoder @@ -381,7 +381,7 @@ dimension foldl (Array imp) = Array (Array.dimension foldl imp) data Composite a = Composite (a -> Bool -> A.Composite) - (a -> [C.Builder]) + (a -> [C.TextBuilder]) instance Contravariant Composite where contramap f (Composite encode print) = diff --git a/library/Hasql/Encoders/Array.hs b/library/Hasql/Encoders/Array.hs index 24f955c7ca..15e3eb6c3f 100644 --- a/library/Hasql/Encoders/Array.hs +++ b/library/Hasql/Encoders/Array.hs @@ -3,22 +3,22 @@ module Hasql.Encoders.Array where import Hasql.PostgresTypeInfo qualified as B import Hasql.Prelude import PostgreSQL.Binary.Encoding qualified as A -import Text.Builder qualified as C +import TextBuilder qualified as C data Array a - = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.Builder) + = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.TextBuilder) instance Contravariant Array where contramap fn (Array valueOid arrayOid encoder renderer) = Array valueOid arrayOid (\intDateTimes -> encoder intDateTimes . fn) (renderer . fn) {-# INLINE value #-} -value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array a +value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array a value valueOID arrayOID encoder = Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} -nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.Builder) -> Array (Maybe a) +nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> (a -> C.TextBuilder) -> Array (Maybe a) nullableValue valueOID arrayOID encoder renderer = let maybeEncoder params = maybe A.nullArray (A.encodingArray . encoder params) @@ -34,11 +34,11 @@ dimension fold (Array valueOID arrayOID elEncoder elRenderer) = renderer els = let folded = let step builder el = - if C.null builder + if C.isEmpty builder then C.char '[' <> elRenderer el else builder <> C.string ", " <> elRenderer el in fold step mempty els - in if C.null folded + in if C.isEmpty folded then C.string "[]" else folded <> C.char ']' in Array valueOID arrayOID encoder renderer diff --git a/library/Hasql/Encoders/Params.hs b/library/Hasql/Encoders/Params.hs index 4a47a52fce..08a0d45053 100644 --- a/library/Hasql/Encoders/Params.hs +++ b/library/Hasql/Encoders/Params.hs @@ -5,7 +5,7 @@ import Hasql.LibPq14 qualified as A import Hasql.PostgresTypeInfo qualified as D import Hasql.Prelude import PostgreSQL.Binary.Encoding qualified as B -import Text.Builder qualified as E +import TextBuilder qualified as E renderReadable :: Params a -> a -> [Text] renderReadable (Params _ _ _ printer) params = @@ -86,7 +86,7 @@ value (C.Value valueOID _ serialize print) = { size = 1, columnsMetadata = pure (pqOid, format), serializer = \idt -> pure . Just . B.encodingBytes . serialize idt, - printer = pure . E.run . print + printer = pure . E.toText . print } where D.OID _ pqOid format = valueOID @@ -97,7 +97,7 @@ nullableValue (C.Value valueOID _ serialize print) = { size = 1, columnsMetadata = pure (pqOid, format), serializer = \idt -> pure . fmap (B.encodingBytes . serialize idt), - printer = pure . maybe "null" (E.run . print) + printer = pure . maybe "null" (E.toText . print) } where D.OID _ pqOid format = valueOID diff --git a/library/Hasql/Encoders/Value.hs b/library/Hasql/Encoders/Value.hs index 89e31acd6d..8b8f55195d 100644 --- a/library/Hasql/Encoders/Value.hs +++ b/library/Hasql/Encoders/Value.hs @@ -3,10 +3,10 @@ module Hasql.Encoders.Value where import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude import PostgreSQL.Binary.Encoding qualified as B -import Text.Builder qualified as C +import TextBuilder qualified as C data Value a - = Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.Builder) + = Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.TextBuilder) instance Contravariant Value where {-# INLINE contramap #-} @@ -14,7 +14,7 @@ instance Contravariant Value where Value valueOID arrayOID (\integerDatetimes input -> encode integerDatetimes (f input)) (render . f) {-# INLINE unsafePTI #-} -unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.Builder) -> Value a +unsafePTI :: PTI.PTI -> (Bool -> a -> B.Encoding) -> (a -> C.TextBuilder) -> Value a unsafePTI pti = Value (PTI.ptiOID pti) (fromMaybe (error "No array OID") (PTI.ptiArrayOID pti)) From e459da17d2c4121fddcec2c771f08f223aec754e Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 8 Apr 2025 03:19:26 +0300 Subject: [PATCH 1159/1204] Update the deps --- cabal.project | 5 ----- hasql.cabal | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/cabal.project b/cabal.project index 6ba5d7022e..e6fdbadb43 100644 --- a/cabal.project +++ b/cabal.project @@ -1,6 +1 @@ packages: . - -source-repository-package - type: git - location: https://github.com/nikita-volkov/text-builder - tag: 006ca066738f229b0c813b9c01e96a6cfe71e856 diff --git a/hasql.cabal b/hasql.cabal index d184cd95ef..51ef343c70 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -155,7 +155,7 @@ library profunctors >=5.1 && <6, scientific >=0.3 && <0.4, text >=1 && <3, - text-builder >=0.6.7 && <0.7, + text-builder >=1 && <1.1, time >=1.9 && <2, transformers >=0.6 && <0.7, uuid >=1.3 && <2, From 0be7ed451750245b8d174edb5a1717a4d4dcd647 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Tue, 8 Apr 2025 00:29:30 +0000 Subject: [PATCH 1160/1204] Set package version to 1.9.1.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 51ef343c70..f2e216a561 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.9.1.1 +version: 1.9.1.2 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From ce9f201cba7cd802845f42fe6e0de86921bc23b7 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Wed, 9 Apr 2025 12:11:06 +0000 Subject: [PATCH 1161/1204] Set package version to 1.3.0.1 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 03fbcc672c..05ad92bc43 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.3 +version: 1.3.0.1 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 617193f59bc785753407762cfa7dde625f999de0 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 5 May 2025 08:34:46 +0300 Subject: [PATCH 1162/1204] Remove the dependencies badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6aed9b6b66..d032abb38f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet fl # Status -[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) [![Hackage Deps](https://img.shields.io/hackage-deps/v/hasql.svg)](http://packdeps.haskellers.com/reverse/hasql) +[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) Hasql is production-ready, actively maintained and the API is pretty stable. It's used by many companies and most notably by the [Postgrest](https://postgrest.org/) project. From 0631892e44c38dd83db624b32b970967efe1d1aa Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Thu, 15 May 2025 13:39:47 +0300 Subject: [PATCH 1163/1204] Update the changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4a8390fa2..3780700903 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.3 + +- Adapt to the new settings model of `hasql-1.9` + # 1.2 - Migrated to `hasql-1.7` From 8d77fc0eaba42193bcbf7e8e18dff472e5bc87c2 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Thu, 15 May 2025 10:56:30 +0000 Subject: [PATCH 1164/1204] Set package version to 1.3.0.2 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 05ad92bc43..98772cea9b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.3.0.1 +version: 1.3.0.2 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 0c28da3b205d26f553d85d359e142d81875c9dc8 Mon Sep 17 00:00:00 2001 From: Deepak Sharma Date: Sat, 21 Jun 2025 14:19:36 -0400 Subject: [PATCH 1165/1204] Documentation updated to remove connectionString --- README.md | 6 +- .../hasql-1.9.1.2/build/Hasql/Commands.dyn_hi | Bin 0 -> 8749 bytes .../hasql-1.9.1.2/build/Hasql/Commands.dyn_o | Bin 0 -> 16000 bytes .../hasql-1.9.1.2/build/Hasql/Commands.hi | Bin 0 -> 8746 bytes .../hasql-1.9.1.2/build/Hasql/Commands.o | Bin 0 -> 16000 bytes .../build/Hasql/Connection.dyn_hi | Bin 0 -> 6574 bytes .../build/Hasql/Connection.dyn_o | Bin 0 -> 1936 bytes .../hasql-1.9.1.2/build/Hasql/Connection.hi | Bin 0 -> 6571 bytes .../hasql-1.9.1.2/build/Hasql/Connection.o | Bin 0 -> 1936 bytes .../build/Hasql/Connection/Config.dyn_hi | Bin 0 -> 7897 bytes .../build/Hasql/Connection/Config.dyn_o | Bin 0 -> 16520 bytes .../build/Hasql/Connection/Config.hi | Bin 0 -> 7894 bytes .../build/Hasql/Connection/Config.o | Bin 0 -> 16520 bytes .../Connection/Config/ConnectionString.dyn_hi | Bin 0 -> 6858 bytes .../Connection/Config/ConnectionString.dyn_o | Bin 0 -> 10096 bytes .../Connection/Config/ConnectionString.hi | Bin 0 -> 6855 bytes .../Connection/Config/ConnectionString.o | Bin 0 -> 10096 bytes .../Config/ConnectionString/Params.dyn_hi | Bin 0 -> 6838 bytes .../Config/ConnectionString/Params.dyn_o | Bin 0 -> 10672 bytes .../Config/ConnectionString/Params.hi | Bin 0 -> 6835 bytes .../Config/ConnectionString/Params.o | Bin 0 -> 10672 bytes .../build/Hasql/Connection/Core.dyn_hi | Bin 0 -> 12524 bytes .../build/Hasql/Connection/Core.dyn_o | Bin 0 -> 38344 bytes .../build/Hasql/Connection/Core.hi | Bin 0 -> 12521 bytes .../build/Hasql/Connection/Core.o | Bin 0 -> 38344 bytes .../build/Hasql/Connection/Setting.dyn_hi | Bin 0 -> 7122 bytes .../build/Hasql/Connection/Setting.dyn_o | Bin 0 -> 7248 bytes .../build/Hasql/Connection/Setting.hi | Bin 0 -> 7119 bytes .../build/Hasql/Connection/Setting.o | Bin 0 -> 7248 bytes .../Connection/Setting/Connection.dyn_hi | Bin 0 -> 7186 bytes .../Hasql/Connection/Setting/Connection.dyn_o | Bin 0 -> 8544 bytes .../Hasql/Connection/Setting/Connection.hi | Bin 0 -> 7183 bytes .../Hasql/Connection/Setting/Connection.o | Bin 0 -> 8544 bytes .../Setting/Connection/Param.dyn_hi | Bin 0 -> 9660 bytes .../Connection/Setting/Connection/Param.dyn_o | Bin 0 -> 20232 bytes .../Connection/Setting/Connection/Param.hi | Bin 0 -> 9657 bytes .../Connection/Setting/Connection/Param.o | Bin 0 -> 20232 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi | Bin 0 -> 8257 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.dyn_o | Bin 0 -> 1920 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.hi | Bin 0 -> 8254 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.o | Bin 0 -> 1920 bytes .../build/Hasql/Decoders/All.dyn_hi | Bin 0 -> 104016 bytes .../build/Hasql/Decoders/All.dyn_o | Bin 0 -> 392720 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/All.hi | Bin 0 -> 104013 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/All.o | Bin 0 -> 392720 bytes .../build/Hasql/Decoders/Array.dyn_hi | Bin 0 -> 14756 bytes .../build/Hasql/Decoders/Array.dyn_o | Bin 0 -> 24104 bytes .../build/Hasql/Decoders/Array.hi | Bin 0 -> 14753 bytes .../build/Hasql/Decoders/Array.o | Bin 0 -> 24104 bytes .../build/Hasql/Decoders/Composite.dyn_hi | Bin 0 -> 19022 bytes .../build/Hasql/Decoders/Composite.dyn_o | Bin 0 -> 30472 bytes .../build/Hasql/Decoders/Composite.hi | Bin 0 -> 19019 bytes .../build/Hasql/Decoders/Composite.o | Bin 0 -> 30472 bytes .../build/Hasql/Decoders/Result.dyn_hi | Bin 0 -> 73359 bytes .../build/Hasql/Decoders/Result.dyn_o | Bin 0 -> 326352 bytes .../build/Hasql/Decoders/Result.hi | Bin 0 -> 73356 bytes .../build/Hasql/Decoders/Result.o | Bin 0 -> 326352 bytes .../build/Hasql/Decoders/Results.dyn_hi | Bin 0 -> 28484 bytes .../build/Hasql/Decoders/Results.dyn_o | Bin 0 -> 83016 bytes .../build/Hasql/Decoders/Results.hi | Bin 0 -> 28481 bytes .../build/Hasql/Decoders/Results.o | Bin 0 -> 83016 bytes .../build/Hasql/Decoders/Row.dyn_hi | Bin 0 -> 19936 bytes .../build/Hasql/Decoders/Row.dyn_o | Bin 0 -> 34112 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/Row.hi | Bin 0 -> 19933 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/Row.o | Bin 0 -> 34112 bytes .../build/Hasql/Decoders/Value.dyn_hi | Bin 0 -> 12582 bytes .../build/Hasql/Decoders/Value.dyn_o | Bin 0 -> 18664 bytes .../build/Hasql/Decoders/Value.hi | Bin 0 -> 12579 bytes .../build/Hasql/Decoders/Value.o | Bin 0 -> 18664 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi | Bin 0 -> 7872 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.dyn_o | Bin 0 -> 1920 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.hi | Bin 0 -> 7869 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.o | Bin 0 -> 1920 bytes .../build/Hasql/Encoders/All.dyn_hi | Bin 0 -> 119637 bytes .../build/Hasql/Encoders/All.dyn_o | Bin 0 -> 383528 bytes .../hasql-1.9.1.2/build/Hasql/Encoders/All.hi | Bin 0 -> 119634 bytes .../hasql-1.9.1.2/build/Hasql/Encoders/All.o | Bin 0 -> 383528 bytes .../build/Hasql/Encoders/Array.dyn_hi | Bin 0 -> 22550 bytes .../build/Hasql/Encoders/Array.dyn_o | Bin 0 -> 45496 bytes .../build/Hasql/Encoders/Array.hi | Bin 0 -> 22547 bytes .../build/Hasql/Encoders/Array.o | Bin 0 -> 45496 bytes .../build/Hasql/Encoders/Params.dyn_hi | Bin 0 -> 18527 bytes .../build/Hasql/Encoders/Params.dyn_o | Bin 0 -> 75288 bytes .../build/Hasql/Encoders/Params.hi | Bin 0 -> 18524 bytes .../build/Hasql/Encoders/Params.o | Bin 0 -> 75288 bytes .../build/Hasql/Encoders/Value.dyn_hi | Bin 0 -> 12540 bytes .../build/Hasql/Encoders/Value.dyn_o | Bin 0 -> 22520 bytes .../build/Hasql/Encoders/Value.hi | Bin 0 -> 12537 bytes .../build/Hasql/Encoders/Value.o | Bin 0 -> 22520 bytes .../hasql-1.9.1.2/build/Hasql/Errors.dyn_hi | Bin 0 -> 20230 bytes .../hasql-1.9.1.2/build/Hasql/Errors.dyn_o | Bin 0 -> 121304 bytes .../hasql-1.9.1.2/build/Hasql/Errors.hi | Bin 0 -> 20227 bytes .../hasql-1.9.1.2/build/Hasql/Errors.o | Bin 0 -> 121304 bytes .../hasql-1.9.1.2/build/Hasql/IO.dyn_hi | Bin 0 -> 52488 bytes .../hasql-1.9.1.2/build/Hasql/IO.dyn_o | Bin 0 -> 294832 bytes .../hasql-1.9.1.2/build/Hasql/IO.hi | Bin 0 -> 52485 bytes .../ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o | Bin 0 -> 294832 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi | Bin 0 -> 17139 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o | Bin 0 -> 25576 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.hi | Bin 0 -> 17136 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.o | Bin 0 -> 25576 bytes .../build/Hasql/LibPq14/Ffi.dyn_hi | Bin 0 -> 7328 bytes .../build/Hasql/LibPq14/Ffi.dyn_o | Bin 0 -> 11472 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.hi | Bin 0 -> 7325 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.o | Bin 0 -> 11472 bytes .../build/Hasql/LibPq14/Mappings.dyn_hi | Bin 0 -> 17344 bytes .../build/Hasql/LibPq14/Mappings.dyn_o | Bin 0 -> 41792 bytes .../build/Hasql/LibPq14/Mappings.hi | Bin 0 -> 17341 bytes .../build/Hasql/LibPq14/Mappings.hs | 99 +++++ .../build/Hasql/LibPq14/Mappings.o | Bin 0 -> 41792 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi | Bin 0 -> 6430 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o | Bin 0 -> 1920 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.hi | Bin 0 -> 6427 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.o | Bin 0 -> 1920 bytes .../build/Hasql/Pipeline/Core.dyn_hi | Bin 0 -> 15674 bytes .../build/Hasql/Pipeline/Core.dyn_o | Bin 0 -> 226080 bytes .../build/Hasql/Pipeline/Core.hi | Bin 0 -> 15671 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline/Core.o | Bin 0 -> 226080 bytes .../build/Hasql/PostgresTypeInfo.dyn_hi | Bin 0 -> 28070 bytes .../build/Hasql/PostgresTypeInfo.dyn_o | Bin 0 -> 65256 bytes .../build/Hasql/PostgresTypeInfo.hi | Bin 0 -> 28067 bytes .../build/Hasql/PostgresTypeInfo.o | Bin 0 -> 65256 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi | Bin 0 -> 46486 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.dyn_o | Bin 0 -> 8544 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.hi | Bin 0 -> 46483 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.o | Bin 0 -> 8544 bytes .../Hasql/PreparedStatementRegistry.dyn_hi | Bin 0 -> 24339 bytes .../Hasql/PreparedStatementRegistry.dyn_o | Bin 0 -> 48968 bytes .../build/Hasql/PreparedStatementRegistry.hi | Bin 0 -> 24336 bytes .../build/Hasql/PreparedStatementRegistry.o | Bin 0 -> 48968 bytes .../hasql-1.9.1.2/build/Hasql/Session.dyn_hi | Bin 0 -> 7203 bytes .../hasql-1.9.1.2/build/Hasql/Session.dyn_o | Bin 0 -> 1912 bytes .../hasql-1.9.1.2/build/Hasql/Session.hi | Bin 0 -> 7200 bytes .../hasql-1.9.1.2/build/Hasql/Session.o | Bin 0 -> 1912 bytes .../build/Hasql/Session/Core.dyn_hi | Bin 0 -> 23741 bytes .../build/Hasql/Session/Core.dyn_o | Bin 0 -> 258952 bytes .../hasql-1.9.1.2/build/Hasql/Session/Core.hi | Bin 0 -> 23738 bytes .../hasql-1.9.1.2/build/Hasql/Session/Core.o | Bin 0 -> 258952 bytes .../build/Hasql/Statement.dyn_hi | Bin 0 -> 13901 bytes .../hasql-1.9.1.2/build/Hasql/Statement.dyn_o | Bin 0 -> 31864 bytes .../hasql-1.9.1.2/build/Hasql/Statement.hi | Bin 0 -> 13898 bytes .../hasql-1.9.1.2/build/Hasql/Statement.o | Bin 0 -> 31864 bytes .../build/autogen/PackageInfo_hasql.hs | 25 ++ .../build/autogen/Paths_hasql.hs | 77 ++++ .../build/autogen/cabal_macros.h | 373 ++++++++++++++++++ .../libHShasql-1.9.1.2-inplace-ghc9.12.2.so | Bin 0 -> 2055760 bytes .../build/libHShasql-1.9.1.2-inplace.a | Bin 0 -> 2883884 bytes .../ghc-9.12.2/hasql-1.9.1.2/cache/build | Bin 0 -> 29019 bytes .../ghc-9.12.2/hasql-1.9.1.2/cache/config | Bin 0 -> 18048 bytes .../hasql-1.9.1.2/cache/registration | Bin 0 -> 4915 bytes .../Hasql/TestingKit/Constants.dyn_hi | Bin 0 -> 7744 bytes .../Hasql/TestingKit/Constants.dyn_o | Bin 0 -> 14032 bytes .../testing-kit/Hasql/TestingKit/Constants.hi | Bin 0 -> 7741 bytes .../testing-kit/Hasql/TestingKit/Constants.o | Bin 0 -> 14032 bytes .../Hasql/TestingKit/Preludes/Base.dyn_hi | Bin 0 -> 8666 bytes .../Hasql/TestingKit/Preludes/Base.dyn_o | Bin 0 -> 2104 bytes .../Hasql/TestingKit/Preludes/Base.hi | Bin 0 -> 8663 bytes .../Hasql/TestingKit/Preludes/Base.o | Bin 0 -> 2104 bytes .../TestingKit/Statements/BrokenSyntax.dyn_hi | Bin 0 -> 12649 bytes .../TestingKit/Statements/BrokenSyntax.dyn_o | Bin 0 -> 25864 bytes .../TestingKit/Statements/BrokenSyntax.hi | Bin 0 -> 12646 bytes .../TestingKit/Statements/BrokenSyntax.o | Bin 0 -> 25864 bytes .../Statements/GenerateSeries.dyn_hi | Bin 0 -> 12677 bytes .../Statements/GenerateSeries.dyn_o | Bin 0 -> 25984 bytes .../TestingKit/Statements/GenerateSeries.hi | Bin 0 -> 12674 bytes .../TestingKit/Statements/GenerateSeries.o | Bin 0 -> 25984 bytes .../TestingKit/Statements/WrongDecoder.dyn_hi | Bin 0 -> 12881 bytes .../TestingKit/Statements/WrongDecoder.dyn_o | Bin 0 -> 25928 bytes .../TestingKit/Statements/WrongDecoder.hi | Bin 0 -> 12878 bytes .../TestingKit/Statements/WrongDecoder.o | Bin 0 -> 25928 bytes .../Hasql/TestingKit/TestingDsl.dyn_hi | Bin 0 -> 13506 bytes .../Hasql/TestingKit/TestingDsl.dyn_o | Bin 0 -> 29520 bytes .../Hasql/TestingKit/TestingDsl.hi | Bin 0 -> 13503 bytes .../testing-kit/Hasql/TestingKit/TestingDsl.o | Bin 0 -> 29520 bytes .../testing-kit/autogen/PackageInfo_hasql.hs | 25 ++ .../build/testing-kit/autogen/Paths_hasql.hs | 77 ++++ .../build/testing-kit/autogen/cabal_macros.h | 193 +++++++++ ...l-1.9.1.2-inplace-testing-kit-ghc9.12.2.so | Bin 0 -> 189672 bytes .../libHShasql-1.9.1.2-inplace-testing-kit.a | Bin 0 -> 149402 bytes .../hasql-1.9.1.2/l/testing-kit/cache/build | Bin 0 -> 7251 bytes .../hasql-1.9.1.2/l/testing-kit/cache/config | Bin 0 -> 13062 bytes .../l/testing-kit/cache/registration | Bin 0 -> 2918 bytes .../package.conf.inplace/package.cache | Bin 0 -> 40 bytes .../package.conf.inplace/package.cache.lock | 0 .../hasql-1.9.1.2/l/testing-kit/setup-config | Bin 0 -> 602424 bytes .../package.conf.inplace/package.cache | Bin 0 -> 40 bytes .../package.conf.inplace/package.cache.lock | 0 .../ghc-9.12.2/hasql-1.9.1.2/setup-config | Bin 0 -> 600884 bytes dist-newstyle/cache/compiler | Bin 0 -> 16883 bytes dist-newstyle/cache/config | Bin 0 -> 14886 bytes dist-newstyle/cache/elaborated-plan | Bin 0 -> 2063192 bytes dist-newstyle/cache/improved-plan | Bin 0 -> 4096244 bytes dist-newstyle/cache/plan.json | 1 + dist-newstyle/cache/solver-plan | Bin 0 -> 1418961 bytes dist-newstyle/cache/source-hashes | Bin 0 -> 91712 bytes dist-newstyle/cache/up-to-date | Bin 0 -> 6445 bytes .../hasql-1.9.1.2-inplace-testing-kit.conf | 63 +++ .../ghc-9.12.2/hasql-1.9.1.2-inplace.conf | 93 +++++ .../packagedb/ghc-9.12.2/package.cache | Bin 0 -> 12878 bytes .../packagedb/ghc-9.12.2/package.cache.lock | 0 200 files changed, 1031 insertions(+), 1 deletion(-) create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hs create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/PackageInfo_hasql.hs create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/Paths_hasql.hs create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h create mode 100755 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace.a create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.dyn_hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.dyn_o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.o create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h create mode 100755 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/build create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/registration create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/package.conf.inplace/package.cache create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/package.conf.inplace/package.cache.lock create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/setup-config create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache.lock create mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/setup-config create mode 100644 dist-newstyle/cache/compiler create mode 100644 dist-newstyle/cache/config create mode 100644 dist-newstyle/cache/elaborated-plan create mode 100644 dist-newstyle/cache/improved-plan create mode 100644 dist-newstyle/cache/plan.json create mode 100644 dist-newstyle/cache/solver-plan create mode 100644 dist-newstyle/cache/source-hashes create mode 100644 dist-newstyle/cache/up-to-date create mode 100644 dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf create mode 100644 dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf create mode 100644 dist-newstyle/packagedb/ghc-9.12.2/package.cache create mode 100644 dist-newstyle/packagedb/ghc-9.12.2/package.cache.lock diff --git a/README.md b/README.md index d032abb38f..3958a66252 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,9 @@ import qualified Hasql.Session as Session import qualified Hasql.Decoders as Decoders import qualified Hasql.Encoders as Encoders import qualified Hasql.Connection as Connection +import qualified Hasql.Connection.Setting as ConnectionSetting +import qualified Hasql.Connection.Setting.Connection as ConnectionSettingConnection + main :: IO () @@ -86,7 +89,8 @@ main = do result <- Session.run (sumAndDivModSession 3 8 3) connection print result where - connectionSettings = Connection.connectionString "localhost" 5432 "postgres" "" "postgres" + connectionSettings = [ConnectionSetting.connection $ ConnectionSettingConnection.string pstr] + pstr = "host=localhost dbname=postgres user=postgres port=5432" -- * Sessions diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..7ba0f982f821ce431c0a8bf356b5407cf35e00b4 GIT binary patch literal 8749 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..57c77db1d8fc7a1f87c06176d74e89d134a84c36 GIT binary patch literal 16000 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o new file mode 100644 index 0000000000000000000000000000000000000000..57c77db1d8fc7a1f87c06176d74e89d134a84c36 GIT binary patch literal 16000 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 PG?Vs;T!W-HUQPIam;i1V literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..7fb01f3ba3dd392313c7ab9f9761dbca2042dd7e GIT binary patch literal 1936 zcmbtV&2G~`5T4Zh7X-Z_aS0Ma2$2;rTzWvV6hV8Sy->JXj zSFT9BKwpEmV8)q=R~rY3bR}nIzMXGoc4v3<<>l*FJG~yr=)q5DEkOa!FSUBmr~&N4 zjTZb*&13(=sQR3$QIY35Hc637m?`0dq1snNU@g+}@Zhp#E!E{7ZNfLjzp@sG01vLN;Z(_9N8SugpgS%{~rPEO`CU44lD{vut#Y_Z zv*j+W_?=}gce1T=)iJu#H&+(GHP#8YZ>{vy^_TNS_;o8z-->hF!XH`qF6u~Y##5FQ z=N9UMgR174iN+{Rxs+4Uj6O4panb9nWj(bm;EEm-8-TN9Q2zcA`pjT;@jEHKjXiacMYrkaru7%QD53c literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi new file mode 100644 index 0000000000000000000000000000000000000000..730cf233870917c4d51e390b7a4e06669a82cf60 GIT binary patch literal 6571 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 MM6N;78?Pq(KN@Rn$^ZZW literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o new file mode 100644 index 0000000000000000000000000000000000000000..7fb01f3ba3dd392313c7ab9f9761dbca2042dd7e GIT binary patch literal 1936 zcmbtV&2G~`5T4Zh7X-Z_aS0Ma2$2;rTzWvV6hV8Sy->JXj zSFT9BKwpEmV8)q=R~rY3bR}nIzMXGoc4v3<<>l*FJG~yr=)q5DEkOa!FSUBmr~&N4 zjTZb*&13(=sQR3$QIY35Hc637m?`0dq1snNU@g+}@Zhp#E!E{7ZNfLjzp@sG01vLN;Z(_9N8SugpgS%{~rPEO`CU44lD{vut#Y_Z zv*j+W_?=}gce1T=)iJu#H&+(GHP#8YZ>{vy^_TNS_;o8z-->hF!XH`qF6u~Y##5FQ z=N9UMgR174iN+{Rxs+4Uj6O4panb9nWj(bm;EEm-8-TN9Q2zcA`pjT;@jEHKjXiacMYrkaru7%QD53c literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..d5df641c2b42b9f29d64f5cc332bfc9e605220c8 GIT binary patch literal 7897 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 GZuln^-QXDj literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..30c88b1bd387acffaf285ea0ee2dce5f192b0245 GIT binary patch literal 10096 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi new file mode 100644 index 0000000000000000000000000000000000000000..1bcb4a225a15a7b149f1a3599f15bb83ba2dcfb3 GIT binary patch literal 6855 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..163e7a678fe2a0beeec357be0804afe9aa98c54d GIT binary patch literal 6838 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 LG6!SByM%uL+@piI literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..6ccbf5d59e8e73c23a839b77275b36cc2aacf030 GIT binary patch literal 10672 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi new file mode 100644 index 0000000000000000000000000000000000000000..c72bfd369e19396ec68ea246da6e5fcc1b7b9947 GIT binary patch literal 6835 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 J7#rRt`~wD$f@%N& literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o new file mode 100644 index 0000000000000000000000000000000000000000..6ccbf5d59e8e73c23a839b77275b36cc2aacf030 GIT binary patch literal 10672 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..89544424d2547a40077463c4b67a9b6405d76e82 GIT binary patch literal 12524 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 oEQ4DWaw|rO_gCOeUFu%xPYxGZPyk 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 E1NDRzD*ylh literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi new file mode 100644 index 0000000000000000000000000000000000000000..dcc4e154a848f005ddcb3129d9294d5d1bd27ec7 GIT binary patch literal 12521 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 E1NDRzD*ylh literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..e2b6619aeedb15ccbb80f0bace0cd95074ac2cc3 GIT binary patch literal 7122 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 P3dWDh(!03jLl)p4BH;)n literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..a7492b99427854050cbae4c367a569343701ca47 GIT binary patch literal 7248 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..9fb11465c88d1eea363f4b4581efd45fa33cb6f1 GIT binary patch literal 8544 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o new file mode 100644 index 0000000000000000000000000000000000000000..9fb11465c88d1eea363f4b4581efd45fa33cb6f1 GIT binary patch literal 8544 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 w-_48H4cwJ3kkFVOj=TN)S$mX%$K`o|>s0*ArGP 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 CxO^J` literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi new file mode 100644 index 0000000000000000000000000000000000000000..8d0ad377647a34781ef2f707af70c064ca7bb069 GIT binary patch literal 9657 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o new file mode 100644 index 0000000000000000000000000000000000000000..492ba3eab3f4810a8eb9b7d15417b74ceb15fa86 GIT binary patch literal 20232 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 CxO^J` literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..25e7046ee7d23c07d3e2c5910c02ab4a35e63829 GIT binary patch literal 8257 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..44c6ed35c17bae13679bcf50211cfd5f656a2219 GIT binary patch literal 1920 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..63845f70912be9655e78ac664251f03c0659b67b GIT binary patch literal 392720 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 AZU6uP literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..c4efabed03489f6ef97871ce2048bc8042719ac5 GIT binary patch literal 24104 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi new file mode 100644 index 0000000000000000000000000000000000000000..ba78be33a4673efcd71138b156988512accec13c GIT binary patch literal 14753 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o new file mode 100644 index 0000000000000000000000000000000000000000..c4efabed03489f6ef97871ce2048bc8042719ac5 GIT binary patch literal 24104 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..f228faf3effec8b335ec3af2a7f8d574298f6d72 GIT binary patch literal 19022 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o new file mode 100644 index 0000000000000000000000000000000000000000..92262162d2109e95fb6f2af26b706228f6e572f4 GIT binary patch literal 30472 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

    Nkmuny0Dlt+Hf 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o new file mode 100644 index 0000000000000000000000000000000000000000..37b02fa31a44dda5e22d5dbf77422eaeeed81ac0 GIT binary patch literal 326352 zcmeFa4O|`9dG0$1$;P%UBTQnF$TqRnl%}!_60%ULI9nffa3b3nla#n>_}my81PD-q z6}csfPD^jp7znj-s@oFBy`?&ejddg&w`xLU-IO+}jj-x+65SK*s5hKSu|Dd?kSOta z-x5+&(8M$-yVddB%zT0(G3B*XQ~_ zBJQ_{GvB$wXYVrKIuANWO6Dv&QE`b=^z+Yu>u-Oa>~xGKU%mU~OVk`*q{j$lqR{<8*YDJ4fW0^kLCO=3M_0PIjI7 zayB_*_nG8tcApa4`?otCbx*9B_|}{SCkE#@MGM5n^GT73C&b>9a*n6u9DCeqnvo{@Lq~{kkP}d#3HnKPEwa)N73X|7z1PJGXoNzz?O} zpe^dP;bCcy-f!)*uNxnh{`n>8oAo-;CC6wxTw`qbZF_sHZTHHxpi}zuBaM;q7tXF3 zKb4gB-RI9n#{Z>p&G_D=v@Z?I|LtqVQ*uu21D?dSVr}eNf%cRp*8%ha8FFsDGUA$f znenAl@=E))SbDs?99|n4|A}0;G;NQ_dGwm0d3x4~^;vT`J+H*4XIRp*Q2MK!IZnq@ zbFLllkoV-&Zv~QYM_9WMjiGAIVd{@0IdF`MSPJ`KqsfpXMBSucYz5hSwpqvDd{9DQCByElh45-YnPrpCqU4Mp@4jZ*iPD?zfX0%y>q|zrGLR=TBsuD&x*c zZNp8p{0HY&-*TMR;gUHEPrU3nMX2L1X}!B4)^_*55^F4 zZDOYVh+htp?|R)DmNAF+S;I2^=#(v-oSQWmBTPFEJ+m*c)C$2=;wy2YQ@rCeN_ zm%BDPv>s1cCI@44-Fbr(uaxP&#=$ijnCIfpKsbo+B|QJgEBhb;vGP_=EDB$@+!c56gJqlU6$mye^k}_4tQxk$+3y=KfvsHuvv;{UWyh_;xJc zr{CuOefe$fU)9^(zgwsCPp*MF?*C=at99I_{}0!TCXYEVcEL5?o*U}=SGZm@{d!Td zsb6}1*Lrrjevwb7soy&1i(Rv2o$CfE2N{oTetOMBj?9^IWvug*T#xI&xn|KJ{Upb1wYuSy?mH^ewy9nNYuUU8FO? zTvX=GAKbq-wuX~0_0gMO%9^E&TV-zX?9(z%x7Rk-cv(ezEf3E6{fmL@z4o}xI)DPx)Ba(j1g9T6fcdZZlk@Xb!slq3)J^E=-H~_XnTYE^9C{Zb!Y*xs|Rfb$KmI#}%Ako!iZN&XuV50rO(Zar(QVH-F6 zGEBIxrRzRYww;)#$=XBV9R2M~yd-N{JilVQc3+pDqJ7;OSsQOH)b+C^@>~9X1mo+M z=v-_|&$ZdCy*(#$Os%(Aryi6wp5bAvyZd!_(!BT{9B-}NY5ImaeNxWq>q|19)3j>6 z<+P$qP?qj}4Ds=1ImbulTy^4QSs&Fk09ili$U7GsC)(@z-hGeAxWE1)_Y0nqda3h$ z%_m(S)Ox9NeeE0e+VxYuzfa2J^RoW^`Kz4{dp-U=!dJ=K{HjZx4sT5@GLdoV+>U3y z>9xQ8kHy+Yo8;vYDa#jRebV#8>3BlUulHJ>l=JF2pON~e>9|DFfw{VrPdeXkMV_Et zcdj+{^s>qIRPu8|+GXb{lV7q9S2XN?Pdm{gZFVodOFnkuyUdds@m=(V=6j}Ho^no< zXW`igI}4?33lEm`7ye=7#m!0H+U+{AgLgS#FzD6l+>+g6epy;TpJC6TkzPKxp6iUPTl`3_ zEBv=fen~o~^efHtYk1Doex0@YNIqw$oJ0Nj-_!W>vgVWIe~0A%Lz0Fs%W+pq9(+T_ z7~h!Zbo?y&N?DItC~LN9vSzzL)@-lZ-6ic&ia9+fucq>8|0}URa7^liy#{6XDSM^d z^&VuJ_94=z=o+uKZTI&@>Qgwsw2aVSS4dm6`)j=>2ldySZ{Lu0&3%&JcApv8hfDqq zb0040(*9fhm?{tXoOW6Lxt`m)ZyC17usu#ym%{dFV!gulI1yeS6WlisuaEAS?pO8t zi1jW_B;T(~UWR#q%pqm`G1It2fNIT9~(vz%|K%q`wXT5w{`Z#qS~*3$J# z%*Uzn(4XI4<#g!!ir&AUDo_2glKl6Nl{s^_`1*((Zy!6)OkyXMvwf_@ymd>SJtD{3 z$6jJ8|D1;^ytg!@P~v+p8{a z-o7UHy0AWjb!K~RrhWIT?t0LI6W^Bpt3&7B(k^~{=D|*P?)~kO{%<@Od2zn1$$Tqm z{)r#Te0hoazE;L0ejj1CRf+HN=I9Ic`IvNj-K<*HrO==0+*;?<-fwUH@u}_35xvIf z`m46PL*hU5vRLQF2X!4Z^L~k8M9lJJKb($L;>WP8(Tz(VjBA0$Ok{A`qcjepr%8w}$}y^)O{zawJ? zy?-6XkxqWT&Tq4F-4EkPl5=p6BzRa?RF$=dFs%3*!c_^J8dr z{G``Q`<~ITna6rpi`cv$ahGA-;Oz1*j2oO?{=L)U29u>BVeGE|hVfOuTJcq39EKOe z@SHW*()CDON3gD7GsGo?aTsA72CsQ@tV4L;H@xqQwZHJbZ)`jsx6T#b_jRW$nkQjg zl-~ah;}re-&vKu@z3&{xDTZ;1W^IGV7@e|~mnfz*C{8gj4&$J=u63it6~xw$-<&v% zlqEBW!;pJu8i%26LE|qv^!}NQ)1~7~=VvE;|3$;&vxHi)$?+G-X5x!`_VzXF+aI9# zi|yY1x~Y!&!g<6_u%Gt1zaaPhHEsfP6ZhVboWIl54?fn<4@sjRYoPHFavzjq9N7QB zV>LcP>Kw;7%$?(2#{Afmz+*K&LSrj5#zD(a(xGKI&s1vUwSTN=e4jNwLSri=wgK@G z^XQy*d_=Frm%xth({Z8k5$5Mi#?vzKJ~1%m)TUY0%1Ia zlOD!HII^#2{C*MP{rcFr&AwkB#zXva<9Wh(h%g=^e9u^H52$c|2=6_J8c*ZR7@bM) z4Gi~(2=|9LpLalq@epA=L>Lbd#zSbI5qMoGe{1*u2;(7UcRxRjhnQXdh4B!-+V9`d zakM`6B=_jtPp8Dv>wZVi`R`E*das1M(_Q*SSzGkppCr%sgzr@fj%UBx*LJEOKYyg{Y5%*HnLZ&z*Qxcgl!Jh5gY?E@t5=Mi~2+t+s{bx41z`Ks?D(e&3nq3@bmaH6`v zDMC7tZhx#U{eiddk-P(GySK;C6(%#0PCEuE|Mz3%>hBpM=hb*o^}(I5%DmBiCy>rn zB_I8{tfbw4Cy>mqJ7k{yr0lu$s=Pbo)Mb&*n z__EZ=nT?J3ylYO9|BhZQ+vn#wN3^Z|DW%OWU(RpV+I@7AdCy;mq%BA6 z=ltRagLeJb_si+~lBTm6cm65X4*!Y#-hVJwCi%aGa`pP;rzQXOT~trVwYO8&3AK(C zNwfB5Af$M}6$g7^J#e;s&ig7^JhW)@L#oeexT!TbI$r+w)HkG0?T7pB)AUj^pX zuTc4-FULK!H0wR$`0nR{jQ{lAZ5aFE@6yGjpOrqKQ2H`|oFR2c_s8UZ>`$)uIwaI% zyKj8Ij2ZNLtk=NJ?zMj5iTq^m9iN3a*!I15*XcFlY3X;g&+atylu5_SHKI_~mp#9% za(WDewTaNCDuFT@QzpMqjlXH*MIxIiJxEMpVuc$zi%Cm*RiagU*8d^ z?;O>8E%x=n?_+3uG!sp@ADmbB{Q0MhtMqa3;PlYf#^lwWvpBOdh@;FML0q zt~2Vsoc{Pi<}$eE=z5G^kL-Ks!)8omx?z7zi}%lk`@zjF|HAm^+2vmt|2(_=3*(=| z_-DN)JWSUFb1ewtpRbO%YYL-Q&`GQg65TXSC5& z)8?^`QE?gWEyUuVW$Zn1kBq?cTe<4Uoz}|Pdm{w&neoA@AAHhPJEZO%|?6| zeWCfDX{{w`EH%dQh4K!ILK)K+9xT!OcQ0<1_g3gVyLDp6p9fg_i_Pva=X)-Je?jL% zpQz6-A_hd(D&0@#E8eRo=8NDiH^s1E6t5QavE0pfO6#tnRLjnM3{ao)yg* z(YVhmZ;w5%oF(@@C7!?ic^Rkcb8AnEA5V!Nd&Q5ZKP}IA$QZ8Eq=o$n-(T(BTSGt4 zA$g~BCY@`T7^1lOMi{Rw*IB8vIuDin>G*dU|0C}(b_w@u4)<#g_iJ`K(0`myJo?kW zh{e#o9rwEq)h_ecZK^kH@_(Bg-33lbJdsX zpGcahmpIl_AJ#GU!tb6XF1$w+051aHF{aw z44)r}#WUmirAg0O$U5*DxnJ=kSp(+3+4tGP=Lf>)2i~mb2XtP9eUY_U`} z#VKEAIv13Ky}xo+Nvu3C)?UU5_g9wqw@z~(bxNPCnD~q3lkTrP&*G79k99nNZh<>ZggZhz&re5;Pia}DRSzcQ!MZu@N?vdT&C zGfO+s`}8Qg&MD%Q`5NmVBgeb@E9-q(^E}d7s~<~voSff_U5HFbf9CFotT9sP)1(_n z=d}3elw+sbr#YzJ=vcvvSx!5#ds!?Wri)q5r@dQsA6s{PCUsF`mVYdE5d*tZVj%X+ zarWUJh3<*GMDA06_soMY?o7JkOZxYhljraL@r};JtJh21azI?{kKZTpu(JPx9Up7k z_%n&S#s0oGN#4so?1lRG9PuUR?1L|U_vasdF=x&dU+PF&_$B%KsxuN>dq!ew&q!?T z88`lU;faV9|BTq@zmxX%r_|T^`5n-wvo@}uzQEXLwi$Q+DPo`hiTt)>pR0cxWvy|( z*UJ9Z*NtCD?DJB|U)?VovCq60_T<=S-3wb{pQW62AC0)!XDQz^a<5^=vClV5j(xsM z%8Tpfez_jvI-h?d(rxx%cH^B*?6dB>JV)BU#zP171Hzs;7`*@TRBdv)SYU3Ke)-Dz z{9_aBzkI0~5aBu;cx;0Gms6+>2OgVX|K%{fj<-jMT}BCFz2AxD%ke|@p33;{*Ow{w zUtT7C!%X&H{$q3V1ohbNH@_yabavl0D0`ABq0@{X)2#iJ?eRgrJYzGQXs>4bczciPORc?`ExUf6g>lYB z`^#f{Tn$PY%l-NG94QNp_v@5$l6`C3eU+qYw4ajqFlY?rUcaoh-1OPjg}e94Jh5}T zyxVm9ra z4fomAnW#4}4fkdKb}#NF{8~Nl@HW_&S?i!5=X}tcr>~QDb9!S;-4BHJeV2C}%39vU z5!nae1-VD`lB}&ir0?04wVMuIvk@D*)_2yrH-=aNtOfexSH0gd#r=+T>YRLV-2TU6 z>;BcUW(Xhm%DHt8q3eTB>spiert5<4nxX86E`NJ=?_(UwkWq;b(c<`->?;gADog3f1=A*NZ@6Nx~ik+3YZd@FN#P2*K?;Y1z3Z3t2nO?@R zgA!|pIb^=X;i5b*R$TLJza{mVO@pLxv0waOY@r}PJUe_hXowVg>m2IMPiHQ)VtOJ;lw-`Mqu_kn&={MNO( zr{+-Hp7^MKyYD`fJnl5HM4ZodKKk*qze2H@VS2;ZTfdG|?5(s}_k;E-&-fj|-juk0 z56axwJKkFZ*SN~qZy6gDTJ7v$tevHqbzlG7@7DDO>%B21{?-4xv{n7PIFz1d$G}?O z?e%5*IIrD09jmU8cN|IV?YOLK*zts&5X|GOi8dU<=JPUfQbrLBHnr z6*5i;_xqLoadmuH?u`%UNlxil4EH7d`S>edefs(W^#9to$KFkH-p^div5&}Da#-Gj zsqy;5=Gkj~4qN+YjrkTg(w}onE_PqmE<4rYU7CnZ4EOszzx|=Z{eGPeeWvtfnO8|w zbDu{D<6ynLF$15kkbXj+ulS)nbAvdVH#7gjIM~_6afWfQv&+9Q4mON~ofN00_u{2r zl)1@-?t7afaap;truWnhPDlMW*G!z5=Xm^9c|Vx2I$`>5hf_%lzMC`Ws_*LFxo1A? zOxXSDLU{)DWtnT*&$#37Zrq|g>pm*;P<;m&u3K?`m*?T#zsqy-_kTG#e0#a~ z)!AQe#kc9Rx-zC*=srv8bm$tQyJje3(M~g$;Qd?GjM|f9+)w9r@A??-4;}9Jn`pmZ zttfimQ$L*tz4{Wy!Fu^2^E>y0b`-|JV!j=V1J>(|Jm21VO4chsGUuujJrb8Y?0!!> z(Ifky?#1`H632w^GG1@QchMJ`@0r#bn$Ee0O+Qz7_QB3V`CfRiME4PTadVOvL$*%r zV6JWJFE$I~V8b}rFU$Qz?922Gc{gbocNfOpg>iRYOu}#&cNfOpnXwY?Yjn!EAW_UR z$KB~Vzkd92=quhhv|_5~jzb`p5ai8oj=igty)al3&o*_Kr(zzYad^0#^N$&w~mhr1T z(@-H}S&g$oe8M~RIT3A#i0RUH>ECxVaj-x980G=qeYdw_pW}RqB|ReRBYLk6u@73- zTF&_WkgSDiJgCNvXiTWCm34^5zQ>p_21)E_*`BqY=S-*-o9DC7@yn8bx_=kqK;+q( z4$0<(adr~R>czfD-9ijsuf%L3ok+J|zt1xcc1-rO#j$UfIM}h}`p}+P+`nSkGJ`d&Elo*eO{f*F9m!!kAfiZCmpy=LXr^_!mDIjP+$< z%vz9?T$SR^#vYZ@2a*mHSHG zJ*CLRQ!+ld z$Mk+z+}^YSzTIc-ce^&$m#10#IQV%Z=lANzJ16#5$J+XNm-ml0?2=*RXAZ1o3^~tmCbbMKCW4~N`e6DdnIv3IVn)*?lf(;fZ`HYp;E4-{6+eN^r}Z8qOC<=)dh_%8RD{60*^r08$$y=&yTq5Wtl^3H|M9Lc{N zx%ZSK_nzwI-jm+vN|tj?XJ`1bn4Rgg%NERBn>K&u+Oy~3!|Zh}xciy!4$H5`X-Umv{z){PD+DvJTcQ?~}k< z#p{>Lb1Xq|($~e}r2k14*Yq>lt~2qvl&$sB$qsDJUpNFsN>YY`_Tuz^`9Ru z#kzrxmoIQ%rUZWTTv69cux8mS?;b>79J_xZ>tkXIzaJ8RygiBJ-Ip?#?a(=_tXoNv z(!c1AI%8u7I}bVk5^BXJ-+P{GoW`6+ZDCxid%?urdzLa(U#2?d3$iYx*J*DoEb9O= z2h;r-bsjdIpZ2+5zR@Yt`8($G?mam=ahW)kJa}Mnz`S@*0J*v%^gMKAFKCqWUlsz%q1R{`GTHv z9;MTM=Ww;;5q$9P#f#s1ZP#~`+Iv2`?{}2?<>}4({hXxO-ZBTnytVUoEF;WYxBmSy z>aF!G{>7}f=qs?cjQdQQ4z!a_X>X58+Zdi=e-)jJ>AekIL)QE9?t7)BO@CS1){oCT z*!c~)zwwQ4m-K(*!N`mAW$p7@N%K!s$hz?o^L=gHI;hpY-F;YeJmKxbV(($4_q5=n zJ2sc~9-Sk{wb#e2J!-bc+H0EGTL$;g&WPXNlJ#!g5616@?S6**n29FQ9xyi7`!C^o z(Yts5NY>YQ9B5zL-2IHh^`aAF;rw*Meb&yNQ(WZnu(n6sOOUUz_{@XecsMyV*6-+; z^Cz+nuHzjZtLd@&2^wz&jp03Yklq?A={{GoZm(jjM0<|exC*~jWw592lKyz@-spX9UM2kTf*`hZ6y7X4v~ zkC0@h^BB<{kL1fe0r)@ZnyK&ZmU{%9k`CQN(0#YZ9J+QS80$^CW?K7xX@73A(Bb!7 zNZuNMV)tKl?=Q?(u!fgtKDJ-R^8Vb&x25kVmpEMZeS7S>*NHi#*#nLJPjo)bUrkS< zzuR-Q6yG0jocxTGo4z;MKeyTQjnA$2<=&TrzF(`Zthu?L&T_B4eO<;0C`Y}Itot~< zp8Ot(IZoT%E$Mz#>X+Q3apxOow?XxY+b3)7>&+MBKDOBO=T7c?NX9bC#JTiD=?I!f z@0VjxZuxdTiSPa5`?Hc)nxuIjPng? zL>}Au_BF}3hc%zJ$MUXI>bO5%l6!-Ck5AX6-FFb^y}q@P2Yy0Gu zrJMtG(e=;z{i{;{P%heD_2b9ySanXp9 zPO<8j^gUjCe6N&ehFpuT8-G;J@l`p8)B(3m!mpW>BWvw)TqFItU9Y~V&dFycc3ErN zO_KE&+pb;Dw5|@zyys!bE4?o*r<>IF?e$81f0XJ`-=C8E20Ay=`v&fHM%Nl7f4p;e zedXSR);(#f-K1IXhSz=){goW+eo($Q29&Q`wsKxB+nMyYH`?XuXojuMvbV^-N(eqjEo^=VSM zqMiBucx=27%ZKxSFPL5Dxli0LzTq0xX4R*?(vCIH_L}RtotGG|*lPw;)~~hR_34Y& zxJ>(_*!5id59v2Vr}@HlVE^`*kMVPV8NaEIa_rOUXL95#vucvQ= z@rRDL|4sWLy|$JI*U?G!$mDlW|A77jn(ps>hUxU--#N$Pf6q35;;l{oHJyDN@ujcc`$GGR5ByH+Uw>ic zJ>3h>f=_q+Z2yk)+}v~Yz3;j|>xO4;jr`5?@A-=pi2t3=K90Z8e`jm|e2<5|x~yq) z?M*pLS1rw1y6mQ!x`x`ail`(aU-{DY(Te)YXk*jT!f4Z$+GgSS@|)(%hcdksFU`EI zr6F3;TvK;{W_?{Wv%V^`xjLFzRbN|M|2cusiN%^tWwn_NWsOa$ttzXj-O?DvpPkHG zJ%jr9=-qX-4}2)IW>Z6bQ&UZOZ8S65*jV5Aem&#To7a~$m)*Rkxw+nzR@}Vyf#&GF z&5dI8<~!<|qm6ZCwM(m;JntMw)k|aQr7`tVs9kB9Z}6tgk-Z|CQx?r$RaJ3IbXjHD z%IsA+D?JZf&*kfFn;M!Q$SfCMJ=gB4w|>aqKT#KT^D$bP+34nZW>a%n^Oh#fppWLS z%an3jwse_iGtqyO{hf5<70Gcsti=A79QUM+&CTYKF=Q+!;%F_g1H5O%lKkfo@fS~- zrKf+Fi_r?DM>|_y#eg|>ryNE+SLL7Q|W+3hZeKy4t zLmwdyeJ^q7`-wx(MGt){WfAl(#G!8^4t+0i==+I7pY93#ynuc&apz;Kap+U8h|f3ZBgCOEAP)UFap+U#2ivbE4t)!8 z*dHMd{TOlRcgTxA?GN-_#GxM`4*d{u=+6;{em)*#H7AF@fH?G}#G&sa4*dXe=;z~s zTytLN7ZHbk199j#5{JH>IP^Wlq1P9B*&paruwjAuBlHEtp|2(m{Qz<3M~Fk8Di6!r zALuiQLtj7~`cmT1_YjA^k2v(li9`Pyap<$;p-lS&eI9Y>+lfQpLmc|k#G!Ytw$F-p zI3zjM#G!8?4*TuIq3KXK@Xh(kY09Qu5`0K_B% z`eNeHHxP%ul{oZc#GxN24t=UTplW}h&m<0g8*%8ni9_E<9Qpy`&}Zp}2-XMsJmSz7 z5Qn~$IP`<{$$#G&6o9QrQe z&^z+NO#1_U265<%h(ljV9Qr}x(2o*_K6R1pO>BIgNgVnj;;>&y9QtnJ(DxFDzMnYs zgT$d9ArAc*apEL!+sBO=m&{IKSCV(3~X>=+=4!fIP?v~p>HJ){Q=_8 zA0`g{#_NOgr&6;8-n!_;?VCQj`SWN4*ei;=tqb{zxu{t ze>M<@zL+@d%U-2%ALxgOLqAF!`r5^DX8if}Hsa8y|3&Y%h{K;!;?NHehkl4S z^s7G*?9T?`&=(Vj{c7USA0`g{G2+mV5r=-9IP|5z8SH-pap=zxhyD3k@phnpoH+FR zh(kY09QxD5p)dHY`13+vN*wyb#GyY%9QrZh(2o;`e&Yv&{i!7meG75eZzB%Tv0L*GIi z_S=X<|2T2z_YsGFggEqL#G%hv8ti`-ap)_F!+tYy=noKw{xEUq$B9Fqa&x?&(B~3| zem!yM8;C>SN*wxL;?VaKhdv`a-cRVWh(ljQ9QsP)(6he&k=_{Ygw@WdBmYFB@X)y#G!A<4YuD(9Qromu-{D_ z`uQt@?Jpt@eS|pd7ZZoRjX3n(#G#Me66{X_ap?Pq!~Otq=rdOa+s`Hr{bAy;e~dWv zDS5&6Gl)aKo;d6m5r@8;IP|^5p&us>ed?-sKcUYj4t+6k=-Y@x-%T9)5#rE~5r=-! zhvNN&ehG2tONm3@Kpgr(;?R!}hd%3fg8j)O4t)=C*zY3_{UCAZM~FioSsm<80deT7 ziNk&iap*^hLw}k$^eG<>_9ufl^sU5UznwVry~LsKCk}n)t-=0e6Nf&ZIP4b_hkk%K z^h3mDlx&}R{c{RnaB8`cEdZzT@>KH{){ zh&c4)#Gy}F8-HHt^Vh|5=!=O%-%lL+LE_Not`D}qo;dUc#9_abIP`~zLw}Sw^rOU~ zKTRC^;@g7#uO<%tYs6uH?(Ok*px;Ft`aQ&ELL*GLj`a$B*j}V7`^*zD< zZy*kR3vt+QBM$vO;?N%=4*hB3&^v|kenOu`9Qr)s(C;D+{T|}bj}V7`j5ze^_s07P z{bJ(K7Z8WOlsNQl#G&sd4t?t+h0N)`U2vxUrikPZsO4Q z5{JIvcZ2;YB@X=nao8Us4t;iUu>A;e=#LSH{gcF@&-hfZ{Vd|p7ZHd3O5)J>5{JH@ zIP@v^1^bgp9QtD7uwP9a`flRT_Y#MGj5ze;#GzmEd%^y%CJucAaoBGq4*dvm=*Ngd zpSLmCpM2ub_YsHv0pie)5Qlz@IP?X-AM8&lap+r!!+sla=uZ=e-uZO=d7;lB4t*AJ z=-Y`y-$NYwe&Wy%5{Ev!B;HTxBgCOECJucyap;GLLqAF!`f=jWrtlZ{c+;ZpC%5yQx)$g^wq?nZy^r--23D0 zK%Y(=`aQ&S{!F|b=r<6DzJ)mSZN#A;BM$vIap)^+gZ*hH4t*heQyPN(&mazcE^*jjPaOJc;?TDchrW+E^aI49KS><= zbHt&~+8mtTJmSz-5{La};?VaHhrW+E^drQfA0rO^hQ?t3Hxh@wjX3Og6Nml~ap;c{ zhu&!l_9vA%^m)W#Kc6`Cdx%4SfH?GH#GxN24*lZhVE=Q8Ltjc9_8W*p-%T9)UgFTV ze>T{k9^%mV5{LbM;?OVoT(JGs#Gx-G4*M;{q3CyZ&{qh5<#9_aMIP|^5 zq3AP)Tyap=d0 zLqAR&`qDoP_NRe3^lijpzneJp&L0KaPbCh07IE0mBMyBJap?PqLqA9y`Vr#LM_PmZ zFCY$mHF4N)ArAd0ap+GIhd$*CPTU9j4C2tY5{JH>IP|^5q3b%`aQ(q&jI4lpC%4{${)v{ z7y5kS&=(VjzWYz&?Lgm49QtF#p+89+`pmXq`+3BnZy^r*ZN#A;BM$vIap*JuG}xbP z;?Q>!hy7mS(2o*_{xosuv%eJVPlP!1J;Y(Zk2v&;b_UyDLLB-$;;^4j9Qr-Pp+7(z z`a$B*j}V7G@@K*R7Z8X37;)G?NgVneUk>nTw z{UCAZM~Fkex;@yR4aA`@CJy`6#GxM|4*e)`=xaNI{n&sIP}MfL+?Bi>`y9j=$8|^m&g4+s`KseH(Gu?y!qlsNRKi9_%FMf`c8&msZ?Hev#G$Vy4*M;{q3F5r=-9 zIQ03u&z9QyXYVEaA9p+8C-_Ky>XKI5ri`&q=HuihK1Zy^r- z9^&xl0CDI~6Nf(Kf5e{``h4Qh7ZZoRdtbaA=zEDne~dWvCy7I!xj)!`9&zYfh{Jvx zap=d0LqAR&`pl<;{mCW{eK&E~?HP+{Wx*xQ~oa4pDyCiKTaI>SO0yy9q2a@hrWe4^likUA0rO^ zIC1DJ4+Q(uOdR@F;;`RN9QxOYLqGQ);?E0xDskvDi9_E;9QtnJ&@cXG{CT0zB@X>z z;?N%>4t>hEg6(GzhrWe4?6(nz{x#yz&mD+AFZ8Lzq0b}^{SM;LcM*rahdA_o#G%jl zwiEY(K8rZ?`-nq-h&c2c55}4I=a03-q3<=bHt&~dM?trb{cFUb&o~t9e-?4*n~B5z4&um$UWuO$wD zwh@QEmpJtO#GyY<9QxOYL!Ws#*#B(e&~GFT`?bWO?XBf7vWP=pOdR&Bi9??{9Be<6IP|T=VZWU?^rwkK@4Og)Ug&obhkg%n z=tqb{KSmt-^rP|Tg?=${=&OlC-$ESvLE_Ml5{EwHUxWS0A`X2qaoDdW4t+0i==+I7 zf08)#=ZHg}{Zg?15#rEy6Nmj?;?R#1hd$-s;?E0x199kEi9_E_9Qt13(5H^XpBMT} z;?U<2hd!S;^nJvkA0Q6>2yy7gh(llSKZE@*B@TTHaoBGo4*hB3&^zCYKQHtd#G%h3 z4t+au=zEAm-%lL+LE_M7e?Q(&=p)3TFD4FsHF4;Nh(kY09QtwM(5D`Y_Y?Za{}<1p zFCY&64&u;v5r=+|IP@dLq0jh1us>PEq2EXx_G^hl-$NYwe&W!N6Nf%!G~Q3>^IwkV z&=(VjekXD0cM*qvh&c3P#G%i6CD@-l;?Q>!hy7mS&<_!Zev~-$`9BQyr_>=0-%A|&e&W!t|530% zMZ}>$NgVdi5r;l&EZBY?ap=2=!+tMu=+pmqu>Hlvq0c4``w`;MKTaI_eZ-+3AP)Ty zap?2@BiR3Z;?N%@4*SQ6L%;1ru>GCHq3&52;?OVpuVDX|5QjeHC&Bs*;?U<3hd=9yL*GUm`flRT4-kibh&c59uLt`-NF4el zAECB&gGCJy`6#G&sZ4*lcAp&ud+ z{U~wh=l?X=|3$>1&nFK1#l)fCK^*!n;?NHehkl4S^tC?=_J133=(Bzvtj{A3eS|pt zDIgC0A>z;Kap+Tj5$`AT5#rDn5Ql!8IP@uR1lzAB4t)!8*dHMd{TOlRchEc9 zq3F z6Nf%!Ui^8X&m<0gHgV{?i9_E@9Qpy`&<_!ZKJOCm8<$r;ap+5l!+ryC=tqb{KSmsS z=h9$*Qi(&~LLBznh(q5)9Qr=u&}XCs`;$c+`Ur8@FCY$mKXK>>i9N3lsQ59Qu~DV0{~L=*Nh|pK;>QS6&@#znM7nt;Au!ojCNb5r=+m zdi;5zPbCh0CUNN7h(q5^9QwuYia#&(xx}GAOdR@S#Gy}lcd-2o;?TDchy6C<(7#3; z`nlJ{pBMU6;?QRjhkgff=(~tR-$NYwKH|`4WO(1Wzse#G{XXKbe~38r8{ZRbzm_=k z-Na$PmpJq(?+vz}K^*!W#9_aSIP^Wlq3&Z4#9_aHIP|r| zq2ERv`X1uY_YsHw9C7I9U+*cHD&{UCAZM~Fke z=l#L{93T$;2yxgSBMyD!hG6>z#Gx-G4*Lznq3h5n#GyY%9Qu>Qq0e0EedG3*;?Soo z3-%|2IP|T=VZWU?^u5HP?!4A0!Ta%F1AWGKfRJfjI1MBo2K$ap-%ALqA3w`f=jW=dJR- zaeK)p4*fRbu)mWy^aI49A0ZBX#)pFa$s!JYD{zue6uO<%tQR2`aCk}n;nqd2x#G!8`4*TuIp+83) z`uS_)&kKD9ap<#%L%)+a^t*^d-%A|&e&Wz)uJgWef0a!f`UAva|1fdrE7u3xZzc|X z4{_MHM*{SM;L_Y#M`pE&e$KjwX7|I>*>-%T9$dx=9o|Kq{-7ZHcPl{oCT6Ni3?IP{~$ zq2IS5*q=khp&um<`=^ORpMGbs{l&zg?;;NSj}wRfFmdRQ5r;nSu3&%ii9=sW9QK=u zLw}4o^e2f!pK*7vKUu_~FCq^6mBgWMCk}lNap(^dhyECG=u-;3Z`@uoh(o`gIP4b@ zhrX3K^zFo!4PcI7AFD4FsHF4N)ArAcjap*^gL!a`=V1F`*L%)GI>~ACveLHdJdx%5dQylD1 zA93hMiNpSB;?R#1hd$*~@#lp;l{oa7#G%h34t*YR=p)3TFCY$mF>&ati9_E&9Qsz` z(6WfO<~0CCtqOdR^kl3@GI#G&sY4*Pw?p-(Lhwx3BH`klmK ze;0A+dx=BePaOJ1Wx@U|Ar5^WaoEo%4t*bS=m&^Hzo9(XpN+(!e~mco&#j2J1AR7e z=p)3T?;#F-A93gxRmPte`X$7n&m#_fK5^*x5QqK%ap(t$Lq9?s`bgCK#_g+sIP}Me z!~RL)(C?@Uw%*;?OUu@xCEl&@UkleKB$9tBFJ3 zP8|9k;?U3igJ6Hsi9^4dIP7mA4t)!8=-Y@xzmGWdhloRek~s9|h(llc8SfkCe* Qp&qp+8I<`Vr#Lj}eEypuzjb^`VqF^e2hK{yE~%cWn-~|2T2zhls=e7;)$` z8iVa;5r;mXIP4b_hrXRS^gYC(KTI6@W5l6PY4W~t{$~(}em!y6FCq^8Hsa9lBo2LQ zbFe>|#Gx-B4*S)_p&uX){RnaBM~Oo}P8|Bk7VjJ9XEAZ;cM^yFUBsd9Cl37}ap+S% z8|+Ueap)U}!+sla=noKw{xEUqPZNjU`CPo8&=(VjzM44nJBUNyMI8D8;?R!}hkkyG z_l?VU5pn4Ah{Jw9ap>EKL*Gpt`XS=bj}eDH^8xQ0`=3o5`VGWkeIM)3vuZCh{OIMap=zxhkpL&z=F5r;nGkGyYOURlKT@5#=kkj4F*?4-o~)*q@|=v*?1Z!kQA{?cK1 zHu0AX&m(@VxSdK&e=bhIKa_xLH4C!yKN9e7C*X7E1lzef0ly&u&q=_aNx=U(0Ut@g zZ%hvMb9VxMi&UVX{CPG3Kazm|X99lHykPrl67cN__;U&PZ~~qrRWm4EHznYACE#5N z_|pmas|ol@X)rI3HX0Yz+X(j z-+y_q{kjDF?-THpD}wEOA_0Fa0snpiel7w3)A_;Y?M}e|CIMf5Ww4#+67Y=+g7sfZ zz+X+=%uF9_FsPQA`+rL-1 z+R3bsx6>tD?Z_YFJ|hY2EO=kA{U;LeyA}oOzm$M~Rk-?z_oR18zo4Iy1p2WA{EYuD$xpz4SGeX+hSV4P)15&7ym0j&?=5OK{?EV8)GNtX`*Wx8p!)NIaJ7T|IR}lM z1=k1buT8)|oPd8S0pB8A)0-{lw?EG$(0?xhzcbVGAJ3nmdbTYKb6AOe(!I1zwzI{PGDzW0-k(B@Of7X*Yn~&SEXr>eegEk#IMku&m#Q?J{YY3SOUI9xcb>fcD|WF|0ARCCH>96?bRQwuWm4j_>Ax% z|Nkrj{|n)6zLEX!8T(j|%}er5@G%*$sQxtR|3SFhuFZNT>hn!Enfxbxk8ssv{SeDQ zX-hr5Bk8t3eDOc%|IPYOpV9w~@SyyB zM!4F^AUl~k!TL?Y-SnFE8Tj+B!qrYD*@-Okcoy-U!h`%dX!QA{Pg@?W-ymGi+eZ3_ z6X>1AmCoW8r@E|ZbM4kmIa_O1ZLN|2F59}Prmms3tRh;H@BXP~eYB#!GTPX*wWcuI zw57JWWNT$}d0ACe$@;S9vaK~m`j?t}tLr}}ne@3W zbq!?|pILWrb7M{2{cD;kYHGGt&&ePdI}C+eat4bh6`Xr(DYHYkoZmo(+Ti>*$ zG3xqA<)PV9)=-jNQdQQ}?6@`3&2rC8DJS_~_SQ|&TdFF}+15&}^@?Sye>N$-2O6R! zYwwNa_nV$#&xfXx_4Repx4?~{Y>`Z@sr|U0{cn1fl-QNPZGKwZUehY6XmShMtDpB* zOT}zxtl3oZ(foDD$vdRU`PJQ3)Szv-D%3S;wawC4aoD|$6&va+Vn^yZ@3^aI!yO;L z&CiONTPxVoRK2dOw$?pG%;?Mw+_tHq`2ov<)fTjYF1IouQSziOD2Zx+Ff;#SayQQd z^Y*@Vv9wHo8QD-%Ua(m^jXTR48l*#PDp^;*X;Yar@z2D@`Do%h`puSk?ex8rS+ z-giSyQ}fm>TemFpkGl~6qzm6#S)ult3L2voGsxsg4&=dK~9EIZ?t`+iS%u|osW3!W6LoY+598_k-+!jj*;yKw!z zUhbWbwfZe`5j_9Hj1#eHo2a&Um+aeWnyckB8=_U#g?7en>IL3U@A)0&I(T8#l50iI zj7LzD8{yVUww8S{t*yG4#_}$vv6+uuXOL+aH(r$TjBDgGs=b9Z_g7ohmwJbyEe*BN zlKZlY{F?fvUB&GY#k%UU#=MfsXhqGYvf7+j52M|LUd8gfwvL~<-p{w*)m47BHPnl9 zjZt^PR9jQtu-O}7%B)Go!!p9WWmR5I_R6xd+!Z;?S7ujbFUu|~UzVG*JZEK2)ym~7 zSKYFzta8eLG(UrOG=(N17DY~_$z&q8w_iWf& zqxJ8el8Q~0Zb3H1t|@P+KhobzR>*wNon_o!6RnN){4;I_GP;vazM!TdT3b^Wl}TkZ zRxf65#Ph?uM8+=pO=W+DMrl@6I=FMi-Mk7nPM3&sKeA$dgqTYq+?%GNn#*{QPM%`r8uc@u| zn#7cs^7w;YmnzC?%bKGy9;$3=sIPrs>z4cL&6I9ROKYVfmTYa<+Avi^l%)f^g(3@t zmMt$|wmffTdCv06s^wM7%cJEhvsbLDTzSiiyj4}XRjYC{D zj@dbR(d_c7@`{z&UR&5&v&Nbi+MUVTEmc)=*_MA|V^G_XH)Vo~*@6sYrH5^nDVrIX zziFP>SrXU3uJQ`4T$g7qd@>x>d552>DQnA}We=1`OYW*~u9mUAe@Nm+hSepv_h^#Q z7KNz)+p1AHBzZ{oyI$> zUI{-FjW(>Qt@&(pYxN9P+58U6pJPccEmvIWS7Vb1&-nBn8e>6Sw3{h!<<)0v&24pC zHpxOsP1*f-Mw^<-?vED8%)hKLR$Jdn_jEEe>Eify%(V5>Q`&7#+zzDZ5p=wavWQVREOu5Hr9`U!k19ka*3vza>Iw%O_l zk>gWd+1ycBv^KiwJUdQnr3(YxdmpHiMMX16xPa=?UilPC>HLM%-`HgL0`ttwC@=VEIQ>}}w$?X#%OT5g!)@iVs%5ew za?6T}s;a6LRncfgURn97+zMF)S+%mNET=qg<+7E_tD-p-Wh?TQ-xAHvE0^hE-g3E# zxN6n1N_%Z$|6Xg-S>6K+1)&P{sk9%I}RfyEk~eZoR~>aJuwe zP*iwt$@)7Ai#|2ei-*-rypGX$iFBem`_^wSy!*b}?y^tv%P)))uS{Ys_yTgjNpe?8 z^FsT5b2zePdIwAcj@=Ajv#EYdUGv>l(xjVWDbf6ud+b~4%3Ji7`1E!s71$Cx0xv~m6PseU2suVR7Wd5V~x5lG;7!nGHLo;nN&ti zyw)&F8#8ysR6|+sh}Fbd4uQ5%e1}=wyMQE3wlwpEP0C|7cER;$lA&2RC9OejkJi>y zlr_tuikI;ho?pS%X6N3W^>t+?P-j+-#o3vaOU)GskBW^q+^&P~)E710B|%d6#yZmr zsDct)W z#uo7|&?)pkvGNE!r)j{qZ;>@QOwVR{Mn5Aiz)qw1;f{6KS?_-QGO48SQpb5ZiM-%B zq@HV5o&4m>qI<)TuW)YT(!W$}t(9`U(4icg)%(aZIp3R{#OAH{zo|*o^S!xAtgWeP zUSr~YFQAHFKslN-zPZWN%K9dkrFX{JB~yAbU03mjsc0WQjBAVLp5cX+p>NV|hd!k9 z%q~gRuoMY0$U4paTkqd$mIlx>&SHH{D(QKg70GiuZNxKpA;q#{?1trUt?{BPOzdEM zBk-WxMOJN+K7AHlq+bHl6w8}>9^}tOsA+y*H)USCaVYEVTW4}3cG0{r4<=3j&d&?$ z@Y#A|Rm$`8!96f`cJIL^d0fl=yicC%`mamP5BUfCudEdQ6N|4l5`7NL=J|$SEnNQR zY%{+%n1A0zyvWk)GnMUnkbLkwrs{28>i*Sn-Yfid%b#w;)z5K@?=oEdwE1g>!_Oh} zd))jBKfzPwc>U;kCoKEx4d;9-Fr4$P$Z*cLQp4d-m-&tDYvB(#wtZB+=1;59V>?3R z8#tbi<9zEg$8o;xGo15nzIomjevTPks^RbxJj-y-x7CKvljHTPJYMd8HX6?PS#3Dy zXRYC!pDl*N&wlfJoB0=hg72{O`Zd#Y$7!?lHXk%x{rRa?9}XL?{@8rnaLtFGS^D|O z-ieS88_ju_7|!{SXE^7>YQs4n@(o8mw3*)<%)iJ7@FGiZr?=SB+kA)N@P9S(jqF4W z-${1Bj~dSD9W|WOd)#nN?`gx4-o@HD6TvWNsk^ZpA1WH^J2r*AG^J5G+h0$d7I(fj&>Q2d^qNv);VA}=fj}k zoDYW$=X@A39QlxOiFblyh9e)qk6U^>yB{6Ap)hdn*7>IV#8Wb}Gon->|b z>3YNJXNnEiblJSpaHLE3wbD^}IGeXW6m) z!^OsD_=Ei*vJ8hm;4P%jH+Hv?9=zRf^>dEpXP4pXr_B!=&h_oM;V7>~a-4o%GaUZs znscD-!+-E>^LMth-f-B-Fn03|haK>ZhHJW#&3E;u)O^=;*}TPYP1jsYzs-Et^J=}) zDs9W$>)&a+#ZJvSO4wtPIQzfBaQ460aFp*(^LwND7v&3HY3a4AZg9Pj zc53Nu-e9=;Z;z9E4Oc%=C)Ly*!_`ll&%N9`5&RrAx)j6VCph+b((~HmnqHgtS@yNuG5_6X z*|+&|OE0FJOxeFvKVz2O=BF*aTdzF1^O~i%`66Qv`EbD0H=GCgP-=9G&A-TJ@C}A@ zebaqN^#l7@7r=3_-)D4{WFNf6aMip18$Y*MdYkVt9Op$n-)Gs;e0$CO?zimNeAIBR z=cf&4`{RZqU3q4o%yVQPe6jgE+b=Sl+flLM+>UB3z1?0KEWOS58IJrMHTl_ZxR$Tx zC-`AYuldtseh*oCn~xdJ?e3i6$hXC2y#Cng*L}k^AMA09?lY?&%?F$38IJsK zF~3)ve^GD2*IRnG{uqDqExpZ~4Tt~7Oup?RzSGz_U^u61&~Q%IVZ%9HBZebg8R=g7 zj~R}1fgiW@>VLKIXUx*uJl)vibgd@-nz6Ida86gX;he5o!#Q0oh9h15=Jz)9FVY3R z!_uq&L&l#rOKk7w>DB)pldeHa zZ}Zm-=X5PH`{{x&G3!OE4d-;_8_wz4U^u6%*l?t)+x*^W{zbaLD=oeHpJM!}w)8gd zG93P+-#9=V>vYEq=X8x3&gnX7IHzmeaHK0w_NCU(Im3}I@VVyis#pITOuAAGSG~=1 z4d--iB!14=*=9JW>;KU8K48(d>3P>=cRrV-}r7g8oQBhG*v7(})qK--x6?N26M@1bgDk>@}Dk|!zsHn7}qN1WsTU7ir z*Zcg=Z_n@A%pBkG-pBoW&bhAhx}JOP`SU){_a4G?T}SX-*9ly8-7`OBR9)g7(}(|i z{B%w4d;rgNy(g~U{br`4tG~qi7d+QB2hVjaz}0{KzPAWh|HT_g--seck7m+~FT>+~ z*?;#tfQL{2zHV^x{|W@aeywU&F(v^LKdmS>gZZt#zf})oXD1-(Wt=DF5Q? zW8&?UCz7ksLOv>@4>Zh_51rdT@H|M+|{KVba$ zd@*k`M&JB*i5@)S#7D_Sm>fOMEspcP#qr!x?U30J-EcshmW{k#hg|36^Ne?1<X@0+i1tvB(RFBI{m zuadV4mtK56>CcH@PkQlY((C$(R?>^FCcUn2SW9~Gt)zeE``UKWiytNZ1)r;rlV1ER z>6g)Wl3x54uJd?6KOf+Eztz7J@-^qt@_yau6g9r1I8U!|tvB&Sj_159@W}f^ww_nv zk=OY;T{1)lxC!n6N3xcqN^XVJHJxcrOHa9sK& z=2b@N#ar;~e`5?kgopnhw*DW%!@u($JocY2nf@FupO4J@jPfb|0M9<(;o-;k`BJUu zQ}}T{3s>Gf=5vh7D_%GKr$!<5`FX+g&KvOXR; z36K6STK{+9>gNi_&Mf|qn7(82o!?n}e_wcnN1vlVtHgSON1vS!O+PwRs(rCIe{ZID zUgvmThYRq$4wvBh^TQfkebD~4W%2#}XxrjD--Byi-7(*1)VdPCh3C9a@Tkl8v1fSH z<@^<{yqmwK=-Uvkyy6v(OTWZ?no)Z37CifmfA1$AneV}~|9yD&e+ZW!{d+@4aQPAM zCH({Q^Q0HQhi9L|F?{;h7Io!yH3QG3tu2F}?FQ zc;4S8s9XKi{x%N}KfaIE;o;x;Iy~q>kLp7ZX&qb}dacHvQ% z^L@DTzA-;wR9^8;(mycQzh@=A_&vw7&*2z8`Rj}RWdHj2ow9%Zdrk7MfB$HPIPxRD z2$z0~c_Zn?H{sd;!5H3!=XKSC=XG@p&->dQTs}*`q3Fv1uDZnE;o0X5&kH}kk5%E} z$9W5`yr;~U7?oFi#q_?9t(xBXIz0UNKDGf5KhC#I@B7%c>7DPI-uJOR(>p(e=l$&j zu6}BNyR!Jck6l}Q=dTvuKfjgcit`zL_I<1jk3KuEn0|Dq)MP$wdgm+fybf34c^z)S z^Zs@KS09GItnl52Yn|LMKVj555x*W2N5>WC4c%>uBR(7xXX-b8wV%<4M}AMQz~x80 zn)GYTYe_HOf=7RT^F)y={#=FU{^)tC>k!>~iZ6aJCXS9PP9NP-iX$HX4qrUNXTyA+ zkBNT+k9G20roV;9I&nU*_&;j;rxahm8^6Kj|DNA}-{Cqh;)>{LvI6KUn zjEW<^Jtoev#fjIKdepW!&TmqjK7MX3&ZtGDiSI6a-&q{z_weZRm#uFP@aVJiAw16G zS4>|fkNP7&%CG)3(M>X{KjIa5_-R`FX?XZ?J`c}+8u08#dE{pwU5inE#FydW=f}*? z3OxKc--2g9d+_W>dF1B;-2tQgh#$ej&ySm*V|e&+-hpR7eYpJSevliu{M>z^SU

      Nkmuny0Dlt+Hf z&}}lxkN7q`{P_CZfrlUGNAT?D6rTMkkNiBK>oCfXcn=U*O@#d5L)0&lFsKv~Fu~`B~?8kXg9=h_ArIkFU>Fc=&O? z4_98T+XJ}rUNJvpR9^98c;xl<*@j16=RJ7t!zDcXQ6BkuM|aIAKjOFW@Z; zTk!DXd<~xcY{BJ6>vkV5Kd-Yze-7aCBYqAKKfXTu@bKgO&f@=sy9B3cY@=Q`?d~O-u>zaS!n~VyyDyN+@BqI?$2?G z|IFvVc8V|FfrrnZw7SlXd*Avg{w$xLE>e8)E7Qm4z3Qindaq6Id;pJne~bCKhey56 zpWxyDr%XRI?*7a5BER~t_vs0^`Y%2O&*!}Y&*!}c&*yy>uDtqOI|o-@@j5)`U4ZAj zEqKnmV%+<%K8A0N;TQ1mXy?$Tn z23&bhm~S#FuXxw=AHI*UK6|EjesB6w>e31R9!&521s;9#`%hot(KqLBruX|#-%anl z`U78G&*4+|!`9$Yuk!_X^v&197Cc{1y9*Ehet*OsJp4O9G`-({dSrU%mvFt0tbBb@ z&jURBdA9hT_r>Bne}l(*h(4?m{~fOWh?jn_$RG87r|l;BwK&eFIiA+Kkx*IUQ* zeji`g^v+-4>gNLI{S_WQqo3mCFBN@KUH9lF;Hpc!3eW4g4p-k+$h!j1`{z15@1Gm+ zynk-P<@22R4x@aE@0tF?>*AxL&VAE6@4@B2j{ia8ZTJwL>nbf4d2(H4c&=*-uDX_) zR~S{7_>AepzwYm=n%?;mJlD08_<*|F@Lbm!JlEBM=eo|}s_T_`pHX#*Uz$Gr>;Aqg z(>s5G=ejCCQuJTEGFi;)@LX2|p6hDDb6v}D)pg8#g;8~hubDpl>;ArV(>p(c%fHrP zKk*gn8o+a1kMLaA6Fk@T3Rhk8zp3ck5U#q!-%TI>b$?%p=Y`(+96Z;xlDPi=COhz4 z*FHSgbpX$G9m7@E9rHG$>JmRSefZb?eP^b3ehbfa4HF-5zAC@D=xeU43eR=b;JL1O zxa!(wUT0KY;)|va|GK}gVS49V@LX3r@ya(8_4MJnt}A%1>l&Wxx`V5(sYVfh09Re& z52g?Q_n#^BkEVA%NxWRw5?p!rf3%3R3|C(9K0NC6`;P|3{r;n&@$d1^QRIpK_9`(AN2pJsldaJ|2{Ac4?oU#;Nj;}qlmk_kL<$3 zkMmB_FR*^PNiTkp^cTdxOnUL#q<=$ym-OO~Nx#7B^eO4Zhe^MS{w?XnD_<%4tp2>A zpN6YH;H@a%JK4Bvrg|GV()e;+PCugnh^e^(!$f&x+H{jXl0X+Qp^;C!O z@Z7C!e!;fE2bqfza&IhLV>#6Qd@BGp9em&Kb z>7BpAqyK)Le2Kc%PhDp<3lIN(J=GjM{5xNTM|}VNa1$PVj{fL6`7L<#+4-L7M~6y1 z=KH31ehJU(@Cu&S;Q*d}KEc%o?QcVi@9#%%7TG;AdwxbnU--(yr>@zbOqFh5Ir@jH0-`7(x=TSXtT{|R{ZKLwZnedZNL`4_Jz z{RZ=eq!(X@Xa9R+_!&H}s}4M`t7~}P-)`Wl>y7y>qv{eL!n4oHPkyzZzK>1A!;kX@ zTzT8fn~cgUzGQme$Cgd+d=(!3@qKI!9)6r}nBMoXP18HyHofm-JEnKO56}DCFuLcwUDa@Vvk6 zz|{xsZwD6N_pw8Z@4OAyx_V}Q!YKdZPw<@g9iI1x(oYrriMo7$n}93tKJ!UN zhw$jL?_)>s=(F=v(~l07ZkeB%-uVMOufs=pUWY??-rpvFYjOV7ho^5S<}+}ulV#>r zMy(U^r7>}ITygf%t)w{Odt>69z!j&_D14r#IO5%;e_-BAdhr{0^vAE0zlZ1k=y~!p z@uw7i9#eerGRJcq9ao$>x=BX$S-c7lpSlJ-GS82R--5?F@$2E2;IU4euULG)PJScB zzh<56!R7y)`97oki}%LFxwbg*x=?L57RUK>inD^B7mG70tu(tF-5LG=Oe~J`H+b~t z%M*n*{(Of=f1Fo{7ybW=>1%MEU-?mf^=AX!9HaUpUWbPtzpiot9)6rJ!?T}tc=n?_ z@^gl6lTm)ex8dQ(udCdFhacxh@a*Rlp8Y6~{M@7KFv^d34<3Gg-1>hG4?oVY;n~js zE+5q3 z9(kSbz;hoC;MtGz$j>#pBS!fVZ^Ofnug?>B_;G#?&wj4p*^lzbPwBT8eZN63KjL@r z@Z;-q01rRTU*Or#J3RYQ9{E|oPnl7E#3$k5$Jgf+Jp4GX!Ly$_Tz<4}TX6Y#=69AQ zxcrFk!o!cR&pmkfao&Y1uhwl3{&8OB=ZqicWq!dJd3}9e!XvNq0X+BN37-8t!{w*; z)5SV@fy) zqdf9+f^LIRe#E!n;m6nKHaz?|KY(XHZMghs-FD&fv&;9}9$bFJ@8RLc*XIK~{5XHN z_`lWOFG?%Lx`_DBEAa5|pXaCH^0~?9gBgo6dP+&WX8QQtGXM2OzFE^dUw}tlem(Xg zJnC}Zf`?DPPWuQhpL%^B!_`mm6L{opS$|I9k=J<-p3mluDtr(xd2yQ@diBSZNhWj6?o3O zZrs=B))>A!hTp)$kN-|}3lBfeAK|L^nE4Z<>J@)Y`njJe&fhTU#TPgp_4@VaJ8775Dew4b@#ovqRoxj7QZ{KLIm(rhF$;EN;otcQTz;zGSk!q6mml$4xc2!C z^e^!2=MA3yyu-7fiPa*%{A?0`5-vaDQ}BpivGY}dM||fq@aU&sf4&G;UDxE@f#naJ?>Gn0FcVx)47%eXO4@{`;nPehZI2eAfE*4F9+fyuOr2 zerA8RI8Uz@e-x@D{tgd)dBj_Vyj0?O;oo@$9)A4#^BO$+nS;yE2J?AF^+$Xe9`QeC z_3p#tJol*KeKMHP49dN zS6#aP{N3V&|HYp#>Mb#{PijDCt&;HvAH=TDnH`YApS&+EAfSKsvSS8c%a{<#g$`{xck z@1Of{`MhF&z^ML*AxL{$tZSzl6(wllA-zIM(>s5M=ela-5wA@Zd7JQD*D^fUwF1v|t;1E<8S@QB)g``V`tYyo&$mtQ{1h(# zT8Gz(>)%m(g6Fzk;km9MJl9qF(~3T+t_Jfmqv{f$G=2Ej_2*NjcfJVEb!{Zx;d~vy zb6v;qTvr>O>pFw0u1Dq_M%5+WGky5i_2=iNcm4p+b(PnPev0egldHjVUGwlJncvefZb)=gX#dz6Y0ot;0^@`giHB;km9mc&=*z&viY*Raf;FOCKIj zaMdOLV*2o}>(5_J?|g=Mxvn+1@*e-`qhO=QI$U|hui;UzUw{5&+^;_`6EF0B{dor- z{qgI}yYT3b^H;ch4ww%axbTkJo>q!%x56n;Oh7yShM z<9gw>q@SSP*`ya=NctP%EGE7923+S+zq{_h^LgBbf6aM>YhB$lKV;Op5+A^G-WPb} z_3M;g;gQ$*8(ev}e|OQ}cewJ3&v0D&73Nh&>BX1f+2__6egMz@58>JWFkMk?I@>YIt(a&qR@`~S@KK2=1e|~3r=lAgNXkQ*iZD*Do!=!@pmrvK_rAy|=rgwe|&+G6Gp4Z_MJo?~1hj8^l`&)UlSQioB-;XBX5#Mt)v&F6zAmuuDZm_9M3*$ z@bKgN*epE!IA4Y7B2^ z^EzCI=XJOP&->c}Tz$~~*0%V*kDXY2=N-7#)f@9Jqt=!95T5f+ZWVotx_lp-f=6A> zr{T(b%zTDXdBqo#eusG@>BYC<+2_$1-hpTTU3m6?4wwJxA1LbY!{uLmko0Br_en2a z;&}EyGln zuDs$eruTj9)%4Ea;Ni#jv3Gd*ab6~W=zSlXfQR1sl<9pRtC-$-6`uFEdARzi{cY9a z`#!d2@tq%9eBa+r;L&H_$4=qVXXicBj}Da{n4g>8`3pR+!&i7-hvh%3IL~>1n}Mqj z1HS*x!L?4-na?w7ortfEiKF9+bBt~y#SuRm6Q>JToaJ9E>glC8;ulH(!u&Gn#qZ(K zAHV+m8J_#2=gH6XcH!qW#TTz|Jjc;-#c86OVN{>R=i%W~*JwxP#+dl4@K`6`HBoqs zKiA-~PMmL8e82vDC&llxPLAO6f5rTmQU1j*$HW;}oOoTRwtI`?{4K@N^^ortXH;5g z;m?k0M-N8%5uboZfBd?~NqF?fc?}-@|BCgq4%hjWALUVhcF-*{%8z&x9)6k@zXcCJ z&e!4D&o(^!Q6Bj@N4Lu;KjQoF@Z;A#9>Bwo^HX^C(}QO}$|FC|==zNEBYp`FKYrcg z6+HYnAHcJpC%F9RbKM(Uem41?>m4pX;O^Ey2HX~N}4 z>vk0`KX3dlvj&$R@k4m{@%4EG4?oT?;L59YdkOzIFY_zLkMlCWVT`=KK5yZX*ZC7X z_hAUne%|2nQ{O4p$va$r#LFBHKfXRE;Ni!46`uXf!?Pddk)LhFWt1QB20Z-u`fTcX ziLb%4pDlRyqdfA{MYqE!KjM4v@Z;-qAD-838=n1i;PRt&djXf9L%#Q3!sSQ&86JLo zeZIi+x}E&&%znQJ3>oc=-G&tLqf5e(Lpk23J4DyYR@{vN%0>)_R`8-bj`9=Tod8xvcSMQ@Wxblk6!E?Ry@LX>Lp6hMGl~(`$jq&OGM4^tfR8`FPyeSNy{acg?#Z>A5Q7u54^dgqh7MZD;nUuQlAkG?sd zHoaeGK4W_44S4i9d{)1y$k&8N-<+?)^XuXWp0D>ffro#;&ioV}{+)MC@Bg3kp6Q)G zz_riU@c$0aekT6HulCdPPQtUFX}J0`OZ*wQ`XgSo_}^~(Tg~D-pMys~{rdAIxav9} z?*Tm5bqvpaZo_k3XQuzeb>^mb-iPb;_|E)-QLiuYE7QmN*~I^~>775oqYt08zP-WK zhmWuCwfLi_lotM?;=Gm^7Cc$;m5B(ufwySMT;MPc9=I9M+cQF+BHe{oTG5;Og5G>p}69_X6FX#Ti*GiFe@P|MRv^`YHZ3@%22#pV%v$UZ(iscks}M|1NO` zrgvT@p6b&2oP;ay67wlW^;3KSp4USQp5rgW75|v|3ZvqS@4<8Y9z3tNb9i2F*QWRD z%x_HZeDW_T`mKIWd~-3Mf``xOr+Cfuao*pEJ8OF94R~J9D{%F#M&2EG-aq%@dH+0s z=l$~-uKwRKZ!@a@;-{wn@VfY@=);-mo!`Rczl{H3;v4YFUs}Y=byeZHt{OboH4j%^ z+sx~Xs!M#)^xIu0A~1bp_9LUBh!-cW~7;^_La>8o*VT_=D-g zzpg)jG`;gl;^n&Pi9b=-3Ov`f4$pOMz;j*OaMg9re1}nWiSL;{{OkJjebYPd!E;@M z#A}tJpF?=AtF&Jn&vljIxvnX=>RM)AVN_k>Go}y!y8gUsdgn{eghv&K)@LX3Dp6gnM ztFB|_D~zg3e9iRXU)P_no8I{mT>iBm_7i`it^qvP^$5>(J;8HbuW;2h{|7&`u{4CM zF7bEMhkspvUgCM7cRmNtb#1|w_w27I@@`w4QK*vm03P-F_2)z5e*Jlcc%k>}&-?J` zk6&kg0gwJTFC7%VpJ(w`g)5Hu20Zt36Q29I zlj3*(>LTB6iZA{E&;5Kiu4^13(hTwPdb@<@eqO9p z;(Iy85pTnDKTqJfpPdx{jd_<*KE*X^oy`9=MV;?SFW%sI`1u_Zg*N_d!o!dAHaz;^ zzvJ~Sj=#PxEROSm#rYY_`vTWKR{IwGkBMLUYm4K#Z)@=A!>2})7N3{a;n6qeM@c_H z-s7YfKTG;U;&+l>yr1+p=r599{3huqct5&Ldhv&(Z=ruodhz$9zd>L6>xzD=KjKqx z_45#YCF#W%;X04{dy^%2UjNJRuQ`u!t><&*>x^3e;yrlIdkv4gex2bBJn}lfgDY?A zsOZZ8uDs&Iq@P3omh|GY9M3+RWB3|8`(KA=|C@06zh}P1DF5O|Nq@=wIO)YN;MxCR z41a@%f4@)U9UlIj&;0d8zhj^IlI;&wxawMFUSm{U;!E)Ca|<4R{5r#Jc=&OC0$1J_ z=BJFxE8a1E>@&O6&^5jDb9ngi>kRww@ZZjhDr~ZcGe1(6%&aeUx|IQom{64Y_k3L6#R>{2rk3Ku!F#YIIsm*-T^v*l*ybinY zybdqn+2<`>ebD~)VDbI^?$P2qe}QXVHU7q;kFRj8EAd5+=e#TMsLS`URe03pd>yX5 z_slmKl~?>A=`WcdCcXFtJo_As;V7x>p#5#j z;`=_fZSkG&!L_dLnC~-cU5VeqbKWO-)aCowGd${Y{t8##&A+AS+Yqk2;uVfdzr=i+ zQF`$fJp0@j!}s9X|2{nXKZMKA8}lPZ`4R6W{R8v!q!+)3XaB=7e7arqFR!Z^cwSeF z@Vvh@;Hqnzd6Q9fiEqKP&m(yF@qO$V9)6r(z?FCMZ!PM%ge$N3wds8yyD`1^Kh7Ua@B7%J>775D-uJN=(>s5I=lyMhy46qZZ}af*@B3IC9{!!L!}Gqe4Uazi zKDGmoK07}!{pe7s&-~Ez&adHl9p1q6I(&d7jN4%T#Pt1EsFMbD){`mbPkMLZVo+m$3e|zEQ zImH*BNk_;mRxCgy-|yg6BT(!qsQJzK-C^yKq?4dkj}z@w22KFz+P2_!T_A zzV6`JkDez#rN6WAbD!dizgT?zh7r$r9}{2CQ~U+uml;2uS0=eh>)TvzF| zh$lZ?)^i!Iy2R(;(dVDF*TpV+y_My(a%&0ix^YH9P$K_`W-9m~ZzBwk&9z6Q|^VXkz#Y?o@md6|O!U9v1ywgR7t7he@yVdX)6yU3jeXHS5m>Tz-1IPhF*&YeHO!;imT4B^?2@~A)czo+QWJ9_yMFLONnG_BqVc=&N% zg=atW@a#u<^uSw{I0pNHr5Q-_BiUsp@;>}L(0{V31Jepo*n=s)%Y--74$ zvklMd=MbL#oWQdmeGZkMdvs@v@+01b=k?Qr=k;?9&wd8*>_>Uzr}FofK0F@K%a8aI zJg=W;cwRpx;$=Tm@a#u<ESZTxrO@-N;W6X$9SzfJMqncp!g zzWChV_hEUJqCa1>y5`~0ALkpU_wU`Crgwe}&wV%@!@Fa653au5^SSvPuDZmpEKbSl zx;5_S6dAjP?0ewgBj z-43kb?Jh7-c9d(@*gPTMc@2>%qe*E&H1$H{eH|D(>rg#qi^AJ z_E#18n(*kG^Hq5C&DX;bJiZ_OvCkAS;?EO!`1kuFPvPO;dDrxQKW5ML&L7|(jpBsQ zIsCuFv!987u<(}sOv1CDX}J0`Py89U`XgSo_8EY|cTDfR57+DKo%sc$USHx@rjPTojsI)YJAZ&jA3ke--r(wk?t@bv z`C0gfit}1xlppa)c<9R`X$$$3>7Cc$;pY?gX~MIgMTeKk*M2&$&$T#qZ#u5C7-H8JOOA znRv>p^*ISw-X-Q!jOwTO0z9vW7CgsahAaLt^A$$L7vF>D_&s=DZ|Cs5-mXpW_ha6e z-udJ|QuJH>och*cJ_Qe-(NFQ3>Epb=5qH+~&KvN&o>$=N+Z=g!;CcVthv)tC0G{{H zW4QW%$Gpv`{)?ZQ{=@6yqoNOIrgwe|m;Xup4-?;lSN_o=UaqSO&vn({xvqJ*>e^;r zXH;F{i>43%AK#~Gdgoj4Tvt2s9(DEMxvndCuIn0}>$-!huBl$puK`?ji9eV={C|9( zrsx=R08aXi;mhUdDb;Hqnxd4*ARiO-lm{C|9(rs~t)ccA1G>w1aK273<{(C0yI2!u!=#Srz zc>$09I4}K^#dGEJ30)bk{)kuL`Te>MkG%dnzydt-I&Z?2clVzve6--oE8c_W{@fb> z#C@8^y+23f$^AKo=lqDxu5UGbuD2;njv0ZZty~97j?cTy?BG;;m7aCY{J8j^EN#C;J@2+;M#xY zK3nANTYP`rU08hQm4EiD=Oy;HWj^Oj!=qm3&7_|qZ!77=SCjtuTZ?>aNiV*Y^mpjD zlU{s3>8E%fIY@f(cG54SKS_G=e$wBezesxVo1{NRf1C8;L%7bPuFo%D6n)C;b^@N) zZ3V7%xXFB)QR`NG1D^Bl!6WYv+55{rJn}j}ge!09pDTPH!If9Mm-J7}&y!yK5uSa% zkKq;aXaCdi?7s?^|6}GgM)?@a!?XXRG5j1J{{6bIK0N$8AHZXO_>!Hk zd${VF_~(oB@&H#|;$@C!pEY>+@$2ws;o-;mGF*8(%vTtdSA5O%vCr&M!@B96Z^FZm zUx&X14?oU#Oz+p>@0#BEzUe2dp9iLQehiQP`~8(?aP?E~sW%q?M=buW#drQ@@qPcF z_!o-v8GVla=vu%@c=Xx%jOj;*N=wYErgy#u&+BjC-CUA?_;O%=(F>l z=|_i356sU^@B9Ux*WoKXufy`cT%6~;zg6JsgZ8%?JmUL4HVcpV&g*ckt3&A+wXVbu z;5qLpJo5TJcBXiVcj3xgy(;SL!IfA1HtEag?~-1;#PRHNW(=>xv;PHn^v&yPz~%p( zd6QB8#W#|^&3rTI#gF0He{T%GgXeWMfai5Jgy;S34X(Oo|CQ2*$2(kgiPt!ueKz6Y z$M>-oJp4G{hAZzi^BqRz72h-cr$!F-`EB3y&JW??$M>-#c=&PNHofm-C#H9PW_sVp zI;MAi4$u4B6#z;aK6`NWVffjio=dpa$vg8aMy(U^w=r>aTyYluwIY6rQE|lU@a$(9 zt~l%be!7z4h_5I8Df5k_7e9nYfBgQ+6L|Kc=gH3vy0a8t{CZ3r9ao$oy4w^-{1F~L zbuU_U^mR=9iR+@@u}=Ix%1L;v6Xz9p#P|CvYjE{pk9E?5%l`zw*Db+ye#KXlzW#3( z{??LSd>fw6%RXFw+W2Xw_|v>^ouv5U*YN0%U$=P!kN!BX{Og6^oOc$kJ{WDc%A zh_AwP-Zgm6dkD{YPvOe@#_vsMaOD-hh3C9?@SOJ@uDk>KJo9f9eNf(I=2b@J6<>nq zINKKIQ=^bt(>oT&`Gx66r>0c>cMBhvrgwe~k9u47ef$O<^*X0jWgxBG{S zysvQ8EB+48eJ-)ybD!to>W^MuO}O$d@Vj#huDs%_Nq@wAE$PK~;raD-2+w}>Jo&jm zcbwvjcPzf%1EX{OG4b_0#eYS2nc|Dzz@yLpyV)%~`t1Ax9`(AP7kI8$dE{sIra13I z^yPxN!9pZ>Rs=jQk`aMjylUS(9h;>|H}HdCBa=36O__{o?!Ixas0bZ04!_}!Q| zPw?p5&s!g!;n6qelbq+!`{%|fc<7xkn%?{0Fun6Fcs?(u7Uvht=b6QEegn_v@d2*B z9kTyC!gU_SC;y#dJxH&0Fa?)hd=4J#*6){Ggv(E#_nk(HzsJ1EsQBVb@aX@Stq;ra z=)dz#c=+-Ce;1zpD39vBK)25*KjMe*@ZK$p^A0@w>BF-h<&mEux=Tj+5x<6q zAHT2d1|EK#Kf<%0S9tcLJo0nI=ZQD;@*`flE!I!?@%tjn@bKe&2A=)Q!Ly%vxcqD} zuQSSz_#!;7p9VaypH+DFvkA|Blt+HL=(ZWBa*Uuh2ub(zN`{}^5ALWssCv-hV z`4R8K^ZL1f=k;?3&wd`^*^lzb&ot}j8NK|7zryqS8N&1WndI|h_A>*|e)M@$e%8>{ z80ANN4xZP~JUp+T7Cie|g=as?BR?nT)*0nTd=sA6&lWtdp96UI(}rh1$|FAmbf=8+ zBi@1M_0xst^>YQ!e(vDekMhXR0pIKH(aVqcBRsF4CwN{z@9^xW^zVK3eQ@30cgpa{ z>wFp>ar}4kn#CC%D$U}5*5Wu{7!#*ChA*f1`^;Au)gSS5c=X5bi|oUrKhB>`@86?e zOz*t%?-zZ`eW;G%b7S}-T`WdgmQ@oG-t>vI~#%<-8A%{`-BG*T#K)4&dsi-e2$G z>ZkZ4JpB0g?k9NoaXy6S*Vh|ddG)#Q9j?6M<-6iM=e!f}oOc?Y^VW=eALhsK#WDO4 z9)A4qiH_jm$N3pt^)55-Fsfeh^Q3=a-cNe*H+aJ6XspDXGg!lPd2 z6aQgxJo@JAVG$nR%ly8}7Cij_@y`^`jX#&*;oteH>HYr7HPbskf@|Na{)qv+dH{rR@ z%ch?;pDU(!z5&75_JqYs}oKV7)`p!?dCM}D5som>1- zsFL_4JoM!eZxwAUU76nb03Lq)zRM?g_VZ%#BX4a`BzU#>&ZjsY@jqwvHsEm{{r<`( zJkF!@E?j-sW!_`dc@e*cM_#}0@+HNY{g3gV;)uVQKF*^a@1}QNBcA#;WIZUJ{BNS0 zW0ZgK6?pjny!CA(#UBt~&r|#hbXzID_&z-J;s1g-2c~!4hpR5F&r6Fl3RQY%er0i- zKg08Sc!THorT?Vpxaw*!FEgrd;&bpEe+{13+d4e2w;j{_{gu0>cYX<1Kc~N~@O=dj zpV3e8f$5_^UFP?ucm4{`>$&`&7J1aSI(cjGynoKa^Zr?f=l!z*SO52!HyPD`@g>uL zcwKx{_**u;^F6rySMc9Sd?uImx5x~lhu&nLL*5`Qs$_}6`xucmiC zL%dv9Gx0ukZNPI~+wff14m{Vj4_94R%nuk%Pl*(>q^-=eiCOug?_qbl|zJb9k<+56^X7 z!Bto3KQH26!&R5~t?9$R?z_A*z4Lc?uB%2K@g3@F!gF2A@LbmlJlC}jS6ye!HyBly z_?GFzzwW!-HofyxxcqD1xK6xJT~F{_*DE~NHH7E7O8-T1epFY3d6`jliBFn7{Oi8U zDbqV&gy*_85+7360X)}r49|77;km9exaxXj-eFW-;yu%cf8BR^ZhGer@Lbo-!zcT> z{9hLHDqMNR58zR+-*?$D?)P0@8~6JPH^>wH@%t+`;n5%G=Wz9>&AiVjpW@f>{C@oe zkG%dnz%xAZIv>K7clN(7`tt@?Uh%d6syLqevuE7zyF4}S{aGYW?oR`r`*R4F&n@Oh zjPfad3eWwyO>yq2^De~^uRIp@=6+7Yb3bcv`CR=Y#q($3@+p1<&;9Hf*ENO_>DIXS zbBjE=pWE=<&kMMGo-)5=luz+nc<$$WiZg+~(jN`CqwnHhS1OJED~UJZxt}d~?&k_z zKD*3U85Lh#qx6sHdPy(-3J*Vif8`J!ew;V|n-67`q7VMN%?e!mPyO?SZUdg{-Gt|Q zui@eUQ=<^8-&VxAfk(a0heBTpa{vQ2i(u?mV{R#TLq!;hNbslxyejlFC;|2U{&LdpwaQeUHJi@hZ z#VZ`odFSAf_lN9z`aC@HI$wY*?>X~DM&%V>OZqnR^`sX+hG(C>G5i{y{olZ||2w$+ zH~zb#Zv(jeiw~2&hW;(-#j708{ujsab$Iyq>%lhQ;otcIJobk#+4(wztF8;?M~tdV zybsSl2k`LY*XQ5E!;kaQfB)6j`{+<^B(_xmoF;p(T}Q+F-CUr)7X@tt=qzVH7R@HoF8_Gi3a z!lTd5Z%scsRC;HAXL{$8&&7Gn>u?I5*I^Bw->2$u^+Eev)8hN*!^J?lNCx z)VdPyz;oV9c+}-p2n>^yL<=yy7oOUqkHXP=8>_zFDxUxjD? z>u~wMW4^&C|KbNp-)DZ9^y266?EiKQe}(6DHH7DNRrw!_e&_vd8m_up%x4%?mv|GN zeQv8tyO?_-nj@b7#9p7)IwJo@bW*b+SY?0n7iqeG=5=If?+ zehSa)@C=^UVIQ7-Uc=P~?Qa8%@B7%j#drP$*ScDGDf;*f*SZp~b3Er=f=6Axk1fNa zF6XOo<-KFR#;CmFdr9ACzMu5s=kV3XCm%hn- zno)Z320Z&;8^ibEd0idA^SbK5^ZwR_%jZ4w9;1AU58&D75FUPfAA5s`ALrHorRbmX z?l7-0DzEsQ>3tuYH@))(c=+*sY!M!QoHtGH`&i5L&X-N^``C)dN zTzx2idy#hwu65F3zRjq0B7Qa|j*ctNBf4&iBmOWZ&Kq2DrXC8P?#A|U}`X=*9 zM)?zRLzY_ealD{B3lt6kmL6OdK6ooKti=DUSFdJbdaNwW#!DO#E|rtdsAW zD0&iq_TjNkoL^dezwh!k#XsP8p;x&4U+}x<5UxIpm;SfHgY*yoM=>wMr5B%u=kqcP z*LmsSXEDXU;r+Fd;)`#=qd$KA=Qce0s0CME@f~>1y9>{GJ8GLC!!dEDIsXwS_Cu}d8F<8T zzHa)_q0-F%RrGPg^v<{7QE$uE|2918b-oXe_4XChx8bUHmES{8;Hp==1J8Z#!gHVR z;p($qUoUXwef}dwy{~ZP6)z2oleml>rOufp@|YaX8c=y{62g>E6m7vCHcN5>VX zi*7r`5#NPJKY!8A%N{)X>AVe(x_+1GJ8;#d>#>zbejd^F7}YoN3wZeP-|H^n;m7$c zJpB0mo)7TsX9$;{n?F&U*EhKQh?oA@SI>LAUUZ*k86JA))9~zP7M}ey;8E{}^|J|& zdYvD@ziq^Sx9QI<&hIhaw>Zu#f4rzG`wCFX^JC$J0{K}Jo^0e)}JSM^x63Y>mv02xpWd9dglwK|5=N_XnNU_=^qL&}>cX;^m`!`Gf zXR)rrkMn7G_A?95e&*ovv&np(QGUc1;CcNl!t?rBfoDG(@a#u<Ca8?{MPh-f9Rd*oxj0z-=^M+K8H{LeV_slpUxNH zIZks7Umn9(;5uJ(d~RNatDoYV7RT@R+)8n}yl-x&IO4mekM9w>-*eCO&X3^HAHT2j z7#{s`ehQEN`2C(eI@BG;GqtvBke6&sPyaSKE`F)*T zc=XNrx#|7B&c5lL-@~Kc4?e%WsQ&>T^*VorN8fxs)c(KXdGUSC@AsUChkw71vJMab z&Ksup`#PJZcfJGH`(qRTZFu%`X7N35$KpFbhpRs=;`ia|kNAbf_xn08Exz+>c=Xfn z_k4n@t`2!;K3s)5+T&B7XW_ZebMV~f1=IU|or|V-z696nqRo7nQLhW}Rny1%ImG{( z>7DPuqYt08_tRsz`k?#ilt+H<(4AQPQK*u52Oj$Jh_{O6TI!nK`6WF3{E5#X9u2qf z>}O!{Bk$zb#h;_={Vl%pH;ex{t9O>?#d-AmI_KbV9-SY<)rWQFZAP6J@g6+t^7}mp zDbCcV!tKa^iX;AL`Z$kzJel74B=OX@@~7Ad#RhQOh$KpgMpO|+oj`KTs)aC2p5uW2e!&TSprz2Xa z^pfI>S2&*IH{p4`wcvTZt(o5M>s&Xz^A247oaMZC;o3jNFHIj69W%c&z4Lo`Ue7OZ z^{q+X$#T)Bynjx^^Zq#l&->>rT>alweFB(>pH{FV{7f_%(Gc!E;@!@Lbm# zJlC}eS6yA^Ta2npe8=?RU-x_Nn%;Q_9z$@QuiM1S)zQJx;{~4UdV}Y>-r>2fi9e}0 zKdP(6e3DUhiC0V?K6St6wCSBU;gR0!+Dg1xjjBf1$H8-5C-7X?DLmKJg{!V-<~>H$ zCEhoE_|*NL7p8aq1kZI%ex~TB_(3(Q8vXn2@LbmdJlC}d&vmuns_T&X5~J!8Uon07 z*ZrQWrgwe-mw&CpUgFo)sA}}OhUdEO;km8{c&_UiuDWI?iax%;RhRhC^x+}sk=K6*xPwPt=MQk@othj8Mvq6h@`^Wqd2u}VXT$hUTi*_hdw*)=$^Dsy=l*QN z<#UDk4x@aEAHZ{e`YFy8bzY=6;_vX>&(b#(eaQWsgv)2+8w=eOTt3Bj;JKe|+|M((d>%0GFv_QRAD;X9l;XV7ujdp;eC}5i{mA{Chv$AS!sYXj zd4o|t#WhNQh3+Wn#qZ$Z$M5SLz{8L8>Qv!B`ryCYG~v0f7ChIr0+-KY=BtdVOI)M$ zH|W|)FMbaXKYqQz13dgVul~wkx~@80`)czGu?k0j2Mzz4df~a=4m|wFzP-uk(k?ve zbv{V?S@PZ|z4&v|cZvU!^y2SH|BSx$O(P?thx~|7!R3Fp`axEzB)xbo={M2OCcStw z>7UWJl3si@>AUFHl3x4(uJd@n9^HoL^LPUPn)3+PI(%c^Wz@PAAHs9q$p|odL|(t& zVG163olnD+_n7$%qwybpQHU8F8|_# zq%WhtPkQkZ$Fu*LF}wi}|9+iY6CVDZZ@^>U`;xuCZ^BjA3G*#R)g|7BXPyc>mc!Ddh_>1XdpV57+ucmkY1`j`z9VXzRcRpqM z35#Dbz4IzO`tSF#&coGDeO6et_aG9V$IA zKR3Pe7kFNWukgGM%fBj~J^F2LG`PtKS+~N~IoLdBty&zKs4Z>BUPN&pv0y@H+ellg|Zs^v&yP zz~%p(d6QB8#W#|^&3rTI#gF0He{T%Gga6>jr|)9}cwSdSc;4UM;HqnOx;QWIaMdMV z<9PPjg#X~^>AsJ(;0uXw!)5!F7ZA*`y9Z-kMD2y@bKfj zG*k3Xc~_X18I@Oj()7NMO_|>LG(7zH{x$;-KhA5W_kC>E^v>r^@B3KY^v)ab=)Zq{ zTZXHj+TV69zVBmu7TcExvo_Uv1dBq1~;=Ea$*!Q${ z-z|>w2J1z6Prg|6r3qJF@g;cF+w$`Zk9wW2!(+XD#q>LHA3QC(e0!-;`{K>$9dF! zln17F-iAkB{k9P+?!w|k*5uj{V0$8%-4$kzoC~O@e;?wPt#s^Wq9~;J_FBw=HS_n^2pB?x;mr$h%ds!kKa$% zfQKLFtMKe+6Q2DjkNi~F@3zs)kN7S;{P_KJd+_k%ybaHOI`HhL3zwfK<~>IF5%0tE z`niDT^>YW$ejef3kMhV*^^2ndM~`Rp@+1BV&+BIh&+BKBc-hYkJo`}|`B_6(W0W89 zIe1<_^YFZWTJY>=75>qv{MaY;dRHF#IpcG~I(qpL--PG&vjxxV=K!AlwBa8mKYG8F zp8>j4M)?u%!1Ma)!t?sMf@eQ>@Q;!o<&mGMUsJ4~d-U=n{s_m)znI>?7rdI@`Sh<1 z7p0Q=e2s1fu0D&;!J}_~!2B$vILmyFSxj-nTVvv^825gzkKx;J`9I`+Y6mX=;(Ml# z{Yv+>?VH~DF+BS3_pi0#(SPS>@aT`<*LH5)>$-x=zuxDr;qotj3lBg3z2FWWew;tT z^E!WmE3ZDEJ;Rk({1u+_4&ga(d3I!E^vHRqjC&tu#_-uOd>0;m{P*fTc=&OC3|GAk z=50pRD}I*r56nABFa8XVdi}n(+OI46puDThXBm}OeAD!?4s~DKmg$|Jm_9PC;^Wlx z&U^6a+b8Z{gGb+-UzpzSU%NED^GA5p8$MsZF#2Qkc!Ed0&fnnCH(w8PzkUQpkN7#* z?`vCthkw6cY!M#*owrQy_pdFP-uWI}??=Nge6UeEg=arqi|=`R7T@^=T>W_?{v}-f z5x=tdpSXX`;yb^EM?d|(wimeSTKSHmuG()H2}h4y*E~G;xem{LZkXQhUu&A)`3hXG zi&N&SjCx&&ubV#B&jS88Oz(UT9)0+%y-%IM)d$@-q&)I-kM7LkN2kPl@X-7HYv-nS zehm*leqY-Fp8Y&n{K#9Gi$6!#*;;((C5}h@&sn|m@Hmft|5_a$=h68ITz%MNe#)rx zBHo8bUcayHA;p>gjUz$$PjSSbO&{k`j~CNBuMkgtyJbBnp8T((n_-lH@g_X{f8P4G zlH&J>ujeU#7u{NlFTM>AefZxc&W`Dwci^f^>$7KZqLVMo&n=Ggdw5JncwefZaXZR@6Y zegv0)?Hm2XkEm+^&viY*b6rpHT-PgHb5KK$#xwi3?^z4JMEu4^Un zTk6_@=eqXcxvm3vuIm{7%_Bci(H-+Pqv{erHGTNkeQjr^cYX`cbxqcb{(Uof8{c2d zr{Kyfz5|bX{l2!galfyvZ~PPY8IdRYsp5Ay4K+GdBS|1 zQFV!Hl>QFgY0`^7!o$zc+xNRCc=&NXyZB4jwFuX~I{C#|g{9IG{A=ok=X!ha@E`m3 zJfGjr;Zd*ihopby{pd02#b1+tTb~b;UcCGxMZNNKj(!3zKjPC#|B8Ml>BZ-gejfkx zNiV*X^ylc8lU{s1>9^5uB)#|%T<1~OWu3zFc|3!E&3S}t9hQDm(Z_SR)~)zEJm;ihkxf=@YwghWc$fBTy>o>-(gf;;-~QJ^Aa9@ z{QBoBc=&Pt3|HR8#z-)Fyug)Ld}#XEXLhOK&GgPo#0x)u{c{-}ew!KIn>Zd*{tXq7){&~aVJ3qGg{=Rkwk3L6#bnRCM9({J+H~r{P z>52J;>75VZc^$sN^E#aT(RlXP-k&l9S0A*$&A}tSf3BE^M||gtaILFj<_$)zEAbz|~LfZ?6{L_pzbHcV2Cd3K~5kzVC1I@aVJeV|94+*?H6S5pjok%k<6<;CUS$ z!t**jg=e2VxcZ>|?b71=K6YjCo!`Q>uBty4Zb!ezz_qT#XE>ho*5Of??_&$_sLOc+ zuDln_n~cgUzLE5&%r}!>`~?2dC~urE^`}3E-@>#1J9zeg510Sej~9J=fXl!5d(zLL zFEL6lJ`4XS`EQQloAA7@w%~bP9l`Vdb_`ctSIpat@+p1^&psdE;m7x}M|k*gKJgPp z|CD!)`6Q$AidRhU``EPUomb)E$M>-sJp4GHGrjL)^QL#cV0z!j7ESNG1<(82DqQ{4 z{Bb~Ul|ie#}(%Q-CBwxz6}qbx;H4+$^Mx5C-7J& zpSXVw{{NSDe!*_7=UG=8Cs9&QyTfrB_0*+m;-pII9@N$}qA_I;^$eQgwjy;Ck-Et~ zi33XNB)d6oqqI)43kOh(0RbKmU|^TJMM+%P%=khVzStM%LUhi>20ViRU+fEC2*wuz zJcD3N;d`~7=j3s`;)V_Gsf&8v`&N~x# z-lnemABa1z`BFUReIlOoHvVi?hn)Akxbu#6f2S?(yyjQMbKV{CocETv^Ip|?;GVei z9;p4tM%hmT~^Q`Kl3xycKhtA-O$>{*ZhKb+i)p5qI9!&#FG+?yvb;Jo57UZqLLcFZmhiMSb`@Iwzj}IFJ2Y zQ`~v2?Z^Crc=)-5=V?bg{E+v=v!5OD?8kZRXJ2sxt?kErS3Lai`))VH!w>l_@$Bc0 zc=qEw_H$O})4PhdAM<bJQBB`hR(ys;`U>{6wl-5iFh7A zr=*wtoDt7{oX38yDDJG*_G5ldJddB2cpg97;@MA6Jo|AT`xz^)ueJS{?}+E|b4@&t zpPS;@&n@xn$9e2$s_Tr~inky0JK}l#?2G5|GZW8#=Hl6p=WY9`|G6?C%W|Z6`!QdL z=kfDMJddBJ;@QtB<;i}W$9^s;?zGnSV}3?FkDrEk9zSjI>}Oj%`*9xo*;8CsYx^

      *CqZP4VolpkDwDHZKl^751~W;_ynD;4@Fe<`4fKM?TmQzi@b?=zK%GDc=F5QuJc+xdg89L z`Hpzhjo*X2o^;OXx@R}(nBP1>X9UiA-adif6OZHmy89vGQ6KULh<^``?;+yJm*UZ1 z`gtPmx{WnIuEbq8^EKk*deYy&dxm)O(?3@d>bUcJc3a}nFY>eE;gjFLI}c9(7sa0| z@sY{%>$bT4n|H;d&V2oHSv>rZUlq^KuO0E{l-JjV*TkLI{JMC~yDOga?uqBTx4>D4 z$qD@K3H+h>_Z0v9e%7&g_~iGV9*c)h@|E~=s>8V}<&UyF6?YxXpCSHKiR*5n%Y*id zc=Eb<)Pdi-*%l9<{Qk=&@$gB0N8CP#YVT`ppXM|1$jk4=JWe`|50`+lER&A;<)5#% zN1gdO%elG63@n^M+zv5{p|hus(nV>e$3AzKF%lpenb=T5?wzj*?`o%lo5$Mx{IS}5+0)*e^puZYKa?0a!t^za0I?`Qqi zN2A*1IwI+tuf!uh>O7Orr-&y%Cq38sLQHODv7YnpDek=1?w9!m@eh=|{JwKXyp#AP z#Q!qt&_z7?b@Atm&KD4WQ#|{(FZ;i%xRWnbL-{=Vc?-1<;6 zGq=R!xRdWAp5ME?i+J*txP3lU`>EFUX@2@@Ri~%}uZzx#yAFO|>AZOO=k-8aJp7Yi z6t|zT+S^*&kNGX}ocFGHh=+fE{`Qf0_$PlR9^>kR zIRDf>RvicTtF87at=%v4^Wxd(W%2OC&u{d^!w>mT+<9MB`=-{;YyL9g<&F?f zJ{Au@{QSmk@$f@_2l4#;#y;Z7r--kkp7#(>J`<1n^K-d#ao5wI>sUdb_a&Y}pS=0; zB3zcx=j+zCc+@%SZfxJo(Gwc^rGOIkax`Lz^(N9{q1 zH=l@SpZ8DTuZm~?N8;K4LfrnlFIIJXByRua&rD8ABl$_p2v>G!w-4=6IK13_o~{bwRT?fGl=JTtbus) zrg-?_dF-5c_#r=!c%H}Fh$rtLp69WPh$rug=kr@%-1YSNZ4df9kG%|i@&oAe{B|fF zb>?~O74fJu`9s8)O|?^>jK^|+0`cT$v^|f*hIk%_=f(5+?V`Br;PcyM=<__*gFg9H zagVD5wRg1kxH7*dp7XvU9{u8ZY%U)CB0my$-tM)kZV$zs*ZgUUKd<<8iZ^d*d-i$h z1b$UK``;1I{s-drzfk+S*7k3HE5$!hdz|9UXX4ra!xQ*gJddkq;(1)1{Zv)&e12<+ zyI(!E&uQ&`nO_!vQ<013g~#D_@$kd**sgf^A)kml?-RA}Xzje_cM;F?*c9>P2jby} z=dt_Z;fMSI;&~oBL_GN%@jQ>cig@yccs{=^#otu?gnyskw*Eo^WeNX0kDU<@|K!`^ z`Ml8+k2;6GuivhSN1e&9A--&?-Bx>mc=EgAc^po~^EiAUo_#(PcO7o&KK5gAkCU^1 zF|wEY`QjcY<_&GnI^J%b%Zh7iZ5{LO2|Cxrt+UYk3WKC$ej~+C)gGpJ^V{N4AAT

      DLnIl%*s4m#u7GWLA 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 YeI2qEo=Ej>SoI+^`17CD2vS1-7YizS;{X5v literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o new file mode 100644 index 0000000000000000000000000000000000000000..57adbb509cbcf6fa74552336886594daff21e1ae GIT binary patch literal 226080 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..a3295e24320614a449c65a8326398fb9566430e6 GIT binary patch literal 28070 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..66220aaf1616af4e3c0bf28645bd30d174eed71d GIT binary patch literal 65256 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi new file mode 100644 index 0000000000000000000000000000000000000000..9181ddfc74fc280d1ceaa4c0506a8471b7c2886c GIT binary patch literal 28067 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 z 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..cde803eeb04bbf1dfadde29268417cd3fa40cdb0 GIT binary patch literal 46486 zcmce;2V5V?mG671yZ>2o!g1|&T<>~=SU?B~U+><#w#W8(ZO?c#w(o{}cmKej8Lbt@ z3igcmdM`OhWDr^8oIw&f=PZIqA_##HISG&i0(4K+0ZELte(&?%=RHl&?^|`MySlo& zx~jTP{b5_34vMX%m6h!9!Py5B@s%-sUBe&CEUhoR>RnP$&j4;-0{EvufTPLyzXE_J zKabSG(T%BrKHLmmzlM6!oZ@6U|;uJ`|9(xY{1 zYH?-qcclSIQA6?DwJB^lrYB^4wea#?=3P^`a`$HZNHANi?B8_@@_pLDT56kaX1fGj z$!4C_?OsY}~k4UnjQfst2z2VT|k9?F{KM5cEILMy>vrmHAr{L3{0rh9$ zbAJS%{{sB+7eW6e(0>{9Ujf5c!SFRO{0SJo4u(Gk!=HiS8}N}ozXKrs1xSAh(qDme z1SE5i{u(3;u(SfpqhM(bmdC)-1}u+*d;(-!kiQA?e}QlP4Sefw;amR|zV+YWTYm@N z`Zj#$yP$dv%)SR^-v_fFfZ6L{_CqlHdocSEnEe>cegbB1fZ3a1_ERu>3(QV}+1sH0 z8T|Yg@ZbLd{`)_|Km9ZO)Bk{f`k(Mm{{o-?S6=qd8^O+gulNQBFqpvL2!?mS@Gclm zf#Ki4@Jn$Kr@?TBU&^7gaOfNydJhi$3J#rzLl@xCML2W`4*ePq{RR%b4~IU0L%)SX z{|<-#7aaN>9QqG9^uNK0IWrU&2CmGFi#vmlc;Nq@_?SQS&M2z%7lE~{_c99}PJPZV z-ovA3W$Bt4@4Dp0dV8*pJ#(sDZDeWd&aSaht8N9jKS1!+MIk z9|hive00J4aaDdz;z(MGNbqH~y&dkU8(9Tj%x62Sefsu#J1;FreypaZJh{+$tp1y& z{z>_5^FhxlMS?%;OK)-+EQsj*b=~03{keG0-gc1?z=HgCQ*!3&iW1m>bJ6&A#%$y* zkrK#;9%oL+Wafb|5}uB z<4$3C=<=#a2xaBX`RTj$!QB*7Nbu6_FCg0-AH3Zx^@TD`8t6D=TfOW7#r4 zdpPTB7!1sqPOSfz;?cmV%?B&HK-!E|MY22*GmmejSb-KIOt^YN*$FjN`R|?xaTkc+CTTA0pS9~(vt3_5v%H5~# zHmrCAY_rsm;G(32sAoogL>ya89!&CUdh}?Jx!y_7nXO9>`yNk-XYK)4yZri+chXo{ zO-Vvcr&toc(d6g|ThsE?1e2E{D$kIb{N}D%QT#lD`)lc1MU90&E zZck!))4sdc%bpDfu++S)1>eLb-!JlnWY!S4o)+JcP`=GJ9wscOuRn4BBu_|THJMpq zy|L{9=WB`z5=+XW`}4)QQ`tcBcz@3B>R3CA92r=0d(cw!OMXNebB^+IA3T0G=$8{@ z&5KpYy6>(IXYAyqe62NasiUy{S-h6pi&$xCS>0NZ=gNCo84aP?*CX$Jp4*FAM|EU- zT6R>QJ9Eiza$arSjKJ0tQ%YF&t$Uf<6FFBJ+5Fw%u+8L|`Y-T=QWn`!IqsEu_5Po@ z-m{cddaZlr!HuUa|2}4NXxjr@dzoZ%P@p zBo)m6NsQ0Xqm7Nv1&!ZpE0`#q3l=A@Wc|TikNj63-F$7d>d|gaWLq!2H&v`REhRm= zDr@H}51K-+xLgZbJHgLU&DJwR`m4(0YkpFd@M z&4pwnCH@URqL$rWx#@Yo!P7g6RnCtlxknAO@lIH(V?|Z{F5ZnBYoAZ|tMh43d31S1 zWL3}R)~-!NY=uAbXQhK>HzvpGN0&uP0}JzQdKlna+;${6JN4SA_q9?#kFme*!HiE?TV5Gl=UXQ3`DVRrs<97`LU zoN6m+j}SM$g>^pjj19Y8Q}ZuDS4PHCVw$7r#c5>`lO7%Jt##8sedu|;B5xU>!Kpu9MnDB|1)n=E0 z_MyPP*_?D0i(lU?CRd+T_ES&4g-iHhH5xb#g5;V4auA>^8f8cOXABpt$&h72k>OpfMkpB9YL?o;=xd z-MSO(_b-`?x9c`W%I^F-Kj8cGZa4ZOZ>@#2vCE}*+FPT05{__tKPzs0+E$h8JM6{6 zQl^q_*H;fti<|~nPEUwaWk!9iCyNiu^N6X4D0m`L2HDirin*qVmi}rMm$#gnoPT>m z^s#0`?3vT*!j#W!-!$u(dgLD1UaDSu2s*?*mL_BTMsMj&VAbEShKrqFmQL)W5wU&L~Ur7d)I7+ zcbmA7adxw_GWw27nqMPJc$z!B66}^p7jlnA0M97__XxX*57&zG*}W=(v3 zdnv7NI5D~CBtKw^-J9#G4X=9a^1aaiNT)j-yCIl8x@Yo=Ah?XUOmx{nU*Zgh^aijld>nJ05?U*+~`7J7Bb zHN3l`zK3nkU8_xOT#NA)C7NL=vz?P(scWk~Y#}bqqt_+*nW(rw-0cl-csjoJ%&Mew zA$-Zpd8|YnFv~o%+C5|E{1Tg3T3h-;Ra?)f13$+c>u5`knTjcV@DDu$@l!Wyn**up z%(K3+El$12+RN&P8@s#5KXp0d%EHz4hOP^I|0OmWyfjc@T9qF(N7hY&|6%PF%Ti~10J%;x!#)%V-fR9tg7#NV0}W_>Ki;^jYYP&J$&{s zawwYxM7Z@Q1a0SwhSu!I6VbU#NhOV;wXE9Z#%h6AbjBfm#5#+;ksVPQwKO}&))KmW z?yN0OkBgIUu*D4jmA2Uh@1Jk(+^R24>v7{l0kcQUsVAm(eA;!Ujb%G~3|{k0?u-#f zJZ3e^rOR$PzJsZ(seYoq6%`I&7qmjt)_Wl{5+vTI6DWlwoa@t`Qy z4oh4Q%(=UT4IaxJ$_l+v_rS$Tq`WbHv-N(@W^-5x>(3q=>2$r(`@i`~-rU_< zgSXsT_1yl9tp_)4-Q9|-G^-36A1@1?Z{>qhGbd?&{NB1}XVsIpntVc5SL<^Uf6eXA zQtgxGn3@8w>S9(>+VJqsO!d&0d4h{Hl~;Q|C)#81?f&7?rpDVj?*G8;u2OwvX=ZNO zR^m5j7Mn^^=Bj!ex&5uIl;EX_ny|`h=CyluH?i-I$1k|uO`7d4@!E_T9{g#0mW$id z`n6K=!Di+zEqJZg?QBiBCbKfP%RxnV+#?pnJ@Swu!^_6|Vt1V{R5*>-I~DY#h-TYU zT8giZp6r;s@y_Gq`yCJN`6q}*(@W}J3ZI*(Z1Db4VR=WMtLI3J_*yjcmPYHHipyKp z1D>&&MXvzY_1?!{;f1;^4OgZIE$!Sa`F!$&*sg%7D;s>!Vs=GZZ%Rm=ZR$x;#ow*> z+})Y&`WCnQNOg&esT4{fMjTvA(@`vqLwqktk@bUJMTCAAtI*%Y&Z*GPe>J(`fvEV= zQuSzMT6R(F@S)Dd!P0w=XP%0CdrcY{D-L=%Q`}%`-N`EnF9~&yo&I_uVT zD=ma2#|&@9-rZ?A$`fLxrnu07-PXrxb1Z1`_K555)5JM(NSsuVU+y#aH1yfuPS-f6 zRpdDLiGjwa<0Y4olHA4qC*BvQGCIfRcUJ2E60=e#NL@`n0|gb839anu#!mUzct9_2 zn$#t`EIC(ciz=sW^GIdMBa|cj^d}*BuP$H zuDw^5cN4-{l%L15+V#q&Jf5OWmTvAQ73GazUGQg3flb$@m$Pn{@)TW)RB^*+JE(m* z(-7pD7m(WSThPlB^k2%&bnEKy&0IM8U~#?w!S+Pc*SI-V%IaCTd!sdS<1=@%*NX2I z){KZQOrIuQ5BG}e^R4UiVV;3I1#Z(W&hsLtbSa>?JYhO9A+VWkl|S0_y*)Si6Q0+X zw+q+3*9XfxcUfLkQFTRGK!d9|B13Adp6FXFeo!CI%ElAd$KyhyPva4WOli8(Yc;#1 z^ic^b3J4##+7L9+%?~j+B*))!c5dB`Z)SysHPNo!(Nla*!e9znDePY_8ZG@vtdq~C zTk)+_oOeR|SGP*zif=_cbNa`{$OzBCJ0s;^=jJRasQPNXQ$$*D8GBNnlULB;62pgs zhHR-lXzFJDOnJ?_)1z5ygDXKJXSw~ICkrbvyM5cYJ6WGkd;6`FJN06yWXO>MI%Ds) z))i&^E;>D@xi_HrA@8{jxl+;8xW8ZfyoWpU-CC@AxR#CWFi&~c!)<3}=vnXFEDLi^ zO{&h0^AVk%Ay0Cz4C}9{j99X|>OMWU5w_XRKM)P4q9*SxK55RX9%X$siFbC!rt3r( zZTL6W_3YuL%ABpQJZ$mWx!Tw|&nIFG`O;4IgRqn0u8xa*<4cn9F$~PB^eaF+ML`lD%6O$I`KXSe5!f;W{ zq-XG45O28*H>ByTq5x07N0WYRF?%MZb-rhok0lJh9PM0q7QQ^>CB>9AZI7;xq<)N> z|15p0WNqi>gIlKbm87`LoS87uL>Nx5*YA4m-dytiQBq;UVDXT5?wC03nWvNarDdT> zE0^k)!}I1=OZvs2$MB7ovi>Up+3QU>zKSYZ%`1%*#XNLV%JCTLs}HQ*{b7B`^~{ND z84*i7qeJhx7I~Lu-kc5n>_~pb`dy!bAm0BS`c?jr%Yf5{OZ`(e`*gRy!gI8h4=xT} zaKGX=o9R(k?8e$7r}{T~d}o?OKELU_@3mNvd+SL!+rAtycDd(4n)t>#^xJ!F_1@hT z6|;v%+a|hW8|xQ%n|$bZ+XWr2y<;^vYu&imR+hBYH_*y6I$S7i#yaH%#3z>*;1F># zJ8ZGLjJH^Py41-#WO1u_czKxJNXiMD4syBH$dAGK)3AW3AW z@4@%s2e2tpUx!S=AHv_mkKo7f6LvTq?7;y{;0W))yKoBr4Sory;S8LGbMPMg3eLj?xCocv*YF#7A3lKJ!oS1+g5SY^ z0H3G^92<&xYQU)$91UV?;mN>@0amrk4De$I=Tou2!Z`%&#c@_3kO6j*_yvt~npYWw zG6-W3&LDz8Bm-=iqZ!~^iQ`A?QsNlIGe}^N$N)cgk{P5hNM(S-;dBNW3^EyHG00|6 z>&)*<4g-88unougxdH~)8Q{F|O$Inb!A_-^0e)~`J6^^B=dmgnR5GYyP|ctQb6`-% zpq@bk1FSJvW3g_wFu)pzEmS*$4hEeJZZYU$fQ=}Q0kGx2&7hA#KZ5}VI368haEHM# z1Ds|VWq|MDUA$g5Ubb-t_ZUntm}GFD0lsn%7)&#mVKB>Jj=?+w?4}nP;7hm6V1>ad zgNF>(7~nVg27^Zo9y55tV3WZX18fDi8SF6FW$+CB1rj(*;39#m1a11hp9KCA1V|7lL68K&5`;)_Rf13n!XyZn06$P7C5VzBT7qj5#7Gb; zL7W8f5+q2FC_$10$r7YUkSal%1nClFNRTN(mIT=nqU4k1D+?1eD zf+7iuB`A@gRDv=I$|b0fpi+V=392Qik)T$BItl6}Xpo>$f+h)?C1{bLRf0AN+9l|a zpi_cd5_Cz>EkTb2y%OA(pihE+2?it>lwe4LI}!{_Fe1UI1Y;81m0(B{ACD` zAy9@O8G>a9k>RQgp)!QY5H3T643RQK$q+5WH5p=Lh?OBuhIkngWJr`DNrq$@Qe;S# zAx(yK88T$Zlp#w7bUft9kSjx;4EZt?$Z%bT8#3IKp-_e*8H!~nk)c$EG8xKcsE}b+ zl(|xdDjBL}sF9&ohB_JQWoVG0QHCZNnq_E_p;d-98QNv&kfBqCTQYRX&@Drc481bk zmZ49Eei;U27?fd1hC4D0%P=Cts0?E=+?8QmhI=wh$S^6xeHo@?cp$^H3^P~^8Rle| z$9pKlq6|wiEX%NhS1pRSD#Jq=)?`?hVMB&TGCY>yi42=EY{~FchHV*kWZ0GAnG8+} zI4j_yfU5#H4dAYThXS4ocq!nmz-0xlDBz=juL6Dw_$v^gK%fFa3Ir<J?~EpizM)1)3FTQJ__UHU-)h=)hu#tU49Ar9hVg-3s(5(5t|01^N`|S71Pa zK?Q~sxTCD#%wsfeNmx;D!ors-RE>MJgy(K?&xDnX8~&1r;i&R6&&rs#Q>Ru#0Vpj`zWD(F!JG=_Rj{CfMHMWm zU|9t#Dp*y)Llvy4U|j_pDtM%V$9Rn@*i^xm3ZAN9TLn8R*j2$Z6*#HESq&~~a8-kw z8r;?3p$1Pic&Wi#4VTq$MGZb`@KuAK8vNA|poTy-1gRld4Iyf{s)kTCgsCB14H0UH zR6~>+qSb&d=@>P{sv%Ad@oGp=L!ugz)R3%(6g8x(Ax#bGYRFJSrW&%;kgbLsHRP%x zPYwBMC{V+7HQZ3cO*Is%p-2tIYA8`dsT#`EP_BjwHB_phN)6R&s8K_$8tT+guZ9LS zG^zn7hMU#UqJ~yAw5g$84Kv~qUlT8;7Z0-zwcMfZRNqpwF0pm18E!pd>s2eg>f7o* zb-$VosHFk*pqdSd?T(t^HY~OgHN$OGY-4JM+g-7Zs~K+h#5SRpCe)K^c3&;sS5K+g z1F=o38E!LTn^iO1=EOFymgm(A>P0nMQp-!~W%Y`ht*Yf!^+WZVnystlb@hh&k(xbL z%a7Gh)SGIyrIxqUPu1IMwxgDI)Vpf-Ol(dXhMTiScGkFPTs6#1BfDwbH69w~sgXT3 zUK(!=yDYXV8it#XM)uM8YWy_JUnBc#0yKdd79_S{jVf3ZqPeOG)r4tSf|JvIty<_R zACHD>mN_CcD;(@HPnLy7YO?v=W_Y*nYZakc+>ps7MgD1yo;xsIS@3N=yn$N^*5;TdLBu%m=MU$#Y)1+%MG?|(# zO|~XSldH+oW9ABTZ{&G;CHQ&1&W}Y+fVHYZf$YQ6nvCmNaZxBQ0xI zG;CEPt!f@>*qTOK)2wUQhDO@ZJkqdh{AS`8Eoz=9M6@sn%@u~n8tJj-iH2=z#OzC`fCHUf!ZK#ur@?{RU4`e(}rs!v@BAqj?_kJqqWzxG1^!yixXSCR*u&u zXcM(8Nh>93leH|3KXX}Vo0HRmwv!7>4s$JEdj#LOjq;YuSw0LinDHbXLo7o6{i^p|B6Zwgf zxTJ7N=CYz))jrg&Y1z6~Ue|7DA8FZRt>&@ziFQ-FrG2X1*6wK8u2!|HeWrENIqO_> z%vC43>fCh9T_?HgJao)cCwc0;bj({PdFw8touBbDLa*q2biO)2oxd(X7pM!;1?xg| zS9PJfFkQGVLKmrv(nag8>0)%Tx;P#4=f{0iXuK{#m#9n9CF@djsk$^>x-LVPsms!3 z>vD7~S10A_@^ma;C*|u3bnLoLcU^ZwcT-oWE7BF~N_3^VG94=yTZN9{Rw=eBom{1> z*45}34w>){lGf@NZgo1PPFJsM&^78VHS1W5PHxe)>e_UyT_?5cI&`d4r|Q(* z(sk*&bv-)PtCMF(&*uudMF(;- zxY+LLK6y_!p_|m**G=gj=%#fux>?akHgwtz-6P#& z-4orWZcF!6x2u1r8w~>ku*buNpnP)6kBoJhqRGDdzDaUeG`wY zyP|AxVa|HK1@W7t66&IN)w}84^~^(To_dDc6`rmY>ZSMA$MZ}s>*F}mxm?jRAHC$G z&*u>qE!u3-ND(IW<+(_{dOysW2Nj|I`UHMd0G>#kMQETtNFS^Z(O=bv>Z?VjjpB+( zn?;z^Ph={zM(h~C4Qiob`fz=OK2jg0XVGH2rf0YXijxbC(Z}lJ^ekR%og!P(1UxL@6dPZ z*)6ek=^1X_V(ZZ}+4G9L8Xpj;ONd}fIwiJV$Vn{Wl8Cbg5G7M6NA=ALJ404ts+mK^m zxnj#R$a#i*LxF)^7uyYke8X_lP-tL9Vkj#EO zi+NZU8qOd8RZ$08#U7;Cjm&5zq1^^P)WiLSVg?IZY;v&b;#-C}k}kRMFe!Fe7$(K+ zF-#gG!lXAunDmJVlXi))(8;-st-75@e)m~*b@ZIeTzK~X!U& zpEx(ved+Pe;*;1G-v_Zcg~!))eGS)kD2i6rNY2h!QuNKs9|e`l&}%TO0UX5PY zH(FbKy;w_DTi)(^ZP{<3k01CYd$xC==Sv3~`VEEwL;Ryh$@jwxgSJ_ddvaZC%iSL|_4SqKtfex9?pu_MhJHaIFvTWSRNN$z|S;=e`Pq{GdPo(78VKEq^LtE7+|VNoR5wC8`Q@ zB5qs{3T^(mXJkX`MnV3=f0w%{N$uP`=byIOxbjyezCPCy?j_HzFu8})G`%TN>-Y2G zhf`Tc*x0W7KzE|}cj-#NjnOAN*vMYM&obC#kW{4H@_Z zXr)w-#S||ORzx(@XBCzX=S&&T$$%rdCH&aoClkBiPU1_9?d^nx7dzq{1)oz@;p{4Y z97_#&xu7xx^W*T4Ru`v-TAXRssj*}d%Cr4{c#1m)e$?L1d=I$aJCzFfk5GP1J{M`R9j>>o6N)Nx@<(~9W&;lF@Fn8uIPH&<|NH-NPHpq? ztlQm`*i$*>t7Goft_6HynfMotdRW!NhbCk=th)Vj1iPmfDfpqgAJMBud0UD9^s2Gv zp}WsR<9ngQstGX$6T5y~g#+gMcp~w>q3N(nbX6h|KCTjd6;H)WICRgzf6Rj33;d}C z_h4|K7lQ*m864=%;6RUtbOn7&1oUk17BB6r~y&xRu3E@C*2nTvZIM6GCKeIu{2rBwUP|-btiXIYFbdsQ=p9B?M zC8+2v!QT~dj|m5QO*qhV!hzlsT=&mCC>-cT;XqFc2i77E^rSA_#TE4WsldsjHn z!@_}H7AX@wT?h;AY(YhT3o5!?B=pds+eJeE9J*elR&;+6&;^5QZ@C+W!ZL;`w$ zcr2NKULYPrPY^EM<=!BUbOd@QGYIGz;xY6NaiE8Y1HD8XxdikU@fdoHIM8dvfu17{ z^d51b2Z;l{NF3-%;y`Z_2YQq^N(ty$;xY6taiE8Z1N}=JRfK9n4WX7$M?k+5-?M>$ z{wE$o9~4J3p@q;&K%W#(L%$RU`ldM0KgDs2fPN|-LthmK`m6AFVd%0#MXwbqI<8RB zcZG`XD^&Dg;Sy%<#p1Yw7{GUnfF3O#L$4MGdbT+362=Ml2or=!1UiY)yfsLLecC5KIUmTqT4O!U*An2tp(Q{dl}A(FFA8@fiB_ zIMA=h5l4t8BoGn_NrYqsy7N;Asf08_Iw1pr?*2?d79pFEL&zoM5%LKI2wWp@op6J2 zlTb(~A`}x!2&Dw{8uG)-3FtlKG4vpEpcj#&novWiCDak>2@Qls#1y`Hgl0kup%sCv z7}^N!gbqR{0+%=3B6JbD2|a{f1TKHLP3R-^69x!_gdxHm1TL09esO+lS;su;6iXExDnh59t2N<7r~ownQ(>RL+~Z|5&Q`O zgg^rNVtFBg5p%ebhj0}!k1Ki*xQ+$=vmD`wzvpgRRP@xMqO%s4*K>z0$2CF>0iCzp z7)OXFBoOd35m(41KqwH*9kWW zHwlFVbOrNWiU}nIbPIDMx`sK*2^EA&0=kNMS~Z~tf$Mu}33Y^eLIa_Z(1cjSZjaD{ z_%Zh?qqYfcM_tE0kI+fDMd%`Q6VT_(_v|IyCiD^d3FwFBy9^SB2@bC|G86~W1Fx;*d?HooToXd1)K@! zFy}^ensc}j+zB28bfV+0%e{np3%x899qMRDpE@eK)lt#2j*8B8RP?W-qKh3Bz3iyy zXh%g~J1V-{QPJa$zd+z#cl==i_q=nU_niYh@c5$w?uF+-Pdo>D<2leHkG}`tUU`l< zLOcOI^xTMEdX6MQG9iV4UVEOFMo1@Q5YUUy)6kR8f!=%$^yqV-SDynt`yA-q=RglX z2YUHA(9_R>-hK}B_;aAwp94Mr9O(V$z!d--xC(#+R|0V0Y5)#g5n$$lE6NDfgc<^_ z5a4OJN`RxD&_HM;;Hm+h){OAPk57abeuffo6#=ppnHZWHI)Dr3l^@IjOBcX}VOlU!b;rmBu zBeWAb5aGBQlyD0XfvZ9Z-Gm-OFCr3Gi4yt{QMg)^FhCe23=!@Sh6y8tQNkGEE@7N- zk1#=)B-|%V5grhx2{VLQ!W>~95sj-*35$d!#5G)zN?0MR5*`xP2sn9Z^ zXp7KRp>0Cjg?0$-6naZ&m(XsZJwkhh-bOtGeM0+%4hS6-IwbUt&|%bXz=+UMp<_bt zYWW|-!PW4n_k>OeofL{Qs%W1Qiu1D=o)$VIbXMq`(0SBf0XjcW7lkefT^70`bX6!i zIB=geq3c37P%pqEp^t?=5xOaKOXyRf+d_9xe*?Qhp9yu+af`E17u4T^t57$g?m|6; zdJ6Rt>MiuL&?~6F10SKjLj8pL3k}fmpQS(`A&7u~t%n;!2v-TAgfJaWG0WjxSp-*w zucP5p#c~wFhsn_hUnXBegfKZq0AdMogm}bX$q8IpB5E{~lL*O#6hbN?jgU^rAY>A< z2-yNGhhn(`kVmn6LIL4A;RfL*;)q_mpo~yX#tH#k z>ce+YDs+`(t|Bu*;fsGn7ByrhC^foTj9bWcTyY@~57!HA5ZWm0LX}2cldv@ln^2`$ z*CK4K!q&!BY16eMo0#08!#`RjccN3VlgYOPpo`E=#vY3G5^n48k3`6QI-F6K`?03fkN>&a%c$_8X_!Lg@y_Z6ZUYS z5nP#2IZ~uX3462%UlZXNu1u)Hmm=}$XgN**;t2_eK_({(;DRJRAuJ~e;Ho4MOQsk> zPN5hPNx__&Y&1U&ZHQ}D3h}UARBR)$vFaypz!5S!kkBDg2Gos33CCN z2?}2%CCoR-Oi=i`DLz9h7ZQpH#R9B^P)aBxlnX!wp^{KVs3z19Y6*3OdO`!Ck`mX)=uakbP{k$1(q5YM~TAYLJ58ixF&)ddkMD@6HM+CU>rD6+fNuE3=)P2 zcL>9T5yB{8jBuAQPPj*yAWRbO6Q&S9z{OUmxata3;R~=of`;N!WxcOZsJu%`tgJfDshFZi~+x$`1t?L0+R6$KT8AT$xaX zukYfvM_d)Y(u>EQh&_ZVPxPC@wk2#r#p*A<-?p#`RrqQ!Zrc?$p$cCa#%)dpR3=n$ zGB{%lCnjA8t^_xNI|A3YcnC00ig{7Y8?nmd%ZN25UqSp>_Th?)%TN^`gYO>wkQ?|T zNkRZ2kPt)&CWIg!Gx@3jE<@un7K(VnYakW^c&2Cdlj! zCR7>1RXKdFQO5Nq93uh@S1@3V;qnCzT)SZQQ+b>#6Ds2h1Po6IofN6}MOdgjCBhGc zP79q8I?Gj_6Jeq9ya)@G7erX7yePs#MGPtsJl=PuCk{Hi!vw=4PHEk^xos;Jzm+P z&mMg_Wk0TrtCJ-ABU~go0P&U_i0X#Fq$LCsLI_t89+DhN2t(kcVmKj!5J`wacuR6L z0_W_m5n>QHJr_%eBg7LD2#JIwLNXzRkV;4+q!aK@2Jt*I5x$a~h47Q)Yy{5I;1iB2bbG5aE)1op1vYA;~upQIcFJz={aPgc3q2p^Q*Ys324lstDDD8bU3hj!;i% zAT$!12+f2RLMx$-&`#(ebP{e6x(MBb9zrkS_8~Ee(nshg3=jqhLxeko;Y0WrNaPW& zFe-Em|27ko?+P6kdQa%YA^tZ>3p+sIe#Q*S!ym|ut|LwI23PiotMcg3V_|#36*h%#34My1 zEy>%29l|c+9r+no=5&~=vrreIu0q{}x(oF{&5>kJM6M)zAx_EOT$xbC`|xERLta7t zo9x4t`Epf!5Bnht@V!G^$M;Tv5tM+#fg+9p{JR>Mj)CC)K*)aJ>V6<}KM=Mb2*1t1IYo}4W-hbt4R`ID8#rzmabUy~&jcRc;{U-l@*QblO4F8x9+U_2H^#bdIOT0f}XS`rKVr_0^X>MU| zam32%*zwQWeQ?oq;o|vIXWuzuVQy(qu(h+du(NP9S{=2qwXr#7v~#qvIbpK0x3N88I(pRpgoCZM?J-A-6Bftp zjyXD*jvqhjXlG$>VX|xmhtsDn@Z2np*qe^oT4I{D(P(LL%+ki%+QRa<$Ys%j>+MPCu!tpCI+8i~W zu(IWQoH%~;goDwDg~BXO9JR5uJAtV-$53sK+gKbsVLE2SWV;iVRwpd&Z5)r<*jZbB zN36_`np++@;b8C31Mi(b=XmL?{l#t|g`j1*$+d7zRERNe9#rxvuV1LYb+``h{&dS>4XvM82+v65T zZ5(Wm+gRe=u(!oB8jl}yur_}5qUrsMSa80y9&efBM=qW^!|#fv^%1c(xp=lxF=q+%@JE`qlJUf*72C7y``-q-nkQYCX1sE7B;p= zk6YWCEUazqERP$HA3bI~ft!QT!qUO^sKv2kXmPNzwXo@eUz_;7;x*~0s7c4I9Ib3m zSlS%3cXV_-=4dk6pD^0lTH6~PY;BJ_8u6hVx5CO{va~lI!-r(DIAP~-+~&klI}6;w z>ZtuK_|2({@0!kwr)+^0(DIn&@#D5eqph8zc(6um6CQ+lTiMy--7+0BS=-s4z{lWV z?`UCTV`XD!G#$4>tMv&>i=!r!ncbC8uji*2U{U3bC{Pn$v`M2@q`osat z_fDTPUexj<-aCKl%psokCI-x3d;j8>ME>{#3{ipi&x)B{xM)0UZ@O?FPMviyy>D_j z!rwuBY~l`_+E3{A`l1*efHlYA+!?ANM;xs2 zVOiQ+I37K2X^Ahqm4%hf) zR$JpIPJVFVqUntJTOw2QlO~hH$1YqvgEjYH9B;wC@*?qj z_#zlDn(yKHE&uHA?eY4_H%{1CSbqBV65cePzhI)9_clM>URJ{V;^zJ7i{pND&fa)h z?E1XAJU9K}-Tv|1S(5`l@^d1$pNkjF{Ck%!oH}7en=^XD8c*x1^f7lsVnrw_G zj3#W#?T*{pV4Gs^;Am}+Rn^WK!;Z#dw)=16UbgsNIyzF>Ftk@wzjONBZ_a+$_``F* zG@Yks^-dDYju&RUl23ie^tSQrS<_j1sQiu{eD9yX=6_6wz1ZRT1AY60_e{T+ z%B$(~W54*}W3kqrzxX`ajQ6<4Q`r9SM*8>>?DDMXBJmtQHoo_K$LGeArWZ$lTx9<8 zZgekBntpZ3giXrxqiM&N58Zpg&YMi1bTFCTyI}g2=uvqmed2`8@sIA;ukT_aW=Bux zyFbE?{CTFIKG5*-`}f9qY%c%kfO$V3td{3~^Q8kxqVO+jB(`&3{m;{1cis^DdHWw3 z&%X18gK2wp^&d~Y$M4jq4kYgNG8Yb>==C?SYp^%HcM(ryc3}V4FYr7L-ZFm5OU8Fh z*qfNn^0Hkx_z>Ryf%(Y~utL30&+B<#^PSVi3l~0l?!uA1VIPk8u(Da%*;{^buX%ps z!d~S+P`59by?5Sp@!|)3T!F2%4UV>~O<&{9GXDu7CSc!o_M-XUojrT*qVb~1!Tbl8 z-g(z_;msd@?)UcDPvHZsQ)f=`1`BIE|7oBF4npjYAG5ON{h84U$4w?2Kbowqj#@Za zSlAss=4fYcZDn=B+Q!z-#@5|H8;aB7s`l7YQfN7*C%TDW5*rhwa~@51CK$Ti|%_`_YYQA=S=eK9X=!1N z<5*h*Ra24W*C>3TyW8*gzKf0Kca0xhpka*Yc=nUbx&5WS?ztWB*Tr{Vb-*u7reD5% zveW16fBF0^!aBygbbgALIz()sU*6|uZ-0mH@KR6r;T_Im6~IA`=p&E3xUlD)&f1qc<&sk~=_N{N3c;z#Vz@@Y2c&~-8tNqJeF@6V`+QB`lzLirKN?@ z-qzNJ3c_3Am;2}!)|WfvZu%^{h~3czY;N(3?TEd-$;Qso!HA>iqsF6FI8x@HgN{aP zi(?L02uE9cY#{JU&ECes+T5Hg>9o5sJ-2a+^$`u3@d7xqHu&Yh+ZUdnm8bKf~sGTj^T&#$Hss zpW{g>^b34h4c|4{U3$kHbFw#mVsALcKgam6?9Gek4f`exe|$fT%@f{Kw0!J^<(!ye z(DFeSuU{g71FH+-qkVt0_AxOgdufpNNp5%puK_>w9ZU{CGTNC=U(o#I63(-nve)eW zVTJvV-q+6l`qcSzXU|~WH|&ieUVH!4McrQb^*28HJY@bFj*!oP>_z-%XD=8XP5M2< zk4zd!>o{;_%cS~3Gd*?jCGnxT6nvu& zTKN0)nFC{D{+!IeeGWf?#bekXh>7QC{`wmSKMussC$Ul(Pahm5Q^E&l?f>}0nTtt? z{RZsd7X=b~n6u!dD4>|bNBQn`*4i7#wkwR_b z!TTZ-zPHypzA9<2seHwW_S(&ZRY~M0+Qe7bMU(f6oZdL?@cSQjA}4GOUy+Y!8ed@- zjpHjWoLb6*)ly{tQnUGr>_i)Su&&Ti{M+`mUtKbu#xLhr+%rBZ;O)r4dh+~Gp7eao z@QTt>d;Ot=7j5&wm-)4`m(EaQx<7e}4c@`Z^8Bqi_{II)EJiUO$`#w|gQeeZ-}i`3 zKCij@}mb{n%Cbrcpdm^{Qze>Pn!y0Xzcfn zp$7Nhbh4m{ub~GmyrDXn3HDb9ThP4@?BMPAa5r}_58l5XxDULK z`8~_&gM~f$_Q4AjZ^FTY_`L4HsSxVz4nB+*J>bELztH(F{M=0a`G?9(Q{mW`|M`J3{h@C8ul{fEi5>XCB8qJJ zLpk`U@wK%-=U_V69vtZH4?Yhu=HjIg!(-D09S{H5_|7SN5fY6Lh4@DX4P5tUo<8(V zE58q2HXc80KPRG45E)|Z(ASa)@(rCacE^>b$KttmLru|Qvy;%-Eb+x~@ z7_{uo^mDtIxZQL5&~TFvs%Qq6hhDfCu(ij5)oE-gO|P0(5no#`c^^JB^RYjT@eOKe zMa~B&PkwUljL3g)zT*$hvhdt!+)rf`IlcMD$=Clo%}fg`HeE0IKg5H4Y1(HmRm`QB zUUI4I*~!Nt4*EZJT@7>FMv^@d-{6O2S#pxgUe%@67gsrT-j$pm`?Qg&LdIlh6`>HHVPtRa57|ir^zwV*m`<~dA0EbA48Zg?F zKAlR+f44SU3;h56&)@%h|LnAXcHDg&u7E5i+%;!w6N|}?5$EsL?$**)x?_UeF>m2} zvv}FD%PJ_UGe;#mtzc*Esuk?InSiE2(w=0+%?ZaVS@f!DfeHU}5LY6N?q}gxT3>Pm zQ`mejk19?$&uNveUq=;Fs$EdvODBzPnRodF65cIA3sOCyD0p|7Wlh?teks}~N%t0A z5<-`qwU>owUR`?Thw*h>jWWzpH!e?su||a*mxG|VK^{{2Dk|D>c@gD7LCxM6$E7#U z(tpgaF&W)>7F^?VRUXnbuJ9Xg&g|xOmIQ^BPvNYza?*T*gw@P2e)q(|WsrqW%o#3T z3F#~LXzTHwx&Qd_p0WRUZ+i@f5uyT07>2*h<9BqmjiU!)GzsQOMQ@TS+|-oOk%nu$3?wtyRmpRee65mi449|Z9FB^_ zc^8c5*}ODwr%~!(#g%@8^*qZDVZhY+9z!vpPS?d1zkGCE1j$AGYZMyeX<>7I4=*-U z!o~F_odxC1R$Lw`TxBGaUhJYzimJSr=Q*5Ar7%=kxlzp1e!9Zh6vmtMiq@2>)E;AS zqLYx1_!Rzyc@g!8gCK>&q3D~@fAQ3KI7hcTq6zi`uo?_YS3Xj5A{NM)(-dygw4)gQ`8^@q!mQX`nE5lol-Ev)cm6Y^Q2ViQcPv(>lTP%P|7aMPDCr#}bd zO*#(X?Wh{{w0@DMuw6u)1G3?6D*A^g$f?my;7NU`SWu$IH#N_KN2geL z_)x0-EqtaAM+eOJM(1;|{=dQ4sAOt3gSqG^1|D3^OBb2!mLgY(QPx%KyFVOd;41mb z_pugnl!V6K-dkgT|E=+MZ_jwUzwaawmSvth==i)y4^R$iwZFd+gdtU4*%Ppe3SW&k zc|L?(JXwfFyd(!$PEq*aea2;b$+>jP+aTwC?k&~_iC#^p+j{}#=&dLh#XPSZna@$_ zTmh)MiK?DXhpBuNS7$FhsrTc&telD3#O$do6kjDQ>CA$>nP+VX;o49u4fpRoOEv%+^KTuQD=4oK?huo{lcVThSgk< z!fV&WD7Z#B^*d>Db|Y~?q`lbgP_?Ll+A7J*1(p{? z4)%5^rk>CxyoZWQs;*Jy^u%ES_EUVM;lz(i!00u3F`ozt2){2Sirr)RXd#M?MN^aJ^h4!f`~e5$#D1}u8YRXqxTsAbTQpKimfv32^N~x zJA1MtG+6`d(8HfNx(8g91FXkfvZoETr{_@#t6{XTu32Qubw?$;)|55PDXPM9IhjLV`9(U>QmaFmCt5ltX}9FO94#ON zA>`~zhR9LLj!t)V`dp`9>+~C)zR>BnlA=+FPmzxY#dW!<=@U$;s1Wm_qgnD)S2~8r zx2xh57D5!FfsKkCTDb)+f}w=7Cp5PzGz9KzXa>-(vD24O>goNW;-@GGhnq;d!8(}i zWu0kr5OhIzlFZBL@jHC-)9kvP&nuYZ<7iM``@1*m4L%w`CJ(s5Io>4`LAdoEW!2@DUyaYxw^jp|bN zJQ$hE#%0MiLwvIF3HE#CJXGO6ALahBi%+wxxp6NCxbeXR!F0gAZlWZ?yahT+QHNxd zk))+4;@@)4LsK<=Txe)e%T9@^syTHdjVag$q?tc~|y=7V>p z7q9Hyd!5T(j(N3gWWCDfFG1-OSqe(zeE?%ob2-XFZf3aanQ{j@j&|D~IE4*(I;_!l`N6}bD zT`UaY{1Dwq3TY$ha9jy8KwmiUFm4~X*=KqzcL{kSWS3k;9we0%yjm70vM%^RJ(73u zkxcPOX#wd$#nTbOMF(7nB?-^)MPiA3TwjtR{a`Vdl#jv}k*MUT3j<(Yg5jt0TDCeQ z!Ez|5kQ#___wc7Ay$|X%CVE@Icnv~L%Q(Fb5Q?<+A8T)0Z{M~NRV+|DkW>?MC^fFf zp^=PdL|Hfi0kCFaD8rye&mufB;(Qm)OIj34&38pYKIuKj<)BD6NYvdRE!|KJ%V`sf z%yLr?0q~D{>IkdJ$w0v{KyXdN>vHF5a-HZGMN`e_QL|XdQm0sE9SCD8IyO>nCMszn zR*;1Nzh*n0T6w5s1MNWq!J>&wX zbA-GBTp*u|&4>90@4yL69(Gm6k!cOcgFc0#0E>fC0_y^+i|df>KZ_tQ6J)Nt3AyPfblvf1^AlGzTkhz6gu)ZEgE zvPqNaB1SlAa-RV$jIM*E5!p@2gE)&`Vce)I;cc*EuCH*|zn;qT4Me9@S%pLDvQv$k zvayQ~8ml>VW5};IhU~I2Wa`F%JRf{8V4r@B$%Y>`1QX6f5l&`yqd8Kw`bhDvZMwm#=sBVojNP7?S51;*6@v$ef6>chZGmQek zf=6hE8~#fwHJDk0;2&A>>d@2dSBE`K>4GL3BV6{?p=>9wFRSeGLhURhUjzL|keQJ1 zMXMZ$l`@^Xkg|)qrpfz&J_lh5^$-{Ya4+or3?c>MbdbPm)A>elGP(sqH2GuCtL7Ci&$s*|?b}Q7wUM2NVEPkafQfh8c zUWo|6^_Ig(K`R%F*_Av&o{3f@Wh+jVNsCBFaRu2`Wm48rij<0|+gQyUgkeGb4FP|u z^bG(98k8M)j&!K<&Wn}I^WBxqi?7?uYJc*tcu)xj_|A)le7@U|FTQSl`K1AMz4hB~ z6si|ll65f^2GoQ978Thg{i%adCbUoBWK4-$wt?h87zYI+>$^1#B%zu@0ICw68fY^A z69vUKRIwyFtZ#%rk0%ivm@`aWI`~L*@zLTeJV@YCZ*uGpvP5@KrXZ@e%3yO178@({ zU!h%u9X?Sygwjv(j92wRz@xd+h7aM<``yP1&a)(;8-(^(bC)z#@}7VFkX_%gy;{T$ z$PF~uns$U+*Z+*~+!U>L?B70GQs0L?KASc7ZQjet+izXhZ!7&)<0ZOSb62~{8X7bG z6y^o{W*q?9NbH08HSo*zmk~ZcX5nl`c^7yM7Hfpq_%?vmEkTAE^8bbAr%IT;e>Og+fYXsmF-CkpcCIt6%Nw_tbn3@ zi;8+?bVv&vids@|3XKu;HpgxR2n^~`Jce~M&eE{l&X+XxF;(S(E?shbr2}&EeOi-E zdl#y$Pn)~mi_M_BkWap(5KiV45Y!W?y ztDWai;X#N_q~1m`8UJZ_cggSt6XGp{%_Rw7Ek;1~fZ%)?v2>_57^VA?p>%yMJAsT=U5vFuc07@&XfzEV+ z76azexkpv~ND(k~SJqe9Y+I^HjeEV4YAfA-c>m>8|L#u#9zO!AE^~nNI*_oURBbT- zfQApinI&h7ePPjXGASXvMJ?R^81spN=L7ApSX;(!r9%x*eSu~6*Sa#l-l2(QRJnw1 zxSx78G4i-M$yaoM3bV}B=?L36`UM3W*O3EbiKTWq#SJ5IoJvbH6-bP1(VdU&NH7go z;HzYDOo&;*9DYNM=$Y2ch8o#|3LX1wQ5CkAh-WLM;l5uAbW+0>BGhy~}+S?FG_De0qTvKxw&9w~Apg9r<( zihK^IP+-C~(#)C~aY%*72dR24jZfa|v2k@nLydg4B7Um^)>KVOKNXk#RFw2nk#H0L zdEeao^3VG&_kF&iL!Vv-SR(CVO^zX|9b#m#*<0UzWgP;`j!kSfaqIYxt>YczcxShDjDOEt z$1hsP|7D%4LsJ}9m z8RsJ2D=1JEo_f_U&_d}0e+LXn^1+xPTTqw~_IXXk7(fjg*`>`^=ZfIdgm(s%aYT6 z#+NW6o<4o*OAhY0WYHG#5F&OQ8DD+%mB}ChOF{xXDLT!vT-8@%LztXF#@<)^stSkJ zON^Oq!w%Ov(8_B822PK#l<_N;}Oug7@f3_)~Jc+kX>b|iG6^X>fQ^fIZgMeiPZ(9gHN_won3>fM z6lq26`lQ&yAvz#nx^)c^HL&HHsRS|!yq_fVQ>>CiC504?oNML&cB@Q1OHK)%N4bse zA#vC@q^@*~eDn&5C1EQrbW`bs4atmH9!vcBw(`0=I>y9gv;rK;NhqNI0AZKf_54I) zlM)pc@5tm_&q~T>XfNfj|*U-oeEOQAB+l zvW@9f)2#!M)VPXS!OB9IG%RQyGc}L!(<96 z-)hnr3qye$1rb2h>%yiZmtA`srd*CyeLULz7Wt{^Vy1c{EKGDaUa5Fm>G zSQ^l+_6Cck+~i>MHuP3QvE!H&bS1aXG9LDqCc77_Zso3cgha$Z#J8S4H3OKI7B5r8 zHN~mL3rKj_EMBGtil8%>QzN>|E&R=Pj3m2u@wYQ0i$pHj99aih`bb)NY@j7mS}T7k zDg%wdF_liG*oT^oVdH4U6RhrW)pr4u@{wd+IZbL>=iz9!RaAjJrwRv!d= zQ;684{_*iKKme{$?s68wl!7xLjpLgg(a72W{r~)t)vlO(AGqXqV{UaI%igM;zG&d<}S3r^zGZ z>)nuj_?!Bv6|N#px z(0`1Xj-Oa+=F)~p^x?c3PGkv{8=STnRUp7heOW&!0rPT^aJOLt_Z-lj)xg{?_U2_s zuHLWzLLWicB|zM~z-M~j{)j*Nqb1Memw(S@+*wdCS}z9 z31llZ$P#C}*$2wz#OXN$@)4Ma-*&Sg_^$!`@JiLx6lZenl3shd_LYG{5LkKFkn>I- z_&B20#Y0WAz$*yMQ)I9G0oMIE&f&XzN6P^*O$MA3<}dTCa(Fq9W=4Uhk0a5FEy$m& z=jL}>AIk!sbb7fgTGFrO zdf^I<1j$c$`N)P?0-)FFL!QQ(*HI^U^qq88HYazm7s7D?e=m;2P#^W7 zk4{wwdKg*A+Ne+^O;(peouv~(_W%o{f`Gxt!=ix~FzIN^}&m)?A^aeB}@&=gp`55|J6qUe6p@IMK#s1+LxtwWd}e@@~UqJvFxh zLZqchYt*DXquB$j74lUGTkSxON=CNAGKr-s%2qSqQOSt5wk9nB7;U)E)q?m(B=Ubc~)tKz)MmadmW01ZwmY2vMQIls8bHaA1irWZBk30 zU^%dFQ70-KmEeq!WCub1kT{D$#-N$xnKg5UOH$=Y3#Ut389CC7g}p-ly97eL`X#*U)}*T4K9 DerlZu literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..8cf1ee98ca6f07c31c6d0af9cf6269476f2a27ca GIT binary patch literal 8544 zcmd6sVQgDh6~}MvG-Rb}>MXPoWJxq4RG>9+R_HnkeNEae6l`E#k4766-mfN(jfplIbGAQVl?#Ek((}`8rFS-3!3N zz(%Cb6z2k_{CcY?-VQdNM=gY-DHNDmIPu4tGBWl#Kz_p9+)@B7#^bY9;&C1PLwg`z zG4BlkaNa@JiZS(67hd-4{jiSXi?MsCgmEc4R_QNGR_V{q{?hH>w)6QwYw0lup0 z4D?;tXcd->xyW;^CA+-57XvkU$Bk#>&2tdX1+W=1Q~fr?_a}aQO@3~=rIc^9%5yOG zJd6YLg|#;Mc^K~!#H;`@oQIgbP$$-Wqbbi1nqpxy)E_|IXmIX%aG}YW_SU?yermyi zm?8sTiqB(wUiLJ&AGW~_jtRQH89$&Dz^)r-*c0pv?y1|s=JPMW{9gp0WQ#! zbAg9S-d;2LS0I*i5X(HoZVr5(gZa;a?_M8dZ6(N+BE}W>;-!~N5$2Tt-tzJ`+$&f< z&Uv`F{L6*K87m9=_%6w?D`{gtgRp_@^bxMOfSCU~PX2 z>+0tt*wFiN11+S#AJ@poJmduK!5`~<+iGycKl9do zkaWtn1{aZ zxe4<@UoSld{&mCIPS2!OJ_aji3i|bND||-x#xf@o;XWsxm>7I!$=!$gAqTgOUqaK)3MaxZA`X}Y=uP2DQ!tyeY9v#NCS^t{Ry z?mbs){PURauzr96)vQk|&iXBC2-deN&ibQ@vp%gj>n|(L`fG}_J}r|1d}jS=#aVw@ zan@f`ob~W7x1z9qR&mzfP@MH8#aTb=3H&iwe@=1Mzpps!ONz6;Pi;BY4=B!hy%kyC zthOTS`xIyWfa0uwUvbu#6lZ<=C;ZU34c2!mjyHp54d`-yTDm6O4^)QqWP$Y%=l2&^ z3?I+HpJsUPOcj2m3V){x|5p`W2Z2~?+^#A-T7?f*;U}u_UsT~2s_@?eZ-n#E&pWur zatG=VtW2|a>3{Bqd|PW?N#JOQ_uEzKaiNMH^BL`1zGbfwfP6zcysw_6`+I?}HSTwS zqn$ow=V!!^D*kR2JO3g5sM7C+jf?gt6+a1lEq_eMu<4le9#gqwBsaDvHwK?wxg2^>og2u@wIlY}_(;keA05JhvvFrU zmayR=nHxJqSGlo+;}c03egtcv5ql_+%1k(MgGMIO!}f?1OU6Azh+=6wEzG8!v7~1* zI+0Gq?PHx$-@;wT?T%&Qb{Ym++t|r;JYyfqjoL%0aW(izER%J;Lsz6P)u!kUmCNRi zR}38=vM0vVS=))QrB2(m>%Ljs(~^y(oF}8HW5?o7DmUR-UT~KQPHtxp${BS!Zl0+mjm4++`;m>#1ynb(y|@zbYyDh#wbs zfy9<~cWKl)0vYnudK|2bQOUb|pI)W+-5vA}mWqGIw9q-W8_xHg;!JC&_M?h-3Vm4U zcL}}Zdxic>LT?GZ2i{BA;i%wW z7IsDj|BB$Ji0k>z5NH4Sd%`Sn_MiFNRqVi{-z_*Vxld||>;2P29LIfB_}NSx$CZ2s zag2kUZ>O*WxBPdFUBZs!2b4aIH=)399&X|JG9MlD{VOE8-^fl3ydP&y8Ee^?YmTdm`_D{@z$moc9Csr-^GjQ_4<>;(JQjVLq$$ z{C)W6O3(Z?;`-cpgSb97{z_b*8#e@(c~lZyo*PZ{y;aY*gSa0zy53H;A2+&wnrdw) zOPuY@Qrsq$9p?guP4s&VctRbvhnZ}N4~W)lZ_31*Mx^s$z*&yO9Otys-1kL?d)5#sCA0=3E$v- zz}KIF1|G2%1FB!;e<(lT0jw}4+@JRi?hWLW{?PKuRT_7e0oB}}@#mni=J+k1qK_5= z$Hy_aKaY>k9AtX@0T#kNS^RY+h&hW)zN_Lb?vMV-!e-gdioGI)KVqR^*yMhU`-yR0 zG3Wl97*NgqWlgVkE0nV|KA*=M;V$L}yT$S2xUT377h4)U@)A9N`96=!*CA-=*t_@W NA3EP=A=SG7e*spLDB1u3 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi new file mode 100644 index 0000000000000000000000000000000000000000..a8bacccdde76416b4291ce406511f6b8432f4ee4 GIT binary patch literal 46483 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 Axc~qF literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o new file mode 100644 index 0000000000000000000000000000000000000000..8cf1ee98ca6f07c31c6d0af9cf6269476f2a27ca GIT binary patch literal 8544 zcmd6sVQgDh6~}MvG-Rb}>MXPoWJxq4RG>9+R_HnkeNEae6l`E#k4766-mfN(jfplIbGAQVl?#Ek((}`8rFS-3!3N zz(%Cb6z2k_{CcY?-VQdNM=gY-DHNDmIPu4tGBWl#Kz_p9+)@B7#^bY9;&C1PLwg`z zG4BlkaNa@JiZS(67hd-4{jiSXi?MsCgmEc4R_QNGR_V{q{?hH>w)6QwYw0lup0 z4D?;tXcd->xyW;^CA+-57XvkU$Bk#>&2tdX1+W=1Q~fr?_a}aQO@3~=rIc^9%5yOG zJd6YLg|#;Mc^K~!#H;`@oQIgbP$$-Wqbbi1nqpxy)E_|IXmIX%aG}YW_SU?yermyi zm?8sTiqB(wUiLJ&AGW~_jtRQH89$&Dz^)r-*c0pv?y1|s=JPMW{9gp0WQ#! zbAg9S-d;2LS0I*i5X(HoZVr5(gZa;a?_M8dZ6(N+BE}W>;-!~N5$2Tt-tzJ`+$&f< z&Uv`F{L6*K87m9=_%6w?D`{gtgRp_@^bxMOfSCU~PX2 z>+0tt*wFiN11+S#AJ@poJmduK!5`~<+iGycKl9do zkaWtn1{aZ zxe4<@UoSld{&mCIPS2!OJ_aji3i|bND||-x#xf@o;XWsxm>7I!$=!$gAqTgOUqaK)3MaxZA`X}Y=uP2DQ!tyeY9v#NCS^t{Ry z?mbs){PURauzr96)vQk|&iXBC2-deN&ibQ@vp%gj>n|(L`fG}_J}r|1d}jS=#aVw@ zan@f`ob~W7x1z9qR&mzfP@MH8#aTb=3H&iwe@=1Mzpps!ONz6;Pi;BY4=B!hy%kyC zthOTS`xIyWfa0uwUvbu#6lZ<=C;ZU34c2!mjyHp54d`-yTDm6O4^)QqWP$Y%=l2&^ z3?I+HpJsUPOcj2m3V){x|5p`W2Z2~?+^#A-T7?f*;U}u_UsT~2s_@?eZ-n#E&pWur zatG=VtW2|a>3{Bqd|PW?N#JOQ_uEzKaiNMH^BL`1zGbfwfP6zcysw_6`+I?}HSTwS zqn$ow=V!!^D*kR2JO3g5sM7C+jf?gt6+a1lEq_eMu<4le9#gqwBsaDvHwK?wxg2^>og2u@wIlY}_(;keA05JhvvFrU zmayR=nHxJqSGlo+;}c03egtcv5ql_+%1k(MgGMIO!}f?1OU6Azh+=6wEzG8!v7~1* zI+0Gq?PHx$-@;wT?T%&Qb{Ym++t|r;JYyfqjoL%0aW(izER%J;Lsz6P)u!kUmCNRi zR}38=vM0vVS=))QrB2(m>%Ljs(~^y(oF}8HW5?o7DmUR-UT~KQPHtxp${BS!Zl0+mjm4++`;m>#1ynb(y|@zbYyDh#wbs zfy9<~cWKl)0vYnudK|2bQOUb|pI)W+-5vA}mWqGIw9q-W8_xHg;!JC&_M?h-3Vm4U zcL}}Zdxic>LT?GZ2i{BA;i%wW z7IsDj|BB$Ji0k>z5NH4Sd%`Sn_MiFNRqVi{-z_*Vxld||>;2P29LIfB_}NSx$CZ2s zag2kUZ>O*WxBPdFUBZs!2b4aIH=)399&X|JG9MlD{VOE8-^fl3ydP&y8Ee^?YmTdm`_D{@z$moc9Csr-^GjQ_4<>;(JQjVLq$$ z{C)W6O3(Z?;`-cpgSb97{z_b*8#e@(c~lZyo*PZ{y;aY*gSa0zy53H;A2+&wnrdw) zOPuY@Qrsq$9p?guP4s&VctRbvhnZ}N4~W)lZ_31*Mx^s$z*&yO9Otys-1kL?d)5#sCA0=3E$v- zz}KIF1|G2%1FB!;e<(lT0jw}4+@JRi?hWLW{?PKuRT_7e0oB}}@#mni=J+k1qK_5= z$Hy_aKaY>k9AtX@0T#kNS^RY+h&hW)zN_Lb?vMV-!e-gdioGI)KVqR^*yMhU`-yR0 zG3Wl97*NgqWlgVkE0nV|KA*=M;V$L}yT$S2xUT377h4)U@)A9N`96=!*CA-=*t_@W NA3EP=A=SG7e*spLDB1u3 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..c00bee456bbe825a6b63f561fada23cb8b7142e4 GIT binary patch literal 24339 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 VmT^@yi-}cFQJ4ItN`6!JzX3R(esKT* literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..ff0e20417d0f6b217b29c0649fe41a13fe21b8f6 GIT binary patch literal 48968 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

      2dubqSbM$+-KP4_@| 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 Yj)!5#^gW$x|93~?YtBdLfAjkP24pZQ6aWAK literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi new file mode 100644 index 0000000000000000000000000000000000000000..eb5e0b45609bf57a098ee5dad8d309ac3efc57ad GIT binary patch literal 24336 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

      2dubqSbM$+-KP4_@| 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 Yj)!5#^gW$x|93~?YtBdLfAjkP24pZQ6aWAK literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..b66cf7ebeb1d2d47f1e95c99d0a4d260dbb5fb83 GIT binary patch literal 7203 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi new file mode 100644 index 0000000000000000000000000000000000000000..b1cb1c812b115b94f9390d197d61f2afffde502d GIT binary patch literal 7200 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 QcMqwhu{M_2_9~%!w1uFQDJYMe#06f_0WqV*P z&hqf!vSoE@w>O*cP4Ta+#Ua3ht7|w_veT0{Wc-f9_}=2{dH*2p`V#do{&sL5+`0R> zFv5p8Z;ua%yT0xG!%5exCik0kw@L9oXmV~?)V8%rxvx<(G1WmiImvVojps(!=i)xU z0QXsxWMzF)Y4|)%ntWEJd4z|mNss3eI4(~hSsDgG_g1qW5n za}$qInyQmi(Tx6PKvg=6)g(4CsBvARU6MiWpo-FHwRiY#RGT>Y0xBu2ZV0+u56?ehzPw{X3t15@5Pa&%l`+M!_t5N literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..d986ba41bd568541d079973adad6c7489267db67 GIT binary patch literal 23741 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 Y8Ou+!Fv%X77*2%q7 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 Y8O_^MFjyB92Ic?h^V8hX_#+zzTJY1%D7&{ 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 Hf06$I{1UYq literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o new file mode 100644 index 0000000000000000000000000000000000000000..cbc872f3e788651ffdde3c456c9e26afa259c953 GIT binary patch literal 31864 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 dJZHr3C>Q(uxXZ?#e=FMRDL&_Y_= 810 +{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-} +#endif +{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} +{-# OPTIONS_GHC -w #-} +module Paths_hasql ( + version, + getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, + getDataFileName, getSysconfDir + ) where + + +import qualified Control.Exception as Exception +import qualified Data.List as List +import Data.Version (Version(..)) +import System.Environment (getEnv) +import Prelude + + +#if defined(VERSION_base) + +#if MIN_VERSION_base(4,0,0) +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#else +catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a +#endif + +#else +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#endif +catchIO = Exception.catch + +version :: Version +version = Version [1,9,1,2] [] + +getDataFileName :: FilePath -> IO FilePath +getDataFileName name = do + dir <- getDataDir + return (dir `joinFileName` name) + +getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath + + + + +bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath +bindir = "/home/deepak/.cabal/bin" +libdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2-inplace" +dynlibdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a" +datadir = "/home/deepak/.cabal/share/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" +libexecdir = "/home/deepak/.cabal/libexec/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" +sysconfdir = "/home/deepak/.cabal/etc" + +getBinDir = catchIO (getEnv "hasql_bindir") (\_ -> return bindir) +getLibDir = catchIO (getEnv "hasql_libdir") (\_ -> return libdir) +getDynLibDir = catchIO (getEnv "hasql_dynlibdir") (\_ -> return dynlibdir) +getDataDir = catchIO (getEnv "hasql_datadir") (\_ -> return datadir) +getLibexecDir = catchIO (getEnv "hasql_libexecdir") (\_ -> return libexecdir) +getSysconfDir = catchIO (getEnv "hasql_sysconfdir") (\_ -> return sysconfdir) + + + +joinFileName :: String -> String -> FilePath +joinFileName "" fname = fname +joinFileName "." fname = fname +joinFileName dir "" = dir +joinFileName dir fname + | isPathSeparator (List.last dir) = dir ++ fname + | otherwise = dir ++ pathSeparator : fname + +pathSeparator :: Char +pathSeparator = '/' + +isPathSeparator :: Char -> Bool +isPathSeparator c = c == '/' diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h new file mode 100644 index 0000000000..88e2250d88 --- /dev/null +++ b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h @@ -0,0 +1,373 @@ +/* DO NOT EDIT: This file is automatically generated by Cabal */ + +/* package hasql-1.9.1.2 */ +#ifndef VERSION_hasql +#define VERSION_hasql "1.9.1.2" +#endif /* VERSION_hasql */ +#ifndef MIN_VERSION_hasql +#define MIN_VERSION_hasql(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 9 || \ + (major1) == 1 && (major2) == 9 && (minor) <= 1) +#endif /* MIN_VERSION_hasql */ +/* package aeson-2.2.3.0 */ +#ifndef VERSION_aeson +#define VERSION_aeson "2.2.3.0" +#endif /* VERSION_aeson */ +#ifndef MIN_VERSION_aeson +#define MIN_VERSION_aeson(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 2 || \ + (major1) == 2 && (major2) == 2 && (minor) <= 3) +#endif /* MIN_VERSION_aeson */ +/* package attoparsec-0.14.4 */ +#ifndef VERSION_attoparsec +#define VERSION_attoparsec "0.14.4" +#endif /* VERSION_attoparsec */ +#ifndef MIN_VERSION_attoparsec +#define MIN_VERSION_attoparsec(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 14 || \ + (major1) == 0 && (major2) == 14 && (minor) <= 4) +#endif /* MIN_VERSION_attoparsec */ +/* package base-4.21.0.0 */ +#ifndef VERSION_base +#define VERSION_base "4.21.0.0" +#endif /* VERSION_base */ +#ifndef MIN_VERSION_base +#define MIN_VERSION_base(major1,major2,minor) (\ + (major1) < 4 || \ + (major1) == 4 && (major2) < 21 || \ + (major1) == 4 && (major2) == 21 && (minor) <= 0) +#endif /* MIN_VERSION_base */ +/* package bytestring-0.12.2.0 */ +#ifndef VERSION_bytestring +#define VERSION_bytestring "0.12.2.0" +#endif /* VERSION_bytestring */ +#ifndef MIN_VERSION_bytestring +#define MIN_VERSION_bytestring(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 12 || \ + (major1) == 0 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_VERSION_bytestring */ +/* package bytestring-strict-builder-0.4.5.8 */ +#ifndef VERSION_bytestring_strict_builder +#define VERSION_bytestring_strict_builder "0.4.5.8" +#endif /* VERSION_bytestring_strict_builder */ +#ifndef MIN_VERSION_bytestring_strict_builder +#define MIN_VERSION_bytestring_strict_builder(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 4 || \ + (major1) == 0 && (major2) == 4 && (minor) <= 5) +#endif /* MIN_VERSION_bytestring_strict_builder */ +/* package containers-0.7 */ +#ifndef VERSION_containers +#define VERSION_containers "0.7" +#endif /* VERSION_containers */ +#ifndef MIN_VERSION_containers +#define MIN_VERSION_containers(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 7 || \ + (major1) == 0 && (major2) == 7 && (minor) <= 0) +#endif /* MIN_VERSION_containers */ +/* package contravariant-1.5.5 */ +#ifndef VERSION_contravariant +#define VERSION_contravariant "1.5.5" +#endif /* VERSION_contravariant */ +#ifndef MIN_VERSION_contravariant +#define MIN_VERSION_contravariant(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 5 || \ + (major1) == 1 && (major2) == 5 && (minor) <= 5) +#endif /* MIN_VERSION_contravariant */ +/* package dlist-1.0 */ +#ifndef VERSION_dlist +#define VERSION_dlist "1.0" +#endif /* VERSION_dlist */ +#ifndef MIN_VERSION_dlist +#define MIN_VERSION_dlist(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 0 || \ + (major1) == 1 && (major2) == 0 && (minor) <= 0) +#endif /* MIN_VERSION_dlist */ +/* package hashable-1.5.0.0 */ +#ifndef VERSION_hashable +#define VERSION_hashable "1.5.0.0" +#endif /* VERSION_hashable */ +#ifndef MIN_VERSION_hashable +#define MIN_VERSION_hashable(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 5 || \ + (major1) == 1 && (major2) == 5 && (minor) <= 0) +#endif /* MIN_VERSION_hashable */ +/* package hashtables-1.4.2 */ +#ifndef VERSION_hashtables +#define VERSION_hashtables "1.4.2" +#endif /* VERSION_hashtables */ +#ifndef MIN_VERSION_hashtables +#define MIN_VERSION_hashtables(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 4 || \ + (major1) == 1 && (major2) == 4 && (minor) <= 2) +#endif /* MIN_VERSION_hashtables */ +/* package iproute-1.7.15 */ +#ifndef VERSION_iproute +#define VERSION_iproute "1.7.15" +#endif /* VERSION_iproute */ +#ifndef MIN_VERSION_iproute +#define MIN_VERSION_iproute(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 7 || \ + (major1) == 1 && (major2) == 7 && (minor) <= 15) +#endif /* MIN_VERSION_iproute */ +/* package mtl-2.3.1 */ +#ifndef VERSION_mtl +#define VERSION_mtl "2.3.1" +#endif /* VERSION_mtl */ +#ifndef MIN_VERSION_mtl +#define MIN_VERSION_mtl(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 3 || \ + (major1) == 2 && (major2) == 3 && (minor) <= 1) +#endif /* MIN_VERSION_mtl */ +/* package postgresql-binary-0.14.0.1 */ +#ifndef VERSION_postgresql_binary +#define VERSION_postgresql_binary "0.14.0.1" +#endif /* VERSION_postgresql_binary */ +#ifndef MIN_VERSION_postgresql_binary +#define MIN_VERSION_postgresql_binary(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 14 || \ + (major1) == 0 && (major2) == 14 && (minor) <= 0) +#endif /* MIN_VERSION_postgresql_binary */ +/* package postgresql-libpq-0.11.0.0 */ +#ifndef VERSION_postgresql_libpq +#define VERSION_postgresql_libpq "0.11.0.0" +#endif /* VERSION_postgresql_libpq */ +#ifndef MIN_VERSION_postgresql_libpq +#define MIN_VERSION_postgresql_libpq(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 11 || \ + (major1) == 0 && (major2) == 11 && (minor) <= 0) +#endif /* MIN_VERSION_postgresql_libpq */ +/* package profunctors-5.6.3 */ +#ifndef VERSION_profunctors +#define VERSION_profunctors "5.6.3" +#endif /* VERSION_profunctors */ +#ifndef MIN_VERSION_profunctors +#define MIN_VERSION_profunctors(major1,major2,minor) (\ + (major1) < 5 || \ + (major1) == 5 && (major2) < 6 || \ + (major1) == 5 && (major2) == 6 && (minor) <= 3) +#endif /* MIN_VERSION_profunctors */ +/* package scientific-0.3.8.0 */ +#ifndef VERSION_scientific +#define VERSION_scientific "0.3.8.0" +#endif /* VERSION_scientific */ +#ifndef MIN_VERSION_scientific +#define MIN_VERSION_scientific(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 3 || \ + (major1) == 0 && (major2) == 3 && (minor) <= 8) +#endif /* MIN_VERSION_scientific */ +/* package text-2.1.2 */ +#ifndef VERSION_text +#define VERSION_text "2.1.2" +#endif /* VERSION_text */ +#ifndef MIN_VERSION_text +#define MIN_VERSION_text(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 1 || \ + (major1) == 2 && (major2) == 1 && (minor) <= 2) +#endif /* MIN_VERSION_text */ +/* package text-builder-1.0.0.4 */ +#ifndef VERSION_text_builder +#define VERSION_text_builder "1.0.0.4" +#endif /* VERSION_text_builder */ +#ifndef MIN_VERSION_text_builder +#define MIN_VERSION_text_builder(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 0 || \ + (major1) == 1 && (major2) == 0 && (minor) <= 0) +#endif /* MIN_VERSION_text_builder */ +/* package time-1.14 */ +#ifndef VERSION_time +#define VERSION_time "1.14" +#endif /* VERSION_time */ +#ifndef MIN_VERSION_time +#define MIN_VERSION_time(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 14 || \ + (major1) == 1 && (major2) == 14 && (minor) <= 0) +#endif /* MIN_VERSION_time */ +/* package transformers-0.6.1.2 */ +#ifndef VERSION_transformers +#define VERSION_transformers "0.6.1.2" +#endif /* VERSION_transformers */ +#ifndef MIN_VERSION_transformers +#define MIN_VERSION_transformers(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 6 || \ + (major1) == 0 && (major2) == 6 && (minor) <= 1) +#endif /* MIN_VERSION_transformers */ +/* package uuid-1.3.16 */ +#ifndef VERSION_uuid +#define VERSION_uuid "1.3.16" +#endif /* VERSION_uuid */ +#ifndef MIN_VERSION_uuid +#define MIN_VERSION_uuid(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 3 || \ + (major1) == 1 && (major2) == 3 && (minor) <= 16) +#endif /* MIN_VERSION_uuid */ +/* package vector-0.13.2.0 */ +#ifndef VERSION_vector +#define VERSION_vector "0.13.2.0" +#endif /* VERSION_vector */ +#ifndef MIN_VERSION_vector +#define MIN_VERSION_vector(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 13 || \ + (major1) == 0 && (major2) == 13 && (minor) <= 2) +#endif /* MIN_VERSION_vector */ +/* package witherable-0.5 */ +#ifndef VERSION_witherable +#define VERSION_witherable "0.5" +#endif /* VERSION_witherable */ +#ifndef MIN_VERSION_witherable +#define MIN_VERSION_witherable(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 5 || \ + (major1) == 0 && (major2) == 5 && (minor) <= 0) +#endif /* MIN_VERSION_witherable */ + +/* tool alex-3.5.2.0 */ +#ifndef TOOL_VERSION_alex +#define TOOL_VERSION_alex "3.5.2.0" +#endif /* TOOL_VERSION_alex */ +#ifndef MIN_TOOL_VERSION_alex +#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\ + (major1) < 3 || \ + (major1) == 3 && (major2) < 5 || \ + (major1) == 3 && (major2) == 5 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_alex */ +/* tool doctest-0.23.0 */ +#ifndef TOOL_VERSION_doctest +#define TOOL_VERSION_doctest "0.23.0" +#endif /* TOOL_VERSION_doctest */ +#ifndef MIN_TOOL_VERSION_doctest +#define MIN_TOOL_VERSION_doctest(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 23 || \ + (major1) == 0 && (major2) == 23 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_doctest */ +/* tool gcc-12 */ +#ifndef TOOL_VERSION_gcc +#define TOOL_VERSION_gcc "12" +#endif /* TOOL_VERSION_gcc */ +#ifndef MIN_TOOL_VERSION_gcc +#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ + (major1) < 12 || \ + (major1) == 12 && (major2) < 0 || \ + (major1) == 12 && (major2) == 0 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_gcc */ +/* tool ghc-9.12.2 */ +#ifndef TOOL_VERSION_ghc +#define TOOL_VERSION_ghc "9.12.2" +#endif /* TOOL_VERSION_ghc */ +#ifndef MIN_TOOL_VERSION_ghc +#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_ghc */ +/* tool ghc-pkg-9.12.2 */ +#ifndef TOOL_VERSION_ghc_pkg +#define TOOL_VERSION_ghc_pkg "9.12.2" +#endif /* TOOL_VERSION_ghc_pkg */ +#ifndef MIN_TOOL_VERSION_ghc_pkg +#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_ghc_pkg */ +/* tool haddock-2.30.0 */ +#ifndef TOOL_VERSION_haddock +#define TOOL_VERSION_haddock "2.30.0" +#endif /* TOOL_VERSION_haddock */ +#ifndef MIN_TOOL_VERSION_haddock +#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 30 || \ + (major1) == 2 && (major2) == 30 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_haddock */ +/* tool happy-2.1.4 */ +#ifndef TOOL_VERSION_happy +#define TOOL_VERSION_happy "2.1.4" +#endif /* TOOL_VERSION_happy */ +#ifndef MIN_TOOL_VERSION_happy +#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 1 || \ + (major1) == 2 && (major2) == 1 && (minor) <= 4) +#endif /* MIN_TOOL_VERSION_happy */ +/* tool hpc-0.69 */ +#ifndef TOOL_VERSION_hpc +#define TOOL_VERSION_hpc "0.69" +#endif /* TOOL_VERSION_hpc */ +#ifndef MIN_TOOL_VERSION_hpc +#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 69 || \ + (major1) == 0 && (major2) == 69 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_hpc */ +/* tool hsc2hs-0.68.10 */ +#ifndef TOOL_VERSION_hsc2hs +#define TOOL_VERSION_hsc2hs "0.68.10" +#endif /* TOOL_VERSION_hsc2hs */ +#ifndef MIN_TOOL_VERSION_hsc2hs +#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 68 || \ + (major1) == 0 && (major2) == 68 && (minor) <= 10) +#endif /* MIN_TOOL_VERSION_hsc2hs */ +/* tool pkg-config-1.8.1 */ +#ifndef TOOL_VERSION_pkg_config +#define TOOL_VERSION_pkg_config "1.8.1" +#endif /* TOOL_VERSION_pkg_config */ +#ifndef MIN_TOOL_VERSION_pkg_config +#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 8 || \ + (major1) == 1 && (major2) == 8 && (minor) <= 1) +#endif /* MIN_TOOL_VERSION_pkg_config */ +/* tool runghc-9.12.2 */ +#ifndef TOOL_VERSION_runghc +#define TOOL_VERSION_runghc "9.12.2" +#endif /* TOOL_VERSION_runghc */ +#ifndef MIN_TOOL_VERSION_runghc +#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_runghc */ +/* tool strip-2.40 */ +#ifndef TOOL_VERSION_strip +#define TOOL_VERSION_strip "2.40" +#endif /* TOOL_VERSION_strip */ +#ifndef MIN_TOOL_VERSION_strip +#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 40 || \ + (major1) == 2 && (major2) == 40 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_strip */ + +#ifndef CURRENT_PACKAGE_KEY +#define CURRENT_PACKAGE_KEY "hasql-1.9.1.2-inplace" +#endif /* CURRENT_packageKey */ +#ifndef CURRENT_COMPONENT_ID +#define CURRENT_COMPONENT_ID "hasql-1.9.1.2-inplace" +#endif /* CURRENT_COMPONENT_ID */ +#ifndef CURRENT_PACKAGE_VERSION +#define CURRENT_PACKAGE_VERSION "1.9.1.2" +#endif /* CURRENT_PACKAGE_VERSION */ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so new file mode 100755 index 0000000000000000000000000000000000000000..77223cd47e891bb695e7a6832229182a6297ec24 GIT binary patch literal 2055760 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 == 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

      TC441)D!9JB)Nt+7!sADq^$gDH&PQKIhH&jO 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

      h(XDKxQ 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

      >aW*$*lvpC<>wNo4^Zb2@B?4XDjU`$L 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

      GH&@{o#D;E9o$C1^M{-xnIKv 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 -qyiyGwTc;YJm-NOGd==-}_-wXY&8?(Mg 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Μ*$`&#Pg7RK~KBrq+`~?lMRUrPBKSXxT5%URN%M; zS7=B(54j+CmMc0JFzdWHx8PiWx)xt(@%eimk}G(uFFLuHweaLZ;)0XQQD#^4>RP2$ zt#!Jp85{|Lvp;Gk1kUp?lMp;leo6?QBa?4z8oZVeIJ?&p0_X8sLhw9ZO9-CBYg_8= zTBF{qsq$Jv;Ot&Y2%N`j3BmJtEg^UguWhS!yV@yMgJHA#Y%pvdmkox_y*bDwGi%4^{bW1a{IdS-m#iStGP+F%1$*ay;di#X|)cz>eNi9Q!2Qn z(;81AZD>`Tm9RJ^m1TeYnj~ZUjefPb^l)rSOMUg!W~LO9afj<{ot;u^@F1(o=1y%K zdJ$V|-Kj?A-g8(gM`NLNmS_gwBL$+l(z%*MQLA(OD(~UDtWX)X1`&l?378bgHtE$6 zBzXoE!kGO&g36kREq5y!1RU#_iW+@8C#^>*~!7jXKQN zybgMr}G z#aHFFe-65$70jP6W>rvCRA*%@)`6Ou0Mv`M^r|%V7<9=PBT=QC$54P8Yc&ZJQ)6we zMB!zRZt~xFomcH`xMc&aOUu*mNhB+Z$4x{A4b2L{RB52e(;-W;%QV$3P(k!4@^sP$ zw3%`%2(xFLG=e>pS& zWrdQi0G)`*t`hhu?C%ug_K>asGo^MmTbuPpj^6e_K5)TJ=?@G!`q@be7?TGSFf`g2 z+GPKDr!~pBR^LsMEGBiRJ=beO1QsRasw3)|pnYzZH>|TWENcpsOW>!0UDvsTMOnBg z*z!=35(7j(Z{!6$d?ag4#FodA1mX(2LSOb~Wu1rox4kx<`Gp*$wD%;Fpe<%rKqFgSRtJ7pe^W`}h z4gX+m?@i^#ROTtsS)RYb#FzZq`lKV*eQ2MRVC}@ZTXO>gH^)_>2!wto}it+4oD;`RylRukf56-#}$y6f+D+* zc!hGmzOK>0=_Ao%IM>n3-qVOP)tXb2muKGcZZNDi-tl^^QN2PLu?w8N(-_w}dQ`PD zWbY~t=uin(ELj-(y8{kw8ep5ZwYA5nLTisD{_Ce24P4QAL+AQd&qCDSeSNFRY(^r| z$-?3arOmUZa*b)buG1;+wdvp}EPjAl^zBx+-pg?k$Y4>yCZ1^Yy4)=CN7mLPu8Jhc z@iY}Dfw`42p3Dc74AM|GRT{&gO_qctYBO*@x-fO~^tye2V4spQNuF-tAWeTa6&!u* zOl8li2UQ{#JsgEq53W{i$rG!gZB(p~Yc*_C(1>CaXz?)+SUt?00h1bT3A9a}v9cD=}s}j7r2Zs?i+L9$U>~ zwah$GU)E||5lysfMU09R(h}Jfac#TN6vtsrV!I+?f5&J}$YV7rBvLEnp6oBv^=K)q zwrX_2^&J5he2qc#H8!W^nFAGXB%S7YmOLf|&pdXR7}k_z2A8Wn4zF(TNHe9?VQ8)0 zM4+>r18XCPJ*;X?w+CIu(d>AVN5QoURQNGZXMYr2t3VmYRdkUDLA4R%U~T5rCvmq2 zK`jxl)>(`ZuT~c{*n0s9bWw9)i`Cj94od4=Q@zP9q}JYvE^Jtr{oQ;#gK=P67Y)1N1-g{6xL+D z!Elq!)}*KK7TX<#-u@uCMFB&y>uYz+Gdd0|L&#uO!;lG_61JS+D2#4U=ZPwuGp{s1 z2HhSnMFLTaNOgH066N`on^DQca`E@pKa_h3o6(&Qkh)?y5;GuVaHMq8OE!(mpc zake0+C1QQN>hy(ClUk==&jI>R}zHuCXCs|-hBsS=yQnxf9UC^Oz~bWt1L z9-!6A^mb9}TPzn`IjTuvwGJO^wY2^8AgCo`T^7T54dptR<*AFhX?=y=6mQd2xqy-nF&OA zvkJPb5Ne>V$%4cTjvLaJW6&bkc|`*iK}cY5qtig2kQCgifI1li2Wq2-R2*+Ls-3N^ zJ#cP@vO10!v_&#v&>9jlC{t2|H>;pa%TNP#k%ZE)xsKTg=APKZe z(2%n_EpWVAU4&sGmU01>3#qjk0xKJA7g8H7xw=1fo7!PSp>EmT>jiyt4(2PnUoNE9 zaS&Mf#@L0_MjNG<<%NuMxiXiN2Kw$Z*sttxxsY1VL11MTbs@FUipABs`b-k2mEbqX zs#b*;b?a&fw^+=$>6FKz+S7+Q4BG;Q6tqQ(YBL_6L|OBNG_I{yRt8LB+pNN4QPvC| zi!HMSiEQMcR5tn+HmxuWtT?aG^o!srCw~zhjG~Ib`pBcTvq~pK z1bQX#sXus9cgfnHf(9|dw${qkT4y_=mGQ}PTT$mbS4E7OVzHRxJ-R4e>%1Tzr1UCv zrZnq=oZB#{KH}_7?>G9IcL_O@*2PkoIV#6Qqcpgqp4h5P)Aq&5!f%@9JPa&OKrV_$ zvoEI9XMAvsi))GSmsmXk11tIK33H5^j5Qc(h{Q~k=Jj{Me~J|XAv13G>Kqp$bH!yg zEouCeBNe~J%xv@(Q{+RF&`7}?;#p#SNzCo_cNsIS#$1f`r7*WqAMdSGJU@o%s7zmq z_oXlyTA!CDje~g2CQ~mhOaU%Q;UIL>Q`0r)Av30J-q>DD^K>0it$8jsvw2CCgJRey zW<)ZlS=D&kWL45bWEy+?JTihwn&*fWW4NZ7?Fz zCB|b@DH>hWjXgz5MNGO;pCl%8PB!oC9MdY=Cb|H{!~!vPY_V`@ZVI5$C%@J70tr+A|2n5I=Gk!UIb;%V30wFYdLvTbj(lK-hBiNv5x zI3+LlP#P%`5*Uk8Da2tpg9R}5;91KeD4OOXv`A*ju#;0F7HnagSgD7Zm^$@1PY z#h?o%KoHsxePyCnxpm`ot+K6G?oD;oj_`R5Ds^Fdpju~Rrvu9nwIx$>7*v^R)~4HT zLVDnD#WMpX)F4xVYN_4iYh@|Q@o_P$zmnMuJ_ADc;8K8MF&>jjI8q-dr0Yge=E5O= zw#%lE=>>D7jp;yy0UBGbWY<_(IHh#`=g6oq$t?=09&t$r?YpYm>D~fF2IY#UK$9%(SyFe;$S2a(z|?i`jOq>8 zbQF(&47}W3t2hvpf&yQUx<~p^D%6Tu^utt+g*uL1D-Cy#y85B2K%bDv(j|_WX6dm> zPZ!0b8~h&3KgMj$9pkQCjBROuE@E&YTrW{{St}Nr! z7R7`8feaad3G7PfQ#R1SlcfneM2^WATdZg&FK(=eBGzd8N{* z!=ZMj7ev^-j7Tj0FpR`@M{Pr~t`v&L+^(U(#9xm9lf@@VPxD6QVk65q^ki2tHcryT z$}44kkZ#tgY<`1vNQBH4Q{kTH2xC4JLujS}PnQW}%r14Z#ra~JY8%4VnQE9BF0xR5 z4;x-c=nQqU&|mBn#j$gJ6P;L5WyreL+EG^8935ezT$+Zq2O5XD;xVRN=GxRUyzPw2 z7gM2TS<`*66k8c(PO@@c;}3J|2w_8|XmnaN#vNl&4NM0Nm5t5YEW!J`fj~8$P4UAv zOt$!eKp+3jpuM7Q1l=)UMRWQe?mN}5x`<#vCrRmW6=7}dx*exM^&;CcnVXAJO8l`sCd-S4gmx{maI`qN>uE&Vwvrv zh)(^;uaE0ROEujizQQp5qrE0F-6Op=CPQik4_{G^FYXaOFeWR10Ve3{ELPIet;yC7 zC`S$gUuJ4))Jx*2HxNZ)=qASI9)t1)q^_C6vZpZm27CXx&oAPDs@7Edym6D;I1N`+ z^mn^^&GUCe;_ftK03iiEz!kxv8H`~)xQLQLxzi+tN0Ye|sT37h3Qu7wsY+d-l&U`- z1=X8StyNm^t~q}XHi(>qn-#c5v9(-G1t8EXL9gzWncVQ=KQI9wjKZ;42e}7T{j7~_ zw0eJ~D6E|uGpo8pTBNduoDz+6>!wt(sXUuo*NgI5Yz9>vol%p3#Ha{0!B$m>MmL}w z`j$HcIc(b4bhT->UtiZ~;9C*k2)Dk--mw^@2}!bd3kFGY?~Xi3;WjEQfp@r5I> z>A*W@Th!?9zCJp>*+Rt1+|aqc1xFl=?d{dN8HUUU6Q{p>OSw~?%&{V4kRxC)csF;=Wu&_c!O!hGZU zpRhe_=FOCSQ|IK(-k-}u4cQEwlVg8x9eLr(8&Yr&ywa-HZ>v``?<(WlEEo)iT@5;P z>#$}ro{4O#jnB@iR~K!DHxrq+%1!c_3$IrJ-%PgZ(dlhLnKS5=PN-KB{nYK%Cu^B! zqbGTa81!n4Z>vq#cXe7*?Rf68sWu0zUfn(IR%35}YF8`sDAj=1A_l!03HGTKO5`e3 zHJAUpP=mwyh`J633`?Zt6QV6tVMC>zP_JcPZ0To}L@tA&gH^6R(XalRWsVL* zo9$@YH0VzOfmR8u(SyNsU5OImwJMn6=fK*?qazJfB`ON8RRH(u#x2Z(PMJ!HIE7jf zd?CYyN}r+Jd!5YNqQtwF6xL*c^7-6Fo##z-g64XsK`C+ysLNmw+T=K0+_s2y(=_6) zk2oy;=ZPMMinLeZ_eSm&u}Pas@Bmo^hsh#-S8Y>-S@h*An4=Lm#bi({iER4Bs7y-5 z<|tTQEndUg?2Bn-wU3@W&BhUr*)sc+a4-LStbvLv_iU^|2E|;gR1&LKt;1Bk;M{Rr zCb5og;bbt!VN-)htS+@%6TXSF*%Q(jYl4u+rjD4fXLWI?k=n9m%h)oFwOS43Ltqe8 z+w;TFYP0Ljo>FNSQmZor)+adx&b;eoyqK+8uDvqJmT35@xno{c^s8(wXt=8I2 zyXloD+e+0%c&+{+h24l=zi+j}QJ75u7LzpwEA(9xObCc7Na5_wM{VDSZRn0sns3=t5t@Y zSNY1vh19AHf%VTO&GMwSvl#@{YK@`Qp6=DAwUvDkRI4?HR%=c3E|l3i46W6j2-NDk z2E$x$5`or;NC}f2Rx=8)!cnM=7=!k!tjtLiR+|JaxLWaOoKf|bKMJl@U%VO8z3i0) zY9;v1i^>W7&P|sHZsu0-D$$Lrt5)%bB#uJ01eGZ)i*P*-)k<38xH)*qkUv3OczQ#T zeOp>FtQuE9m8FOxzL3%Bj3f)e#g!_3t4p}2BY=Nvja)`HbFltmaVn9{6=bXEp| z^~N-*CJNqKDsz9FM6XOVkxZ#bM4(q9no5&r*ObBX%#&%9&$^U{nZ=O5u&#G?fl-ry z#HfhvwK6+}-%cyvjQBJLn~G>P6zl8hRjZs4q-nnDe$s-a&Q$9eVY0HTuRvoQW zY*G>`b2HuLu8t@ieL(x0zppu|syJwc+ax?nbT zv{{GAqG-)`;69fGRpl-qv!?*D7OJkT)S?sJ-W#^W)NTI}IxEz|<{7!v*rlRTE!qS` zWDE5+C84R&t_p%yyY)sUR+~?~?HmC!}PtuzW%*vKYxyOF9< zy=6n-fLk`SVZ9#A5ioQJ$CK!6o|BASnDbR`)cgJ7l$4akDOzbYrY4)+>uS9+%v~xM z@@NbSL6<|d3sG3LxZnl_DzLJ+-l%Qq z)Y|1vt-7rTGvaWI#j7EA;SNb^AI(WTPfE{=!j`&_9C2f_JzqYajoR+z6n3kh(`XF} zLtzTWh7BE0<;ZkY9`&Qs#9`CG9DQsg36_|v(|Lf%ma;LrtcO=5JtxMA49|*jB7=2t zBCSSo7K1w0w*g^U;DLPOcm~s0Dq$Qo4)n4rLo`-pcxkLz9VXJf7l_gd-Y?J>L)IY% zZT(BZwI#ry|4sU1W}-SKB5`+`7YiYU;k|;-p?R&q95)9yxl<$v7W}Jv72qkL$&*YG ze-GeL9un0~5y(zGAByW<0nDYd`USu&#Hv~{;G1f8%j2~z+po>v0r3g+X%H%LbG7sy?&^n!!R;QJis-)Q}L3!MTBD z%4{11&XHB|z}zmKtnwjv-?VolB01jEOM)%+cC7)6O)MN+Yu%|v&%&^wQHSvmJp;_& zoGdr1jvz;uKsw^aW^KA%tMqEsz#OGNBbs%St*K`3hH*I3FVAr#QYQ$i_ep>EHdr!N z>*yIox+jIZMLWK94!;21E+!__Hk^_w$-}bdaJ3; zoC6$+oH@Xeqrb|I7~r@(`xKZM2m4cN2Zz_%z~L48b91hUnu98GQLkdmLN`avMCQ&_ zkYplYo<|H$ZyB+og}XV{I^|S79#*BjN0EI(U1+~(*m9~bL#mXI5hzp_wSP|4Wk{9k zF#?6^qT$P_x(umOJw~8VJ!xoIY%V^9iZLT| z7mRplMf3v?_eFR}7A=pjP!)5#E8SXk4JU2QpT!3hQnmO4ETPjk*Sp!zlZ)kYX;+-C zh$K|In;W%UZ{$P6!q$4gx@x`KZj|?i0{OF67<6uKjRzCyRc=gVa!K54g}==sbM8ua z<8DrMMFEq6Reld6cP{GJa?H4m@?8Q+5z2InPzFhC%BX_NE}bG>=!9WGQY3pSlg80dH+bFMzP3aq@t9Ro`PwCWq>jSJ0}L8N zJdz>`SY%Y3tw{Bh#VkR!A`(x<5icT&^!Eug{*7~(n$ExQBH0KtKcXoIid^6mXj~lUFqM31 zO+-|bQp%D)sFc3sOD;`{_bSnok-{xea9!m6-O&si)xZTF3lmYOp6TNhT05c_ZaCdY zZA+X+t4#FfOsz;np>}FSp|eADt(9g72AvAAnQ%%aVjOB`8fOP!CO4M!h(K)wYoJYx zsC3BJ?CNw$rc+y&OlP+>$i)R%84wjuOo;B%f4~}f|V<~r(kO3hE}r)E2Cf%X4agZ z7&e#3De3{QZ>{ZuxeT4X`87$W%B5JR)~J=cI-d-N%@uW&_<81Z#*#lz|0NbMM=6JJ zDdlD5a3M5T7Q&L}{K|Bb@=O^_XSuu(i}IY;lden7yp@vFd3w3&y5!8Rpi9sb>E@^& zM4()yvEHorR5ha)Fju6Y?6t7X->zB*HV>=0qbc*5IuJTn^p%NP<<_9jcvG!|s~U5} zo)9>H*$GiU)DkxPlL*H<;QY+zBF@5)KLd1wWm{Vw`-kSHVoggA^mCRmJRX89mfpkY<$S?re%L(N>MK36FgB^V%iDs;r7eBf|WcUNd^*Kta)s7!>0f zK80dH#iz(UtmG5q9@FaAuY-1_-rU8TvTmV4#&u(@4(unIdz3Pj@P_g6;=WhcjLv z-TE?afZJ|0yES{p-Oy_9UEk_W*b@_(t~KXanC%NZH%#Rp^d3k;mlL`-+**WbZu83l{#C%RHippJ-7Pmi2SSz?bip{tLLR*h-(oXu%D zrbuS++R6gTe3Wlj+Dbuu4hYT8vny8~cRJoey&0;U`yn%f8#GUz>9kh1jk}}5?aa=z)l*_BB{Le+XOJ|< zI`)ie=3CG{C#f}Ma94?V?=8%h#neo*k{i=&PsyZdTiZ8}i#*NWX550ngEqM#5wi6uSSdE!ASzUYe zouqCdRd}4(m|DE2xoW6aH2chBt@fD5YE~ucHkefsTxPZUyTyo}T{GCIB^+ZamaPCw zX-k0{ZY@HykgNd3c(AYty_l;2wP-N32(5^!Af>Kt7Nyg*&4N_IVeF!mLaqYT5(Qf^ zRVDVsi#y8*x&oAoy_P7#aWTRI6pY@%6ro+jR)A{aT~iUd3AzH53ws0bTCE7}BwvB* zxtEAV>gNc}3WnCYo~m8HIGKc`Vsl*jn0~PgrEzg{TWR~Zw;xrpzvZz(9p~KdBKv ziL<7$TuYkl%aaEOR|2b;EtukB^EGq9EFM$Z$9Rf1(UvV)wIZsQ0j{D=wT(a|#~ zyYg%(lWdl8m;tRqiXx55v%gKUQRZO^G%Fw}(y%<++zc94)F?-cr%3Z`Z?1|PCGnVw zG|~1Zt)QV6NmHb8ws(3(jn%|>iZsvGYYKZfa`{q@6$jx9pg2*H2HJWite1VX$YUzf zL|X?1)+h#@->5sM@AxK>S$c-WX*R%QQHv8Z-m@R=jWzNt`3ZBs@H}aik&5-`*Eh5} zHL;y!_W8G|6xruh4pLMYGLb|>joD{qa>S8G;8h5NdFlcVBZwHvQ{FgCL_>4m3n9r< zd#7rWwY3VsB=y#)tBGVbU1>>9**s5YnY^bh%*pDR>iZ<`U0!HG%k%g* z=)G&Enw4HF++ncjI%RdCrsf%l88kJa%FAPJtJ~WJ%ip)}ZP%`Cj<>KYi*5P#Yjbq{ zk~n}NM;|nap}+fvYp*tH0Sq=Raxc5wl3+^iRhJ1QH-ken=Q>{p44Y$6G%flZO`oqp zzj`yIh1viNYc#-7G+N!MPA$W;VuB0C8`WDj0Lv{KTJ`ERt8fGR{^(JH9-!m8m{#-E8(T< zjdGadTXq03XLS8WccS8ev!t48&0H3Hag%mF}P^?)%4bSe#7 zr?FB;3S&M%3Zo;C!jv1}1W4G9(N-V=4x2Lq4x2Xu4vRag@aoy*3nVZ(0trlBKmw}^ zI_2gryB{2j*%^+->=DOeam#q4Rkl4%I0lnD9D~Ufjv?2}CV#}hG31$8JMd887;?QC zP1GUR+rdPJJkz=dtk~7--UcW6wrp)_$YRPDA&V(*ge;a~Qg7C5r348~&Oic_ACSQ2 zf}SaF)|*xjTJ5(cKyOt6MFZSGG{)?}G{#K9G{&rvXMxN>r2{@ORlN}2RPjQ1Q{#c* z?R|@o#hNh!U99;cU@>NkT&wt!@&)YdYIvpvm*zTAJV^sna|#NqEhJ|IEY_S6uvlFh zuo%;&*14^08^#6SIuff>9EsH@j>O`Uk9J#4(<2%Zm|TGbCO05~)dgc_AB>ruFlP3` zn8ghZ=&6~!fCMHdAc4sTNMLe7w`Lo=X#j!E1wdeP0T5VRFj=mYt5w@$7;%^!K^!Ju z5QoVft!8bnsZ>lNgUuDlU~>dASlrMo8)pR|fyoI-VDbSHm|QS5S?km*ro7M$IBbpx zIBdQMIE?PFcQC;pj>PH^M`HDeBeA#yCb61w2ZT2{0>Ybo0O5`17cfo%N(3xcR|G6p zhXgDZx3tT>2~)N}0+Tb4z~l!cFu9-w&rCKSAcM^b$YApVGT7YE*t^U4wAF4o4x=j^ zhtV01!{Uw(>^KLL*X=>_1b-Kp4ADtSp7#%_^MxPLi%`LksjdHhZ z%p(Db(J29m(I)|k)g^GOV%_$b+Nte=wLidOc8X&$d&RLB-BPVrdi7Sb+_62bfomcr zt9v3QtBWEgqnlcA&bYNaA&1p9$YFH~aunc>vh}qyNuVRZ{~SY3h~1-PSDh4qfs5`?-qq9PpQh>GxzBQm_)D__orZMIbrZM`3X>2*AfVWpXi{0p!0^VJ*CMK6m*Q@=hZnNC( zPPB|&_ZXGUJuxa<&WTZ(Tm=sXH#To=w)WU2!{Gx4@z^Yjcr0d()p0V%Y}CxCxSF z1E`$4dcolCR8?+vpJQvyfv`C?%BQg7t$Lh)nRlH^44h-Jj0k^Cr!{Ga zUIx#v04{H@^ft7b-MprYkolv9?OH$I5du*YD(mTs24M$?pXDl=a}8s^{7b~f$u?`%5@ z+xWJL)}CU`y*V|(bCjZ#04&Y)`+6nHv6uymISQdsXJ65N2`yAZY=m zWRSF=1l$-lwk{|3YyDawNteVsPbzokNoC|MT;+loDce?SjT&xuR6q{%7z;AoukMO9 zzuxTDIxxSZIP;mY81wf`wcTz~1?b0AMJN_%Re;-=s5qtUNl7j*LM7KURNzg>o-TA$ zD+M(Ug0P5u0o{j4!(yzCJw&)>A&Q{@m1m=$2LlSo=Wr&0e6Gs*AfEc{5F-u!ycr&~ z?Zv=TInF*0Ud}nRk<%yh=Z}IKq*ziG#Hk!LN_8#s6_tINuPAdX{7h7sf+1sJDn?^d z#VHwa=6ZcG%OeOL(ZJ3u%=FZ;n&Lc>8bu*Sz!6Sk<-$2c?oCc{;yw-I0b6eZog?>5JgV^EfG0=ja_@f&i)_;s+`LUm)O)9O%)%KOY`lKT05 zE?TX>UO~co`>u2_oJeyrFIMGY=0lV|_!bgOd&=C;yfqHbZKNlhrdu*z51o zRd6cvFt!)dyheSzw@zPba=Vk_dofMyLk4|O(=dpyP!shP#b64Vs)uW)ns`QvS9S>X zs)ee$+~kYJ;Az($d&W2{X3DPquIy7fm@Ta1^2AY)Df;Xpm3?tC%J^hC^Q^c5-)7Dz zE*67#;}I2GMO)ZpdYO4-?^)iPiNlVcnJJ~q6Y`ec|Nf!aH7vdb_w?_Y)vNKRD?)*t z7l`hpJ4A0q>-`t_%TgSc_8ta*6fE!+VhAG$@8cS*yz;U&sL9aK&I^8Nz%(!+ba&%@D_2~(V&#fe z@2fZ4jdG<{D*f!H4MPB}TCs`+XZc*1Xi2HGu(TjC)WVW5Qb;T;y+V8oZUY~s;c5J@ z9NIvyFZDv);qbwDzXJGTPZq!a4g4(uKls1B7Ysvu2!+J;QNVp! z_wyyy42u(@^u^T(xmOP)2G9O-Au)I~KDBG2(w}U1>XW08yZZI*ume_ibbIG|*gSpP zXa&yM$T;AV7)_ogEs-FsXcE=Du2r4F<2zZ)FvYM)Ul@KXl@`%G;pbzYza1 z!80UyUMKM70)I8!Lojy@(Au_}S}kd>;%}S8gq>sI(?0Yt0_TW%+mu>FAf#krdL<9{T;= z6rSrh4mLtJ{K+_{3x9tH++f)sVSqj#Bf=x}9m8R1=kT0fmlEd3zYp-F%h!J;2qEUz zulp$Q3i{*^j-Ppc3Vz^wmch@@$S>mFm%R>tLyYqci*k6Gr|~xqFFyxs!BXiM5$z*E z%+vVC`m_HK^L>XwM~L)pjtD`xysuDqCWoJg`s1;WeCnGQUiBY$@o(1n z<_gd8_@Dp%&p&-v1OnRmYaBlJOTX5mi*OG*MwUu!0Ba?XPe@Su68Q72V%!?d&O%d+L@nyh$4CVidmY+B$-fP7#O#%x4F~k=)YiCN3UHo; z>;7h+ZWlc>$Ek=Y`{chABEwikOrhL+93<;AexqAY*Cq34*uC4^H40fKaL_j=xG-Yi@457e{yBNer3N7|E}s!(rDqR>(}6cK#VLxl@~+D0RI}Y1?W|N*%ZYJVYSLsv z)>-F>N?60H5`_zxq$x@vi>o4i!u;#{SIelM^=9b*yp!(ngZt%(zeC_vx_>?3@PCP) z=OzgMaS!L;S)QNg4tw&9KTY@*z;gxNbU+du)q7rZ+KkJO&7ZZ;9Nc6n3VtB5>3;A(;ny;mV zBfrEiCET}{`@x7`#U$eMJiy-}zC$d7L9zS*n9N#yv{7!+tPvC8Vub_MUm=-v?{6qA8 zUkbio;L>l01kU5d2ptwUzSrRE2;HE){~YdF{|5yAet{nq_$s)E$31tQqEF<`zSbp$Ae(9eP zfv?8jom8o`N#K_O#?Ogd-jPSv5Byw;_y>psKlTY8S-$QR_)iP@+1??#w}&s~i$u_K z2>wuYc&v|IBlK-E)ieC#BEF$dd>4tn9HH<0G4cA~ZZU<&cUBk=hhIv9m?sg3VVBso zpTh0OAH~Jt8NxauDgNmn42QPkS#^E`B%u|T@@egqZ!NB73)Ny$RF)VZP;_%l? z5bimC=2;II-%HVE#`tmk55r>_mKTTDzKh()@l(dY_wiURS%3B)`&Gt`_xtDt{* z3HY`y0o?aJik_heexAbdhaVn#$u!wL+q|N+mj^SP^1O@ODJtv{r^p=dBA@%k1CP@? zI(*lLb+Oc&-#G$2>$|w;;N9bQ;l1YF@b2*k=Pi5Yj)kS|GYc=e@B0gv+~>dhV}4fk zqVOGN>Fje0-*8{ncaivx4c{?-7s9+B-dnCH?R)$O=e_oskCjT>zXx$2AiLoG;{NZP zSGwnJct`ntz}Jk8%&hv>$jkwFPY2;oplxY(A9!c*uJxDYyH*H??{E*oZ~psI=W_Tb z$u`I)`ekAW)ze`zpfAu4;|JN6<+xem-O%W z!{2>H=j|J>IL5!v6(7qL_4%Ht(s7jD*U~0$z97G=^rsNI2ibX>KbY*5AI5i<%e{mN znjUy(;Nd|X2V?yn&hk4woaN{Ho#hZ$z7#*}!+lg%i}jgEk>@_AFMlXS{)mS&|8Wmz zeNK8f%f}|fK;$gX&z`xbi{)SsrvFNRKb68~fhemn(V1buS!ga1tRVZdFvpz;gZz+Lx|{9(^;|48y& z-dX-ym{gmj=N*7!ybpLhmUpr8l^MO4jhbQ8tJwkOh}ZO{*5@tat!)aYX4-l9_RixR z2lHV*^HinRjT~VaLeIu;8e7j2g<;S=6Mc~eyr}PiJ?l7bic1LDur9J)Sn!N_wK9k#e03YKUrHdULCy}ChGU=>*3^zZGnv2Fu&6*H-hCAu2PA9 zo?X${+hW!GDc?U8S=b8AOM-cJqh7pM!~@3ncPE)YTk_jq!_TUO@lErr++ix%GY;%3 zTAu9or*^dptDz+&=R=yy(+=kH;J0mCw~tbk`HCG>!*E0|93%rfV}*`j#>`9bquk;= z4HG@2$AbbsIu55AZHXLoc^F-Reh*reN~_r`*PFFY*VQ~%^e4wxtzJ!4&UNK>Kdfs; zx7T4tOXh<=bav)m8F*;M|DFE5g!4Oho=b38$m1gg<1cvf9G;&a`5isu%jkK;e}}%B@K?YmJ`(X< zfvX8;eR#ZP6XDFycrS&Ae`g*Z$GP3(Vf^ES<6MHDAsg}IPQvjyQsO+v9qp2HEqD%t zZx_eI`kW-*`{|SIV*DuKsE>RX{3XIsABjIgIO;PZ^nZeI)@M6?=Q$L}zfQ=XqTi8U z;yl*^`PU2iGbE38Z4mhLgri*&=Q$Xt58^NUAh>uO4Eg1|U4H&W{AUF}-{QMtng8MO z-d%|QGZunRer85|xxo1y8{+R2_z>Ou@*EcNcL@1mAus0utQGis;2wgxYlJ?L=bytp z<68udb1L}SK{qHb=M3x=IOYfDX$zcnMrc~#Lv)WH`{*9|SJFLx+$r$)!aeiv7r2}w zaY*2+;2wsf+;xmTkzd+%T;S+K=6_7!(ymhi$GHc5ou(V)$NJ<$^!<#7|2}=^h)`bo zXAvoYxSUI~Sm4q>O9d|dGbHfKAx`>QS}t%oM`DY>WqqWFF@V3F!+Gs zLYD_P{L%n+^M%lLBt|HdM~e3-`IUd*@cjMVaD!umBMi{zjyDH4M@0O1%i%eG%*%-R z@vr3p$ABjM*Hb5TZU%?{NEkA>;rN+nJ-~b~MSnA6{97qJ)*bTV@cjOPf8)61r%=(?78Ct}v0%=^w--d~vvGa+Z^FEVaIVE2 zZ<~4Y0+>GmvUAO0_|wk1nUko-e@q>Z8Dgb2@_g4kKrud~GoQ zf!CMwdh^-lI6VBxC?4ovhHL5{TJScABk~!pZGY&F(us#~UH98cCwP9zMXw0fviox` z*q$(5lzs`kQ7XNbZlqu0`bIv1Y7^#-z&sO}HG=7^lLCpq8x{(7m> z2h$JhV6KO`$~*vh7Wa$z_N$`2eE`b;<1i2E1k8iNxlH#!K6mq>#s=#H<{OyP1mywC zjmI&`%Yk+!TFl&9ro8(VspO0Ut7^vOJQEw+h^Q98yS4{@VBD6 zOVnu=gm^YdNLY z-6Flfrsr40Sc6*X6dFC{vSn9NDB;m7JPLGbi+0r!-M!h8t~lG?||&Xe^9!o>C*bO z&tN_b^7P2r&p=su5PUCffAB!*1ls;tY46PDU`-1l;~yQkHuva;2& zChRQ`scU|HlkH^&*ha9(K$Kg1QJTmF5Swg?Wq4Vv5Y2KJd@{=+Hq z$2^?nAMb@~1tV<@ucq$IJ4=+)QmwGtMKjq=f|E!0z zJkB|m7t0TMILl9aILqJZ;Vh4Hl;y?pr#zhH*Ww_zxLAIRhqL?+4`=xa4`=y99?tR) zcsR>1;(;L2iRFhp9Dgoi4MYWaa7}}kT%|7)&d>1}A6{<(MNyvL1q5iR^b3S9XMjHc zl<;8>zZ~i{$Z< z;P+Cg12-toyd3Q7g!^#}Lpk>`4099U$TP$Q^!a}hKJ4MIgYuumvpNMIOTmw(;D45a z|6>Zi2I`9>eMSLCyUuv}|0lxz_Wcdu$RwT*q~JRNNB*6VkL2}#5$?D9%b=X2Jip83 zFna+{iWlpVB>b;a@UtoSGfm^{#PmZ6&EG*{M!`#cT?~Mu%AMbK1)*Y zp%nbK6#Q!`_*-G*Fe%=fQ}7z#m@eFob2|Pfz|qfsKlWnSrvc@;9p`l11vttdqI}5t z_CFJT#KSL!L1g6N_L}4UDB#G$`HFeILh{^RbG&bWmwYIH%HuC;tx~`4o{mTHIlMnr zu2wt!iBUI!R=4?_-sF4+&Eq^U)*gPgP1S=U`%7a*n?woUFsIL{)|%;xgB$1 zE6@aU(F@TAsS8_=7E$w7o6ak=@_?2lShg5VDo$`@A?;{Nk?~|_^SXf)a|)W9oyI;7 z>hmJ87iFW;X8-u%3eTEwj6+u#Hnw zGD1*O&QCrFxM#QTrCB!@mG&O&X*z#3Rmfi8lDGujLl^T}Fx7%KSTB{h7K|e7!XnS^ zuGZREWK-=bEER*7A34|7^s9UP>tGoYRqeT(-mKS@N{r?AcdQx~6jlDY64$K(YkU`SiI!uX&$ z56KrizZPBYm~~#fP;io=uJcghV9a42dIUI>5#@rsZNTPozrQzX3ZS*$v#Yha1{?O% zifis%&_Z)7f3Jm0%_|0t*H6_ORTyE37Kry+&WiQnMirs*qZ8d=NL+9&=P0?D7uNXWsBKgo6-rxt zeW@;)0XQQF3zO82vIDsK>R{H}ar8e6AJvc7cDG?s3idq`-I5{aO!i5YB7f z57YNHee#-j#vdRY^=Z;Qemq6@e!Qm$_v3w@aO7#xJ$_sa-|^zL@Q>2>OX-vKd@K+P z_eEzt8Rxm}s1MtSK{gQ&>Lc+jgrh!eJIeE31in7}zLxdbg2HeeBp%j>@xz3({8IYP zdl9fa;^q5!Dd8CJ#{v=e z?=r$sPl;beIQkiJ_A}29K>mG#ry=;^rxMRYYzuyg^Y838o`?83Po8m{UxXLV!}`_W z*8RJdaP-fw3H&O;(LWO3NjU0%myquX{MQA3FX5~w&u2VLIHxb;i(noRUM#+Zlr_wOOXS%0qY?ic*OBIF+s{1Sge$U_t*o@aVo$V(jezQxOrcMIX@w_YIP{>5`V z@j|~z9QVq_%g;ZD1<##k?r#RB3{`pA0wR8 zi{~jnLO7=v<4*|r-x7MB6!H>3MY!+hrwRA{{4C+VpJxb1J%3xo`vT#pr^J`R{6@Uc z&xo_1dEOQBA951$f6fDZyMU;8x$~ZG7WiViNBLU>zEt4b1U@8iDZgCcTZR0v!2hMd z`8gEh{TG14hr34T6LH)hh4C!{{|MdV#}0vy!ad9H6gb{9&UqgB%Oryz({ztG=Bp3U z_k9B23HQviU*MAGkiaF+VGrkLum=P#?K&#(F}UY=j|m+4xvqIk;1#;ZkCOsN`3LFy zsTBN-z-9W*2%LT6AW{tdHcm45u}I(_hVQKZVu4o$zEt450H^L&c{y8l0Ixx`J z(h-4A08ZV^(qjU@Rm6Kz;IjTdE%4n!en#LufxE&0-%8s(>j{D_d3@oo~hjCYH`uNOQM0+-K&{9KRm{-Th-Q^?DB_X}Lcdr08d37!W8 zzE9xC1b&CW9}~EY_oTpOyr%@dS@6sVT=KxwTX*^CH6(DEPxyHs<^Q$dUn}JQjlf3) zey70sxgL2?HI8qGke56=1^&MXo(X{?59={4aM`ceCvch1`T3jmVLc8B`TteKdqm*U zpAQIJrpr-*e^Br|Ch$W7KPB)_2>j)~hu$UBKVg%&pTXbX0ykJ!jWEEUYl54Z*94!~ z9fqtEu0L8Dz^QxaO;EgN$gd9{Je(oBNgk<@vkJzi>9>WbwPOl zU$jA9XeMH-BnbB$UY0o&;rN+nJz#u~zw`B%8RN&k7=|C_fb_}XFZ6JZOMYTG^sh4% z|KZmLzhL(j%K_`p{$s!T;rG)9Cyh78f8lr;T>>}0@A0=IROqmeC@(+!)ivC)xzpus z^oEC`E4ZhB*97MpuDo&;iDchH?-)16pvZ_*W~B6Lx2vGkEc-p%yUCq{#um)?UI0m{ zjJ_Af2@{geK?{7(J-0|Wz|;6&83~HJq&1(Y$&#>V7zwW1OmyK9&} zQ68H;#%JpTyp+cqW7~~7`XzJ(u%s)rhknGi7cs8SILrv$@F(M(F8uu+aFf(_A0xse zB#7a#lyi7auS*H@e;AShrhR z(P>rT=(H7Z@Jne$v(>Au_}S}kd|$U$uH0H$QE5$1)|ztsf$PS+pXb`{b8WZZ@4-Cu zVzu2{>g`$sj_`WMU1kT=eCj>6O?M{d!Purak{9N08uI+Z+ zk8{u6K`-n_{keNvt=p})n%r~`%{^wma@CN#vX7Y`r7-~X=!kP`kz?j$0r0vtChuFh z;>r~(SFCzpz1eP*D==T+XE$va0%+9=e{9F8;{CHQ99fC~u+WV<#WDQ$au_oo0X=an zoyR;;Z@h4hHI8-r*B1fsWl`o7{Gq)6+uL9;Cuz+5=K=R+kq7sOntMGErK_sx9t@kk z=ZE!qo98JUA+0ezv2=5~@>uV= zvGQnclT6^E#>#oDow=bn#jdom@|_vS%D4640B{^TqE>sZHv6)bYuBvK*=A4gjZ_|S zx4~I)n1@7j9-axtXBKVvF>%HdoQHyEI~{^^V166ULHPunS#prhop}z9S9_e!a^bNH znkE2y6Y^O$aNZJ}xq@dq;ki!!*)DU2gL704z!@)~^2Kw?!r3c$hRj@XJp9S%JSCWi z7CWmA&sKT}Y{m0i@QfrpD+kX=`aGP|^7(%SXWrZqo&E9#u<^+Sz;#D(jvb%jhPvWe zF3#of&yUm1fjGLB9K3;5)Dd;@<~xhrR^8VETnS zla0@eVgGYn?Elz#H=r}0cXJ%#PXBD1zlF1H z_>7^~!uda0&$wY-L%+cJH+Z(#LO6FR%`d0s@C&B}`UTT}l{gbA%|{Qf7x^GOvrnY= zn<2f0KiJlb;EbgXoaX~}B&Rdk^RDw>Tzf(vfX-|)>ztS$&-s0ze1$&Dk&nVKDSqeP zIh12}aXnjs`~eu8`4yD)-;`y20h|>FbJT} z)z4V3L7U~yy~Oj{z5!>8xwGv+XUxZ(Pe?^R^0Xv5zZst6Rl3JNyG)j)O?b{G@CWgU zGsC>{ve+Tf- zLViJ;@T{_j{tV9d1D||`+bod}IIo8GEsE+gwhesjF82GoLcc}%^d#iVq;pvL46`5R zbj)KX+K6S4^B0#BwiDBl`8dDIJU4-50nTc~v<%Y<(&-D3K6r-U7a-q#Z{ZSb|1Z9X z@*1ZN^JYnp+4L-m2g~Pt+MCM%t*8tyhyKfeKcOsq0rEedRT$Jc!P&l81|IqYI%^ls z^E^Ox;YD<&CHoosm1q~w3FCg+hJ^YV&P_b~_!~yfehu=(S1%el`|u}A_e{F_KG?td45hW}KSEu=dTf9=@#6X$>u5Y{5&KyO|Dbfw-$B3dwCH2K2F?hc zgnkFt1-}khkXz&#Kjo(~D(Ts?^S6Q}BOpBdw!slTNIcLeq6yIvjDhuFq^ zZ{eHn`z_G-5a`SOsOLnT#rcT!efV2ZowW&`8C<$Ref2e{uf7WT{f~E#%sl$tk(oc* z4d1`J4wusH|2e3u?pyGtnO_Av@4MqoP+z?{O0zrO9Go$^;4L%1d&gU5pgirr736<+ z!7@nOWi$7Kyo&mIqb@w^lG zERl4!Ec+?64bqj{4eT>R8FXiJ;#sN(KzFQbKM%g*=L7fL!1e7NQM)@(-@Y!YZ~fIqHD<5Ux1*N*22h-oG&4)yV$Ozc5AkJlItJet|y`X2I7m;e#i4fIj@|i`kwRPgOE?Z z0C@$UB}3c5Cl7rx;S6v%ClsG6wDr>0pgzL7>8ntG%vCRa2J{KfG{xsy@bdvm=a;%( z`ej)!fu1=2@Y~=smlx;gNBR9+?&JFXFUl%WK3pHwWs4T&sLP<9dJyWTD7{naslN>B zsow=V;&l|%Baj!cKYKU)_RyQ5j)Hn5ss7DXN4dVOS4UyJm8FilASzq3j!G-{SiZ4* zoGXWKpTYjYk4icG%7syVjQKMd2Ym6$VXi*KOIQxM--c&P|Atrh!n#K46T-6_^c}F@ zz5r?5I?wfA#dod)dHe}&X1jU(iJyNe=f+Ft zb-a|H2O$aE#p5eUd6UzN^8yB7`Jg?AaYlGfKS0l5v&l#NrF;0GB!&!KKItk=de2n@0-1XvkfZOY=vE`M|$~)h3bLpM;ch0wIdgtX!<6*pLKIZ-U|Go9m zCEx$?cR&BfZ~e7*{QO_Mk8x{!KkVVzPXF`gPWeRYZjb6%J<_~ymDi_cw&R%Ev?ScbuS-$GwEPt1Wv;4gt&hke+oaK*u zILn{$aF%y30mW~D{GdOX2i{l2F6No`aF&0{+{0P^pog>kQl9io(Xjk-4`=zE9?tU99?tT-cQRYS z^1OF4<18QBOa^{r`NjMKlmf6kj96bmcsR=+@o?rp>ftQE=;CDlArEKy z?H@o<*E*TY%U{e~E{)eA~lWexHZ4{80~Q`Nuq*)|Zl@NkyD-NRXa`I}StJ)Gr_csTPP^Kh0w>ESGY z+QV6X7#HP&^v;2gIv-~~}XZg>0 zILklc;Vi%Dt;zcA^l+A+_HgFk@8K+e#KT$sn1{3cNe^fFGak4`;Vgg1!&&}_hqL@+9?tToJUn<@ zdS!T)0$ag6n}!$(KAC5yhvTnF`?dzS_s|3&cB_^oj2CSs-0SAJ^F&a72!5B>3HXBe zums`$bzs0n(0k|VaC2Z#={orIxiKiNO4@0k;M-Ug;7@!yn!*HiF4DLC$_p2YuUz%jk}dH=Xe z1$e;-8Ey&AJO}^D3(p`+;`zN4`~|>~pP%mz65j`5d<6Lyd;I?naFplgFYadj9pFjv zz6HiRkY}mK(;|GWhkp_9B%XCpATeHUm-#G;y8%aj{?5KQMfg6CAICM4_&)+T@^d@F zetr;e&iu-o)4tp`&01WOTqsv1%E3%|0l(} z6L9pyS}02L`uBuy^6aGz z4ePEcAv!iOI@PX@j(5tFwcwCt+(NrQxvF1Z*{`qaPhM6YA0NFMw&3j7x8pDMZ4<3M z;I2JD2Agnhz$56JyVi9p^?H9I8^g8DUaiwCH%5^#I(p3(EgF;c7 zjgB3bGao+#LNon;thsvbJmlDv4)@gy zy*+o%0sl~Fy>n8kr*VhtJTyBcyJ=SQf~xWQR&N3tz0f0h6Mj&UkZO->L$F%zPY(C% zm-i=EUcT~*E3Pb;uN)h%l*g-U%d2a(;kD!Am#-STvV6sG?ef~{vC3M=&eh8J@R~KN z){K>FSF8eb_1cxgm(^;cH;0s%aie-aPulSLBK>;MICe)nwQ<<5cxC>S2m(@D?fOc2 z+!qVYNtTBoIzDC|_M{UXLO!G>*RFI4;lrHa@@2bIpB#nV7@;$^w_WRw`p38=3VpEN zguYRG``!($CbXqdx+h9wUw(b7)tEivTduq1`cPtQZ?6WA3{WIord~n>)ZhhtZ+{c(a#}kqIP7ra3>=(g{;tfmGGN73q=&OJJsck$X$t!zqM0q_p5z)H0bZ*e`jZ-1TVi;m+uG5aB$oi1I9hqP&m? z?UMK=3WxH4Oq}?^;~gk3@tq`(dVW>N^Z4dl0RNi650gBeW&N1IKSel>Q%d{+!r5M) zU-&t~Ib9h4l8`?i_%~4;$ArAZj}wmi<5+%p(fA(f`FIGzdo#jOPlz}@ zdNMvuIL7;R!G9Owe0DwRir4*w`~EyixbM#|5$^jF*1EZi_2l`Hj}p#$GX8{+$J<3g z@X|>kFY%=`j)(d@L9+O=bsOgJp18l;<}x1-w$_+cxC>%OT;VjLxi&* zPSW>#>687y_@{)twD*XRm-rKev;LQm{>+E*qWp5gpYnJZKc6xH^HfRx62g5y3={6> zht-7p`C)``_QO8lv9~j>(5SrdBS}^!1mJa^8Ii=;l3Xh6V86%d9iMz6kuXMFuqL4%XA+i9OWgxnQ+$sgudzQW*qfho5<0lD6{y!J`oF?4oe}Qo359eD4FUrGw$oOi)ef>8R?(=_`aOUUv z$~!%N#`mZ2e9q(HdDuri9>yOP^0L42n2?wF3qt-cgx|OULO)CV;zfaw?}ycd`{iOS z;eNT;B6$8%#QSl=*>60r`cA?*-5EbDcx1Xi;_>kO@8cd1<1Yvv*}qx_?=$i8?HVH7 zw`(oo=pR|`rU_@ec>ee8gtJ|YA57tSgm7P<0c2AyheE*CW z^YglbgPuI&M?86+$A7;k&-j--`606Nm?zKpDNml~%|GqQGrk($SF`?)2Dk3twS=R8 zB;FA6-xTs~AusWd6Yi(W{uKOkgkyR9w%|WXIOY?H9}_&Mg#76go@Y~do=@Sq7~ZSn z<<}2O3HS3kzPHDV^8?T0pCFv`8{^Z2qkm+5d#}gC>kSTjJd8goc)l8_;QoD4^5bo=LoN!}CCV9m0nRXZ;zUCfv`@pYnKky}=QWhw)RMJg+x++LLGeYFb~wdh&XbO@yrz>yxL1yu=sNdIZ!TpGTI% zCtep5j`m7?IpKb~tWLpkGa9`7a@Ql=&u`O&`}u9Z;F0~4FQwqm63*$u>pIR5&gsZ_ ziPlZ9Jg@6GpKz9Ed^6#`{#yw5^}k)n%W|<#$V>bb;h{eC{b~9P^`Y;)+o+!|m(s*Q z=Hc}l!-O*r;}f1duit2R@{B*~$@6-f$2@t)pYr5+J^iwNiZ!1z^!`|)n~cz7Mu4v&ZN2I1(pKNWi3p2B}n@MC?> zX>dsJOZ=%6o@WIQL|x+bRA&T_#23+eD8JrYO1STbO9^Lx@_Msj!r7mUR|UT;r?;o@ z-{tZ1daeB)KjX(zc%JrnPLchmJs!qi5c0CTlxV$`Uyd#%9R2XDNZ(;0FY&7h_sh|T z2}eKw1@OG^gW#$X?w6wp!u@j8CLH;n68i9ZH01ez1%6QQNc>BL`}#aWINFQ(kl$Y( zCmj7F@y7`F^?56H$@0AZZJ#I4_(8%^&p#4& z@$byT>*DVBco;uJILb@EJul=XzI-V1!;e82zAhaK?$8esA0gcL=O)6>2l?NJpm2tV zy8;$i76tep@)!7|;cAD&Po-)62d?G8M~L%2KAQyoCv=Y=TLg~zoOyS6IP*>j9HZR1 zFaYlKaNd9Ch`?pM4+vbwd(^|3_qf0@UfzG_w7|bX_xQnO5dDVy9KJ+;LR{7-Jbwf6 zQ%FG9QX&5>2H|r^;CRdXaqx3L@*vLpKJfDm_PfIBk*U1JO@O-q5OX(IbQFE_;&&4Ybiy9`11_H=a9hvtH61^n=d~scytdO4&_&*4ITHumrpTPf7$lob&$#Y2HF9>~( z2>hP}{(!*o_7n8|sK6!vae+%c9~1ch5PF^zINshz-%kr%>Nz8DsV5hF&Od)kay)Mc zajEB0swfbbdJYNv2SU%~0!Qk9ApW%im-%o+;Qs~W|9|%020W|kN*jKXP(?+ANL#9? z5p88!#RL$+TKf>t(iSaZY#Hm6{6f+~5|hv(+7{8aOtnf_}W=x7ztQfBH*(K=H`to)3xCau=*zRy|rc~*9w6Y}Rz=Vf14a?W#~b=F>c?X`c; z+IuU^c6gzT2M@LX8|8Tgzx8OoqbDf5(&0q_hgk%x9PahA+Tj#k`dJ&`(*Jsgd;M^| zG6Us|{^FmREeL|mr!&AGx8G`S zDZA%0$`nYPEZ%4IV*~s}!zVc0^O3)k_*`xBOmp;vM%Zty_awcyANem4|3}a(%=dio zOrg@@-hS#Gegx?CO0&b+*SDX^x>3eET*QoIV(ZmQ+N!E?ZEK0I^}1`RTU<4fD+@Cd zquW|6D9lW(Zf(WyCjQ_%nTd@}ZFLhrcFE;uwYFhxVP;}Y(-I!itP~9HT7uUpuDPou z%(8a3xFmt1o8jGmW;i^g4zdBh>XH~JJvF`_g$v`+`(tA`^C82{JPgfbHkQP<>!e_N zqW4Ak0o>$^e@jzLq3_I$pK<7Y#b0Jv82{Y&$M1*#eb(~XRQwT}#2+r`{Z$U*t>PD- za$vgmq`UeU|2%uY)W3{-y+0zr6_>wSQR_yz$Ku~_ilW;C%ai1n{-oD#FXP9q3u5Gd z+IL1hSG@Yo&t0MJ`E2afF~w)&OY%Q_euN8WHwjl&KQ{u{X}PF;QYNOah_!3kt^m+EX+)gb%pcGkw0ZPGlAzm-b;O5Kz$W& zkiK+|Ua>nX@R0HcXZZG8{zshrIDf;-|5Cx|$Iil;A-^s-cJDtSZLr1o>|UG^$a5u; zH_=(pJR@q;cX&SFDV>u*&ohytv!bpD&O_2!h<0uuvSmyU9f5bGBk;c$eDC{iW;=Ae z{Z*Vf>veUga&difhRP6>3!L}F^Pf}>&`+VuKy)^Bau)r`-P6i57DYcCdhJIKP8ua_q!8aENO= zUP;c@))^h-DZVPFJk#TscFv@yQ@K?=br5vzcV@PK6z50%26?ji&YWK051i8@@|*S( z+f=5VHneGFeCDJumdOXH=kfW^=H!`)I#2vmq<3s)#k?eqM`zmKgWvva&V(=Gj?Tzo z-ByjWU!R*1ozuUP#<4s!M(x7L zy{k|+By}8g#j?+IJy=W|K5m28`SpQLcurh9;^p}sI771i1)LW*61Lq4ovMww+46z; z&$Dqs7ul(|JIN}$>p))d%(Cl!`-u0`Y^Ph=R_4;ivYSgA>Z3w;4(aD2TTJq-FKG*H zWF*?ezND4)o$m`No!!rtird}Z^s*T`)|ptCC!=dmT!$lF@qMO!-pIK8JqTSta9-}5 zRkcfD8hVQlVn=8A{VB^Y+j=Kny-nnk@6CRmFHT}t{qCIlU2pvQU#|b&D<6L4+vBpL zd%NU0`jr3t@UL#Xyyohnn$~~*&Ofj3t30B6yRVmBSW!~5xB+AP1$Eq;1xv?EK2mbV z9Tytt~SF4LcrKUi<6_h6CQrKnqtmU}jIXMgmxwpfy$^2AdK1wHm1 z6aDO*c+s8cD+65gYXV&KcLliUO9GKZKP|vTpAB%)&kb7kyiRi+)%zNhkU-0WNy2iBr^~UzbAvXn>3U=>Ql1 zu}6w?d=>qK02h6IfQx=bfQx=zfQx=(fQ$a+02lo*OT=Z)L zT>SS3xafy#fECE2wOOG&6H@520WSXY16=ZK3~BDyAH<)~U{s=tU>(c0S;acu|^p^oAeW?iTx;BOW=PCH_jZbC3XFBSm zeDN*-&Ul*x`tKUPBEX+X;ZuP6B_IE@Q}C~);NMHZx2E71z;GiwfnE6URl`RG_>Y0- zlk+zz_)#eTk$wU`bAadLv()HU2lQJE58LtI1E*aj?W4Un8Ra}5|8J(?x2NFyfK&e6 zfjl3=$AEnN&r88?Ou@gCg1-oy=~BC?Jvq+6TEBepu1LWj0#5l$g8s&# zUroWkm4g2#aLTWCZJQa_smJE$&ozXUGaJbHJ>cY{_Gpapc_oEUIVKFqXKuh}4RG>N zJ5^zPeq;3W1Nw6?kdO3_{AWP55QXc3lYiLXd)nyLPD#%9K$)bk5BPr;IQgrcl05&9 z(KiS5&l$biDams>Cb!6cSwL@l_8xjOBMpHTwAQt0r>cr3jJNu}SFdMraYN(GX!v%q zjm#>VK2z1wh+*6S_{F;ii~Rr@==HvD9jrIF(Nw>84$kv(-!~3+FE6~TZb`$UmZqi6 z38+n;qHVYuv{!Dl>055&v}lJ;Z0DD}p4(%qc5y>1w&}w5z1V@RrtX~SWp(GCJEf|s ztn{3+sZ*wumYrKyR#v_6oaqbComO2_U58yT7uGJETso!h+=Y{-Oh2clY|^CKvZ`~Z zO|F|%W}9HnnnRw+#%&9#nw#qybNhq76;WcJ)FiR7INYwb6AIhee2-CF_fLzzRTJidN53r)c47D;}qr$_s}o( zYfD-|{g}B>mZ_F3;=TbvU#eKK6H`#`2{Ni)-szT)~fahm6tQ1?{#$WZoSG z{SJ+9O|fmOi7Jjn@P3(kTa7Ynpc$MnNCe2Mm;UU=m~iT6QkGxUGckFE8Q3O{Vs3jl z>Sup;U(`DRi-9D#s+GHowptZB_%cwwbm79fmU&f;i|TTfmuhC)jeV$Mxo9c&BkjjF z<%!yoMEh!^q7x2J7yN(H#x_WP@VkbhefcZ;oQ8(?Ak zlBGZ1pSZum^sM*Vnj!(qlU;0M#=SOK7d5riH7shJ+t#w+q6VCIz#D0+U*$DPjNa~V zdP3#m_=Y(1qPw*u7Rs925Nmi6(gxq4k6kAvZ_~(ecoHVZvqaeBI#AY zzV3bAH~9u=EZqk41Ip8Y!@#n!8Gd_`b#v%2{DJeqW|*^r<@+wp1+b)ehS+2S8@u!BZ&8T@ME~k zaPg7@_T$1z5_BSUim@HHeB%vuQZ(TE{$J} z{$Fc2^+`QzZ;P7({_=y+-oD~5{0_&z$??}7zD$?@cD~K%nJ$ly#dk&qrpuP)M8C%w z&Uigu>ge$(BmWES;VU_X^Lr>msE209r#vQ!{|)^d28>-_@AjFFX2D!^vlc!>1U|cs)MN@$u=c zH#|)5V#CAqwi(WNSGstY8P0e;eutyK!O^dC^d8rDJEr$~N3UBh!J4ffxSHCcb+RAF zZ)+}-Z?mNT1aMrUFxIZbKZ$$c6CCdQnWYY&XZO6QUrIh7!*B7)@*x88%Xp1`JbN7e7r0lv`yEdH zkJxV!g!)uJpZF}%;yTJ060dalSciWGxc%(5XUFFpKEcsf0k`J0+nyReUGp9N0>`J) z;a)$@4zB^d!ZL?b56{|z6#;&!{a)>GZ=Y)&K2ywbUFYyhhp%_I*Uv_W*Mi=DX0|xI z8u&2dwcFtf9e<5)m@i*&_Q{tnFAnWMA2L4!_Rf8kdpJ^$wT+1o5vq{7-%D z`s3CfDM`b1W7iXLrLAS{w=T0k6yHsQ9})xEKs8Cbr1pkn#EbCf!zg=ih2?{uh4Fs? z5Awyo;+*)6byiU@e#W8q6@QswVf@;IJ?4`8Pg#AKiXX%#c@Xz{|KBHLfb0+n7?fR;Z*u5 zG;YTnhkstTdfrhUueqxU)+F=2wOo6L=i$0U#dEU7Q5>yD<2uMp7uRHRU1Y}*nXW^< z=hwBNPPTPzSjUESZCumL^`sAQJ=+D{*Xf39*|f%u=}gl@$M`s%GqLV5kr(`#POdKu zWwoRwYcF?VZMa_(8Ordc#f$a2y~W%Ad>y;twgKep4y1o5^7R449p!C5^YtxDC-glO z=^Uv2%I@B6Hyw|}cKg%enTpr1`SJH(FUqvLENxYpwCuyxCdGhcZ|-MV^gQMLwdSrVfS)%;_#`mo2)h^2ZJFu?(0N%R= zZO}_cWjnN=#<$KSSh z)wlk9_mR)Gs_%X%c|tz#l;3B}Jn!;m?4?&{A9nNuYveij%Gf1Y6W`caSJT$e)Hu-| zL@ri6*T%<3pNIH)v#VOKTFh6wa}l%tEvd)YQrhpX%{PBdeb0E~`m!LSv9lzKDSKK+ zj2C1|L}*v>nHJ!p?>27-8qxdjEqqnG3jMVKF8Z4ST>N(jxad0rT=ZuK zrXu?D16=gA0WSKs02lq%02jUXN0lB#e|}6LII%bRO6Y;;7pKr)8{ndUI>6(f1)1jq zT=eoyP`sj-4}x&fYmQL3=r?kL!3EI|w{O>aB>J%dF8UP#F8Xk90nu+vq30T0A4IQn za`jC7N7%P$;i5l3z(qeNz(v0*z(v0{z(xOXfQw$=#zT3AYf{l3h`uDi#lIrJMPD1> zqQ5D?MSn+t$6_CmnJ)qDDn5PPi-527XYD`7W%<_r^LrohQDo@CUAQM6wj;kYyu{J+ zb_xYDYx>DHsIlm0rbrH*oS-yCC_s z#=k^_cKsyk3(~9J7QNQ;hx(_F5aTTk_`z4i;kw*`0!K8{532KeUACz#8K}9u+sYzPtF2>nZhYJxoIvun?F`NFZ{?C`L0qg_N3!DDz2+)Jg(r7FnFJZ97g{2D?R<*Vb z%mR#Ef0kAB5NUbsXUv|Wbz=jvL}O6X)Y$jc8NCRi^w>(Y{w!k8!*$`}+AC(p5?(QL zX=~lwmb&Jumb%)@+AyuclL%S|C3GLyD?J0!Ep`p?34o4ma)wJO8y5|o>^(RSN^C5$ zg3gCZ)O_3qE8gWpYzmMuKg&T0n%l?Z&DiHa8RXj(t1kPuw5}IM$#Sc_Ytb)ms$II+ zExFE1WDC}#Mf5Y8n{&%I^HN9K88kIviM6d_&P&y8FN6Lrz6@5BMlt4A5i8ySmiM+A zYlw4MkT(VSmhtB$`~qsc<+aOm8>;j|g+hxC3DyK3g4!bgbQP9A53<_lCJgK@~h5^T=Ud|AREmr;8OCevGs}ZY22Ln!@8Q~DfWSkO_@|vIDIb^^xBlSsl zcxdt^VK)SN@X{s9&=v~=+`^$pP4uOujjdG+>*nIDCG6xdv%ab&w|~)q^xD|4*p?tS z)_rN_jEgdqxVk>v2r0@`R2y|I*cD+xu(K6+n!z&fwCjl#e+Kd8n8d1rQ&x6Di#O%#|~laz9qA_o%}l@gTaie0xyo zS=iFFMAg;6$3vcr#G!Jknirt=GVt-9HE#nKENCBbPPoleaBb74?4FldcF#3coLbZO z%h`r&4V-XYMX&FdD*}4qj~Y(;d3MjsR=X#EkH2U*>A8kUVZYsw-s4&m&vaFY7}qoL zn?Z6`+V4`kDqX^x9sQ@{SEK)Jj^5*UIeOmeJLq~x?{WA6M}hLpk8h*@FFJaUkF)tk z$*=FAn&*`K!gUqBzJqE_hUkUg;rM&~uQQzV9)Hx)b4``PR!8sgXABSXWth#gNltxF z9d5Yf6t1i2^*uEk&wo|4%oZ{5`I<_)M3| zIA54;^kKRbkL1yJWv$VdJi_N2pHQAFQ{<^Pobvd!L|ThaK3{R^y2J7D_<9$wUwg#w zP7Kt8$A{bZXr)WvzegCZbO}G*aLTzN;u!y%VmS479U!fZt}r~bhf2dkd(htdp*?8L zz2ww)^fu!oIfY+qIO!>m!U{+4@rNC~FE5WedXH~2obq2U=D0p>IOX>^K9xoxEJtGu zm%XW6Pcb~yTh{PUZ?g;!^)}aV=}rCt6^2W1!mo7nUO$zN-s3kJPWf*@3YG8T$9Rb= ztZ{rit}_nE=NljvpQoKXc$AU4*u z_Ph}XvE&-cOY{R*V-u}Cz0~3OtQ7^)U+!>y$0yFUvkE14L)@j zraAm#hi4t`>1R89j-#LJ@G6I^uSGfin(RtP@7FXpJG|QQS?2H>+=E>dR@jyNYjH1p zwZlE1wGOXy^y?h%`D}FfBD?2hi^J=2Z`E(+VTU*1Uh-^n_~-4Om)&+x`MsX^IQ)}# z&&z&?FL8LM!z*#Gcy&YmUvRkm9*KMT)o&;6^~U<0f%sxxqhFa!*5O`n`o2zjuebS* zo?X{6`(2rWYrGKhSr*XmFnLx4c!m95?Qk#8T8C4ftBlXO0GFH_9q##TaX9(38=r>* zoM(|RY;(BJ_gxPEL`)j}-|cXp?;7t=Kb4>~vdn%*-{kO4hc^NrhCc?4cgV-f*5TB#iIJJ@@P)u7PqV|#Rhw*+z5U6bBuTzIdT)oT9bO%A zi2tp1cncuOv(DkXZL!}Q9o{Y99nM>gV;>IicKf}};a<4Y>4NQiLA})TiHjV1mO{_mWQjC#1icfCc%J5ML<}*JX~+*BrjW;Ws#3 z<45wj&f#kv{ns77#o?tM z{->-yOvMjklRSufz5lHMSN!5rj_11fq?`K~|2%uY)W3{-y+0zr6_>wSQSC;#)#9IK zS7zgE{7HW4PkQb4GJnu85WYStzUsf?)$h@`33bnB6KvlA-=`!VzJGSSAwh|P{~6!g ze;l$wnzGW;=~E-(%A>z};hc*K3vwI_G7t9P&p4Y;=l?ilqf6iRFkl}o$33^U5pcBj zQFAYLDRE7pbX!WqWDMnr=&avTs4Rwb?6kYqQZl4Cxuk zqmPQu)aII0t@9n(k8_fxbIK2w#VAPjTaZU@6pY)u5^I8aMm5is57*twE>5<0xptOo zvCqcY_6rJ++xslmKX0xsNX}8-gWo%_*8fTDYw$$NjLx4QoY9H0z4|7svAw(SM66XG z*ZBkFS)8|-_WO`uo3MVJ=fC?r*#x`bJ{6nF3$}BeHtebWKIF&2qLCZo{Li%Cg1n<% z+CfKqqg=&*cq2KFeCok3cksO(wx+oFm=!x(aF#Zb64|xvUOJL~w5P@O!JZa8=l#7% z%d6nWbK<$b1$mij65Hs6UB`4-+aJ@llP=V)-W%*SU%ljc4)(d{#rs3?3+eUyix*BD zyZ?Xu{l|~&DEiA=zc%Y3;fLb)WH+k_b>P5Z`QeD{c}&Q@7ClsrRC z7s@rz-`e7)#28@BC%)6c3ukFf8^;pee&F})^i`VO{Oycg{J*OVHK1#)X- z^dzS2X$3J}kSP(NUD@wr3p>qz>mvHB0K1BQZh(t^Re+0rZGek@R(z8@6}{#F^g#3) z`wJJnzAXwDy~fVMML$Xvt343?`2jBaIRP&Ev4N^Zul=eOujngN=$iwa@AYR5*O8#- z8Y}fJ6)(rV`POj#%gmKS1I(vj>ymdgDE)oZO$jpb-)?#!$G{e4c`{vJa;u8pXwC+ zdf?I!vTI222uIssYt=Um4b6$+Nw*0wCKUl4hj4HbX-9!HLaxo*N>*4^Yu z0b_VGnGeDGocvN7`G;!>G;ddG^z!)=o;95MpJlS~qVYfD z)m$*~Hlt^}9^YlSd<`}K_l)6+SNO|@Gu{iy*n;vo%=a@b|H*%bh;c17ocuj5pP0}- zS2#X+CD|kA2FJ(aYXbVU7Pov~lrG`xjXun;yA2QXYg@p7j{SbxuHr9z6z0bmsJDya z+vtC|_CWKOS)&&p;d2b9oZg=28csPqex-|dri*v6;mWTmCbxW{nP2BSdikv^lgPqBMmwmJM< zhwpOuhj1_XcRQSJHNy8eycGACMvlTLBVf9ecYH9`;XYj@4)^+3Jxo46A6ecQh|B+m zzq1Y}|6=<+*Wq5z^Bqq5yT}BgGQi91x9WMu>-D_M(d&CY`K)lb*Yhfedp)mq_<4BW zerDD>d^&LH`C*6q_GPQXF91E$#<0!dC&f_oe~-gGpZyN^d^#O2S;$E9#njJ79sjW= z0P(EDH6Kmf*OSv6z2}p4_{SWdxelN0@c9m(;qXd_^H%Zwsr%~5XHiKVt{c0i`RYwO zAtu;rnRyg`B1@8XV643_TearIP^^(OpxN}Q2Vwl|6Elje2z0f|X_Qr@jGrv^zT#)u zB^Jg%8{c{I1*X9V)fKF>ebD<~^dRmPzxb2`)4eDCQ6J-=x6p>{9OTGv)kbtxEAu=2LHfI;dj=Kw9{vB2mH@? zKE)1T(b-9$?Kqmh%R4(p=Hx%p>J-V_aRSnMa<=Oh@O=U@EP)KaE;x4YO!$OB=gFB7 zT}8)jh|Z0G9~!b|%#qe$iO+ZNei!t(wivQOzBPpf?WFq_$3?zx-xwDe zT;i|xd&qY?>$()kxywE?HWNO%Sn<@h&$776s#<17;7sr(J8C)ERSPUd_&XC>WyO7~rDU7)E?VzbA!$LQEiX83F8~?kDV{xX5f+jO{F8C zUk2{8K|YnyuiU@M7~AFJQx2T;^*Pe$?ti4vKW6mH0{V&O!?-HIR|C%%@8%TzH!1k^ z;raP|HU+;n1%D7Y(>uZRC2>#0pf;bJvr_QSr{HT-@Sgx@yqbekyzj>#oA~-bo>jo} z$#b{SYtBo2-VNVI@|kURFZ?TpYYt2Je*mZbsGfoOMd2ch-6J^zKDJN!(0r#|-VpZ+ zhIHrhp5I-&MPr+}4XsP0kKs-6Ud$80(0VZ@5x_TrALNs-{n(;zNL?Ajh~()P_;tYP zpbeYO*0r=QUsAff;oRj*7EYQn#hei@u4-Q1pp7mURKta!v8HZb@=d+}@6Jiy9dg5N zUDPzBK9Y(4me)qCrN92UIONo~yrJUi<~r`hS<|$n8T+7@!%fe2Kp%)ABg5&(i{%ZC zxebE@hmwA9AlqQBA=}ZhVe4X?&;gaA=e7~J=?DG*%E%O;q*8Ql$b6(8aE8%|#eb;U<`jG!!0e{WwY5Xhx!hdM=4#PwF*BKtlzs1peU$GxLdXH~Sp?^GuzSHn9U8mc8l=P-~RqVSG1?f$A zrQuAMm#5Znrpx229sg-k4z6n)e~)XPR`O^b_I^i?C^EudbNq?xePxj37hYl+M?KJ| zO5uFNL;KG?OYHZ2htoesq0(*`ulHT6cld`zjBB&QKj83X4)^pc9R7YszslhkIDECkyZOdB z{CwO)+$gNKE9Lh-WE&lx#l7gaIDCe~w>rGs?s?hfaO(N{_IsDZJ)b=e_k8v{-1F%S z@PD%3!%g5YU1}eQ&jhWJ_3*iT!T3yYd@eMMmr{pcgx{E!jsnXw1Nnc9*XS4aGI6-) zGuPov*HQL+ehOai@Y%+jmt_w3{8u=f{6BBMR|WVS`@PoT-VWC}{B#%ZdWV0~;Ts)J zUrGC!+2ZhzJN#jX&jN1MNV1lJ`s`*8j^3xM)8R85f3=T2?13+n4)1+}*XS2~a2?Lu z7wo|VhkHGjI-IxH8vV2YKgxd3cDUEG_t8AfWZ`ALqxX7N`%C$~p6ea`#du%oQoBt0 zIl!gowT}K%j8I`>>(xuzs;c4h+13(Y>vh*sx43E|msV#cMz@$?t;$TSZf(WyCjQ_% znTd@}ZFLhrcFE;uwYK4`p3Fqd$MG~mMKHK)30`N~@Y$wY$l9-2N}&B7-i<2Wevc&C z0N-a6$2lPdT3H-jQW)?qmG(?EO;zGVb+$ z;A)w~r8s#FR2*?yXYp%a%cFs^JV}1(PkN1Ba{s2mnT_H5fdGm(e#&o2J$27#bFFdz ztO)HIzCW|6r7q{`SyB@3!dMao+mSK8w|yBWPn#TX(AW=O&#fIfA+phJ?CVJ#n3+cC z$ml=TQLM~FzMOxDJrRrL%L!k*$d?nocDKXt?K|)hTLU`!M;^pBnmfz~Pxi{bg^nv^e zd>~h*`|B0IE9dvfqU`fu`p)g^hyD8C7YMRwe?ZHQ%)6B@&&ByN6MIv>e$9`+|9VlT zeRt9E8=i !S=_e$7wTuPeyhALkj;4Ov$}&Lj_!2Ken^|3KRp5dOG~OL?dGly}{H zU!jxDNT>WU>*1@Yc>I2rIseNQ^QfcZ46fAE=b)$YIXxvZ!LA}d-)ijHSUscjiRWf? z?tCuWc?)EfuWtu^56#x#myy_-_M@}t-<@;Xb$Rgqum z=)LH_B>Q~Q$F&`Kd>{12eI}!QIVJm@PIedHcE~%gaP*C%kHT^!M(yU;dmnTk^JZF4?!2!fvz=+Dk8i#_yFSqEEzm9X#Bu>Y?Dl`B4=Mb78?nbF zY&-T*wtS>7H2s3*uicxkt>jPk2Zh{y-5)e(SLWwU`QRrW>RIJ5(KG0%&jZle*~pWL zu$MOqM(({1`N=&#J9_vypVG-Zm&jOjo*qi_6gj>wf6md#u7 zP9iV#v@_OYk2*EXUtca)bn{1sZ9$$etv%j{FZ!iOAMN!z*#8drq|3&LJqt`Wyc6}2 zFSiM9`-)00DvR{j&(%%E8mH(rM_uMm=_Rcnrw!tg=Eb5DN;C@fSD0Y(hIT*x-sx!z)Yrk#1*^uUa+ zeaB|IUOp<*buX~SAI<1`@?Dv(2>(d7>mFcBfc*eEeWKvl$MzMBe5?`gJo%AKS1vur zV=vtm^PYw74xECtAU%jWN{46;6lFFXJSE$;8+LQ>#B3Ms=)h?ybf?912hPYn|1Z4X zf_S-aa|QDK%EF>{wn=O+S|Hy%l>5uaXSQF3`!eXD3DKW}?#-@7u~ zsmG>!3X-&;zJKgsLGg`Of$yXXAUEXmbws24Z-E_iO%BV! zZHOD~({`{L6SkRt-37*}xxSEJcL80p-G2bQ)F0}AF4=B8h%y1*?c|-L#jXF)+5y#* z?1M9Otc=r9g#Jy=W>4& z{QpY#K4hXZ*LU>!A8RYO=Az>fYhO-tdV`MGUq^ZEp(nksGM?xf@31aaeH`_>?EOh6 z=jsUMTaWjV_hFu-(n1&P*Rx&Uj(U!Jf2)4J6@1iBm}SEDC9aT`I%j|GN!OmAdP=4O z?MAeJJIZ$ZOQ?JH9hL1kD{AkLjrJ3dpJQFjQFw08xb~_F`;`0N&yHo^0QEj>y~FCy zPzGQ2hmTYK&=%sdFB$JWA+!Bo(SHix*YlUymqR_$6!lw=+dCX_KUtOSjQd%rZ^7?g z=bcMtN7_RBuvecC^F^_|gG&v<_)w-N(?wCLmK}JFr)9E!jCAwB4zm)nq@TZ^N1XiP}Qa|YBNtao+YChScg)uq^z zK3>;`YgAvj`Xis73gbQMAAo+=Jd(4;uN z*l`DRwFdSL0mc;L%mIz(irrYN+r71o-u_-ezliUv{BpdZI3m6&?P-)~{DaI2(fHf< z*Z3gmudR&h+v}75Jarz|XY9MNyhQy0*fq}xh|UMVJ7CenCcCw@N&8Lv&*gobMq(&? zXj^^zQH;LKCSMMr?*~7}a|+(Gf$L>8&Sc!7J@7eo-eGl@@~+sm)xO`V_j|P0-R6m6 zTTvSll`Ys0;)&8P9{Fs{m)+jVcsz#@pMl`tNiFZtPhQ=x%++@s8?)@ag82oN5srx? zT|-Z-uj8`l>O9OVMe`cfvE8En+^%=q5hrbc@g{n8wj9dp?O?)@svG-Y2PRvuc7SyC zW(Q%tK)Kn^58HC2B?>+A4r$$qdf`y?ufitD7fi-@8#A^&>s#!Z_L zpR)t@+SmTyFHvVHUqTsr>vu9A{d1MsV@yElu?YR9Tt2bweeZ@}VqC(x3d)&QH*_l# z$vlUZiOBBV{8b_PBX?r{3jC<+hc3u$$Ncu{v1oIW`U3L{s!KU1q%QCA$7)SjB#-;cU>koBiVLS%zi~iJ3_t0N;TrN0Yp4cDi zboOP~PP6QFz;2@U8MMp`@lYM-`)b(#B;gbF)gl`lhcR&OoF}&14c$b$O^e;>EioCDzZjeIhM_4948HO^B~e$FS$j>EP!wS9N}tHb3to`)Sw`Q<#M z+H>3{{m2fpzw3|9*-f`Oj5M1=e?sGf2_w)ift}rYlG4@%Fn1 zykvWCrTuo3!R?{)X39{8@%*njmyP-R&CqkcepwnGwt>Y(x$#I?KMYmb^kbg4A`X`O zRJ$#Y>&+V9pMcH9-+$xwI_#H)br1K#iTV}R&k1$fTl}=RzqX+;;NcDFrD3V zkDeCdGn;fIOC0kV0npSKN3UJZi5#XYKG{8mwbbyQgwE!2r*8J#kOyAQ=#iu#G5xKRO1sVB9>w)OuTh%Qn zUimufq3B1cBWDjpUlQP=e>%WL|9pUpUTZ=Wujuazk}UeI0WSJ*Pan~j#sp%Y=qDTC zqF)i<;=eY)MgM4ki~i{V7yWAiF8UEc(GdOo02h6IfQx>8fQw!}xKf1Z_oUEw2Ds?A z1VvK(w+6WAn*$$O(XR?{(T~vwioo7Z4{*`z?0BV1{OdKrZx2MjF~CK?HNZu$GwnnE zV~-XRUq!zxz{P)cfQx=xfQx>2fQx>(Ce|!^(T@#q(Psl(^m7AT^cw?Q^jia5^qm1N z`r&zfj1fQx@^fQ!B@z(s#ofQ$bA02lqX02lr402h6(XB20E=xdW6Q+In< z6X2r1E5OA+nRp5Eca$df4Htc7fQx@~fQx=hfQx=>fQx>2fQx>AfQx=C2jnh@enNnY zJ{#bopBvz!uMcq1FAH$d?+$R$?+sjL<^UJ{ssI=L z+5i{*{Q)leM+02+&j+~ZUk-55CyxE5Zqbi@cYgh!AK;>&6X4>%F~CK?HNZvR8Q`KH zj>$V8L_ZjPZ$D*{~fs{&l~ z>jGT#+X7tly8~SGm7MT&LG;Z5F8cKWF8YT9T=ZK5T=csGT=Zk$sN;j^PY-a>uMKd~ zuMcq1ZwqkI?+$R$54ZCdB$Mb%0$lWS16=f#0WSL80WSLe0WSIpwni|NCmZ0RpB>=h zUm4({Ulrh@UmM_}e>%WL|9pUpe!e!9ump&{KEOpk#rBpD(>p7`MZY+}#sAs>7ya4* z7ybGG7yY&X7ya%47k%Pj5~O#mKK2?e`Z)nE{#ORL=vM@|=+_3g=+_0f=(hy8=wA+S z(GRn8L6k3|KQq8Ze|~_AzBa%`-xlEU@biddFM}}NT>-uL><@6h*PlIq+3nyzrdi*#JKaitu~>&W{z7X~lIkdO?z3!<&DI@L*B}Jc}@26Lfi_n2J;I z$tn2PQt??Wkb-YX!Qoewm;d=G z_%~DVM^o?}Dflrk!F=huAO)Y3f;Xn%FQnirQSkD``##L?7-}V%~4{ zY@FImW-0J|@g5B@AASeGsNS~mJF1H)JOiBk6UREkPXS#%J`+>$rWAY_#?Sfql&9dW zDfnNe;D48b{}yy(buNn-%PEebNWoiyNAd^!ISwQ~Tp4JwkHGjU zU%V%#;MFPkw^Q(+rri>(~1dOjpzgmFt`4VvQSO34n>cxLB`gH-l?OES2 z_0k30Xeat?y?ja8@`mZl8}NV9@+J1Id_nZ>+V6JC`xfqwt&MjFy6bv3CX*IKyLAsx zlA7GN^g%Mh-k*sJz(6;|j}rEo9G`)0@Ch!CMa@8WzwRN7b^{GI7SFqTtlw(5FE+Ad zNmXNQ>jG>(dT~SJ%*74ZtLfsp*4C;;b*&XmpQ&nTY-n7R+qyM>lowxdNxwE-&Bb|P zV@*>nw#Tn%y1e3|Tr~Xb)$t*Z*bnDi+w!{%$8fr)v4~t8=@`b3ge-O>^q7 zx4Z4FuKoQd#nBCxe_PXKZ7mHoZMjW&`^&L>X~SYD(8=7^6s3Y%A@jyXiSUheUz$1N zq72heUB3WFBrI6iQnkc3vwbrnj&{lIFJqmEU|af^UzXcgKe9gh@w7BnEnWZzoLsV( zH(Z1&u3=H*+_shl7d7BHZZVUAojP^$!gHpcQ#ECJ)#OQa(*e~^ zs;#Y^Jhk+k+G(ZJrqxYeSbEOnbIvV0XL{|zX;Y_GO`CphS(zPtf%d7sg1nJ^pJExq zArP?5B)6KIAZ<%s>s5=FFIn7B-F#Jact#n-z!@5)%a=@@KCP_u+^VW6=afx8w{&6Y zq|&PDNmI%umz`U-@Z8DgPMHAenS4%Z^|^J^CZAh9wRG~NbE~UsO6$&z z&)=x7YDN5WfJH3mX{&ZE#g6LmAIyrM&>Uc6sElX7$_k^5Rx2OSK z*{c_%KS|iD{%W=wj8ZmVooQX#+FaLITT$OqS5+Iyy!1;gRn5(HEmzDur|gQEZ+2C3 z#Z1=IDRl|jq>Da&#mu>v)-9{6$*}Y;sdJK|zn;G(W0R4u*;v|Gy=*~CS=4}|zMR_t z`>16*Kcl6k>gwh7(StA4)iuvp-0;OZ{O+%fq2pOqbJfy@mOAS{z1ixE8iW+>u_m@s zeCSp;ZuCB}w6(9TWVhyZPTfNH-rJq%pqkfF18;eA97W7>2V1*%X&Z{XnHYcPel;&` zvtMtw;&PR&bjBV;e@4iO^{c*oyOR`lMWTeg-9mM1@CT{t0S~k-tCE(DhT2y3g*vmv zUi;Q=s1Wth-S4Eqc{`Py8`ebg3AtW*UsH8SQ#1r>SiT%%>qJGpzRd=wap~f2!zSu< z5hezzTEBp?MAU9u6|e-*jMl3gYc5) zJ70`$`kuwsF5>DPY6IY2L|kE!V5b!?4;~ znigX&O-boYDqmn5nWCa(2{fym+ClzNP6)xJvO9yR~jHW~VuD zkD9w)SvZNK<4u#_pTV>s(}mL*a+MdkV~X#KePHZli=^PIOB?ey>U>sH)mBsQn*Pi2 zRRCkxmZfO=IgdA>p(fhgFCiV#v|Fz954hb*VJF=Wz?Sn!H}IxCFSDT)ZosO`BU@s# z1JK(LWTs;w9i499O?CEFt^J;0SDj@gTvyTGVRZEYy>MMc|FqGq3+RRGDtfI)-4)Oa zA7|fpN&l45@S^X&l;7hOj$Uz*UVe(C_xNI?=h$&(g`ajNarAu~`HJtMQ#?j9*obr2oj-!9x(a&}C9>3ObrB~~IR~WAJ z3g2dUn7_LX59OD?N+|yb^BW1}&l(=`pKmz%{F_Uc&b%WZk1sZQrAzCRn+;dGgs(GP z^3Sn2)(3pFZu#zjkMKtgr~Lo!Gce#eJdy4#-7AC`f9Jg#-qidXBRcR6~zk`XTdLecB}Y36q*IfYjk zPB~wQB#8gD8BYEDm&2DCPW^cN2E!Gv)>p4GT=5Fu8qjyz@5cjr;UnNb%Rv52`rPOj ze2feye~*tdobtbHw7irUPWe4P#nJyCM?cNcd%V{0P@a0jLwS}N&ieBe$A6XKp`14v z9?H4S(R+FBa`YbG<%W%mrd>H(!8OSHY zKMNBK7a#3MaHiqnBfQe_DR6w+9R3S2$MueYzt;1w3-}AyRq|*(|MLO8a9u^O_59=D z$IT%5g;yF*`ln)&=zp!F_xO6lsW+dlM-5lIrhd}Xjz86-_5ZsZe~%A?KR83kNAD?J zTBkk2=#?(vV-2TW9gJB<|Hm0lyYl#~Al{oO6oU32P`uh-U``OP@a7agdM-Zq8{M*i zkMMPdQ_n>v3+34u@Lz1t^q%-@pMos`f8o!h@aZ(1dizgCXyG-(sW*?0g?~K*<7Ioj zHTs1!oegKcc)ZeZn(y89lgg#V0{3C(tD=Kbf)2oSNn{V8m@SS&kE?9?f2|}Uig)U(|(R{ zdRT0@t>wqQFGruJ3Fx&q@b}O74?=vvo;VxeBQ@q-r;!MYf zC)Z<*o$KzKz zda{vSRyul*FE*Tdd!CFfG#gI6d3>4U&;I#*qrcYi_xKvanXY3Qv4wRG|E)k=?{>Iv zm$#(gj~XsLYu}lzhD*=FpHAVkE8tUW^&rC?D4S#;-h_h#u+aC3!fIyYu}dh1A5_e45$3>b@5gNe6)Yf{D6<} zTF1xR|1yXBan>D%Q_tT1*BKs`i;a$+x=^^^(R=)9!=*Rvr?bm&=}q{{hKKn$VoZ1a zYoDD_hKrAIT@|nP*_jp43+K8(2F5$qrRxTV`|_xK6MyZqb4S2mxUQntK08|jdf~6R zc)dKQzdM#we6*j=1jD5V;nNIfy1YGK8Su%P-B$*Dgs*UXynU{Ad>Dtq8pp@u>m46& zhfg~`WTSn2b~!#CABA<04CMVj7w;IusULl_Al+EQsUMGP-6;8R?nB{9qgQ`MXR|MM z{7J6;eVQGAkKbfC`TKhQjuieI4QF{ghm0)TZ#c`N#~*d{Qyu+QNAL07j((D(f8No1 ze2=4_?C4)~^d5iN(K8JSosQn)T(` z8yx;#7w;X0hxvZD;VO697ipv6DtE#kcl>?6Ka;|Lzu`=m&)=5~5A%K4*f=qy_xX#n z_M$*~kC!-lpTAtc%RqXMPjK`;f6sLE9-rdqDU-r9NAK}jhKKn+-{C&ruXX%={;qKR zJ-*iQ@%jF!!>2nrpD{el_ZJOUzH2|J{e~;wg^$9zVFsqlx4$KZhy14)F8=G3--e67 z@Hqj!_S>2p&)=W-qHK=c(}&3cDQc%js*5zb}s& ztS@IE508&Eocw(`o#pTkyLhiOJj|EHhAZE-?^v_p%6H*6IR5W({MV%L-x%=UZRP0x zfWPov5m)=^#!~9wn@GmjDxi;W0e04yteeTu-^upH%^jXv6-2uJu9|rW= z$L-;OUidDm46oudZ>pug~ue_-kLhjRAk*k2^k|f2YGe|1l>= zW**h&Ot0phPB&b7)_!>t440mT&rjh~Z#eaTJ{4hMvE%)>BLq|W; zrR!lw@A0P%ryhL%Y9Bv-Q~DX=+hg;J5`o`xcjyPM!|k5qVXmY9mEH3)-{H?Vyx!se>hNZV z|C_^?Ih^t+zEuwQd{#UB*LKg#T8ER580Pw0GAxi4)=VPIeed!XNAMbUvjK=xaYIh;rkt*bq*&V$+6Ml zp3fGCA8>pgb~yP+j%^P2e0DkfpyRXK;p8JZ_Iup!qt{4;!2CMS;o7f^xSw~@zGTGx zJW`3{bCTnu{l`dO;_y;OzdaTq`mg=RLi((uSJ~kUIM+7{q#y72%b%0@Y53El`Hp@U z-V|Q%aL=dN;io%3%N*|cta7-oZ&y2P>4^!pB{~M z_!$n@er}{cQ^a6a>gfN>(NA;usSeLNoO{rkn_H&d;a;Een`OKoa(tFKdaut_4xb2m zh1CwH3V&vLTpQpG_ItgA%F`X9KsNnb{66bNZj_a6kVr-{F%TeWk;v zI9&VGQBL1aUg79{|5p3Xkv{AAtaJ3`4$n+%y?P1uw7|8kCBD|{4r@cJCUVtLW@2=U zv(&0G6RTTW@w#ji8W12xZj5?ad6iXyiRe=O*LVb zwY%4>f2#+>bz@f!W0~}<{Z1}b@!hgB;_FekFdn@>Hik1FGTh9`Q1B~>Z`Ye%^+50I z_Xlv3FaBk#Vv7BY7=ahYq4yPknPFl4drrrLJb`KOVJdzQo8&><>;3NqxZ)R|ay-|) zC%xtU{#Wikq@8E)m*z;KJH2mib;(n`@2^%>Bs9EPXYp6sxQ*iiwgZx1`jcMyPPZ`2 zex1|}?U7cx9fZ2)8}%LWd!LOj$$!Z$V8-Ib6PwO1NkVCIS5gw++yALkrts0^>66Z# z6hW0ofAzvS7Zn!dI2L3c>>(fH8TALXDzfuzW<=(gsIAGp?ar?OljXTxlZW2T+}7QyW>ly;}JV68E3=4e$9`+|9VlTeRt9E8=l4a>>ye5 z`ZYgUzoH;>f2<3fEsS%0S3r-_4bKC|wBhPkp$DAd9qDz4>Bpi-^n0*q?1lr-|32{E zyfV|?c+ZTk9~X|?i+)!HT=-T$QIPGr2mJ0u9QPp(o;Cl#=enour^eKZMCO)}*{*h+ zH_Y?ud4~84Z@lr|mclqcMh;uCqwyaLx?YrJO6QK2Y*bd6S8EXGq0Z~x z(K4g69cQL5z?tcfK{nb1+!9ysE6B9pazv)xvydZA{>^vh>a__dYdav_*C%3v1*pvwvks*&Y+mcwK|`^_>B5wy}-ZY@yF2dT-bi+>X{v= z^DjjieiC*5$jpj)n~|<1kzS77i?K=t%O!Q@ZTX(U%tH^vI@sP}?UUMxM;S4K+7#9u zHy39g;`#Nr6vHl_%e4O%?aIZ4+3ARD`#jVSPkcH1)D!=@>?vG3esEIusUP6_M8UBe zh(80`W6>8_g0=^)va5f9I_O&~$D!>xsq^NQCvE9KnY#sT5%_LLv{CvYYqvg_>}m6z z1xcS|HuAiKHc?c(_d`hMq~kN&Rp+S9oIQJk))gR-Tx% zi^6f8TOiAWu$e?htOp7UK!@vBa82x}XI&uuLALG6ch;H0i;s=-Ue9C`%xAR&)Hj3D z*)cxO@0ujvzz=nh`fG=(NBIkT3o?*2Dduu>Yg7NjqdvJ=WiL z9`#3tysSt?V?NJsW>}A-&Upp>!oIfitQ%uH&$PFrUH=#4JKObL$oE%^ihH!_jGIAa z`*7QxYr9z<-|T$QPp$uDXYaW7GU)RRy1fkeg>_SZ+e^A?aLlf9rh1gR_WhHA zJ_nyD93BsK9}gYYOaAe*>}-@NsAGJ=_63FG_7)wN>xXe%$8loZ=U{)~WR8!zR2Ddw zux90<$340C<8k74)csGQ9k>;3!!6+7j`33m+6MG@dyE^y`GbTP;^vrByd)Fn3&=AX zlU4WR_m4JdtM-L`#-x23nd$l!WcwHJy&dUX3;Ebaaje>LbR=Ip)HNoQDdh17%$fWi zegE6>{sFX=Yr%_r+8qzsrQ~?0&b6q2pms;~RtI!Td->^b*$eICl+J@l`>U>hKz+&9 zl-3??I>rMX*2hosH)T8?@=EBD=d=gvnKnV&O6+QU+;3MJ^2t$ve$M7QGwlbFZ&yWQ zlhM(bP5d{(_B)V|J^I-z-FU4!mk!yZ`qCk9j_c#lLRT#6pf;3alY)912 z$i9?cokj19Xwse^>iwkM5Bh_zfbVV4eZI0A=GCu|KmUTfft&E^=|$PD=|^VTF(POGTU$XaCf8rm$&oaR{^!!lqhtDLz4eFssz>R0p!qOV?<+54M=D3*xN0!-P0Z71EL9$t8Gj$QB{|eJ#JN7k`a8 zw6uH)%lAOjFaB@$`(gdm-*#c3?=#)}OXj`Hd!P57hdJnZCug71_oru*?>^bCokvIC zt+p%Ag&(J^U>wK)Aw;s-Z0LDC{F;~yI`4{p1C7e5E z|E#;*?z_6pCqqqRwxiGYB>H@4|Kjh(g(u)!@d=$Ty(`mx59hj%=sDMYALhFGeWV!g zK!50S_kFJ0%jNqK`SSb!?L&D<(>K%BTYl*IU*mhkcQD4(c=9%+XASyXdaiPmjKj^I zic-GUvY*X&WfOnu?{iL!f%OVQ$DQ_FAsJWZz9Yr<0K0>2a2{ei^tu!J<-9~Y>R9Nt z$NWKWW4=@IO-A)=R2HjqHXTcoe;%6e`TBk~${fd@qhYUQh5Uv?d)2&&eUDk`#)+=% za7?N9I6trp{cnzgqW*ljecv?y2(<~2ZOrE9a{cyIJ^JnVwg?%L@&ny$dW7)@GF@RZ zajw(JRD5J^&Ux(X@gj_GIA=HcGf_wC*B&f7@q-77PWa$0$b&Zu#_c`r)J(-bj16Bx zyYwxj=O)biIUe%)#TbU7M>j z?Vpdv;YaTsUXrQ!!d2PM4X0+>Kk@pnx&78^_(!&XAL-eEd4li1E8Ddm&%Rfl*?#2f zf3tNx{8Ekt&2KZ=u2Tw*-1`&gr@ODru^XN%I%>lUAIfy?JtNcg;%SKY6v%O6rt84* znXZHHjka@)d}&@d4RW87?RxP<$oJlC*S_O1rvq6jWA0nwNvLO!-f&Cd$y?yFvgIbo zb>m7muLYfO&I5B&iC@9jS+O8!jMnj<*e?d(FCV)3gzQ7#IsrQ4x6C^;?RzmN@k7*A z|7eQWJFvMe?Vv{;{e^Fi)%QevXMr949(qKb^UzxGy$!rjZ$x#@Fe`B4k(4Rukuo04 z^7i&2*xMPgy&Z(T9e}-2 zR>~OKTRZFxbFhiM@f+dIoI5dl^Lg2u?YuBzV7BAyz*Wbn&&xRi%$1?cv%cxzoEgf( z1CZ^3m8fT&ov7};4fXk2ymLG1DfxRb4VpVUwkZ5I&+>N62Be?g<+t2ic*>TW5JxoU zi}zrEW5he^OFfsf&BWe|b9L>lka5k*xO{}Rxd-j=yl_qg>5BOTb$d{chVyf2=|H`~ z_G?RrrQ>Gkis|n)9nPmm{T#KWEPtw(JD!W%)9c|cn4}%@^BZno=k1dB*zTe)w;g@M zClAip^2DU_Ek8%On0Ek|b_%4d^Dz@Qma7yb1Ivk!e| zQud+SQSYrq+x{x*J=#&ndoq!~V8;oOUZQ$T`70Y?{~=%c0Z08b_LKOR^xIcjza4G4 z@{)4j3YnAiB46mcvJ>{9Zyn?}1OFH#_h#6R=Frxot)a|uzjsFGzJlV%o`BAN4xMc( zD86wA{*t~h?4ABUEFbr>e0;9E&yV_e#qf)4!8|Xb977*s`fjV=m-yvXhv|XMga3~5 zY?RkbTa@3R3+wr?kL3FnOi%Z|%}Jf@(1-lcq`OT_$0O{^qZ~$MAL*Hj^i=1{p7N?& z|H9IPOB52jwfw0`@`rp*HoHY#f%v|IxKM6;q(^p;Y_@^=$-|Np_~ z2Fur1UxB&kE8d%FXMepD_80k?S=|uYT(R>Xmi)>0*YY?&{;o&gqjx{ucs@MSj(O}47uOE$kD1+YBE?o*f^I$WmZz5k+`aaWsWK*$?j^3~d`L8-7EN_xc_8EU? ze9s2;(MF@a({~-^b=o*od!X3r*b6PfmCJTyL6c72^Nf#V&tiQAuZ z{)dI}nBzXwIk7HSu2h%Ww*$x(k3oY#HK(W7j+F-TrJxAH~*v+jNST=~l8@q>@c z71|b?W7&v)b)U+W#dm!#@m1!DuX}k$KLdPVcs%4L1LHe zYjsaE#!To(f=4uFSy!0m|BpPOU*Yf-J2n-L%e8aJv$*cdv|n*dru}`G_ZbVC2jLTd z`a6>MAo`&5Qu_Ca?Sl`$N2%^&o3j>qek=Pk#^(SPk5Fhrja&;!gmE%!YqCLFoff-$8=a$4}Gc2k&dfy z&oK;T-&dA>Xy2E!-`@B0wx{;JE3^IV!sBjix~HIvGVl8c`*@=tJBT?7rf<>(m>-2) z{1(xX(oUeC`oYcRxiQmh^p8i|n90_J#_M>XC-InJx>rB01M}2uYhGeqX=`&wV{FYa zP|OQ++Gvx}pCMh;A5~rs)E+1Td4PWuI#$N^^wY!+IHwiN2ce%}ZD^eThwb96vkUtM zb|||@E9aZ5b8|r0YbBV|ipTH|lw-_pc3zAzcvOze9%&?p?d4CX9(kMXWw7;==6I9u z;?LQ5F4NbbLdatyWdWH|GNcqGyGd*&JuXaE_&A-n3O7`2BLwktrz@{Ux z?h`(x_+F5-7aD)~@84fkF#fR}} zpW~BWIj*zM(K$a1vp3EoD-Wg5_&4%rWngcxwVklJn_+M5us43!isnG`*;~}==DwlO zu99!dsGmE~cTqp040CmwZ{;^m_D8sukna>1<;Jp!T%g&B`AI(aV_l_}Ws5;J%ec5! zn`?%{XFcSC-S#RMzAN&b9qwCyKDiG1@9eQSIe8EV<@wJ;$nz}q1lw*$Kjapq0c)V` z8*#Sl2k@`@L(#EVhcX&-X~mdJ8;Nxp$8BJ_LUd#LE7RuZa^)K5c1G=|=8BTJHst#z zs+Dl&j72|f_lMa{1!{xCzTRL1G+&;z~ z3+m**Tl=_iZ|s+iM8J0-s_o)GPC_A2~T=}X4GYT{RN zr}Z_0@r}2yQ`!GY`h%FGLf@|weXZNjA6v7skNqr8SRlxLecxqIZKi^LMEsVg{xADd z?7!$Y*E&CVa%MaCXye{J?d;oN9rG=aMRR5EGNmYvV%KkBdVD*RN{e`Y34hb*TkiN+ zH%C}UOnkj=W-QE9(62$?+t)l7>m%e({k4M*`ij!P^lP8F*`Lc)D4j}oB0JK@bTiG; z^-(2}Ds#FV@Al$Zl*@m9`+fj@)eiK>*k5J;KN_DR-`Ho3#-@ci--YOVU?KO|fo{h` zUW{|@McgmZkMyW)$64qnzEN=O-h$&}-&XZKXMYBLPx!&bh2tB4hxILcOUtUt zp-;=t(f{l<&MSvLPWoPiHWc|mBVVvrRL8_fuOlP>ZRU~m$g!WTcWpnE{mQ;Pzh^N< zX4&9euIy{yQJMCeAkRxEN58ZDybfcDCl7qNV;|@Cf3jc;=FOiv7UOK@byeQ+XD3`3$!n{s> z59wCDgKs#TkNI}|4I@`4UT8w8?n>gsyNolQpTT?v<{mnj598xH@9V*PtV1|fKMv#F zHwudPegeMi2`}hJ^E~9kx|;Pf=Z(N-48D~_K{7a}@%UItmp4u1Km$6o)~Q)Pw6+}K_)`bIpTe&CJ2*>T{FA0IsM#;@_W z@8GWsM(@oYi?UUY{njx55c%1|X8!?s{Fgynk<(Gnd<|)t?`1X?|H-6y?tyJa8EmZV zkH6lkGJFeUj_ldyh7P(pmXK$+_}Q+3ANKg@F~9k?txbiSjc^$VS51>pi@9t$A zg1JoE-8`;ugB`^2Svk2iE+=N;qvPZ_U*dj%WCDMb*9RYo>&aWu z=KFdetb-GK!aGU*e_W=WeW2UW$LX!#l=ofCiE-bU+YqmR_sC!kP~LapzfAvmuKV%t z4!4h`%B#HZo``oL?`_bDfA?^DZLaUXY5uC6x(#JxEy_kR4nmu*Z}R^8i=V3$p4ig| zSPzec|5!oPrx0!O9Q}<~I2XOr#z=17v)J|_MU@iumsF0q4rd4E^i>~4>km+NW1eyO z-2_=Tp-zeVAFh6oeB|lpcYR!mY-l_9?Evk4EV~;k#pOEFJ{|o!%EGap`Wf^m?!dcI z9JV%xI^ge@tRFkGkNrg7o+Wij(3dPeDz_#i?VjItSUuYi6L)T1P<8x0kv{K9+M&;Z ztqY3xUg8|M>d3I2(70T65BJ#O9-vYEhZOP`+lD7k&pk?B}1q&+Xe~ z_5oDh5BvGERJi?R%dK2s?AN`|mGif)%;Rr+*w6p4pFis&)pLja{NILs6CcUV9Uk`c z@9z7sBV{h;u%EyB^(QBDHJle@d+B{g4yC`te*S~g-(f%h!Rha?pMQLY5XU+i6YzT2 z&;PKWKkWeX22tq196_{i@nJvzcjo$!x7lx-MsnC*4*U6+74m!iq1T1z8>D>(NzUh+ z*_)p}zC)mY8SP(3KmEu@pMD6KdyV|_AL;3zuQ@!;pXKK4@cr!nXYXy`>!|Ad|Jw&J zLV>hYjZz?#u0$>6whc7Zs<#hdSPFzvB(hzb$8w`-nx?6wwQ4A++1(0BtPr%T5m`6O z76@G)!rGMp)y@9xVp_WxwMxM5ZgyKC)czq|>+<`4XU=Et%qM5k=H9Xdo%>RfzVp7{ zIdkUBnKNh3IWxlZtHo}$=RKd%XVBW z!1V&^VblwczL+|{qxlN%GXeiKBbu+^jys9w4@L8bv@Tg|#ur8Nhf?j*XQTOi_v@H$ zEgyTM`FzoQKDvjHdxOxqmpq?uKwfmNpA((0@EsXn>|L+rp5(1CU!m#hx9)s}rci!QRZknr(Um^J+U)h%akxb?*pe*QEF}{!Eai$o*zeDEvqffvYvn2gDt>&3Fe+P3u zbdG_}jlg`Oxl$GPpJoxSR#g=>P$IIA19b-Kp zW2Mby!P>{xG{avGPtKf)vvtmd=}^M`u0Kyx^A}_tR~?rqb0;K?Q-|FnOCF*REP0VH zo!S>E`>u1LoW4N0&S_tu({BYB~L(-^qv3Z|-Xu0w7Q1;aucNvZ0-lJuQ=V@8< zDjKuy%gt1UeNg;SWjD@H^_5XXFctQ^<0(fNa{S5HCS8qJf(B@ zCf~U$v06=?KUwp*D>c>mZ$jo<^8`ux;a%J2FIK0 zx*?V|Vv#oL|DWPpuiw9Yw@!)1j}N;hNPVky`g76v@xWYczAi@V#Gn5h>Nv~~@XzPa z=R&B5-eG=em1j!M`w*n=2^-Iyu#D&S&+E`o zU%>y!J>NZYFY=14@1gT2HIBXy4KYjz?_MqN4gqOj;9fBrKR&wg&(S*ZnT_9##*b%~ zf6@5y%<}K8Hh%n#ey?scjyzf~UfUcPbEfSEy&seQ3+L0iIT}Ykrr#qFjU#W-HG(F~ z8a~l`C*1LG3(dLf-9Px>JMku$7xeY;_}~+LzllEE(HP!1^cUUw={qBhx90V`|A5zv z$M|_Ke@wrSuF2u{(dzm>?)yIaWc<0VBcbn>*S;UgR_{6xcATPd+|f90?fZzdl?RmLhbH~%j+Vk%*YtPG^4f($Fyezfd zRJ+t)mQIyLX7z*nVI3=p@qj&LX^!QVaX5EMTCiSn=vXLeEAw#)btO-D?Rj3yRAXVx z;H|Q5eqil+vkoQ4*Y#g@9HGuL=CPuAvfjDeD>lD8F4l4)YtNtF=wxLoFJ+s^%cjay z8OUh-^ZO;ea(qu@?fJYLMmd&yb87ARk@lrW*5pUII$8UoW4TA%=1nJmn>wC@%aE=E z+#+>>f35hZWZcM!u00=CzWniCI0#*L#>hz!|Fr#Yu@){jGVKUz4Ynsog8aF zJUP}a{~tW8?>+05e!e>;&NZ^$xUOCBysSn4qp7JpYn3!&?3AYO4jrd4-K;}T+wrdv z(KBDlzx0Rcd2y$lAG$8Ru2ufP@1O5+*C>~D%cTtIIPnK$8#^TK9OG=4deyd``K{9D z795ME>zPlv|0P+k{^he%?>Bx))~J73#@NgL?42U}J4N<)itMlMn>mkC>zI%Ctz$0f zllABKd|%G-zo32d=RM~)yZ&p+Q}OU|=OeB=KhpL`ShwR}=zIQk)U#&dxa#9Y3!DbfbHK#rq~UA_2!zt!`KygvYI|9^D+83%_Sqq9bRj7qhx zlQzZOavb!h9+OYV?}uf(C$hHum(O=I0q2eXc)TF%y8G*%Ecv(A)63-8r(&nx_vft9 zA!Vf1j2|xK{CzQ1*K|lMl#|dkT&uMn!Fk4Yr~f;{ z<{QYle3$RLe66y67vt|~?RI{zi}kx$GhWJuf4iq8g2%x6U91`Z-r#qm{f)Wrhmd-FUMGyqrB#y>mv+=eOD%09n`Cd9RvV3;5QLm*cDBsxOrHtETqvJXt^f zJ@?-&*P%9P58NZ=Uhl2=I*Vsrw~bBlWTK&I`E?Y7A#C z+Gh7Y808dW#&w){*na8p(!Wdlc*J${%LDuUf46SFx4*KV?waHB^KG#fZ@l_x@@@j% zf8Ur_+x~~`ANHT0b4KgxN9*c0%K7P)Gr5P5HeEC?Vth0&Laz;|%cFS_iJ>3MH3@ZY zi(Ciwy>HHaK-utXVKgs7`WEE+E%&X?-0^>x`$Oa%uGeQud#mP$b;iUd+U4?T(`6=>c^Y^C4bX)%C9GIpF`?>9{ra2U#T`pX5*@(c@dfAUo&*+&7=d`uf}t)w;;7U!r*tW^FD!hmvQs`o3v-78P8p|K8M^Ihf1l@7E5? z-)KHVG@n8HETZ`g(R_wzK7)+uk>~Muj6YZ2&vLHxImtK+>4Vz(;_&`Fem>v-l<*r|rIC_(eck;&M$n*2m zv-F8AkAL6o^Rm_DYyZIB6VWls`3#GFW7%8fdZ_DXwaImAtj}l2D}C$EXDB@h^BJ0C z3_aQ!na*cO`pUq`ngj5Xtj+rJ+Y_x9%lY;CxHArpJ6pzg%Dt;MheFoF-@7(3w)x)L75c8=bC6?-})@(^GRZI^Kl&3?0#YhA!zN{mB{Q++%%PhVvQp{Q_RumTSVv zn$Iw>Fg3Pqhg@4u=6r_21-{slW*tB8K6BPF-7=0|`qA||=B!yhJ=KTfmgLlU3mGf< zmYvU_`MF2Nz|WR`tFz>~{rb4c2T$|QS&%%zSOA@~pyMc7Bu{kQk>tZv9wYC}Q;_k? zcgk1-ou_cM{C}zB-Ce)`R?kwoMx8G0fKSUf_iv3m{h;291?M14k@4+k-2c)!G6zBC zA-v+Bhj6ycLy)-$ugF}4!>@m9@8Q>>dWB#u5gZc@lGI`jUQ`E^34}1i?zHg$F4+i=Pn)&FBVzPN7uG0#oldc=7zj?}xerOuuGzt8ue&7^&gL$Yr2YjW+< zx=ydH-gScKHTe1>-)eIiMjH3udhZ|hdXuyni&_KN|0^ z?Wl8xrernl)qW1IPL#G*^d1DQMPjjNyni&_-|4UTrs=QHcOgmpqE+tYbS<7|++yPO zy>WSo#{0*db$VZr_LpSU*57~jsg5^tKEf=y$Hh1xz3!XCGiK&XMC1K48?PRX_s=Z< z-fH9hzb^N4cxTStQs>Hi>lQhur*eCKwBshDasJUbe=SG2R_Jv?%alBSb3V~H|HKo~ zIR9vz|8jZmv10rL8IIGqtWM^r)_s5B(Ph%_euMO@ua)0tOP#z%e!e_ADld=8b35D@ z@VpT8O-Y}mTfaQ*_Qx$A>HP&V{zRV39Ni<=z#q#v_~+!g$DJ}hvsIplw8%aBR*AvS zZ9>-`(dTg^JP%uJ(uL=E{;>)AUR$?sK%cib&%mVLz>LqAwCVkk8J83sn=jXDD@tkJc|k|)0Pc93pF9-mj3wZYh;s)|Y#&QSVz3`&jAIFgF4v3`eD^}rM@BhULB^uCnrqca`;xpeRhCcIzUaFb zM%<oB+$mg}bV?nBF z9d_n?P*?c-&6;NT%T@++Af~70K%A#-6{@@a`ILH3L#)MlPlME%lEA6lzVVNDPhR9p zr}i&8Yi^kSJ!wliW39EH&tFeT+{fiw;;aKN^_;UFaar)$9P-4UKCYK>nS<-EYfCSb zWA}8b|E+0y_#AkmNh98-n_}PVl7(N-!1uZ zm&CwzhtF+q|NP&@TJ>_?`@efafb0ET+9ABafe}<)3&RzYxvoF5B zcEnLGbFNbH-@;?S_4yK>0qJq^?ib43=PI{NOx5-JKIm8Fe&KGZw`BiM{27Y)$6Lo9 z_baH^e=cjb|4h~mcIs2PrpTJMPT4}aMHvlCzaAs&c&?}2{VJDt0|w{2rN)~z9%ubq zcg=5E?_2Unx3kxjGtEE!U?23}O7E+jvb{Ohf;NRd7joC`b>C5=bM+sVJaVo(pB&wI zL2Xl@zv9e^nXd~x;gs-vc_YT*`S0_RavzyG$IqANWpW*+@srqBoU@YM_Ty~I?}bu+ z!;bSCu|FuEI_4AQ0%^v)0&T;btp!Cst()EQ_-pSx(|Ks_d)K}CO6tD7(w=%w&I3HZ zl&?-*=tM}Bw@0OnVSadrl(AN6i|mo}=*Nc_4!t~X%8#BsoEZ97Ij44voAOtC<^TRN z=&U^_W$+=*b1j35QuQ0sKSj!yKGWB2>-!?KjfnQx+f75bb(-7wPiN2>;m7m4PzMf2LCd2QPF z6U}SWI-}Lx%RFP+4`{paJSDyFn0#8}-nG&m)H%{<3!LaZ2-=OPhgwZLQS_@O!(BiAd}w3Bebh> zE%%Y$y`y~p-y{$Bn*2uoVV}HwdD^`$EdD3$m7R(_sCh&-cH@0Oq2T(8NZ=@wsIU($57h-zZ#(*i0&OZ{amK|{rA!` z$Mr+r5qW4Tm zo%T&rr;W1gNApgjd8b-8zb1VR+75{3ou+sHh5U==oo1GQZ?$=+Xj^&hHq$;l(e|wN z6(WZIJWWqV`Ji3Ac#`jWD{VA6NB8J;Z|!3;r%Kvk`O?OESk7CWTlLB*v7-+Eh^#>; ztVYXnZD!6@;p@UeZ2Os9203XKcUA(_CMqK z#wZIYPkqv!#=V0rKL1_IlYTINOvhccl*RUZRNql8&%Sh=#9C*J%jAPedFFGS#J^UK z(=vIs?Y6sPEe~pYTiRD>YweJ>nm!-Ezx6&t$DQrCSLd-w+hdXZ)Uqkt;d>9XBhl{n zVn{sqUcq_(Hg&U`Z0{MGKL2y-)H3(^-(-0n%lDjkuA*N>ezk6P+o>1IT9od#EYDRW z{rXJBmR^$#FCDr+-uT{_Z*GyCUwiSK+4mgSHpY=-KKf$n`9@xrj#XJG&o>&EtsFo3 z;3WCC{CyAF)p||Fb~uivZLJx5{EXc5`kyoO$bIA9y?AaS&r9U^?9gXC)IPip-#^~I z$@ev#&q;f`RpL1H5RJ7$*~PJTopa zRbt4y2Q>G8Iu1bd=wUf_S|0V;i8H6pUoPeMbk{h4^xo8Y(Ik1fr%diEUPLlFY+4-;WJEYASosZG^=#0;? zw5R7p^YrdNDsAT>Sx^5p9aAgqRXNqBx@{iqi;sD8{-g6zu2H@*Ue_j=fW-zDkR`7qko z@T!#07TJe8#BuHu&3+8qhU7oCktcJ3yx4M|^_YC${kJ}!*L%Ix^IE+hZZ*ekG35?1;yfFO$5)@p8s6jgS*H?QvPqIZu0heH!03<88hCk>}<*F2d=zq5csrgL*9dv0jiq80}Y) zb94{l&6e?(+aw)2mi#4iJf4zmwrJa2j_Ge+`CO~hHh*em*8}n{p-J*CA$@1aGr6(l zGtKXdeB&YX-0A_T6kXSm}@!JvFdJ`+`goT<($+yKZM)hT*?0H_=USP9n;2BItP_TBGjUY6>904YygfCZKJ0hxCqNrW ze)Yy}waR(BQl3pbGa*$k=(+l;%%9P7ny=&fUHuF@M8}n_?c^>$*`#eyeEk7!2F5r1!lRPuRv)%p)XW##V)G7Yw!tLW@kGS=L+sCf^ zjekeuXoGE-XH3SUp5ifwnU15?dPPKcTF0%vBJ;Z3=h5=+`839@7QRX2R{8pM<_V5pHN`Vk50$ys;a|&jI9Lay=EwG1 z>LIUvAorF?3!ba{`|MB`V!JpmFm7s@)R+F}eDJ(_@=Z?P`^R|t#*gvz{rrE&_VL{@ z#?$wgV?2FjV?2Eyr1W8|iZ^a(kz4;oFE6XJEfhm^~K@+ z0uxPx0qqKZpS`m#r?m0Ve>q$FM`Zj^^ULGpUE0!bp#3c^(qE$AnKB`@Hlf$H(Y^)g zW6{6++cape@V2$@{jIoO=u@(mzNX#HCut)~p4=sUq%G3lscm9s?Jnsz;XalLl=uF8 zbJqQm7&;g1c;9LWkoO48;C$!2vDW4p5@pQ=jiRD++&Zmaj97{wh(g((3hig z^K?ua{(Yz1+qmnrPq|;ml(fj-wo1RAoNmL$YwFlH+*bw15uW&X)XgLGgYbP_s4MB@ z@u<=#?R@-o1lsf$$eQed@u1SoU^cgZn`uTBZ99%5pH!e26>v(Ce58Qv=JL4YDlKD4Nyz$cBHN!WaQv272 zyKw+nP+d+M%0&CidU?2OMmku;o$6E-H(&%?$&zSYKOx;4LVe4S~} z{IRe5j`3p1A8)+abho|t9V!3bc_wX;6CHmWXbbIWe{ z+7!d;2j9CWbpF4&%sab;{W&V*xQ1k07uHPCvCtw+4cmWg!+8ge8Lz4R+oO%I?P*O9 z#uZ>)bpJYsca+8UJU?#QLCtGzZ{ocG1JaLwrmStDb8TiyUFGGA)Fb#^pIKt<3->r_ zdqMi^Kc9NO)oRlJQfXpH;_q?iZO2-^BJB#Tvvh8jwuxKhdzfE#ri>5Q^$vCX_-j%J z={RxJ$K1Z~AM0Cnu8O}Nv&`8%?0bgBv9vDs%9}ig>XWhCT1Ve_syy43G1{6AXZ^_O zv6hFVUmN*~>)NoiEb`T<$4Lvv;(N;AeTA&0B+nl;y}A~q&Z+Y9Uyjd?pG*Er{tm0} zeaA)aIlMV*{^yQb&h&i%xW|=Wy>apW^CioFZINTwCD){(3GcpN*K$cp-e5jH$}*0h z#>Y7#X?8xXi_HC<7tWE^J#qBW z&9RnhXZ@u~2en=G^5oc_-<%bD)IC>ajRjMd9+cyuYc4(U$=DuuZb#!XJ>N7Re_-|z zX>;BgC;6jgROf`L_Zw;d=-Q4y8kd;=tgPFx<(CaV`SiJopKKX-`u#r@zL{bSJD(&* ztEo@i@~;23KR@AEeqYy=eNOVp_WXZX9{ZkEy};KJTY4mq_P!|bb=PK`6z1Hh)eX{og_Z<<3FL3L4FPbm}JdB;zVoY(KV|0Oxs zz9Pr-Nx8N!mTS3Q+gCg1_!$Q^56^P0?Pnd_BK3lsPg=H+XNjYuxwfAn*Xz}Cy>{0E znCz?tpx1TeC7+A_^ZEs;tNqvPA72;NPB`oSJLEX}+X*=4Ct3&GLD%=6Nj=ai=Txy= z-~HDI_ga6Zcdftw5A<4(^Gx#5`HXZO9_e~_!sSuw0WFXBzCE@)ow9OkhV45&2T;#; zyp#KCwJjxM`J_C&d`fK3LsEaZeYVO?{bAZqJEZ>5Yv(e#HqNso*T)VBCp2Y1VM^gIy9%*U2< z^~_j{drfz*=Rec-7uuVf<-X~a#L(fj?)Au-M>2i*SVg`jdEYnJ8=a%*KSy-TR+DV! zHd6^A9UBDp?F*>UsC zjQNxDGh+K&j&UolL1sRzm*;Ztq4yf*SUJ~sw=BrmP>HMeP0vX^IjlZ3apYun=7r*z z>UC8=txubFwpTt=?QCz`a{ZKJcyy1nF`kotXnj83BHP@0@9;9iO`lVc9-mz=A$Gf(C!XPXSpwbwOy?D16mIuZmV4P_ewfjCCy;VuF!2sn_APZ>6U%A zZBLJ}moJ;$_mNM?LAyMaFR~WG(I3k;G@h=}cZO+CFO@tzQ+|JRQR=!{D0NDz&3wMR zKRD*CUwVh6Rqth`P1CG>eRoKo`-A7j_S_-u7fpYQq}drqEbCrqdXXn6gE|IQ+kZM| zPxh%rukSC&`KRv*VAstHw{6VN0qfqL8c+E}*^qv)4c!;ik9kv5d7*75t(V-ftg)j! z9#_XI?~r}Ly|LB-hkf-NKd01K&RTAgr&{MpnQ-n6CQ06Gk-XU=_1z(9KRhdS)-(i{eRAAs2gk|S)|ccS#^0XlkU691S9n13QO`Sl?xy)aSz^u}@6N5$^9JQa z=c4b}oJzA~!-#pV_bxbg&z>@|#h+GvcgE#TPNwp*MfUAZDKA@OU!8rFygeu}{MVo! zY3tX?wPE!Oi6Oa1Z2q*2{r-EC{_T=}z1Q;2d)X%~KkoiW{z-XySkkX!Siok>d8Xw^ z%l%j6`*+CqQU1A%_{)=)rR}m0xEDS{`n0q?hdlj?Y)jj7fpTijE3?~P8Pa2^d5Jz` ze_7NR_P=T0-s$)2eaIF~^CEK};_F+}_Bi&zJ8vZoI!`}!y-l6B-gYH_{ut^rJq}*J znEGt-J5uK`>Q66Uaf?2oQhjsChHoiF`$axD+*uNx=p zpr1&8ovw+b{dKF)5AUz@u7OgwYTsRsv|IdbdA)wW^1IjH_0J|BkX~JT%ehX=HQL{Y zr)>^fAKqT!6OVU4aIdf3E7!bba&2yvbZLLtuyzB*^4Bk3AKnSfPtdryCwYPU@NDUk z*FG}wt^m&QqskTv4f0Hpn_quCWf$2P_ zd!!A)Yv?@oPHD5qJIwXm$dh%xZ>K!+@9V94ziivTko@LYkCvt8b>vC^GR_0ENgf)1 z&XCU8c}T7s&U`4@za4U2amI_t{^DAq_eMJwxqWgY-V^!K%4s>N`{kRj(j$El!}d%1 z6`lQ(>z}hfx?j9M(?_>I=nF$Xqtg%S+utc;sejg=F8@2{Pfv}{pW>T)BXx;&J;}rJ zJP7@fcWic_Gd?5N9vz2-=ZsnMZ?|2o>)B6}w!8m%miw-}9a1mv;PXY|JuKzeJ71)X z=^CWk_T8c9i1>HPdAwCTN#3xwy}uovn%C!U?=gwtlwpaX?PRn=cF6V~`@F2FvN=_U zohj=~>9b0Ie-@50jyc-GnhtHp;`$^1c0TCmZk0M9*q+tv&nTXIOMm7bxyD>Ke)3=G zb%pOwJLH~K=iI#DyRX)Lll!D6oN-*!Q~SmHu*=-+qrTJo8@VPt(JF07=blvZM4#`JL7(3+D|q7UgJD@9&uh5j$e!9 zIgX*J>Qe93knL!G$+$c-P9W9(w>>iq%Xfc2Q;(N7`g~!UJYS%C>_zw4D(W`(o;cOl zq4{Zh{yoL?FLAzVdC+z{`ckw&pgg=LefgS4VSg9(O)XFQUc`{{bTqB}WnmZ)*7&p+4G>R{5Ed*f3)G`LL;v^r!sasgLw` zt&imA2=!5etxQGb$tg}=eRbUOG~KPQf9 zj$yLp2l^9je^d5<{dXMyv63E6#~Ym=ygmN+@wN|t<9|-u*7Hp3!krhDOnm1H|J@CK zyzgiFcWkHfv%mYL{&xAjcVCF(dc64f{*|AoL+O#hDU)c@)yB{Pbbd~W_1wr~3Hf4uznqfP&k(?0o|Pmeq8`#)GWe)VZTz2{2A z%`|;)^!Jg@pB`TF`rT8%`_i%*FWz%Q&OaVReSEy_g4~rFu!H<89Na7c-znP@7T_l4*t{kKC)}?RUf)@(Vlf5>i^Ve zkN?@H-TvEadyD^i;O2k)Y{%xBR}nYU^d0Z}*v?1)^Pwv$fBfo4|L%+D{K=kmpGTME zaqDw@fA*9A@#kL}|8Hl1^}N4(=d1sI&d0%zxBX22j_us`>xTVT?tOfA){PIwpT6#2 zKQr3=N1W(qlmk%?L^%-UK$HW2h&d2;y**j{&Cav1{dlv}mFf1+LW4NdKz}6PKVCUF z-rxU7vMJilCqf9uCEm3gSoDE&6?b@ z4fU1l@U114(*7(+?>0rw5oc2T_yBb?nm4&UcS1veuM9;vvMzQsI4ro z*YB*UsmxuoDz`panY(IDb@iHC1R}r^;xo&-ReeSyY()#u5@ORyA<+U}{ z8$Os@wYqlAx^-1$)s?xGb#-g%F3>d2x@1Xded#3&>+9DzYWXFLB>C6Z*U2_6xw59d zvaY7IdR8*EKVr{H*|SpiEZEMjmwEv&j?bE%KP&&@f=esP%jV6Gue$Wo{JC?=;uZ7e z=FcvjU0zmMP%(RM<-E)0%#UAI8lO{8F{eC!Y31zF%J}?M<(E~?sVJQnpFew^6E^0g zTz-{&UR_#S>tyMgy4?E8hWgy;!u9|9S(v-JN_JLqucB&oWzD*(H8r`_l{GilC*8mM z^6i=%mM)E5UQ?lYTvb!MzFv)F>AJPm7tfwGf7a|-b1oKKU0SZkxls8mIjUCpq}|<@ftmvRrQ)C{ai%An*I+CPyH-P$BBQ>>`*NBvBJfarpJb;dc^; z-%T9;A>#0l5r^MMrx^TZ;_!Qj!|x{!KZj09_<6+PHxP&4OdS3$;_&wohu`tGz+v&u z>u%!kWqr`V2l4xe!(W1h?98{|FDDMahdBIx;_y4M&^*PLHM9aB_(Q}IKkKxB?w!AJ z;_ws15q}$T_}huYA0!Sxh8J|0WWks99RnZu#l+z^6NleH9DYA>_=CjZ=gOk9{tx^( zaro85;cp@iU)IqLeBgHxho6weFa00*Ma1DZ5r^MS9DWCJ_}#?eA0ZBZA{JCKiG|-s z9R472__Cl@-~&G!3$IfA9OCff#1X%MIQ$~w@QaDVPZEc}i#Ys!#Np@Q#X4rc;LBQo zfe-vz;_w@Z!{1LF{vqP<m@EeIE zelv0SyNJWzM;v~ZzPQQvfuBPh{tDvotBJ$!Bo4oaIQ%2T;ZO8d`Ee5qKS3OR5pnpN zh{NAP9Da$usKWPw-#{FGBXRg`#NoFShu=jU{vqP>=MaaVOB{XyarhO);nx#~pG7x# z@N*5{tV*qONhg7AP&Eg zIQ%x^@Y{*Q?;;Mrn>hSF;_wsa+V{7ZIQ$agh~GdQej{=CZN%ZX6NleL9DX-(_#`i*tf|h_&Hb<*Kqi`#NihZho2x0znD1u65{Y1h{JCr4!?~!{C48-yNJW@ zCJw)sIQ+!#1X%PIQ&lH@Oy~E?Cj9Decp?D1=f!@rL>;y*$h{-pQY<4+?FznD1U*Aj={KpcJ(arnE4 z!{0|7e&Pf6^cNF{zm+)R-$xvN_Dp;HJmT;xh$DVIark}2;SUgpUv#lOJtf59?<9`+ zyNScko@I}pOB{ZZIN~=Dhu=sXelv0S6ECr+XDV^{1;i1*h&cR4;_#b^!!L;2(^E(s zeg|>H?;;LAXSO|l9&z})h$H?!;_zd0?D4aS!(Tug@s|>Z-%K2SJ8}4f#NlVn4W<)* zf;jvl;_w@Z!*3=Izn3`te&X<_<_FUWe+F^*#l+z!iNo(E4!@T;{M<|J>4_7E-$oqq zJBY*YCJw)sIQ)Xk?CB{a4!?vr;@1*~-$xw&0CD)SdG_>V6NleG9Pyio!*3@Jzmqup zoC14#@`%Gv5J&tX;_$nO!|x#uzn?h#LE`X>=iAetBo4okIN~=Ghd)Fde%1$r+l601 z9DX5j_zlG2Hxq~7{h{D?;r9}UKXHNGpGq8lA#ubnCJw)eIQ%x^@cTY&PtO2x_|raO z_h%A^UqT$|X&?^2i#Yrq;_$N)_VnZshrg6K;;$eMznM7v4&v|!h{GQu4nJ>UEbxI} zKpcJ>arhm?;r9}U-%lKV;i5oty!*jo;_%xR+x-sW@UxcK{T$-(ZzqoQZzT@DojCkX z;_#*UBuxpxx${F<;3A1B98dSh{MnOm_2?0arkY-5x;{t z{HcZZ_%n#Zj}u4y1abKH5r_W>aroWD;r9}UUvQ;8{e{Hg?<0=*2Z+Pp^r!atTZqH& zB98by#Np>%WshG#9R7X85&se5@Vkk_?CUdDq$F7Z8WPjX2_OCk{V*nLU0karh;~5xaF_%n#Z&nFJQfjImo;_y3(!|x^zzxT#qI^p*dhrhho?pF|p-$NYn`-sDz z_z8Rbsl?$Yh$DUxarm2v!{0(2eiw20J;dQ3Ar61yO~L(wA14k!K^%THarm2v!|xyt zzl%8h1H|DUAr3$H&w~2}KTaI}3gYmqiNmk`b9?+I;_!D8NBrHy;SUjqpY_S$cHzf~ z!!INbzlb>e65{Za#Njs(hkuAT{A0x7=dKLy7yJU^@RP*hHxP%PTVjtNCl0@vIO4Yx zhaW4o$Im7Xe>-u+-$@+)0CD(3#Np2zv}&Gz)y5{KVJ9P!(T!;dBH@w17; z&m)fb1;pXE6NleP9DWaR_VH5l8%E#No%Q?eP=D;nxyJ{6^yNyI0%e_Y#LcvBvICB@VxkIMP!> z9DX}-_?^Vz53aGNCsrHe@bify{u1Kw8;HYiCJw)sIQ)L%@C()k(+R(jIQ&}T@EeK4 zA0Q5Yh&cR2ojpB8#Njs(NBkz@@P~-Q&srDUF8sp!ActQ}9DWyZ_&vno=dZWNUqT#y z5pl#XAr5~Rarpa)!|x{!e~>u*;?LOApCk_d2yw)pcuO!2{B6YHZzm4Fk2w4R;_wR_ zg4=~(OdS3$;_&wohu=>e{vdJq%Qx85Q$ZYlEpfzeBo2RoIQ${v@NeH}PtR83@MnJ3 z?k^w?KS>=U{zneJxUgGd)GzPZ|Kc6`KBI58% zh{NAR9R3#K@H>ga?E=Lq?|JbG;_$nPBYrP&_}RDF z-e}FjrBgEn7{zY)V;Kzx> z?;{R>fH?flzp}^gArAi-am1grB^U>O0de?+#NpQxhu=gTelv0S?Zn}C5QpDI9RAF& z1osR60^;yXh{JCn4!?sq{4V0~OYX3zrN;pa8m z;};NzUqKx4>xskfA`ZWYIQ*OzdwSx;;U|eBegkp%9mL^x5r;oS9DY`7FrDxh5Qo2% zIQ&N9@SBOlA0Q5Yh&cShuLjczznD1uZsPEJiNhZt4u6O^{F1Hq^wbiE-$Weo+la%D zea#*}n>hSD;)q{B9DX}-_?^Vz_YjBQM;w0QE_?cmh{I13NBjoj@cW6wA0!Sx>u!5` za)`rkB#!va#Nl@khu=jUer}sRJ#pgjlf)6ffjImQ;_$nP!ymlIo}Sp(gB*T7al~Ij z9DW0F_)Wy&cM*r*LmYnAwqQEp=Maa#lsNnq#Njs+hu=XQ{s3|KL&V`1eAAx(LgMf@ z5l8$j#Nl@nhu=pWe$Kb->B%DwznD1UCyB%FAr8NfIQ&?1PA{C47q-$@*P_IK^^bBV*>LLBk85r^MF9DWyZ_|yK@ zo}QV+;TI4`{6gaJJBh>ZCJujThdn(jh{HcZ9PuaqT`&&(IC1z1;_%yv!|x;xf7<=Q z?ZTf)9DV_D_=UvbZzm3aCvo^a#Nqc5hoAU+d-{ur!{1LF@edJ)fBSZO{H?^{cN0ha z0pjpyK46c(fH?du#1VfRarlG8;l~~fZWsPE;_zn@hhIn>elc9+hO--5{F+)9O-E! z4!@Z={C48-cM^xcn>hR<#Nki;hv0s}pGh440^;zu5{G{uarm{51h)&nkvRNq#Nlrz z4u6n1{Me(x?ZVF^4!?jn{F#phEhhIV* z@oS00?;{R>fH?fv4?@yI9DW0F#BU-FznwVzPU7%$erQim9&z{y;)q{F9DWyZ_&vno z_Y;RdNF09gKikuvBo4okIN~=Ghd)FdepXL#yYO>~!;ce(-$opM2XXk_#Nqc6hhOk7 z!F0keBo4okIQ(Yf@Vkk_?;{RB>qqwVWarn)|5x<={{QkZ6_=CjZ7yZQUmk@`)n>f<5pE&#h z;_!!v!(Xw_o}Oyr@EeFDeiL!{gT&#-{w=s&_*;m>-$opM{&T@N@RtyWUrQW*BXRis z#NiJThri;d_ViQ}hu=UP@tcUlKSUhkvRNA#Ni(!4nOM`_VnZshrfw9;%^}izl}Kj4&v~$_uJEx zOC0`o;)uVKIQ-?mw8yU?4!@Z=;&%~;e~dW%Nxuqi7yb(3@T-Z#?$8RSN{}6G+KSmsW;@9^0Ma1Ek5J&u4;_$Z+hrf+D{9VN1?;{TX7;*TM4g~iL z{!-%bR}hCkNF09b-|g|I5r;pMIO5k5hu=sXeg|>*UBuz{{6{dI@cW3vpYfk|Kc6`K zHsXliK^*=*;_wd;ho3!QPfsp!_)Cc+{tDvon~1}2BMyHTarpa)!;k%!J^k6l;V&SL z_)CeyZy*l8i8%a6h{NAS9R472__6;E?ic)-#NjU>4!`r?&;E@)elBtN#l#W6mN@(d;_#b^!*3%Fzk@jZPU7&piNnu-$-ci!h{I13NBlga?yxWD|$KggD|aCl0@fIQ%x^@CS** zj~xl76MhkK_$9>Q_YjBQM;!hjarm+S-=3Z%arh0y5xkvRMT;_!!v!_OYFrze*<{3hav-$opM zCvo`Q#Np>1wWp_mIQ%4W#BU%Dzk@jZZsPC<|Hq!5*zbZIem-%;UqT#y19A9G#Nl@l zhu=dSe%9}U>4cv{9R5<`@K+Fr-%K2S2XXiV#NiJShhOlzJ^h8m;cp_2_*;m>?+#NkiMvd5oB9DW{g#4jKYe;aZ5+lj;P zA`ZWYIQ;nA-QR|tkHq2cCXV>~iNmiy%^v@D;_y3(BYrn=__?Rs#0}vRwn`9sK3Q;a3ocpF24i z2Y#G5{H?^{-$xvN))agE9OCeci6efJIQ#`?+v6`K4nIj8@f(Q4?j`&N7!#_eC{=|0&w+p}VJwXn?jX3<>#NqEJ4nON0 zd;A>Y@Ds!lznD1u65{Y{iNoJb9R7ad@N=iRzwz;k6NleG9Pyio!yhCLKXz_#yYLH% z!!ITdzneJxUgGcviNlYbXHU-p;_#OeNBl10@Oz2FpLBk3yYQzGhu=gTemima`-#Ip zL>zumu01^^#Nqc4NBlnG@bfRQ$6rDmeiL!TZzB%BpE&$M;_#PFx2IIKj_YjBQM;v})MsU0Ei-^OoB@VxlIQ%B!@Y{&PpY$j8^h_fT zKS3Pvi;2T;A`ZWeIQ+zW?dd5Z4!@H);&&5=pL>x#ew;Y`-NX@pKXLe3dG`1@#NjU? zj`+)o!*3%Fzk@jZA>#0}-WNShrgXT z{GG(%4-$tT`#>B%MzKS><%8;Ha2Ar8NfIQ+yV_Vg4Hho2;l_zlG2 z_Y;RdNF07v+@78s;_w@ZBYrb+_#MRIcM*r5JKLU~IC1!e#1X%kIQ(wn@Oz2FA0Q5Y zh&cR`Iqq-VKCdMXzlk{Fw-JXQn`@7sO&oq6al|hm4!@l^{7&NVdx*pDBMv_+-~EmA zCzm+@r#MWZzB%BgE;&{#Ni(!4nM!Z{f*PVggE?t#1a1harguC?eT|* z!!P)d-7h2#zk@i^(?uNqj0N`i`NZKTh$DUxarloAhrf$B{9fYl`-#IZ{IL5QAFpEK z@DC72{3FESZ~2Hl{x;(9dx#@`A945vAGOCXBo6-(;)uVCIQ(AX@cW6wUy`t=XE|~B zCBzZGmN@)A;_wHE!>?axPtWbd;ZIv+_h%A^UrZe7NfL+OLmYk|arjFX+tah0IQ$ag zh+j(_{yyUH4-khxNF07_Nid!8lf>aS5QjhU@?aeJQ;EahP8|MD;_wHE!;f7N+%Eh) z;_wTI!{0(2{x;(92Z_UveaxPoCB)$`Cyw~F#Njs*hrf+D{O!cy_Y#NSPaJ-{(EW|; z+XQj=J;V{ek2w5-EA8B?r)qw6~y5;5l8%X;_!Qk!|x{!zv()AdfJG?A0m$U zS<8ZP;3tX0Zy*kT>h-}m@MjQ*Uql>!332#ah{NAT9DYA>_=CjZCziXv@$oGt4!@Z= z;bZnK=9*;_$O> z3~m>GE^+vA;_%yu!|xytzneJxUgGczirwG1{1g(0UqT%5Yl*|}BMyInIQ-Zr?CHrS z4!?mo;x`e8-%cEUCvo^WH`&vZM;v~FIN}!(hu=jUeh+c@{lwu95{F;>XYOx&e3QiC zHxftuX5#R>iNo(B4nOP9?di!O4u2_e#9u)ielv0S?Zn~tf6|_wLE`X>R@(g%;_!D9 zM|$=Xhd)3Z{t$8aD@yF?sU{A;fjHtf5r@B%#t5r-cyx5rNqho2;l_zlG24-$tTs|aovejai71;pWZ6NleR9DckqxLx=O z;_$Z?aOCyUHFvmpJ@F;)q{N9DXlx`2ED;XMM_^o*d%v+leE7Cvo`M zpSH)(B@TZJam3$79DWCJ_+7-|Pph`4XC`s@1;i1*kU0D;#Nlrv4u2PM`1^>%uU_r` z#^revarjv^c0Y$W{O!b%o}I+u4-$tTTNB(a{5<0D3y8z-Bo4ouIQ#+P@P~-QZ>)8H zbZnK=A?#Ni(x4nJ0BPfs>+_%n$k{sQ9gONhg- zB@VxXIQ%Z+@DC7&e}p*v+;#46e0<}?;jbW$_|?SWw-JZmK^%TBarphj;V-Fof8+Eo zCl0@nIN~=Ghrg3J{N2Ri4-to-wLX|m_;KR!6U5=)M;!hm#Nqc7hd)Rh{x_yxofzlb>eV&d?V#NqEE z4u2nU_&FQh-}rdt5r+_=Us~zl1pacH;0miNjyeXiv{l;_w@ZBYrb+_`8Y2-%lL=#9Qs@ znMxdfk~rcw5QpEm*&e@*IQ;C}?0znB_{GGLo+NSj9mL^x6Ng`XyFEQg;_!QkBYr<| z_|v{1iSk{}JMdzl%8h<*oMk6~y5;5=Z=I;_wHE!;gJ6xLx=~ z#Nn3^hacM-i~~QLIQ%8V;V&l+znM7vcH;1Rh{NwA4u9s?+~4^6vVb`JM~EZ-F5>WG zciH1-6NkTrIO1<34!@5$`~l+d3)<}IDIyMkKXJrAL>zwd9((*o;_y3(BYrn=_|v{_ zk3W+*{C47q-$@*PKXLd&#Nju5!=9dI;_%yuBYr1w_+7-|_Y#L6+h$KsHgWjX#1VfJ zarphj;SUmrpZnML^b`<>-$fkpdx^vEBMyI%IQ${v@Uy=eOeg#Vari~V;cq7ne|sd7`2`tO8TR_Y(- zw|C3W$+1(1@p8i(gV_-Kmf=)w$9`dWH~Bg8Z;jte{077OiQjGb5b>WGo=y34j{IBW z=MZ0McrNj88lFe|dBfwx^Cr0Q6U5gVUPSzH!%K({8J;BmAvutm{#xRj3~wO*q~VRk zC!XTQX(oP^@F}rzu^e-R8_mxGn8Rh48yW_%A~E`BE@!>0BAY|2Bm058=P@_!oQ|IYXcI#m~*mI;@v8}_LR;a>>h zPlfQI5Ps@A%>Gh3FE^Z<7PkwxrE{lny)G1+@{Ii&GI4UKi8Akd2cM@FQAjHo**Nq>i_%{o;#s98wjbA|V2SWV! zpXbIeqWG1n`*!aVuKU$x;xxINkNqUXFP-70r-b5vTewqCO1-5Yr018$uO)xl zpP2n6zgV~}f9?{l`Orvl{>{W`qd1e_Ymc)`xW;LsI4#1Rd@ym4|9eB?lwIV;X{I>e z6>dxa{5&^)AEk4Ha7|AK#o1~6Axh7Xa9jMQ_qlPpD9%3%xA`}{-%U@BTnGHe>ubU_ zJ-rm?C&n)@{%-ecv9mv5k6$8OtvWHxAiTsq738!0`t!fomKAK@A&hvF1mV)uU_ zT+`D|>3Lna#)(s$1##E!ru5t*+?Jkkv)woeit|z7Hh;HpO;10i=hQiFoMMWzShy|D zFGBd*xo-TJT%YyR==@jO55jG6F3-2~KH-`_O_ZMZT48zpubePY>v^Rp11{E(aeEYn^xVPfAEuIbN`c94FM{(j@6!FVH-0yz{~F=y7nA>0;kND0OxXD|!kzPr z(m!FL-M=SV#$rRpFP3(wevqF0%U!>Zw!2Qav%kj2{yu2@e)10)zm4Kw zbcGv#fc#3~8o!I;f6Mr>Gu?FJzx$2fNAchFF?)V~Te#*!HpO{9#IG)N(=$Zr`L1w{ zlSgrWZTuW*ck2iFdBK(T^gJkB;}lSwmqYw7{HdFs0uvwkzf-uzDWW*Xj9*OYDY(j> zo@az>oDzyNeyKU`wB3&gS3gPq=ZxP*+kHZ~?fhMGwHv3F;@l?ODG#*WCyn1g{{ITM z#m~LQ&KC>U_)WRa;qs2x=Y{Kjbx{1B#_upb^8Z!icacB$S~q?V`D=x1{2uam7=M8L z-x|M{{CP$8{rXf0|85BXj}X4$I(z&s;hJxQCY`3biM?icpWNT*XVWR}&&!tCAE*UU?xOBPew~@bIxZ_KE zUq2{64;#OO{6XQ_t{V97pD;S=`wg(18#g#SwjA9s^I{(cl zJLATuInBx16Qd4ipbw)qO%yr;K;kNo=YY4wLg#R{#$I9&SKODk;8NxqT zZjbYiA^f!veouux&V`kB{y+#{u*&W~8^V7T!as1cJ_q@P=|3SFzym&o?e_*xU z|0m&kJ~m0cqMr`;N9^~)_4?99+fCHCexcMK`oZ=63&NfD9{EohKTGmMKRDmVuQBz& z7hJw&lKXS9aNB;}DqQ3Dp5uD>?+-%!Gi&W}&K0iv+w)g$1nln$;TnIC;(yclO|bO;ViwCQkc5xnII| z-(Bze4dj19xaLpEzqmf~=NpE1{nF*T%yr?HCQj1~m*ci&G(_;^ni%JXZ+?w}xzd}zBQn9rMqYx%@_kIm-KKQMk5`KN!* z^|2l!^7(4vPI(}|Rk$rZy(SLUZ5Vo+yWz>7cjNTV4W{!3;hIj&vqn0%8h?=d=Zuee z&`9T0sh2gKv3!becsB9B7H&)bPeS;DM!Wwv!ZrPvXN~8uuL#%l#A&;UTU}m6{7&H- z2lJ!5%x?4icP$9(6h#vgy1>o<{qjc`p5<~t+)-NtVt z|JR0h5WnPhd%m@Y@X23v)6+w7N`>2w*Ed4=;Sj$1OZGSeA-wd22Cz11G4LAb_gq&T}m{OMn{$EgqD zy&-)1R=57adIC#K_9caDdb%h*4;vrz&FhUnX#4^4=X}kc&gCKexe)&GyX<9scIpWkNp<01Sh;aZ<#{@2uTZU&9N#~$Z);hN9!dBJkqBV6NPo>#7kbIR9U zzli+Hg{zNwQl>c*`-1UH$lqyv%#*_P{Z->9$)EcTce}O3KO@{$&wN+7rU&z?CYkgf zFmW0w&Yx^EzL`&i^sf}I`O{4PHsfPn64L*i@!QBh`>)+N?Zj^sZcG1{g=_jTj|utz z0~4o{;+*RcOTXpD?myxG{mZAufK8Sy81f(E9b5(+fZM*E;iao zl{M>EUz)*p)7|c>s>N5$naqTs0Y7i~MKqgI@L~%~a z%yKrP^IDJX!n(TB4Vk6E36V)YEMBv^cFnq~`pV4G;e|;*EjRkg$I7ajRcm7F>Th0I zTDvm7a#iWN`cc=M{&3}MYTS^ct$sIF1d>%=y=L9|x=JTyH#A0-{8-`QjaADx)K;!rxxDV0 z($$sMugoCH_2u5iW_ue;FV*JULyFT0;)KXF9i|@2BpptOOw)l9l{$#&WJ#cs&ny%Y zCEmpa$1;!TT>CtQ8g zHD0z^LzrzX->`U1&BEH+RJ_rY9`B@*>a z3F+`cSohk!^+{z-8fi7RE+cQpIb}234DN3-%2;VZxHY4f+_d&M&C?78*ttYxydN1R zB5)RElpTTVaHhM3WMv#Db^n*?&Yg^wYx;G2s?eO2rdQ?(N&ixp+7%~8riVE5grwR6 zxNxOY9r*4_GTo)j6Xf)U&2?||YASD8yzmO={;@2%a(!*Z%2jo8SLFV&zOtcy_hx<2VNDsGY6&eHNvFTTFMuBztdh3m?zsx~H1ECQMdD>Y!M z^4A+}xt*<9Q&)NO=({M*{-t}ooUf-^=OZ?5+}yalsyp*Ag1>V>7;9b9L`N}!&zDRFQ{mpfiPJeY-RZVH#hK;M^Ql#=XR_Tw8 zt1l~`Q&Bc|Rb@eb!DX{6=a*kPZ`J&Hv&$}v=jRt(nqOH~Ik#Yb!Tj<$t12%myR@`& zPFa3=#bsp`b1U-aR$MxJUggRncMI2Fw{&CGB6kaJ_qUWrX?WhUrbccC>MLtfZ8jv) zoCNw$D*B3~tEblO>KRM>;PgasOKp8^b>+&N<}6R0LML8qmsQ=I%(UFj&Y;|;Um-dL zFM}<6MRvr@x^Yci#mXD!&XGFJ>nd`dojBEfyyuCBanRfVY|7s>M#w@Tbt zg?i5Ids?~3*Xx9`XtMB4E^0NVCF8UK=n^~zljfWZqpfKxt1DMaZIEV}^}d~MZEFIg zS8nm;bT?j6CA+?^Dy{BkeLAo*lK^t(n)-TLdq7D@D~6<^91j^re-Kj5uR7^4NUQv% zww_MDy~O+_YO9evr5OqMNcn%%v9ldl)$$)!MhkQ)z2@;b| z=}q@qC&x1V=2@yFq?2T??7qpFFJ&RQu3qj$y#$SRZ``ksjrLt?Z_+xyu`B78MU#^m zY&-3vP*=ICs>XC|jOGZsy(gMWvRDQ|KG<=-bHX*A_Ti)d=M(rc*rzMoMN##$*! z^SbF|N9w{kW(r6uNof_349Z5@)wX7(zXHjy=cRIWZT*Imk(f-1xwAj%XQuo0OcF45 zPBW)2&fqLdmFO{Wl9`>!U{Wl($Q!`Wg#ol$WOTPbe>sGdxJ?ola)!W9e)f zi>K1Y^%W9KCDGI*?jc>?gtW+&aR|a7IeF57Xy7L zRBFn>Xp?Ndo9-SvUr%qB-LIy*VI2*Y<}SNm&1A#r?XYe)?PILNxyHt+?n}vN3!D2@ zE(S6pt+KAFd~B42U}8p_gWk8tNO>5Ro-}tTy;5Peo_4`- zI_Sp6oFjiyMw^G`yC@QAeZ3&PBj9X0HIFN;O^=Q9(%F+VFOKHB86AK$hkHAlPL22G zNnU2vn)Ru6lGV7Pw0d1i8SPOlTeGG*&75<;nr_DFx6>=P&NtKDEG9gqw`uR&X>Z;) z2R*H>$QoY&Bx1zrZ0;%?vUpljr$^!|$1f(A*VV15TetG^nu=>zU0GARel#sP^W7V2 zDjRAm%j+vEbPB(>ZGSVUx~i;ptvjbqmNk?KqB5uMviSwGO^Dmt}cV2u|d``Ty zY)<~{xwGfZUNvv-y!n^SFRhq=X@35y^0}AB%jQ)U%$+B*N9WF&S5{UYubh|f%*QJ$ zU01oWs>nB0bZJ#t(RDgw;pWPEc|yIua^qSrNh9Xql`@l57F4`ku2}M`OblGVv7&t4 z`tow`>&MScUY_xm@-@}#SJ$juSH0$zG?wqe*PSAiX5vq<_?crVONKckqn&@cClBV# znn|IB6FTBQ$Q&CkXqxj4p z{vUI10GDf;p7nj15SQJcvI$9uVRuP_S)xRl8D4}eB47hd2YFE>&5RZ z`0dtDX1zk^>sh(2xqaZ#iFI#c;+64xufF!6_&ql^k$1fD`OfD??!R>BZu`UMp6ht_ znU~r}?mXM^^u4F=zx1GUo@Bzy8|j3-`vxu0z~7eR2mMjc+rX2YwCm%Q`3)>=z%zwfxBh z-t8W>t@tUEzL#H{D6ZwN-~9H+ZGsm!6mdIH_`xF1-^b>fy`))exd^epv`A>5{L7Gqgo54@uOvCwAxmv$aJZkNH zvDgFn^5^f3J^lFk8NboPlcFzsn#cPbd%ttDI)1TuEBDH)<&D_0`T>+X&pdplc)#}i zbN3%UeE8hM2M_Ld-h1h8$Nl0h+TA-3?>+re=bdNn6uVNc@Ui%P`bX=}6R!lt{bjM#^}js+V66D|e(_t2#SioAZurTalsd}Q{$_l>+V6|5 z?=n95;I-H8eeU+pql(MvtFL^ioDR2scYNdF?Jf1io7@-1UM_~{dWg#l(rd5378lBa z(N`bb8>z&Z^ZJ)wjh|b1^|LQL_u1lvtM-=}KKnv%`KK8kEgBzt`0{68=>HKPy-IXG z{{ZjRo$1d!a7`+Ne)?uE-rRHCNb7j^voHK?Pl(UH&{O<6T$Lv+Z@m1mk9{K2{ldic z?O7^a$1`6u`mTRg>h1mPT>Pr;N5AmJn|t`TGjg9Pc1S#U)uz~6Un+{f_u&V0H(Aho z&%X4`vz>QddivRshtEEI_N50e-D!XBZn3OB*LnA0$HTiFBM%=u_uSJ@KkT^Q{>)3y zcNFiB+n?@y(EifHm+s$bFQ1PUe<#G={`xz3-!C4rgz5#r>*}-y1K-UDj(a_Pl)WbD#OivDb?C zZ8w+9ul7im*Qe|Csl3a1G@8Y)hhG0iTrrq2xJ9?PUn_p+z33O8OML#7FUCWdFTGm) zHIElxDt`Ovtk}go_+MUHlT;=U@8FgNf@$A?4$X7q5NA!`*lX*+1~< z&%D_4iBAvw*prSkm&9U8E|=8D9@aeO_G6#^)Mr2X!|wfO|CaVeZe<=*6~8q3#W(-d zcCW^<9U#seRi)-}PoVIwEaQ*v-{qbjZ z;+FuQ{Qbt`pE^8tYyRX;-fB^Q_|c!V1zocrODg;ktfyV_S5S+uebAX z`tjmOz^y0O<8}SAt3!Hdb$ijph(3H}Y~v4q>rfJX{$y}T4NFfJQUT!G>PoUzwO9>kyAeEI&w3$J{kI2-wl?d`4%k3zpg z2e&I7(QmDu894Ti&w|p!J2?wV54Wvi%%N)!Pdo?Sd=~NgcP!y{L-{C!TMuUWdxZY1 z;O$K2@^!EAtA@8M<6{zTTgYNkzE-@!9D7jA%3D7gzVUF|NqOVpwuwCQaLa1i>))}2 z+fB+x3f{(~eDnK&;^E%s?-k#-x%nJ7Zh7K!D!x$r)qmJ`_fdjh&3D2t-v9ha`6Y*& z8=EhCI~335-+1{`Vs>I zeB<@cy~5o6vYvjR_!8!eZ;Zb&UPk>|7|z?C^~DwSwT~1J#^c+pWj0?c6XIRT=(g*K zm*tkL+2bzW4I#H%(_F`+v;HezDS0#JAL_i5x07FZ<+c~ayV~Z z{!RtlZWtB+Z4BY#w|vESYKp%N8DDj{e%AfS&sSdQUij<_yz=Hv{8yep7XA8<9;Eo! zi|!5kbnz+lgI5Qxzk~kp^TmVYTUGgO26|)cjkoh%2g~SsPCoqD%VWj29^!+5>+g`i z@%k5T`E$%shqv%`s~S|3_IAFI@s%=t?sjwd&1v5LuXVlI*DZG|y_KVPuki2Mgt+-W z%-cHk-f}kFatVBMrEYH9ZX>E(jc)!B%x$WE^XgESJpOE~F}Dr)PS={^d#z(H-@i9e zeCB*3K^1$VHQYShZXLggTh!XTJ>s{U4v$_Q-_Cn0w;Dz}=9i12vJ-E-oh@KDtJ^yb zJ@)d$iI3dw%zUSzziK&0xo>xMF4v+@zVd~8BRAQzY0`vp)C6 z=ia#a0>j%`<8BfxCiUatZg-ZHx51^Wj};#l-voG~3KkE2CtiJJtk_);&~t2?r&5m&BwGoR@pe>)qUt6dB2_7QVLf4>szl|O~~?d(DyR-Q%UA?1$ zPWOY468zHjA8Czy&g*Y1KljGxpDzA-=$*Uw?%jRq;r)9LM>_9yJSe`7TzqT!nV0Ss z8^azv_n_mY`<-{5duinU!}jN&f9Cm@?mf8kOhG$}{ix4Ac<|znK5`i|;wJFzPPCg+ z#?bS+jlr` zC&;^a$MFtp;ur2$zI40Og3KRxr4l=}H=}*zOKX~@}hfhC!x3lBU)9uCIoG<<;{Yd+B#h<0W zJ96*t{byf#_Wu1l&)>Osr`Wf4_xYDz>L~sM{e!3P-oJnMxqBUVpLy`|Kg98d&9I%^sAtt{NVt;x)L9%#y5_~`4~=mVk5`T);_+EKlnoYY+F&2azo!6 zFJFHaSnL&g`Tno@!fW>)KKM*ABl%fu3H)L?JHIyc{qTb?eHG;7Dt+wL2M^vT-dbOu zE~?Xb@#XPr@U>B?AHDv<|E*5wG67o=eoiwgKb{^LfBM&6?>;SS`gX1dv7~tlT9w|e zkN8+UwzJ==hI;XBgBKt0KYP2#*ROmBVQ=|CL=pDpw^?pk>Nj35Ht#*j&u4rhexl;} z4*&U(TZX*#Cmh#v<93f*VuBXsy5+}E*RNES-fq^#i*Nb6gx9aUZCK8RVtj9In!fB) z|4+mKKmGi>Fu=Dwi%@*~j~$D8-SUH~>sQ{k(#4B!Ii;^(dE2l*Y(Ic^tM$?y+*(BO zdv@2qQ*b*4dbPs0RLXzf{B@N|@xMwR{Z`s1_#|B8xJG}9R&@}cG5fz}`e)7F`8+)I zf5`Og!b4}X@jZCxbl&n*nWJ=8=(o~Jr+7C!;(n+3pMdAOO~Z5DX5hJQ^Kj|ep}#;Y zJ>pAd|5vSU%VzI<6`t#M49|5tf#fPL(hi``>UTR|IM49;!tIq{(|{&zE#DKUZ=dSu-i#~#4oG(sr!bT`4BqwuO1%t zao!1!asTCJ-vy6xciwOI?Pfn<_Rgo^QGZ{bm&}jPt7Y@!eAE2+d^>_`o{TWx&fuzN z>(47IaSqo!5pUsm_R|l~^JfSi{=eJmFbog>&gYW(`NU}f1el*#O&zk)+R?j)JcfJD8^J)to z;~4fjPq)qfY4d*q&+FbPJg<9Aj9b`0XMURDVefnyu5lTlze1~V5#NSKUVdFWf@^-B z(XT^8=y~4s)bsyCk8_<<(sM|jI%lOvyxaWyI?!YOoe!D4e8$WiHhbsO@X!<2i*xdt zfrlRFOUb^L{&KPx-+`-cHS`Z?RfpR5mFLf)`6)tI#A`U7{WQU)zmeBB!=+z*2%hgx zM&U7zkKNb7V;r4N!li$W{uHgoQGCYi03Z^J(+r*NYXn#&L@rHsGq~IsHvq z=@dV!;^!jyX|D^FmC9xEBi_LA$k*>r+Tfwn?>GA3(m6%HpH@1>C#(3;arxQAZaVo9 z->Bke7ao56zGBb(IKP0$IQqJA36F7fUib6M`h~r(8};z8cist)diwpwkooa>GHiaF zPnsW}KTB}UpB3iMirL?_^I|L6A8~9CuKL&ff-=v2xW-Yu!g0lwpLV$X3^LC;;PNBh zlk8Wq?@jjN)5*RceKW~kd?DE{W51Z}#W&6V`@L>v@B9Fs$M*~#^$B}j_s`A#SD63$ zUs%>V{QPR;?Z#g)-f#Tl#%JJpJ)eiiy!CZ^0Uq<#`7&JNctC%JR^uqXX7+!DYi4A$ zZuZVM;gPSe=jZUy>Ff3dJajtmt1s&&ovrlyX{A$q6drN?er5@t>$VEdbz6hyx^2Rx z=ZyXqt@McRnEjsBZP)Cb@56K5YTsYhA=j-Ap6fOOm(FhbqqNc~J`K-xTYx`W2e|I8 zz(bF(W2^Ac<9q`yJs0#hX{ASe$Lv38^MBXuou9*{a|@mFr?}nURMzp*{1j3v;$0li zeso-Z=CSLcm45L-c-a4t=^rwC=W}qyT|xhX`3ao|^cT&K^KE#HCd=a6J3(fam$y3D5I$9jH*$Cd^`>s0vADJHsGIZp zD)tRk?Azc`x6hjYc6jLjb;dj3q2KucJn9@=bsjYTKW2U=jlXDo(fCWow~Rk9egKcS z4-2lihh{%w_E*M#!g#~Cm30n3W9Fw39`*Tgv+sdxd?)Dl(rSFghs}?lzbo*3UaZ3N zd9h*kKWTb4&EENr+57pjYxd4h;gQ#?=Kl;Hc{#5%mUYYLU9<6V^V4Jei^hlGQU5O$ zT;n)w_OF}$jPWVsOXlY{o1bN~|4nAUWBj)oKQceR&HNmj{ckb*E3=PvV1)ORb>Cjr zNAskIem$+`iFh|W>fnBc;Zf(`VR6Td|4!rM@Q6ESd;%VEoiD&6ZgACq(ft2*^Rr?0 zp>u_Nci_tRivBLG@)f_V;-~Q!-OQ`sZE;(S{~qJ5@QAx$ybT_4o%g{b-{8u(-~9hB z^D}1lk?#rlPQjJ$2K{MT})(p1**9IkxDn>ikF-A^|>^8I5Lx6k+=H{K7A zxNF7-;1SpP1U%vfSH6?x|BsrVCFASHH_XqUG(VeW|0m4;6rQhNXYhRex-@&gPF)79_@wc_WPHi^Uo*aG z{I426g2#BZ89#={csZ~6(9QV%b+fO9hrRPAvp+EVX0vxb0N43A#q+okxX$ZE`lGZu zuf-Rt_}MZ)F|YKza@+hkKS=g^E_s;j#n0d|?*6{!5*~H-&)2TtQ8(v}&1IdH?>^(v z1XsS|ZSZ_vx5LA~zhCP$dp{rh%-;D7T;rnWwkyW}W--26$5!D{hreOtzH9u%o~NA} z|J%lEzq4}v@4BAmrwJ}SeLR0`gXj6&4$t$s$NZm||FJ55#;f?5F+YFb{4Bw<&b2E3 z*Q@y7G5@aftcsuWDt>Cd>!zNrvkm^Hy1{eZy5O3h)AYM(H9y7Y&HkxE!XfANg4sJi zGW)M9?2pOk*zBF3!9#zG)&CqG`kgm?cUcGN-^8vFF8$)|@R)}`W&V4N`}sZu4?X|D z?1$l@$N8AqpPK!+**l*$`^U~xvvXW8$Ct3KkR@W}Tc zn*K3(xQx3GS6uN1j%WS7iFc6K5M2J}=?~M&zxWh9>h_OK zr;f|d7Iq8CkN6%u?4K%9szuMf**kCgp2zDy{GDaL87`gTZSXw*+u?cs55aTYHsH!@ znYf#9#T7q<=W#!R=W%cRaG6IQ_b#~N&eHFuRb25Ixb$m$7n7eo`b)`=_$EA$?@{v8 z%=&Pg{D{}J-i+6o&69d~=y%>__Qjz}BlDo!?46Im^Z7e!eq#PKGq1+XkMn7>5C0d$ zoiTgoOYn&6>)s|juWwuMyuR(4y{}7qX7BtGp7X8w-kUmy&SB49I@ z;k~7g_-`*f{Qpzqeelrfe9Zg@SH9!s|DTwj1$fL8e;=_3k9p#J1+IJ#=&#bMZsObU z$jkQ;)cn#i$B66q)wS@5>%0q|=gA0MdRFL<(n^o`X0o3}-&V30--n0Je`a+%fQL@! zb!}x{S!WAe>){^jKnGmhfwp8X-U*NT{A;Vv6g=yng=hV9@T`9ku6eRYe~DJ}M0~~UYl;%imSwE0 zn!WRNcPa@nLwx_3x9c!y~S*KO69f>wFik zxRdnvXcbrdFxfZ!@>2IvvKMdWc<6lUeH623hTw`jPk)$JamAO-KF*6n=HZIjJKs0^ zB6MXQeFtXm`~)6#`xmu0I#1zIH|OVO|MiyFh1olAY%hIAzM=CH{Y~)5*LgcU>gMPB z2t1z`Ut$((;`#d*>T)tut5XKY(XF$L8PHlN0mr{2Z?ORQR691zhzJ zzcl~)PI6TE%KSU8dAh8B)bkr`yjtMOOW%VTg6F(O;knLZ@LcCfvwx4poicmpb8wv( z2lVG@bzX=sntjY4eIIDa?457GqYnB`cT{E{t~%&@K8hnf_0N=bJT(7>tBUvuJnUng z94^f(r)KZ`3LbiV{j4KS*3$r&o<91Gw5pGICp`Rr%C0Y?@EAv5hsWSCj?VYtin~nz zfL3wE&)^Z)*XM?3%Yw*HKmA5p`4Mk6`xwXB_m{74F?;8IaMf+=n@W56Q`~v%2Fy<( zwIV(R5B=}6c{`Wa$P3@?2RzJd3C~bUS056qRbJu)W*_=H(KBfF&S&7#uX(tZxV|5`2hVvO!gF3n z@SN8vTzR#2mUTOWD=+a2vk(2tr&TAH~ymsl& z(JC+T1+x$Rwck?KVbScJ@4$0jXNl{3oOO3ge>ty4c+RT{p7UyjE3Z-dZM4cuyu<86 z|2TPdn!WQ8c+P7saeZHO4W9Gbgy+1r;5n~dxbmv~6=l8l;L1z+AqL^!xkeL3rqQK4yMCV1Ab1%4`4o%ex{bnf-KN}+<+W19&uSGv z8*u4A{gq`tn{eqDZ{m2abC>b&GCf1az0OzgT<6NKD&yxm_rj&KjeZ}kbczqbbDigs zpGESVPkzJ?;CWmQ;dxw6lK;l;GN04rU%c;Em&bEG$Bcis)pO3c*Rzc{xt{ItT+d0k z>N!MzidOX$pM&RmZY4jvzp8TmZyPQ@;x!*BkLP;U!gD>F;MZ}j4n0-;^j7gR09U@N z^ap9BQ(Ud=kFi@z_TuO8$g9P4Uce(S=RH4A)*XQF;{MW(dU%V;VH*){eob1Khll?UI9m!t2 zC)sO%OK-9lA4&F`Tn9&!z4&CZ@5g>B*^95hHI7}>a|52oaTETgafE9gHujWt--T=5 ziZ^gP$8Cd0+@G}TT01=AI`4!l?mGQ0TE!I~O7;u%hm*bdJUr`MtHO8SS^q9P>)(e< zfA>erx*fo!U;HB3w_tyn?8Tcop7nQC;luFI|F^9EBk<7gd&!mZ8GTMyZ}!d`;i1Pr2W*0e z9_KA)|6$YLYWB|C&Hi6m{X5Lwc{e=j-)jE*;i{+h`59D#=(U<_p~v|=Tyan6FVHHk_>$TCI<{=~&R5}~$Jennc<6DyVfMa` zZJNFFZL{}vY{%@K@5A%@b_`cNwZ7HsTK=>g;^T z?2AK{Ir_t9?|ccK=ixFu&%+IP*0}>$9kjk3n15f#4$Z&w6S(G8=MR;2JcVmsiFa^3 z$L)hhUcQd?!y_-}gK)*&r$0oixZ+dEeuMsWvKL>6XPtXh_z67gKZR%g=WyvC?knqd z0hfO929C?Vhkhfi?8Up`S^rQKJ`Kw!-LA^jl~ZSG>*aeI08zd*_|-(Btb^7d-Sh?=gE{$9m1)dB55FIyPYT z&WGW7eH(|Xo?71)&A+c>OXlDCuKD--w?lZ;+1Ifnc+}bXnb{YIDosCJj?=l>J8$E7 zo`>!5JP&)|d3~FLYd&n#pQhD(5MMJt-}}B&WBhjuu6k;}`~h74*FRIf<}mpeKQsTo z#QdKpKh2*i{ahqJ;!PZvp1yA@?K|PpGtYD6F1Yd)?@jhI^!t*%_&7Z3{7X&$G(79k z>!fELyV>Mle65Nf9haXY>^71g@m+Z6Y%`sQRs5gBW4?X6*|0K^3JK!1@@$O_lz`W{7_Tq!^JT9Yf={ZBsRPw+3gQf22KHe%btV7+*0z&TD>csWa=Tg{wXt^y_F< zAMy4oeg=}CS^9&?kN8X#KRPZw+t|$|KjK?e{OrS{&d*tW4&YH|=a**h_vcq;@4WR# z%X)@?-+$T$5C6^w;W3W?$mZ3o`S}*pIcI*HuftWJWBMDk8ZYr0=6mRT-u&0XL#Ok4 zv%h2Z4QB7W-RymzU5D8_ABN|7I008)ogXRdI|)}_;w#Bs^LRDci|@eWJngi+4&c&L z_ibg|!{oo=$4Y*b{EMH!qt18D|0z7`?7V`%(Bs$NdU)2OII2%Sc8#>Ek9adY^!y6b z(*h4Y&b#1QPaiz%Q5@-+!)}09dc=p|q38Qe&oDgnIG==PJ+ttvM{%TQjr+WL?4?J1 z5gvNFOwSTL^f=#uXFWUctY;T4JvH3F?ZKr-`~aTk&mla|pL2NDQz1^)qd3yjja@CR z^oZBP^ZaRm=lRnH&w9GxS&!mK&lGk&w9+Hq2ha1TAD-vWC_L+#gl9d9BR!qWpK0u+ zM|>8Z=g%BG&z}`|*0TZ6dUU@pJr~$*(Mpf_4m{7FU3i{9$MCG@9G>+kj`Xzux^g|d z#9nⅅ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

      xIr%dHy1 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 Xx)P>D!qed)=9;Jb(j}R7DB%A;=n22z literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache new file mode 100644 index 0000000000000000000000000000000000000000..b3cae5cf028ad4728b344193a7c6fe4e76e36af3 GIT binary patch literal 40 ZcmZQb&qyxFPGyunZb|-d=FObCt_~wwD;oQMIK+bek-+SxUeNY^#fd)W;#EWQvq=uBo_t{-U zb=_t?0Q6{AvTSQDX|-DINLpF34zIoIwZpG)IM$ZeAN)xXj`06sM>xV?{Lx{5@$Y2j z$@{3PMx)Wq0X1mOpsMnmJo(N%dCtjmHlkZuYVJhI&1f?-lVX$)HqE>kn_JQ3t6|6P zhF!bsn77A+=`)LMD>00J&G8k=|n_EdI>;~=K|L1@HAOEla^MCsD z-}oP%eC?n8??3;4jh4~;``+qSv7N1^S+*11Tuq8JTSZwnv*D0FzZ$M~Imf%{U^4BD zvfGpC?l4=8XMp}%R+OZ7@8G|-HtkzQMXM9rB){Adv( zhM_)!9qKpP10ApDMD=0p3`RS{D9M<({?yg!AE*?aU4Qvt37zatmfTB?=WD2oIJ>Bb z$yPMZ4pab_r0HK+PCqT~sS%o_{&M-yXs>Qfx94ZoQPW>IYqM#h8_2!c{L~1q)HXz( zm>O(6hPBt?y<@H3UBe=YhO3ilG|g7Us>1gI!`__xYFT&FSW`M(qqJbRtnZPELK;_S zH=Cq?zox!D9%Yk4FW}4KR|i{Cx7W2gq2t7fZTE89j>0f?v)u6#O(zAG>QGt%KLq{ z=fqa(_dwiE;w(t*UgmpFXnB$41gVo){S4(=VV-!IlSaN3+P*66u{fIOJ>y0C(ZOM5 zcP+HXar%tbj(4ZoWIDzH#(nawGKuO$onUn`FHaT1>lHZVOr{-iEM;S+5HH05LATrQ z1|4*i;{>jgcy1Wyc^tV;6y#py<&N#AQP^{A*YaY=ae7XcdSULnu9szD?D~H0`L-&m zjnjG>4My2mp93$INhr}Lryj&4QcK{T3jZLil-aeDT<{SG$V#PfqNPOR9< zBL_q2dHpEPJuk>m>oCZAy(CCOH|*zDVD;mEo@Tz^%VR6CGOpj_=@92Pm-M0dg%Yez zlJ!Fy_-+*0R^Rqq*RuW0w&T2ywgxeV+wDbpn)fU>^U;Q|pV*F*+L0ghGKc9ui50mO z#X~*PA9I3e2Mu=Q^`ZcC6d41*7o<^y`h#-N^XxbP)a&D4&-bi;ko6;gNiU9yLP|h#2zNR+w)W3irpmXS#}?3SwJh( zim(!#B4 zY#`3}XuQiq`S~0~u3s#ej+Z!T+{;m&z(Z#weLqLzV$X8jpzmgJ)(gS_`$nF5aUY|B zCZt}R_ENW(_Av`o8P8XW0MD@V6_@?9CV+~TD;x9Dw)`k^`*zQ_atpl?JFeZceLMGi ze&~f!8unc`PkQJPKMQ(3>eX}n7!y77d7(Uw{?BKl1Us}I?Q4~^PQUAQd!0Cmd@sf7 z=m-4}%Ovm#MlY?|HCEAlw~z_^3I?_jy{%y>p5H+Hof)kIpv_|NV1vOM>)JoT|($Jm&X-0NG| zqn*r+oGh`e6sy|qM=3si^nBz*RxiM8&3z~9#oXhMO$XaN@WylW10~pQ2h+h)6@La> z*Jy%!$#!M8d%c>7uJS}vurc+yxwF}Tr?YX9etX&g<{-i0{6DNo7d#dx<2j|xv%W;`g(kV8ReYW%2 zd3hgnEStyQcv`21fuz;?wx*%*!+>d2u^H>>3RT9dm&KUJWF2*l$~rbMT&ANjT;sPm z?a9t(H%5~v&y3GF3B_F>&nDB`#dx~4YkbP-Pjo)pAjFqB;qlIA>sPO~^zUPx&n_28 zDZBaA&SzI{W#eJAvjg_!!U)XeD9I+}mG4`WWf6)VN&_@*jM6L_q%^Zi8hV5UjYTNN zBV5y0I-gw_B?V?DcCnI#hQCJDSb$;NVhXR;G)RDQv@`_mxm?s>#_OExjm~H1aETdg zj?U3(iC(@inr7o1++#~4eVYg@Lo?oHT4>^p(QuGYv-I4#3)gpd&;kv7nP@b@#ygd~ zqTuli9gcYn0xb;`d7EJ4$D9}IcKy`OfU@W`>>XHZGS#@inCNHh3aTX+ws)|CuZ{=X zEsY@hc_GSxX^7tZ5G?pcG9K(qQL6E8F%08>H5x;pODDCd0W#6}7UQAp>)AGhDbq~tgDnjcGqV9T?r=`5;0EmDS%G^~OJiUKUoIBn z7=Of6u=RaBi!j6k%(J4U(`oJ%6^L=Vo?|jlrRj9e!4Ttl&VfF}$P5R`U`pM!J!xr> z=)*eD_%`Q5-)PV{8_v?KrD39P8c^do&WYV`BPn*Wl&0(_bhV;8LQBKN?zaHLIL;J6 z|0?dm*?6>pl@v{9V7OZv3i_9eIk>UKxdA^l92U1vZO4PnSuvZ)rK91Z`~?_Bz!cD% zH%4)RedqdYhw82&Vz$;`#^2{$7)=G)n4z0>x)_@Z#P|<5M`eXy&Tdb|3fI8e3TLqK zk2x>;h?oDF2tpK*Swlr1&B2XVIrnp&&rV09P1TE&mIh$DTrR30 zPSF67rwTHD!FjL&Xu$57Y=`#b5t#c)OQT@R#6n@hH6&xkbe@rPE{q7VrIXPNnO6b~ z&7Gik#4%q)I0H6>G-J}zP|-VcaO2<8cCcO%g~Gt(?Y#v{!gJ4SdYda zp<$xl4XE)Q&PhW^r=2MH>TEP=X^_|@>OiB*`7kb$rpTj{#kiCJ<1FI?@W~*%t>>Kv zh&faR8GprjP{x(9&Y_b<8707Q7$1D$2dB&g8uMTIEk918mNcK<-Xne%^FeYb;Q={}ketjz&ogGfHmWGKjX+VwN zl8yHm7X!!~Hx7?UO9R9VtAdO%=fUbcwL@oQG#%W^a1v_>`U7l36=wV~=R$2SLeLnE zscw^&P8Vyv0x|v}=fKHxE&FOV7|XM<99WGZxQ2x|#*df^hHwKHn=~30qwGvJ9^ArZ zr=`JQ$}Si42u4`RFLH_gq`K4j+|po?e;&bzEBQ~&rr_F9a;EcZu*g4;U|i$;=pUI^ zu*k)@r6HoXYcOMjb7A(W5+SdJyhBu4L&c6h2RE*BZVbMnTMWgzXlamGOLd^}F6YyA z{UC!#d62X;q*7M}Gk$|}iMon=M}>dUP*v9k+}P&ax~`{2yW-N<(x6IR8EA|+9~Ojc z#zov2S~^+mXeGe-9mdBz63Li7I3aQNY|^=`!R0)tAsBy;^JD&V{!a!`OQ(zZUx65} zaSo8A`GP&E80~KJTAZ{rg19d%LNQ)o8t8&^!|V=SYOoiP1a8vOK(V_u!N!Z67vsXf zvTzL*<1z;~e#*JAHudh8rD9|*Wz($!r>w>iH|Zr<#uH2l`@kh!N(X`=r{)S`=zNVK z_JM^sM$S~Iv9sY2GUzG^4Hn}!k6=8-`O(>YNsWdz-b|wi-fS_Fagym^yl;#Kq=i$5 zjfRLdQiB=KaxV1L**jpZNX{D#aoLgbUhKe-OlYj{&}Oz2&-ejT!|8J=+8iXf#%;B9 zsyI({y73ZYV}+fCBx09N4)AJV)HFz}usYCqrIL?MtjeO+Ad#;QG=9$c&=1#&VRmXX zD!{3ufs>YoiBq)!H6G`jAj_9r;zQSq?VXkeirL--8|$1Gl&`aZSZCHyG27?h#u?5H zI0QOTN=1${ur3o(Zw(i>s0A3tcbNj1RHN|dYBzxQD@_cJo9zB*uN?e<5A85&hktFNK2;(&Qhcqrx=UI3|gXmaOVod zb`hyeS{f+FtN}L8b6%7!uACbXp^N_35V4kOFypOCF2$98FcVzAhKO7>nDGU}}gQlPb*E z>Vk0q07?*MhNI54Hl)&BN*>d1IQ#u;9H1-c^ z=`W;M#W$`pbu@ss>?xg?eD-UgSXoW5af9=UqYToAWSm80op*sG5pp+fX(VyazFaIu zGya@uVMZv?v+SpqhKLzagBcd*LjR#zsplVtngBqp0M=#d11Gt`-mv;1br-Ad#;QG^U&n zK&r03M-v02fud)dVB;&!3t2wN?~-XtCka`;Of+^F4{Jgu(H79s$zqO|0OQ|deDrgL z%~O|X4Hewc9NhSKI5$-qLK)PH6ma7Sgm&27HCXZ9O$6ijIX}jcSzcTvw8Ul7(imbK z7vdQIE>jV0j>Z>+guA7aRht=L`~l;mRq`;=x&>lXS{ja8K`$wen;M4k?=uB(KF~OVC)07H7(xv!*G&a%{8=S0D>(Ijs(~VJ6Kwn?=f(L(7Y4y?3c;?1 zi1V!mGyW;(LT$xi0weT{R@?~EHw_deHo?jO;#2kc-01>3w6RIz9dHUN^$8e4!*)dD zkiol2I=dW(FDmsFHh`avZjOrEBWVb)fG@7YgnxTyFa&9Q*@oy$K_1;q*qY?|3Q|6d zHno)#mr#MDfj7-6Qm>QGU`{zqf4T|rlG*umxYFs2icU0vp?(GpgiQLy%BUdI>B$s~ zoud0@h3;gwBRD;i^6m`S{N&N!I=i8;Uta&oPnI|4CqGeWFV@hiHB|`4@%2u}gzd!g z4tbU_s@WguoYgf^1jx(shDT;%xOimVVevaWISf5JWU`I{n9Xbm41Su zr{^Kv1kXddT+~ZSkGyx^zEH)gw*S@6S+g_4iISTgEP3V?RVAN456Pz~PF`GRuu@cd zrTK3N6v@M5Y}3r#B*7(JLg$g6J&)c0o|e+9rJ{cC7QWm-tTysH)X4R9tO-o>nUoyS zl%Gt~!H9?S`HL4nxnvH9Nn?hpRv0fU_^oZMvL!f@MzJ$p0)JZ2m`3BxjP3vS-bgNH z7!o|}p%Id2zN$_+!=Au}`OJVj`))5@=BJe+_{yaWwK9wNOB`Lz_8l9hUD{|A?n`yt zYF9tf;hOxgj-*#D*cM!>Cz(kLhBv+Hgt{WCU{1hZPp8y)m36`DdIjr_>T7;5kX?=s zZEE;-4;Flx1M53j{lX+N?)$MH!x9p2jZ9#5<+uh7qU@4-*olnkH+$q)C7pI?$FOI+;4xRbY&B)Nnu8V?GeW-EQZSWdl$}d zb1U=uad4iSJSuvwJij52VDmIKcPfxawLF5KW|WOfusjrh6|yfe6iuT8sxvK$d92qM zYe!i(nVrsdbd#%7q4x%3jx&rb#6Vfv*)CGDW}7Gb6GonH4Mrnct6+6Z*dU@N_@O$m zcHmZudg;2b(=kU-shHD3oF4OKyn0=1ml#-~zcOQV5{x<&;wyWdJjYemd*R)lyD=I= zFNLKr9zd3>iYX^_`v$fyY`J7MCjTledXs?av7C8nF#6zAw5u2QP8rp z^#x!|bT8h_^eU-~oV*B&#C;6i!{S{#AxIHj}mU{ zmkOpc9=mv9{p{t9vnu_yx082FJQ#3S%*%tDgK1=bQVeevw-oqfEzx{$ByhUB-CF`{ zZ95tayW`pW2Sew&@#l}Wrqi9tyQ{04c(*Z&ac|mQl_hp$dGeJrqpQ!({&KAjCX<<7 zb!710;?BJHa-DM#?nNXT!%MG?k1v`jS-Ol(dR<~h*rTQSfw?W;8JMT8s>A2ezrF?u zhFRp`l``{-6Jp4|IAOx3Zz9;aZu>fn@YOD{YwnDTTUg{YCq^T=hCp-##)Ry>R=~_b zKS?W#NPacL83~#Y@6WoOw=x&Q2%6i zl1#iVK;xnIGBa3!k2~XxxF*#Cuu#GfTJ)i4Q8qzGgIAOe8)(!{o)yoEPMV};LfPdg zj-~0=#Dr>$7^E$_jZ>BrUtpKq`3eKQ4#5*00J{}7RIpM){M2oO>6Dcb)mO~CiARjo zfU+cPLAtOnPB3wx;BX&8eKlnfnTZF&s3Bv>{-MXu<3Wt)lBt}sie%SGdmt0s_x3LyXOh>x-=GFB#$;Q-IvNcql33WaVYMjCU23AixOQ^Xx_{#om zbN>c--ln#bH_y|~x?+-&fSy3FREjBg9^N{Pr&JmwFSH>;P_LG$O8-_fy}OZ#Te5R<=_)QFG0XC;M=Y*G=o9#@Ib z^N3xj>=pT~d`#7Z{HlKQXdP2)Pu1fM^{IMfT}pnL`FL%vyD_+M^P)1ny#!ntH!0#) z_^bQHmqW<4cx6GhF%Qp+637GG#ipi8d$|dr$1w_~rlih=cJCAuEK>znMQZppabPIm zs|~^u$hB=&=vu)NhGvC6iH0*SQ03woIp2&DQfY>&riO``&lOR{X<)UuXJix3((cdr zPs+3lEJ9Wj|KcFN`jySBHwk62##LhXTt29G3Ii_5Q=e&*#249kX<>rs0aU%IwqK#7 zyD-XG9-u05RX(m!Wqnss!?6VyD0sP`R^c^q3D&R8RiCPrTP;)30dvU9f>Yi$#>N}Q ztH$pcKQq2Ce!~cj>&7+XU1P)ed&Wz~3&xAs?HuE~#vd4$jGq`!7#Hz6;M=WZhHboM zoHm{|I>yh9=Zqg2JH~lqYW&bxVZwh$K3`Mqkd8l&9mBKMM`aQ|9@C9{6shFaME>!o zQE}xVvbNA;_(Rr~@w`SpZal8OmycEr;g~~YdfYg!GCiTu9>oHaT7H%o>uVp-`+fr$C-SdXX z{fO*k6pa6=zei9kSE752oSziW>fsuH5`M#d)= z4#AdofT6OAQX5$xue3&&$^I-3LZ7Ovo2NfcZsHA9Lb!I-s?XI?O z-erZL(9(0QK0#ZWhOX_L-w8$FX+lL!Xr9TxmhsG@o~n9}5P31bCa)r}}$XR3L6Xk>mw_st`snPvH+ z1=uF&(xftpxrhSFG9Hm#u5c?Q(iM!f*SS(Wfe;k#Zl$tU#qfQE4`|q<*D>EvGL&G zI}l4KAg^=iFzH0SE)hN&Oo{0NXAi?qh56PThB`$j-P5I$BgMm2=;-4Vc;f(qdhf~s)bN)a`%-{d!=xJMa%$dW6*YV0F2DH{dO4~3b?ZP{IgTcBPCteN>QQlI@scB&JfenNC6(!4 zo8E+4PSFJ$;mdg4ncNgoQ+Pw9Lkm{_T<|lBTUuD~lVf;`A(0g7##4!ktJY1d5=l*P zT+30RZNh@;Y>_5XW?*)NShVs_w;QSv%1~CnnTuJxT8&CV^4l}8AAr<$(xKBGNo8LV z{6SyN&Dv9)xr2Ufmn!DJ_2QZgM`!^KxO=+<)RdPfFTO zRi@>;cC%iOZ%ts$h1C7cO`hk^iEJI{fsz6`5Jk0-I=4!ig@0YYxz@U|R4^whK_^RB zH)MCzs`htwp7R`=o7`X5&dUpJ+0M&@w15wigE=?HIESG(>jSL|Cex0yQL?oijc<}< zV1J9GHg|pnKNi=0VMYGV&TM9Y_u9diP4ec>{tDh+kgu)|DZSx&Iv1{!7WU`;C-RDT z3cl*dB(WID`OD%uhRc$8sMV!nAFBcRmyl@Iy~P@B-X)${KY!}-2WKx{`JlU4J*G=C z;M7YG@sq1~@IbEhxI*gFIFhIcx{-$$6G7GYkruCL9d}`OCCsfqG zA{(o!Xr3Hp428Px7=_if#D^bLK?iN9vzSK~T0yI%RohDa|B*#ls7G^n1S>$FQpOQQ zTVN%)Xk=C0y*TuO3eG^*7rajz#@7&aVP1cZ3ezT0YRZp3{=%FJUeuwgY(Kha3{~wt zimmJEk1#GnMe{FOTh;L&UmT`^LpjuS`$rn5p=K|DdeRm_<}&hcao`4y?NB!exNGEw znubnvN!29aC_*_1>jKfJs#@=;B07|TBkBeSM-^ z^3c|W9O0R)%Q%8FSJOUqm@P3`v&MI?KLvV15au{wto^zxyIMI?MXcqk&d z$FR|Q4jsXnt7$(Jk#s1ov+j?FA`*T5u6^0_#{N)5qWWs7h=lv{hWc{l$|w`ApQmvr`=+_$&R{CR7=?t z^BHm%iio{%-V@EgK$SH=zJd1PEj*CF{Yv$YV0^JF_&O2-+`4~C;Q8hO$1gnoN_?=Ch z7;KPbbv;E{F8r=s?V1wcUQE&Th3AmJYIoO#Z(sK#YTGf`gsQFPcG+= z>K^9yYdFSLIiz(+UaeKt9#(8$JJ&a%$Nu4iF}EgL@MqJQT_2y{IOHj;SJwW%@cLeG z8&m{dCI`?v*dejT>|WRE#Jzy`k+eh67xXRGj;c3-9NOcDtla z_Wv&k3!-vH$Ztnk0WRxk%Ao$&T+l^uJyr)kNkj9a0>1kY`4aBuve62$LmmKDV4nW+ zZ~taIGEbBH*K7a14{e&t-**%1u+gpQVOM4E5>&~rWMlP2@XOi!(2>+RtdV>l`p{WxP zgpW%6u2S2gpeQITG7+p4&K*ayZG;`9K9TK%CrTBi0xldAaB*l8z4X&HM^oTc6uc_D zo5Bk?(Nev+qC9uP^Ce!Oh**o$5zgW8uU*aq5MRs+m!-8m~*TK4izPF87f;DdK$ zp12N@-7@2ewsdygHLo*@_I^r}NMxkootS~DEuaP(G!?<+DG#OXCf%-x=Q&7Dpt=`w z;Tn`W9;`Qc1ue^85uhZ(pu^SauqcF!SUK>RPQzgVXUCiH1Ue~ZV>m!~x844+sH$-P z3Kzh)Z{O}F6U0s_m)`2{j=$XAS}hBqha|IT*rjs^{f1c#FS3!9`@NZe9nP<^-hH9_0;Xajm5?zKR zn$7OJ@OH&}i{FY0ltR)7AhF!bT-GU2#3Phv05V{F+ zaGJ^#vJn1U$uaJvvIfno@DVFE5tVU*2Nhxt z!tJq`^57Lz)I+p(2hO?iY?F2_wO<~i>5U1aewrSxV}2O*Y&)_7yYJbF-;3;^A6aRb zF=e*97+z2bY)czq5w#ss33!MW!!&a#JL#`so~#yK^AmLn)<%#1Ks zL-?6u*c(mifOT)cS#!>e^n4>O6)Ax0<_?eNTX1K5Si61l z%ioy3`?CjVzAd_We{z1~DCV|acl-Oo-kO$QzZcnuE7~uoS++CDz7mE-wzzY9zJgtn zd?i4=uH8vpzn9wyqt;p_Aim=>3R*|{a555%tHxJrOEoBYm3|%5^`0EF@?%ccgC33hT zPQy>4G3GHOOPw@NQoC8%nyv7P@rqLR6wLnmL8F#L4A*x4NqHn*nc+v_s?3CRxn=GpXiG)~P^ zUGpOZ%qYbQj%{w-0=s=Rf_Hya$4ZL%-ULvv#-nU)6W1}sWhu5 zacG4;WL&A`+llAfRxb%-FzwhBBh85M!gy9_N0zj=w8cK4Vua})(!yE5c08=uo?Fc~ zp~nuW7&+{@wTL}~V&ssEsqH6s|G|gCa?b4e$#ff+qQ2m;lD^NH>?31T4yX?~}eA=3)(rDW}jiA8f?aX`+tlst- zgy`aDcQj;vu3`6s}q`FN>@{%;j9lDl|1Z9yj;dTOwB4hZ|Qe z6U#tW9)b@7lL1MT7U}&Tr_7}&S|ANKqJwP&5n--G7%0d;+Z2{;3mlyZsXPf9 z$*V3&K?~>&rZVVLmad2ZW5ljNF*y?^Ekf%-dK5}s6D-FmYQvfe7771x5LJWH+o#CP z1m%rP87vjHCnK`Q$!?n4yHhAIicP3JL}tX#l@j(m0$HKP_%H&|?mMbaAdS2O?()+t zhRqH-MkSm59P-OPuA&i)Px_XV*j5y{nT`8s--Gs0GfC`*zg^atyIWeKh&jv$;_)=u5 zg>eVY5B_&5gf!MUC6nd`R7=xHb;sokOWS}8+A%u! zjZrp9q8%R1A1tE4IOh-|a7k&1CWS4rdmWZ>%dRsL&pC0s8m^!48GhX<2+M6~UZeG2$Bs}nj-oY*$DB0CDh)XiX_ z;J8T`1h~T`4oo>c*Nz~g3KBO@6EAf#KZ881=Y?_V_Pqt{{lj{Fv-|6hABcIi=rVNm z{KnzVUbW)(`*A`c9=dg~q)TQ{FsiX1Lo+`{RM>3X*&)Agb_XJJ3nJ}a z;>WIUC2{KaozM%gWstqMoq($e`+*(Uv7ZHgnA*1O#&!_+S=j4A2&o9~A<@5*!pau@ zTS>s)>$)8u0!<(LlGC>nNaV3SC5|0xBEVNq31_Q;5q#)!<&!9vh&opGn=Kldl@PozFQjAoSz}~E@Bj? z9q7%8t0C#6XqMZ7(SL#?rRPTdB*ZD><$gcOEIY}AzUM^!z8B<)?^&@IWDs2ky)^Q3 z7bgr1=%Q3OJ*Pr`YXD{tMqnL?Hx=Kc`pxPG8I&tHt&lB(wA;$lIEuW!g^7o0U^$tW z;hU3Ul7xNCN0@uNd5kW0vQVqgbphb;Azz(tZBKCP#={0Yt${h8-^1aUL6%#}BFRI6c)z*GJhD@y2gi&ql|pfVD#nTHIDw0U+zZ{z%^|6^LUdIU=P}e^yl9T% zX_e}btCMUSmONwkB1^*kmh|S4KPP~d2aX8K2&IZS`0xS7o^C`EVRjqy(qE$ zFm`MRm{aU6k*@M3fot_(f=CYmq8zE% z$@*#31L-JpZ70(YGcHY|%}q>js~cb?yS*TAlfIi{H;R(n^*uanv8*JCNVDf*?~7py z>fooJ#;NC87Np?`W}j`jQJ#jX2ll7(Yx?L>nK!1mgLDRy0z09t)&k68Y_t(G)b%0< zV~dW=@%#o`uM;}hMZ-KyV(cSX9%CM1MnFfIdA%r&``B7}s(vg;!`5#+6@D^Amd1Iu??~c z^&;-!Fs>pk8TL~@K`njP3gW1b|63p!QyXYtde~%~te?h#7g>&v|8P`!Fv^9FEVPp> zPa@UL4NpZX^%}+Z!(IeSsVT|}yFteXUz~wywvr$T{UFLh&&Jm0gQD$*7M31NmQZOo zK=TL%OB@=y9I81hMvp1VU(80u7}q(>wVK0KuuM@XW=%0bqPx>FYMU?SOEuFROJudi;|*y*gljL*?aw9f$4wx z;PA+$1X}RMOT^EA{s2~(JM+Gz&leGc8G3Ot#0WY#6`&KxdJfYBXM%-|F{kC{WxW^& zt>@xoNdw$)Be1K!kMl0UR*lUO2Tb3$c=vl;&?Mbs8HTkwQ;wocrhmA!sf#z5G=IMJ zQS^(M`CHL;v|YfM_r06=xi%Pl*^Scfmpd#!-X9jzY<|9Z3h(?#*k+8DUK(}5p5VH9Xt$)l=F zm>J%gc2CiinHPzX4W)*X>~mgX`a%VxE=zqxmGFE8PSG+J*XcU`g99$n zL!AE$q&W|3wPde&;QQ*Ja=62sPm82Dmm$SD#4?&Y&s~1=Iz6~Rg@-l##v~d}_}P`zswSj%fq~k|3#X{6C-Ls4-E6Pu zgp-#v0-lFaH<;Wj6qpjc1SUG(Bfw~Gn&H6|tlTDer!_He(vcJyRwsB@{RJlION zNJ-Vm<%ZI2igeizoI~j-CFBaHD(#U<)#^hvF$`9EGJK=*grr)O>`^AFRAM5NgmkMJ zt2NoU&Y7g!12Hn)jq9}xN)asRZA^wn-Fh1zkUUOax`77hV(ao@H;yQ~bRHbtSq*_YA%AFXya$@UPFT1+!NsE#V|StoQx>l*28w@41Dl zvo7LDDH6!M@Lwl}rU2TaehlHdAKDqDm<~jB5EqcnJA@u74BdX%haw@fLde3R$fig9 zkQC>MowC60aY2)8=;^=tzoRIVOF3NH)V*`!f)jW5NTh1Be@w1^^RqX(9qouSUG(X@ z=Em+eEc9VLArd#BFTf(6?d+PT2jamr{3j_I{{k-#4N@epjkV34NDdpqlHcFnc3U_G+&+KRb$orKbBi#-rQ^8gKH1mT<1#Ht0OtjD4(r{2*O&t)7%2@4sG@14feyAPn27!P2p4tG58+XMYG^y|~v zr0Ui1zD?VIxR+`BbXq_?Fwur5+z*zpZ->TLxtGya?qpUT!?>EP4n~{sKLQ)|X=xt( zC#TFjg7*tSbWE-hnSk=Y0#O8X$tfYgQP2$B1l-`jZw4%yaC_WrXTswN3~G@~@(egD z5q2ab)tMG>`zVVfU9`}&kOL7Eze>f7ciZ^@S{Pv~Kh=IVo+T~Cicqnj1l2;*@;n%c zqycOjpjn5)KZw1=N}}9@T?6cmG%xa;%Atf7b3LYP!FBoqU5hDYP>WEy>##WES475l z_du)~sK3(0t5KP&(YhW69$zI=C~MTP%Vn$jd4#U8^JO~9=Db9!)>27QO5kPT0cmMo z8Yc!S%i%IF0c%G3bA3>&*c|j{+0ImZsbv0AJqjpGDYal)45MnKL^UOoz_GdDRU&l{B)&q=z}3 zDC)uNF(6MCY2M3wG5j@IeHcl4{Q%~ec?gq>tlzio+)c=4&rM+_2iF_$xf>_G<#J7w z$6kjFF5wi=>9YfmyO}5NVMV-`x$j;^vPWp~xWtn0$ezmnR}ajd+tfVj`L*P>@K+CL z&H2Q*uRFuny}TCPB)B0jEm+pPk1)>HU0*K$>noR9Iw$#jcp>=}Uq~Fk*Ml1-SaacK z(#!EgAar^-IRdifb|XF`C=$8+`(E=BP+?wA&vN)Y;i;u`;N><{!K91cMyC1hxf=*` zxLsT#VE)S_=dLsw@7xxgp>B>CQ9Y|H%NBfdy?*M=V*{sAGbX4nX8+=_cFm(X?H6#6 z4{I!B4e-f%NF3ESx{v>}2Ymi6;^@Cz#L*wk`qArse_tL`Xv_Kh`a{0cpf*+;4C=-1ZFwp`Wg^=!XqJ7Q#>|;=W>^QeqR)m;yquHerqrg>pe!W7waOD0v0aVl+d%(=nx5 z`Sa67G5qbfCHq3(PrM__`y9*$C*$jhcivfPH|wP+TpUa^Dt$lk&WicD2x-Fv#1AHX zDcX%QhKL`6II3xWuKgeb4u2NYaWU-bG!WR%@OpSOm~5kUBo(JT7p?$#V|Rj>8Qlw4 zfb=8tbL35CV{%BhTcM;=QN@aaUAnnHq5M#=1tWX6gGC`89zZ(}F*w|2!xMWn8$#Ai z?$pVe5W$IN(9{DufyWp!^%G94se0^!9nRR{(?N}d^si2C+pma`X?CjcmiIY)j{Nr9 ztX0^{4R`sZi*}RADlx1bB+>b0@%LKDJ3M32{e?;I zSfw&z3L!L{uPf*G@X;ejnUeQc1YuVCLh!=m>Afsat-fP*&m$%tqxm+BbI8wS3iF*T z%|kqRg=^O&vhX-p?=b(jBJdI>l$fG;0K#ulcx6AUVdHUen^T|X)OF05&7$-O{-Or( z%+=R`*XBW_(a_xgBKRfv_T(}b!9RxO3&X#)fIh)5Gr|jupjRS8zC8!&o*Kd3kuY3g zq&Mf0PQ$M}J=xSony)UxnP~9q^I%HBKyx9wyM+^SPSw3CQoHBi|B6AnQ3^D;!w_8; z3Au2k=C8%j-KoH%$&{Q%vDuKJhgiZ(`_)&t5e%rQTHaU)ty#J1-mVd7_-&srrE106 zs63g`k};I-#(8+%ptaF!KO1Okpqjlgl$YF_G94B~h}2Ov%auNk%5;8lYe=6=+T@7o zNc-E<q=`m0#IL#R68HrQO;8uX&4jU4U^m>f;v_M-gGQ^hPG?|sI z=EF=+5}B2->u6_o$;+3vpOW;XId6VT#CpOuJq%4DnJ}$TLvR9L~B?cBAYz;b@j|pAzhE*-}dBUM@yww|B~l$|405!`O1ju|yH;fYW3(u8ehp%!h{E(QTGVFpd~# z6{<|yxDL;`Oi3;$kyP70q^-S7uP=RIRT!WY1ooUtzK$f{Ww)k}TaWDpRW)hphOG(cr6@o{Ms7e*!-tmGb03 zeo`3*ner)K!*iXUK9j|>%`Tc;uJ>c-z$3$l1mirVes|Y7?)yZc@HlnNM@T>S^|BGiSXibCtS*kUP4ApXSV!?t6yQs-?W3 z6U8&B3c4QD=9`ma2ol=GOBL>b=hW|L7l~!RJW0u?ad~4rnNT^%o)s84PO&UXS+hW^ z9$QZl+B(LAqvjbB1yhGfKP^y@fIAYW9oK0anD6CSi&8POlkUcDN#R9>JwXiF^SIs& z%L;J@Vui|6SQL3Co6O+;hKqcGh-gQHH?E)4b~&QP)l*T_?(FE+U|fvI=O&X7or@X7 zzeVHE!jZbhkcCi+@WXdSKbkf~Md#R9(K4MXtZ$gO0%ggJY`@_>x9s9KMN{rnK}~}e zISgm-lzk!^bq;$j+@@md)m46(h*i>Sl@KjFH!Mok!0Q5?QfLQK?u%;EyMl2Ic3lrMg~K&j^5YP^c51pu}?8 zi9rBcT~|K-U6<=3@9O zP56ZbUChu|o6w6mu}7Nqn#)|<)aRgB05f#aOLBM7lDKT{b zICqBWaPP|{%&AO3rdH6ow-f-ZlrYrLV=ER23Q+Kil|85dqKh~e_mb*Gm8;fCT)_)h z5OPY73Qv!XX(}`68gSJ&X0en4aUo2oekzD*f8k1PBW}y;T!oZ}GpmlPuwG(nUl`>D z*fu>K#Aa0CFC}$!5*9dY13@lXtakjy-Dwl3r3m#UdaD)VOqgxMtiRXs{XXAw8hI2cu^5RG%?~tv zU!Lbp7-P|KmHkj) zUAw-~JvWRtbzU(l*laa-$qAZ?64kkuK?qxJ!(#eg%O*SEB(rm{t>w`Xlb{qIh#{`s z1qAtxtx~!qW)jY*%IjA#Tr%l$q+QY)l34XL6HOB5TX%hZgX$vTM&UoUp#BG+q3RF6ujv5tZQrCzM?Okx}5#JLk$XTe0# zBd4=a;#?LnYPfK~@3901@8{)%f-kS?aUAr-< z@Oi8cJgTSfOHE9FeG7iz-rU#5NKIlM9=y4)fvZ-+yjt$|$&Vb~AchHxS{gBv_Xf)$ zyJO4c5CD4_2;Z%gCY)RFyLDRt)L}o~B=-Mae!hEFDQSsi!hxUV&lkfDJn*x8IkLrg zXDb?!x8x8^tlN)ZGah)J0|%x_fCw2;2H(4`@4&YxtO0X)+k`VexE0Qw0FE_#Hop3B zKN`8Ni}y-u6rK^)Riw$gPuqB`IY9V*gf-yOj-&{5ee0K8!VMKV#-YeEzKL)b2xD>{ z0p+sc3Wt?(CG5lEZ~tXsu8$!l|J#3k3*R+DUm{$is5Bc%G3AqWr%Dc?@QUHu6lWG9 zVt4T%4c>g_NSg0`xg8}`L~$!BDk1Y$+9h@KJ&J$R-5ho&R9FQ|wdz+@E_Z65)%u%w zdpCg~17oMhD=J5M7TZe8uxnPEQH7 zfbkJytvY$v$e01nm?$b=BOlC5r{*?X5hN92RqcNpfw{A>sU%M#oS&e*M&6+!X!0Sh zG~b50DjUCJB4#SQG{H0iwlO=n;f!JZ(5wlfr&FLD6{Q~59f*yC8yJ2kcvU8B0GhRg zyQge>k_~SmE16pm^!!XAoX?^*h8TZc@)r$I%8c`8SEszPD+OoeI$hs_;y9HtHi16C-qma;Qd z+WT$1J|!lwt7Z?h<<#gwj9ac&W|?US56%|+WVhyQ&`+duI3 zEY&Vo&eSw+l!^-XJT>Pf=+&_MB=Gr2& z-y4b@mAl*_GcCM0@Ak?3>>|5JnfEC8*aOp%ucve;|VhP*(A3k8yN*fjP9(!N5 zw;#vaFH)zE5EBkXYe7g9__VSRunF%pqYR#r9Usxo{J5XnnMZte*rylOUYJ=)ikF(M zhY%3>o=5#qO~H0an4a4lTNo|+$V%sRa0CTVw{I~0lg)_HRzTda*Nhmg@J}=XNt^Fw zHz}a>JQI7ofvE^Qy+cl`$O=MB{eM90=DVw_6~;sog+GU!OoZU_YL)A&KHJ*-iUlrD zmnqCd2n&!EQyJngqKRMv2uF~lA^AM(Q=}0%|BvDQKaYF96O~-VbE+_DGIDwVpPEf0 z%BK4%LgK2f1S-VVDUUS#|H zd{W^Zt_Md+bU8bC8P{j>e~bl80mPZ4~}Ma&&MwMF2dK8^vWm$`ms2Vn@;KXBgw zX2A<_6xayGi;HPQexivF_B*-bx(f6w44ZVsv4)P!X~Tbc zKo0e=Cv?-fTe)JEu-5ZPH-0VxEDN7s0?FUYwfmrBEtb);tIL!)87Neo++W zkr(i#Cl-i7nSgRN##L0G@1GV9$neezrsPBAj#WtJ*e(36XgGr~a3+F<4-s+2EMMU( z2DSCev+VwC#oU3}mnnO@L3J^SZo5&^cC>58nTdC1unoX_G{`>b-50&~Qe+{4-G))Y zO8YiK08ZhM4mjyxa+BP|OOzFeUs3u9kH;Xv6GBJjkWD^JlN8V>6p%o=i}Iq`v;b8Z z?Gcg6u~E_sG@{hrEoK5O*(zYIPsNG2IV2W^U^baSc)qRNx0!<+zTe128_6N7oeIbM zSt_KuqE5E?!56ELA(~rwe1Qs}8AXg?xP>y?@Uk!b?kn$eCZfE}hIlKN!L98;MiwA3 zbTi6&dy-_BcY~sIB1gvhb57*?{Se_nJ;X1J69npWBO8I{;0CA%_fi4EoN0cQmDJKe zT+S7qLCl?#13TCqR>NBx{6a;*por!?(tn$zLq-*I+;1)8)zV^s)j`ak3&Pcy&wL*c z0J4~>#3ZlPv>xf1xq6XJn1imvu>@C_ccm}uo8~^1f*8Ejz1^3~$+~F2`gJb(Xf@tz zbx-F~ICU?>q$UTC&@05I()3w0j69L<_Q})xD7*md!T8;+T1_~&`S%aB9_~R&KHs70 z_*%l%d{iIQ`znbWd0<8PCu%-OXQG%EeFV_-J8t9&jvV1`5jPVNj}a#_Lp)A|e?*K% zgsO!L`!GecWW<{Fy*xmayud=>U4$d`LR*{3JzJwr49ye9llZUsceJ(O(vGSW3___g ze@&^(`zz+ zF7%Tnb!0hehIZtzb2jz){;83veZ-paY>JoKaA^ScL!z6fu3nI#d58;>Y)@SJt8Gww zPMXfGz{5W6JPK+ekZc_J2$|bU5rPykR~>}(h9jl`0goMoE!M|6Pw{7Deo2kXVBpJD z;4)?7pVfDQeJdN~0+($+v=y>I=<=|B_prl!gZl5657fL{B)RZ!mfO{QjxY6iP05MS{mq2rk}>CNK)a zw|Vi;b9Gdvpgx5`9GDe|lDB6g7$jj*PHrNU9{K2B{aq#tc$%$N`nN{rr)QNv9x~b* zK{f(GMK($Yr1_eVg`04xk53Fa*_FwdeC9;@4N|1eU#|ubgy$a;T##!T${}3kSEy4> zV5Fz%kvUp}-V@SHT~RmfJWVL-ea}U7b~lRuY~sxF*Z_ zmi^Hwv6$k2@qn!Brd<^G_Y(f$FCWNibEn=H=WsU;v`uqyqWr3~jAvok#O0R5dp9DC zxg3vZ>LdBzRLqPJY_6)mG5OE2EV9J6LTQ+P2BtqyCamM78_cEEAHW{jC-oIhgaCNv zHFBD?%P1yrdPGOzd>BDjFg8B{Eu4hrhuLg%3LM*#B&3c1rECD0{v$9I)9b2sUSYKg z9dxqq%zXv}-Nq4pyIg1@Nhk zXD!<)@}5jC6=6%A;0skefszFpAfbDrj3SYO_z3PHf+Pizd&EPbT)Uik;&*BS7fr8> zOuQ1f7hI=wXox&r;p&);FIRIhwsj?nwj3<9T#8pHo5zM=NAhawS}7;PU+ z+S}1hj0l*`ZCTgRfK+?LsqP?L8s(?{g#K-Mn-q2HVnV7OKxKanejSR@dJV|UA|@vR z#0KWdDJ zHgJ|nqfbG>@X({G#-%wihW+R+KCtPaFJ*NxE0I+^JBiGbctAX!&g}!TPqxHd#Hzx! zv7K$hW2MkiZ{ban=n$olR*Oc;f~hW~0SD;{)vmc^#DR~7h*t(D1e+b&KH#1e&!=#D0g+t2(mVl?_D+E{KyRT?#U0cm+9b`l=rnZU z1kd~1?P|5;8l{&`0;9s7W`%>ad_X#V%$MjEyqMuui#?4($Rqq~ zTbw7Q&sx0+qPGw&w%vYT(K0n98BU-a5!z->GYjz;>E6}pW`^$5jrc3D-vnACoe8d|6~u^)3T`&BNix1}+1cO0(ijWlkY4V;n3X zcXd3_PEUSFEv*EQ)6@uQj^y{2VdK62u;!9UY3Fqx)T7QRV}cUeQ2QIoCZI&1U7CA9 znc~)g^#bO)lJd_rXReZB?Q=12H5)6Sb3~N=a9NwWdxz&0xw#rCyNm9rjr9u`6q52g zUD9GCF&b4&8Aoo(;C7|{M-g3VwxdRrdtP{6)83c5`^zJS9D9u_Y3XFr)1!ON;Wf4o z$G5ah<$q2&0k+X8$VR+&D4ast>Zcr6r~p>XHIm5n7G|w<-!} zZbzt-SO_k2%g8B}IUrn~iN$=S;vjFXqb1r6^2uv+@1T+I-hxm59Vi8|4){ot=tDK<^h8L$Ah2Doz&(C) z_cbKT`&_X1U~e-&1;oM?ItV%JOT=GS>+|jYi{vIB*v==8%f?XElW9j>LZJV$x-P7K zf==S*juW^}0!3Jy=W*mZQILCNns57Q6!sk3wY=DIoSu`VUWm8hu9szD?D~H0`RoGm z^`#||{mLWh5`cbzMUy@2{8; z|KM)R#>h(G0J#q?){yJq9wxHWWf`Zkyouv(TM9hN={xC~?QZ)j3C+mTx>Ag^gC^P# zut0o7S9;ty2b){CqCy;s8zgSD5CuYTLV8Rg3z0_RV-*a9?uTETz-@K9331z3Lx|`| zPVvPFU3Fn=jcexZQJbQ{5bIXbPQ+c2Dj*EIAt-=6k)Co=OCVT4jcm(|auWAZQQLz} zn24jZq)3aBKysAAgNW_}IoV*u7fp zAoMvkS>@^P0~H?4AZAW(X6eS(ASZzdH(`0^aaK7~zq1st>aLZy^Z%&M0PNc$ty~@T zF*>xpe1T5#VOwo;f&eKKKY-x=#KcW@F8__;L@9tP*xvFoUMKsWOk2zo@ zy!hz%m<2jz8Y~ES>tnWr$-WQO_`+fiZ}Y4-j0fVrw9X%w`jQ=b6Kj(n4l8rRUgCoR zw~{#Z`%dTuK@fVbAK3}4)k1h}3hda=0v{q=IC6rCb>L@VuV?3$nl8^&2@{9TGqpaQ zj;wqx<_HR)j%V2$7h{~bGR!v34-gt|Je!#B!C~%Z7aSPUH_ z*Kn+sW?!z>dzmwc&)>Kztma0r9UB#+T_{FL0U<=6rIt)4Qs|Ok#iS4T5Xq*ABJ{<+ zNU&;PtqtE_U<~od^XjSfv*x?+3W`A^`KP9J$FbULs*IY3AjmQ|@LenS;nX9AiXcdG zD~jM%(Tl7ob+u6KQI%V|u~>)FudC{+5{i#Q*+p*Zw{^eWrm7ha2pZwmKcAB+h-^bTpdF{l=> zgjG49BZDgC!`YaQfHOH74&6y2GHHzUu4sA~KF|Vx-)>ZgbMTy5w zhhFwFaqr z)1;|{a<7I!1Qc~r$a%T@^e3M+e|W%?;ZR){Enr_B)@u(}Pv3z4YA6`@E1pdbcU~=G z^sa)@JJeG2n%du&V+w6Km$!!}ha2#J133>KmgA8Y_!@W>g*>D0_UvAg!wFc=jqx-* zkFq4p(moW7wwLCf71=KQ@`s*Buf>C24i^M4qkvnn)OVebjpPgwL#*}!c zuG{haC~@4R2e?9BRo)h)qzW~0=JS+Bs%ysObm!cMKujf(WsSe_D zBp%4_`V{qNXwPUuiY0Q2hQY@j9_{ksk=60Meq^IJxT;4f!WzImn++$O@Xx7_rTq=P#^T-gUp^4KZ=JKHw}ix8EaAuh`~j>o zcjtYH3HMlaZP@54pL!%QnRmiL1G`6l9`}VPHTISt)WQ1 z4gE3#4ZvQX-ho802A?9%8BCP1mACOg10EYE=*uB&l{29k7q18qx*KlRq@A@`r77P9 zgxN4XiBKqNN|-4`i$P|)d6ES1{uL(u6oCmME5v@BI2GyQcT|qoh3Vru&yPv>B2E}# z^vAPIMzH>XMuwB5pD>s&UMigmOIf5$o3neBR=5pdS45Cznlgg6LaAEtN}E{)xRl}5 zOD%l2{9A{Z%8ZU5>{`oG&Uz_Jze%;nLbxhS&1g@ax5^y67pMmqoAo~Q(5 zqCZ%UDf{heG++~8eH!dRz8=BjyL(ZG!Jn$d5BEZ&`CW}!x(71iNS>|7jQ{>}${cu} zB@26?QZT$~(83>xwM27BkH8sv4@WO=U=mW?t_+*RRqJj6dTnFi)BVdj=dn+l#k+gw zD|dNf3abutf1OJ{TC3s%c;~ARlUgJ^Lh#O4hgXM@m-XE~*)ZxL-ud=2^F3Nq-ak0d zve>^}?Sg*A6@mHTCAWkFJL)Sb>&3`pd|(6K>qHb+T5zhcEQC9Sez)Jj6JmJK4nlZF zjjcR#dLFLF{V2{oTw!q?41=uKO9I4V2>ZDO4}I`AlH!Kg%VWAEvdQkVHQMC3<_Y{a z|96yi;L?t!4C?+3E@D0?hc6zzH^uJ?|0v|@C-;!6SBAMMU6(>(o&=_N^aq|?RrIy> z>J-sX=C%>^i!KU7_;;?n^~0R-AZH;LyM7qtffu>Gu%9CISDf@+Kh#op*5u08lVHsPMvv*I|!A?EZ0$4>eQOxCQt=RqB)N?k5{zN;{G?|RQe z`Skwp9-w_@PT*PD%a$-SfBnE#pF8-zgr7f4#=ASy0)nrt&UV@-slVN|EgSDGJp?R^ zEhooh$|3f*9K2)C`#FM+_@3wX@f*+D!#s>~9}bW4I3Ywh2I!rA2j1Eox2LAWbM+GF z0D8vA^$}T4oTIM_mvxjS)w!lmAOj_D8Rw%B+`{}~1%ZIaF?mY)Btl5nL1A8lyMm16 z4;_|6R^pDaNOJ4ec(vJ++@9L!eG&PIbk8GVJdjv+M?d7bbf#YhMW{RxdGz&D6)ZGY zI-SAOAIe{hGWbiLK*%ddk`rXSn1Nule9x4Py0>9OieOrUNH{N~U#nCc{huZ#oNjCu zhy<~<{eJuHQmCxM$1bLD{?e&+lm2-hUUqhNAbNU7I)Kn`jqn~Q8LD^>^tgxLH|f|9 zN`4I9aWE85iQr!YK7=6E9U?mK4DX`YXG=W`iGR1D{UU!H>+Hoy4WxPQ+y(Qth#p3- zj1V1n3+_mSZyMm%=|CKQ`O5XP?@GrdEcyl^yqv-#Dk!$_=myf~++3?n4Y7p%HQ*!> zyV|J0wQr5KCX{M%jTkfzPQeAz5j+@CkPwXB1f4R;;gJO$MsYBN;Vt=S+T4Qg9Qv1i zceLd@GLruj^89FOZzSZ%1a%<8oKXVR2R%Gfh2y*EaP-tj#y?&YbzCcL?J4pw*z}2z zQBH@u@cvQtNU6N7peIu4Bq$vhJBT|^USfv042rj4WIbH%qmz^NiFL6vcF$u5c2W5g z$_ELN7kUZhohlh-5q$2LlWjO#!PLl$Vk$hx@Et;kp<%is$O%0M`>23(OScbwY%g?O zSfIls9o9P$JbT+terf{BE7y3`m!KcSx9PoTQvSVWb zL;J9f2RMGeVf}bebI+rjhl?%=U*M8(WF_*_+~+5+`Q<$QQ9Y0Pn+I;sXfpP-F?(ubbDb=4@xm#JdWarjTTayTVb>F9y)3rz{y0LA;*>&R z_EVfsmW@y7lHtO;pNDZAsCjz4QN(f%|7)lWubm?;>VA0qMPWu1YuIV<_%vSJp2p|> zQRyt@@;A<(>evk~R2Kc{caMb6mj%jy(G3rI{iEUa=^iC64ehUm*T;C;jjP)?h}oyw z9|gA`yKW9OLFilb+BEZeJwI`M2<>3P*|)r&mWlAr|9q93r&{qYz(@bfO@zDi`+s@g zr`};7BMTVShm}0gf&5MD$-jE==AvLE)iUE{_}ew6|FEY&ujze$^3wnMx&D9ifR0uf zrKiD&F5&zClLx&WJn!y{@xPKnVcp3Gcfj%YV94)7L*#po>-6m;=|>4(pTk_=!?BZQ z8G?>SF8mB-a9JDo-89Z3CwIL7mhW!d_k091RMYcGCQDrYV+%v|98t-zZDSSrX+$x5}_Mo^mAE4(arwGIRh%r{!7UH9AxQ|{jt4)>IIx|-PM~(dt2k%x+Af9iHuA3?jBP{=b;$_v z5HI0?4yaFIs)x1r)ho?CdS6`6UUTOd7@Zwx38k$j1sZJr?UkEx7vm5uZ7a#B_w|!8Ip>Btt1{LaBNaRs&!nWQHMyS-F6iDIl>G z?I1tL#t;!XP@jA@q+lQj#!7nFAy)xJkR=;U@SaK+i$_^E&9ne-L_sX1pHI9Ila>j$ z$B35!B`>}F68sE>qZz=7>Mk{##-XNPMxWdofB}Pw`=pv-C#4-JnuW)0ZP~SOQVLh9 zf&&AElbDAmxdmG3Ps)5^ly;~PL^U~i`P>-{`N=l%VHCvT|7Y)An;W~*^)PBAjU-5; z`(;LR+tV5iyXO#_*x0}Z(9`OJZg#htnr4$~Qqq|j9rx@j2@wP+T*Rg-6_=gFE+0EN zK923!sU%LS;<#L{lt1K4?0m}~aOFSb2PEH;Ps#JHwcfS&+SmZmY(S?~YR;%ZV%_iW z^?8RD7V0hmrFJRE#*wf}{rtjOem$klL9Y)=O)WZtx{&`X>@g6e=#mOeBS}9*A%c*EQneGEsIsS0EIl+&BCiGKHiPL zydWxu^IHr7Bs?m+L)MNzr*f)8V}Z_tr*W-SaXq*0w8DntB0_pZdWytrRReu&`S`w) zYl=^w{^X2@=2g8gHxjkz;zc66sb9t=xsZ%7ZeN zxZD!q1IpFVt*_@+Dz`{)gEW#aMA1^}?R3U3XUk{aq;AoTLb^BryO#sE>7P;Sv}E33 z|H--b_WZseMH9o*Ifcl$W3JDmwZ-E+w=2lo5u%|H*z+kC*R@+@-{|Ud`hrd+;@}xz zCvk)6#LupQ^G(Y|^(~e_aCd;zjO+TS?C z?i=yXd`KL~TbmxB9D5IN?v6x<#_LEyzJy?*#4|^a2QGd*{jjtX#&QV8#g}|8rf&;$ zdJ;uWt>MPCS`3j>C2rJfzSjt#5NSqw_SrFuWBT6UMda!Jkqj1W>jdqC$T@y7HHU3_ zXRf?6k#l{Y6=pZUSQa?|AiuhS({?)2%Igx_8TLFQGhZ&3=cTn@xTUBg`-I-#o)-|PYzSH-V~CDFfz($+t5Hk;}ky^mos7 zmLB4TEL?zfy)IK;c+~cIwC8@4mx^ihQWh|Y#J}>AEeo58TX>8leTy zG{uC2rsI%%zsQLQg%iBxBdW-^*xF)(6Zfft?t)CiUkWe)(G(K ze$$T|tqL6Df(BgUlBDj&QL_q2y#(NV&{R11wGq~#gReou$yCl?4`$w+Go!Qdik;KV zb1AEwN1M(zGKDt!uOGV;p|v?Y!;hpG`6!|om*c1HYpRh+)SG zk~-qkHG?pSYc4csiCd|~jid@3jL@l85zn~MbmJ=1($9(-NnXMo)O$kwviKIc{zcYI zeb+S9E^wkf0*h{0Hz0`L9mOa90G1q}qg;Gltw81tvHTqb7l#v|_?}QO@O{?SV=c9N zNO30K&z7{V3{j5_9S7AjX<71Orga{)`us_Oi|FvUyRH_)$o=XKCATMi3Ra(a{@)PN z8$_gsPexjVF|1zzOrxJ?e}gT9go;eZbi{slpn#yhJM0ypeE=g zGMX&T(il~>4Aq;fc|uIYd-y*+=RH94yO7gWKtw$0Q^76tn9tMS`D@=tMP$_-kW~xY zseE+j{AA{7IxSVKTA#D}TsA(>|Lx4QTnCuT4!qGKCxrgD3UDq2)vbCJ z0y9ZMk4<)-Qx%hN=UKc2FXgtt%F5E3=9ZSwfI*Oy_YV3;@Z7mEMkr5U`}V9WFzUcJ zb~HweSNdj>didrFeP2dcRkL9gkS2Tmqpch3dZBpU#OM2PC{rpdXpY$be*{|%v0tnq zEK);$>HqI*aK9hIyT7=MG1mBkmw{*u}y8`VsCr|l#eo~ zJ6Jr3K)Bu062{YuE?GPG?tTc93t$MqnwFu7S8v?A{^2Tv9$*}OrnF|D2Q=zH1d99s zh(Lf~sn_a(-$Kw2m`}7~co?NHWPFZaR?4HBat?SkIQca*`L5O`X#(z?hK*{@7k2{` zJpNC*cILhL?U=Q51`AvK9xEcC5G-ur4e>FY^OKpV>2%atZvP9{cl}T2BeE7glR5H* z-<>Jc);SR;mfdT6bRS6sb+^8rj@1s*3PBxLzW zbOwb?h%}D+FHuXxs&KxU~(Z1aNB*^|SEdbvPo86L@L15g%t1_w9)9${!eIxGDAdUICBH zHLdFr8HL`zE{rlM(c0Y3$l`_D!K$=TTvbJyQ!@*3zp{7~!Dj>u%fdWTiZ0B{PAScgcSaV**t9Dnzg}XyGBue zHp4_!y!GBJs*)#|Gj&V?cFyB?w(+A{Q92T)1>1MG;pM(ye`=bz&13LrtdZInygYB- z-Zhf5Mu@zJ&idr5Y5L1`7QZ%2E`DxP$b~b3f9qUlX#OW{av}J_obr}^WbTDWX^Hp4 zx!q3LQW*N^G zJ#}P1sNcH_X7Uw&w9@DAs_Mos%@(foq9fJXq^O#E-YR|;579-j$TT_YLAM{QL-vg* zPwV$?Uc0e%(>`J{k1K*|I~b6s9?547kA+*9V|q!HmqIw`!<$aapHp9jXa2upcS;dA zLhyKuD?ye+<=uUrO0p&93FJwt{6#|JdIg=a&m%gJERc`&|^F~>(+<2H?9h& zK<&giI_Zl*djO+QzIke^3@?{Tjtw`-eLqBZ^tV=XdJYxZE~NT-YL05f%(#fmIH;XXn@$V!{WY9_EEZYQgPCU zhzbBPLSCZ!Se1ce5_S@}6zR<+mrtzdasMP9z}J*CGgO5hDoz>sAMxgp03-zCOj`zv zZRt~V;D?7m;Wkc^0*+qSZU9#Ln@YQyZgJX}5d6Y)v~UOj?vXAoPZxd zCEEaiP~br|3u7_23QIAkhQK$75L`)-s$W!B@hiDA$2as_x$otf<5c#+;`__ac`N-u zl{Q(6w~cQRx?bKqTxl*jXCJikhFMzN4P5jm1!)tkMy`TAvZ>+fGo+yqtW!Lbp)jc z+(X4lqJ~4BHuC4iOwCfh$4ZRsf-SFoZe@}hQ4C7(d^o6WJv2~>nI^W(0 zZ8aDV+X#|sDL2v$Ln;(~y?f%W_fbjYV2Usdrp1vey! zB*G5?6iv|S5(lJ6DWZ4VnQB#Zj?6bsn}`!(Xj~#1J&mR^q~JJKTX;~wGz=k2Ksv30 z31XkA;VM%j&#MagUA5ex9#&mYBR*ga;}#6mUBBf9h?!A==T>zROZSJ_dbt6bh>5x4 zgYgf{M|NJvto?My}{&T!ga{c*YOBh z*E{=n$43m-qB0y7OC5=|@Agm1-S{g&nrWagjR;5SFv9Ic{vax?QqBHobq&B_{s?xh z-BkhCx=I}Hemq!}?mqmczJ*>8{kCRZ>+Z)8o34=nQuW6Qn}ik|BoRXW)#G~72r52! ze_*uK5OlJc+Lt`9O1wf3EUL7xLns3&pZa>`?cDb^`UW`@CyRGEQ_S9tyO8t6y8O$! zycivq)6J>DO?t{z znDZ{cg%Ld+vbtY0diF z@-m*A<$gz0iU5OfEns9jIMVQ4`C=w{1xB4e0OZN!&l#0)fvMSO6ccZx*bh zYH?L(d~WO>fH8yyYTOH@86`28L5z5k&qe`QNh%+@UPA;hu@6a;` z^%}x>_I3y19RxYGNt(^;C!RqTpWA!4?K_>|DP7CEwEL*T0~o@J-B|$u6O_ocx~ib4 ze75Oa)%KRJFT^*gYi4>fdYHBgE11@=o#O$IS&%Q;hLMJ0bMjmHetkUdkK%{vSaA)i z{)yIiPkST(!Nb%)r3%%+kE#E(&=k#9*(d{z*I4$F$P+(6*Z>~3{^TpIx6GGm>V@~D z^_7+7QbIROnX}|lXQQlU9wGHcsolb>^&>?MOedV;~3t1 zBSJ1D%uo+l^R>wna7G_hGLQW)&UH@a7xhn0ewhdaK@|pa!lw{A+vZ9?a+5sba}zsf zuiZ=87Y78-GyjWzjIyh8c14_fR!$nv1le>6Nl_!N*T+b~{ z`+P+j@Jb2>G>6Lf?+x)l2yksd*AVS8DHK3|Rzc<{u|P_{2r>$W350o0@3gSQAp-)k zs{k>9FUt6J07A!B?ykyB6*SZcXy_uNvM&*26N&Dnl?jbG&IGs7QO0=$&zWee7BFDL zs9u30sL?{y>!8-EB@I7lxbV?Wj_`G2S>c$Hou{Sbpq=P49aOE$qjHJEt8-s^PC zuRg=M6cC48r}=1-sna$A*mJU3a0BEkrwB2FZfpZegF{aGkud-y5hT4~EMSfVK0u*; zolHu&29t&n>6_b}C*{&%5Rj z6vjJdyMMx2ep;9X-bV30z?V7KFN<@b)6#^<-ug71)1MV)zR8|ZT<3eUvq3JEu6*%8 zvJO@&KQF9KI!N6Df;~4|+&h&ob)hcqoy@kmZEp~|KUY~ihcfT(9_RYSj1KPZ*_){} z;lk{kcMw~FEB)2kS+h0I8vO4&ntC^n6U8*JuTMQ~GP&Q^Gi>f`k-X85Q*40T&K4Qy zA0Cr=@MQ97&p+zuyi(vtWj|yHU0)CNCz2iF=-uPJKt*)4lgRBLD0X$FXF)dg}dfl)$aaLi|$!$%`ck@f&y=L}i!I=^DWmaTL zmh8zZn4nL3oiE3F+Z61IPeB7^I$UsjeVW-;xfbGJ45s&xyw!x0b1`|0Cm4uMS< z?N9b@v8$rgPw1EVW^a7NQ)xDRv-ed87$+2ng)^8$)6JA+I*Bw6C_2-+x~ z4fAB(e2~qf`^%Y48V{loeHogwehc<8@c{8W(pfjpTqc7dRxy|0R=2N%2CSGjxJaTa zUIh>`Zsww__h6KL3-i1sLqPF}%!8-oeD;QXJa$IQJH!B znB+uSmCQ9^sXMJ@gG!z<3{5-E9RR zj|B%DxZs&=#T#=MbX4|PFdw{h0eLyh>qMn1nK3h%$=F-T=um$w*}?OGrH!(fgHDPa1#@2FBy1Fo~T?2hj4#K?EY zfpos$N+#McZ!(jJ+uSxpOr~OMb9)E=aa?bHwK5EWdA>IhRT=z*-pje!Q>lW4(8Dt6 zJ1i2nn(HpeDG(`~m^&ph(Z16MSqiTANY|bl)-ZdoYL>VUX5DuT?UH$C zW?MB=vO*$rnhnO#oQs@YkU4`eMB)zSN=aKOPBeEdN|7NISvHZ?6=yQf`!=XI(0K5E zyyFLP%37O4+R2cs=8nYHfY$(sO|IVTdFBN)%iY`CwQqI(eZ8vYzS7C|UYzpeW~V?; zY9@FhMGx1UuzT?K97MWN^Zeb5hfrV-V{-H2;g}mL6?2&jYcSMiU*MIhrI63jrB{s~Xq*|kAFUxJ@ z)=bv173;%llEkVKq=OwHsxP~|Ci$we3a3BK0_t5`IAb!ev0~IWULcCs`d_8i+HfnKMFcMay%Z|bau6^;@aFL;A_pzbzJ5Sn;&AR#N!jF84$)?B6>YJ6@)sLg zF_nu8Q;H2a1>|pEPb-YuoD1hna#L%RLYrz?Dpy8TmAB%ZtEzmVd|m1pez>|+AywB4 zbWnr@G_7Tpr9hfrRq!+QX>Lm`IHgM|zuM*+&qp#7HOyYUGurrsoF@}Bxhtg zb1P~Q%=t3281(d%y7n@X1Cx-^b*1XcqS5T^eyqAuRNRn9n;F!R&uYuojXRt(kPg}w z?t5{x0oe(tMMx4xsRcoOdNEap*qlPh;CFNS+AH%F-W9e8cL>*E1IkvI?*TD{>D7m- zW3Myn#*bLXCxBfk=!f~5@cfw~f7=*u0R<#w$FwbW;4ZJ$*1VAA)*wkX;-IS>MSJ)muJvJGpUKeXb7XjimgS56H_qz3+`9WwG>8L^Z1KA zoatZj3JQZmPMTtIc+cEfi)fYyer}_~S6U~#uL=tW+b>28gRsV;C}G_W{4`)HNbjS9^#U#v zuQPi_tXcgY0K*c6O+@B}z;mMRz${XkN!nypP6marm{eAVWS2;JJELD%)@EXz_QzHv zfx_So0fWOHaF2i}H7W%IFf1S~tndJ)>oL45MlfzXwJ5x^fTHS;M;2nY^^nK5tlyy` z)dnnjp$jPi^Z>L9q_hApz)(oL+qRNH|44u-2}lBM!HD4r>&GG&3%4G*EyoX%xZ%Uk zqS|uYTI|E+BKB)>T&e0!@&mO>FH&1H_esscOVqkb(lQ89jrelM2Zzb+WxgH_Qe!7wd;j>e0R@Un)m0Nr zkQ{{}DS4iIz|H7SKDviXywqujlh?Bgzm&jj`l|8ocGJrxAFi2~{Ji8tW~FkA^tL1% zG8wW<$v`nr@jiY^%Lw&OEB=Ky!3&Fed~;#@mh$-KXF)u>^yQQ%_l~(55BKEe8{-)} z_hb7p9ODj%i2|`x2f0&$hlPt!U${{l&1S=GM!p|cL&PF&x}Fm>k?Pg)uh;MpK`gEV zn>r4fPPOTTUgCNH8B$C8JXb6cRZ|&Gy7WtHo10id12o|iG{XE)L4Uf{f#9A1LH$GD zx{~xCw8!Cz9e#ba^idxVskPUEVybIh`GWqk0ri8wCP7GJSwiOOb_K6Uihjs6Bz&lEQ6&;= zRaWx!PYlu~iW4+O=#HXJfFj&hyA1#df;5@G0lOrsmYq{>pG@5ZFw00lpMb)l9)aR0 zlUqb&MKD1oY|C*7tsr@ilCKE+jvmt-M(7?97d~*15vG=lE^UO(-A)iyW=4|OBE3&h$^N&OQv3d&3nQy37)JS>o)!qB_Nc8ueX`mO$Ovz%$>X#8 zmhmlPYjLWK?8{}~GMr?&?m*SKuoscgA5`D? zy?)ZQGwFzL$E=+*RNmtE7|wx?6~(&@q4E~q5FfHLKKZ(O>Gn{cQ5MaWZVz!>amuu? z?s<7j>c3x5wNLjdJ}Y3u8!4#+ZnIHF^pu*a^xUx=&M8Wq1)=&1+1MjEl4DoPuAgXU zo-<}QpUeyXuS~`rYDmAkj=OjiuZMmheurWzgHKcT+^Vl>!NuKpVmGD{mw6XXVTu0f z5gop<088lY*{ES7gMyo5*?2w9DP zYJf)*u?W{J3P!j_2_D43@emF&AXTB~>jY!6xl!G_4#3v^HvI#VJA{%Cq`nObaLqcx zHvrS<#DkQ(TC-q6co?;h5YeFwCMmK({i>Q?`A}A3ZOB@9{Oa>hCb=)ORdL36wT!~= zZH-fs(vn$-EG6&m-8}?R=&|MB%YVn1@qsq(FDZgW$4 z%p&Dqjq21JMJ)Cp&Q4AaQ9wl+$u|KHJfq84&u_Vi>^{Y z^hAWjfyxEl#I_+#2$*$F9fC{8j3SjnmyeIphTogmo>)yNFgqc}ih<%Z2Ql?Z#OXln zJHRx@Nzw^Bbk$+K{D2fJK9;nblrgyxO@(zBpOyu;iclWH@*}?%Yrvv7lp#E%po3OT z-UazlLwteuab?E-fDRXgANycyG3f}q2Mvx?*1)!QA3CM3e~LAx`A*jd6N#&t<`_o+ zp>GQIuN-k^`&zPBxKw&&KZ;OZ^ddd97xYYE}SiX=W)49cxiu|PrI%5*z4+@|S<%>qQ zM-g==*f}d9rxFogt3B=w;UHQj7=y!M8}i&Z@yFc}9^1R?*z6>x#kEHTNZuOvXq_XR z!B~he>GYLk71ZxEYLu*xW_n11=njq%#Q+ns(u*Yc#OtTpmVhAdwZ&w&v5_H;l_t^f zoM2>u_u96#2RSKbAr21&3IM$ls0Eic^bX@A5ypF1lJ6Ux*8n%vSHOtQVV-bJa?RrEFhcx8#6cWi#~BI8;{3|ZXsG*^hG2CWE0&jW&lq`d(v z4ak5|5n?3pAumN_-T>f-A)Zo90dye%zywhuZV&_)gJ;ON>knwF=7xo8uu({Y4*Hmm zl?d=~duIcUL0lfvI{>pm3}47YaVPxRYQqAdRyEe|)~z`g(AwR-X@SE;qf$IBR|y21 z4A(W4fJ3?3RcK`B&}E)I5cfFHaTh!fCZtL<0F)#{5OSBqh7ivw$e9q-Ra_=Q0i?e_ zz#meRViKKlc%WK((Xfm>Az6<+#6W%WzZP^J8EJ?(7TLl-I z`c*uUgE1b7Q@kYzAts7hAgQ4Gz~D;5QG`EapJ{dIxD?kq>sSdJ9HKq+BOq3u_TmUS zAkuo^WYLq2$bPC7ac@8>L~-r08*yCFZ~1oNMG^-XM+F22DXenGUhHzUg>dp|=afo2 zxXjQ3cw}t-@jh=i8f8&*vZ;LQdI!fd9_sL9h91LlVz-(&Zd{F=$a5gyXtokaD?-0g z4?=iMurTFW#r&o^3Gw8Z=u4^8UnZumO7G+zF{YZCrT*b$x@1OXWRR2zXJCEEPjfZV zQ6NiLvWwT2?-Oq-XF~35zF$nMY=h1YbwD*=othC8Vqd;i(*95JY2UQ zMy9;1S$hPf%VN7UL+P^6hWKup^ONt`>FSeW16W!860Bxq#rMd1Nm#-{B?Gv87#p=} zA++8#FRCPdwbe@EC~koMaVt@!61epw2y4}9v*xt|uT_g{N$52yt!nIrK@!xOeyAp7 z=PS^p{eiSAB*g1RHL13m4v@B!B&jEH95#JKrV9P2)oLU@44E3$hMUBApXxAdiYv_^ zYIsdIs31et<$C9wZ=H=V!GC>zg~menO)f4>MhLxlP0TVo&hz?6nwZ~%c>%^j1Re== z{9s5V9qkyqR`w7JuUZS;nqLoL`PTB1Mm>xxPM9?7Ue&MHy=D@^;w|u+*qu((jr>MZ zb6qd-Dv)0Ac6p}>S66>4D|~u=kBIdN`!6Yd2Nh0{kVSANa>A854KUa3 zl4R~x>sDfYaMj9p#p>Yu{|Nt;A$TF-3~2t(Ey!T}V-l5I>`;PF{{)xl-$eeASOMx! zn^2gQstxs*9>%mr5@dv@A2qZk;1;bT>SLzSqimx`*(NU*j0F0ziHSwq_&PJW*60#7 zlKCdv&k-hLl%I@|T$-3VdX25Fz^98D&GZ(tBKiwvRL<2!h`cXRuZ;!N>J#F3Qv*H{ zuLyZ3$q5K>TM6BSjO7*twL;Vg;j&=&!TP7giBm@0o z+7J>M_1$wH9)uZqn-?bf$8XO+KHr;Ov=tWf=oD}`Px^R{$NO70kLNU&S>iq{;(|WE zy}P^?`RbVSlW(Heg$NNOU)^qkM`*U(ma1Voqcp>g>_>RcdPCAagP26Ep0MHy5lwl{ ze&w_AP4mA!b~jDVoU34Er|=X1;xQizPx&J;7SJqCG8UR*5G+Qu40EnpQfbzjQH!|U z#0?O|F-V-669iGsOMJiLRl$V@t%mQ{JOu7`o8UHFH%3BfqP)%i%uf_5+^exMj1 zk)}du35CxN^e<4Iw!2Vn$e<;p9Sw(wTY~Yn?b2tY4THuEHVZIl8IOcvjEA%y!Y(t5Z@35hWGSqP~ zaSRzjt5K~dj?=0@GEk2Y>@D${5M_Cx-v~8v%=eDeA574;6CM;l6 z1zlAI1l5z?e%I&rzkiJPYY_pP6cezEJ}c?Lp6j>ot6baLy;xwQVOx<+c~Gf9cHMGn zk=tm-RYXZ^_!W5O22tIM!zh7((`&eKi+p(_$i|(hRf9cw>^t>12&)V$H=Pb%rU+4v zX=~)~??XCU0dd|c*Idv`VZD~reV7*{wFW$n-AW}4K^(OluL-Kjk32Xg`;90-fNYqm zMwKvb)tyQW&dN;Ke_rJKiYBUd6-olP3Dk%nsD;fKhW1qtlH69a?z9?_6GjdKV@0tW z2Y##GYDF>3^_^C;<~p9^RQ#~jV(jV1P5JO29`}=$`h^s{&Z($v3QKWL-O9|S7IitB zd=fv^kHlR3j;JsgAd&C3^12nhb;{&_AK^S#A%An>bK0yVQQ-St9o`bPX3MESPZs01 zYLrAc7?Iq#*C!j0Yy{&tWG|+r_l6r=Vnehn+P~y2>0eTHt?h2S zZ^6r>HyE?~h)`qL>O1QSg0bz}Fpr@eZ5Y1WNrz(!&ad#`0j{wec^?ANaX_vn>&FLB zCVc^btNe;{A@zA-L+=G?gbi~q(7u95-;{+_&c7l-bI+#;$8FLQbXTp5pTn}yib$|d zzx>*AD%PJ^5D-@&6ozFW;C*0ugaQ{~IU12`NBE0NM8#VWHN#r1ty*Xc61zyBG8_kG zT{dS`UPv}W`v%jYMvy?k+w}c<1>p#*VFjAsdZSXSq{c&hqNGe&b%cVasFRVKr<7X$ zFVA}?=2v1tXRm-ne$vH?-y_Wps$-X(4NiPJgz3oW)K!}&6(T!Q06 zF!O4?p$eYm1iUxP{FazPoSmD`&)2`Gdv=)=SyxBvfM+lGurm0F z20}g8fNz(yB8sA0t=3wJmn0R}^~0JUxB*OLgQ^R=5#lB4Nz{m{#H&S(YSmTST2o|c z1LWcR6nuOqe>9<#W?pP>xXC3pglGM!f5h!vXOCaV#(EuCpWo^XVIvCzdwBac;09c+ z7_{1&b*%?Ku@mbKe4UW7ci2}|%}f-7Q$+vIg)KOs*a&12!~>9R@L0~ogMr5;B%%dbcF4C-!q$UJxKPpviZYN) zzrzwy2z9S@hy7GetHI7uF4Gd>oWo&3G+3I}psldl*~gWfCQ`p);Z2e;ut+E_mvBaa z@R!193dh-_el&)^8;}3zG<+;(7oOQ71kRcz=Ysr2(zwM|t6KGHfFKJJ;3YtrQgNLa z;ng81@E!bG(GpUAKXgct!g2Bf{bbhcb0%vtlR5uqXEZ_XIsd{a)pTDi=oVN!jrF99 zV$~m!-e2Y{J|d;M_^zEnsV=<1^jOaI8{ahNGB6-S;{Z|O$45A^Zn@E@`>N4dM%r`r zE0c*i=SQS87e3Q@3uR_L(uS5pX{Plr>YiKzrMcaKQWa2q=wicm>g8(Sg+{({>>wi7Ae&-+gM}6ptuN>mfcBk`&jmSt}9JAzZzFb`AuN2P9 z$;pX*6rTtTjQ^M_UdKv7awpeoowKXYS2uU8dss-)Pw$c0x%&R!=D#Na96(nH34o>3u{Vv-kulNqI)4BcFVtiCKngs&Fp%E%;ap6VJVSn>VHV zDJm$DBXWSMB`5}PaNvm=+17O^+R^A&H9>3Q7f*Ou66iSj)JIIIyHW$$b$4P z@@th^SR>2$Rwa!52*5pXuWZJS+e$@w%*#9{%r`f6e5_a0-*7MMbm5=NQ~4@?PZTuy z;cqW<8`Yo{G$VW+Aa(&7 z1o&IiX+^EN*Q$V>tp$)HMG5P%&ysY`FjL)8h__`ITJHt~s7ckUyD%=S)S(b`TrkqD zI$Yu$46qS5TEO}a!Z>gmO}B;F0it&cN*KTd)|y`ArPS%1>!7po&iEf6j|HyrvM>x%ltfjvcv#CLVAbQ6v$KqUkGnn1w164T$uop#ti=pXgFeS7~DxqjRK z8k7~_%C8*uzqSYXtql~JLBE`Uh62Es-TRsey%!)RMAQ^i$URk`KUFkcMiHw-dh22u zjO-u4!3th8Y=$Z9GBal2j4i_wFL)PajRsX!f3>xDN0NFW&;%u%3K4t)2aoFp8Xq}UrfI`y4`R07ZEdUMU9 zUi*&!wQe>yYDxy8Lne$&ZcO*!uay$S@8%j8i8JS9mjvW`&T~t(ODM72@!WKaG_&el z-(`;M;BwuQ8O-73day_Pn|qKO`ezUcr$f&*E)%m0lWUwaWY;D)M3p5wf*+d`ta6w` z;O=Unb8NnDb4DCFI~HHzHO();cc;UB{&ftTdf+q*g``?Bf{ zbH*?H?oPMJT$=mQ`9k{5AIHX=7kXo-P+hmow2k+Uoc`Z-0JuYk^a8j?8f zXu36))iSrR`1)xK`hDbPOc@*eVIY$mSQ`fe#MnT@YtEMYyf9tYx~^x=DDyJ}k0^I3 zdIX30AaaL9$^!t&s@Lu5cZ*$advk!f`L`yl-$7)EX2 z%cWl+A{_m%EgQKj<%;(8-5YI%*^EFu=s1G4P^6!P))i52;Fi-r>80c__pXfk!Sc!~ zCmJ6QI%eZl+sifl$-T`v8s=4BE9r(&H#jN}K!-Ab;wn~vfjTjJJg{v26lM{?x+Ndr zZHh8=nULkwX?jleQT=JvJs>Hzq9y>EgGRI3^qi{O@>|VH9h&$s zO5K`RsQWSxauVY2b%ATFy7QBKqVA2Y;pi^R$YaWx-^}IQ2(WWiOZl{0VUO5v@$*Km+^uw#^1Z(e z3lXhacr90Mla)XDHP|$Q@#LG^>?LeXlTW$}@K4pre4X18!&9Z^SA*D?U0`jilG=jWWjF?c=lBSnDn2ddaFbDd4MsMvt^ zPJgKL=C`v*vp0^0e9ZDYEX{CRt03OZH7N6JZhxvlhkjg`V{5pdR-!43zc9Izd9mDj z@-AMO1hGK2{-kGTNL{}bbM_A&ll@g>FLLkp?xOdxx)i2;Fg<@xOP@vemUhrOOcW8A z5O}QS4?o<~+0C;w5VN8xy)8YqVZ=u!E`a{4AnuUIR@|=+M@Jx->Ou$|0$0fF+T4Hf zbpOl8X%nV4)M`1W@Ve(Txmx%hG1VeGrH`ay(8sO=Vgh#Eh;~(m3aW_^M}7m=D$RPW z1(-&tn_vVTL)+xTVYTA6JRe3aUQl;qHwOygq?#c1$7n^FzLe5v4WWNbCO4#C0YfDeAYk<=x+lH? zK_~{IssnPmk`>4>9AI~WEdd^dLf#XLOx7_7J_XYlVI#A3ZKDJ`XJTR~x@;-C9YyF5 zLZBA`X24RD0XG=6!yZUjV%J0%Qedoq5&+A74B!x`tibKU>^UBZ&n-W+ws%Fj&tS)c z=rnABlV{Kx0dOiS@S($rajHpDZ8Va4wH1Vj-yAqz8by>3^h;=i+J`yJ!~&Gxo$lzA;z4pRa-YK5m#|(7Ohb&BGs?XR$u7dL^*YCh3zJel&wN^}cYtOB zkgOw!+J&4R#%dzs8Bq%e3Zni(mE>ZD??i+skUb*G4hWBaS0Gm*gbvyQg+h&sD1`uV zrMOmMw?C9Y=qXsd6c@`}MAWS5(0*jm+=)ktFlinn;X3|vTTRa%JwRNin|rscd$%?$ z`sS*Trd!vc?jY!908_{SH#CY<#I?$Z^tDu73rf*F_8H5G^I6QT1?d@_E{XF6;z{XP zibd;2BQS9x_c9WSlW3iS{sgMWf{w&&5miW2I#uc}Vhv76-L)*gbY)%jN7KtJNS~0b zTgM`FM_CoPN)eIW9K?;1C+{ubrp?hp;0Rlyary!exl zpMiSnfSFNu2gHlxNABBrPr_>7m(ZmrKysyVE2y`07JBo5oR{-+fmG-+4*yF?=H`< zh0+tS9(4P``jLo5y?*cJwHsSE?IRYIb4}GdG6Jn&Hc~DHa@1`Z$Q{2aqaHcsTIl#U zr|>Td+yOCDMu>zBQzN6+_V!TPaI`HEm|C$hpyd%Q{1}nMrCXwoL`Zyyx;F$X0t?!8 z3W=!04t^hseB3Z_$KivCXgrF1P^@JkQs3&WozVE3&-J{o;vv zKli;Y9Q`s1e%LGwG^c3Km3zY5aBaR~pTUL5VJ3a$hxtM`5mb~cf4J+vn3iFp{fVmb zrZE@tRdELUrm(2jg8Y@0pH0o0HKtg3E1yl6FmTu3$)_qwH>c}QzDN$ut8QTi*7_7p zUNPV8rk87Sea*D-oyX)lw^C|{@FKl^dpDOM`&#JjbjB}dQ%8@a50CjQQQQaz!SKpX zDwLa#emY|S6UjV3|Jk|D&-}L6MU%g-znnt9+%b2-qqW8(J-5C0EaLY2lJF&y?eDF; zp&yrYx@Q&UT*Y~)-#0l6f8Nf*k`_adu35L^0WhOR)~7xsF`d4357FLX1AXP-t3eyU zBJ_?j>5<&Q2Y2T0-8 zV{JthB%Hdihk@C0s#Ce`K?gt+%H(`lQjz9O@%8G)fj?MKe|KyQG*>xYOpFBUK?SKAhh*M-dUh!8C(c7%YkurOUB$eS7q zg21D6G9Dokw^pIkpi&yjBJ$A#0xiJP>xdreL9TDF|WG@>6H^+&lZrp04Et;qime;RYY(@c0GSFyXMRapH*pQ z&Ci$xW6gNx^a)!QiLb7WBAFG_4BySBA3G91w^C|{@FIc4&t=GpAN6)R;}-`0nQlyR z7KxunI*<)67#jF*FPUC1nn|cNNxHjeV!fy-Uej|E>wh5W8bJAnUv>eb*8?>~EL9C+ zLZ|E@vPpm_--x>AIdKcN#YwB-1YV_9gVAXm#BQ_IY=zY%hM6fsqX1Ja@`4EHD{fSG z8vGW%Hqiu`$i0I9*h@FvYTrP2xUr=+g>^|GdEZfxyfA&di?|0P-}gfg{D))YcDUsRH)URB&K*(D&d zDKi9w=8Z^GE-YS&yRaa5746_xG)s~_;m@aPg<eWJ`q z7LwMi7ShR>qGi`hVoqpA+hk7**xmb>jCj-m6GT3%Dykb?IH^Ft$0Ygt=`^m1z-R=s zv}SE!l|nE#J0`)7*z1VR-T)kM;3bu?p16rysn;v@S_p{vrmM*bKBVua)!Wy_>e@GG z3#3fINiA=d4rbkKW~nYcd2w`2PG?a8d0Fj!DKx1eJrm<5tDJG4#7 zF@Vrr)$yar767mefdQ-T3o`7$t|;{uDd^)K7FE@+C;Xhg49Cm6$P0AWPda(7C-K`h zlmC@TKF#a#xXis+WE1e`AZeGk{rP~-`T4TSch`q`VUM);aLuZe>81@G_!u|{vfYXZ zbJnZY5HYRU0#05P!RKIQ1QS!I8P<|0^rC9qh+{y_c`Zb^t+P67I=%g=qTd9aNRWMX z;MFzCHQ-JqRfJDyB50KpMIqw0#Z83E1!kD*AiM$sUbR59#juENcu5lof8?2tKyDSU zVBi*gh5q63gg=t=zp#kL80m(mIYQjLLk$6RP)s)nZoY8 zOs_q>{hV4Egmgt^J`=O%n~2wUXFTpi!V%H&%B>n=Z}_bQScuq4h$q-Yuw^&G&T$*H zR$ReCI}N|#*8L{_ANdF~*dj6m-;g04Z|cV_2H?McOs_p{7cxn#PvJJt88>u^w`tBi zhdJ0svT*r*roSN4kG~`)R>nK>T1}@yF~REykyc3%{=~=WM5qh+05sf2%WDB=xn4u) zG#6msjkt+GY6yx^Z3IDBi5oR_^j^)kKs@YA_>cRq^5J9oo#D2Y*%FOwmmB&M#lcn( z;m-$~1@+RPAD48fnL9D`DLdBg5e#runfar~{3=`L8kB2kU2E1yeK=`ei~J)d^tnrR z0Y9q@UnrE!}a;wmJJB#$`bfE@}N{KCA2FX<3(tzz*6>4;Cw*O4%aQ1 z+GF4&T3?RAcEI5QwVRB0iEQ*K_V+LzfDsi8A~GQ+cudX>lo_I)ahFhk64L4nW3G(3 z$mhv!hd4(y4;E+u1Qvwg$4P>~1Kw@yI8gLBLA4RWMkuuqVn*>tTm!**D2af5rxWaa z%u8@#YK{quo9DP2(~CfffPgzH-_NJ#yNMVPyo-K1J=?8Yo2sr~OwR=MF6dBZ4K=qt zF=G2}A7leVR?cX3yTg`dGcxUrwDO6sopVC#=8wnX?#luW=Sd&W@$P)f=JB6CGR3su zce~IH^>c$yTyTqgyUqFe=n9lSPMl))<&VXAE>qO+2n>`93<$U8AkIm%QiW}}gQzBO zZBOd0dL{9zEr3NJ#zg1RA=K$ z>wkSbH%lRPEjGy%;`(1a=HuY`ek9uZo7!dXPT$Rv*4Eo7^UF8YIc{?K?HP18hu5wd zAsba^9&ZY}Hl4!0tT9K(sg%??${32NnB*F~ypICb1pSH(+n$j<9#-oa*!YaAr*dbXiK{THycB!!XLf1AQ5d`xsJWfi#52 zmkcyzrl%T)2MwDxfAqC42#Vtg^ zf`S%K`>^N)9B{uk1lAF8;Zl`Nl?li55U9gs0BIw>Dx?JXKNQo+xGP+ELa?Od)-5&V z0$d=D5QePZC72^oKn+cJ@grjEJ~XNXTC0t5;U@l3|Db2x9`A!qhfsl(y<{qjM#H!y zkdY2zECvd}2O6?z+@mP8+krK!wG*F?@bOWeBxbc0GB4%*LuA^g+pMDc14-96=kvI_;x;?OJfU`S$oOw!B;`y0+;eF^{8+ zxlC$z@Cv;JPEzdAqDxxuq%(ebTBT2ahh{nvV?)wac|^<}X&3_+(zx^e@UZ^YxwicL z4krb3hR~06=}%#?ervAVBeleXJh!pjJ(_J`&3r}tbqkL(w7RvhQLokj7DS9RG^`P{ zwzVo;uq%}S0qTRWMmkUEaJ^P7hL!>G%Uadg3xgzp@HAA*^@6UMc%2g7cJ6Gtp37^U z+gL^mG!Cstut;NY4;by_Lo+;}0Gh+Y&MAC>D=qi}J5|+_x8&;x8FyRB^vMZFC9W1! zaAnYKhlt!c?hQ}uI2zl&wwL3<{c^g(09#P4D`!@p@9l5`JWvow>$I%ia;q=BeL)_m ztk(_VL=zcbK^f5>19|7{idX{w42hjpt(F5#DL~?DvD1v}^;U==a*huyDrl1fry8eb zS}&;*xu8mV04jOqWvbnt`1(!rYx~+@;Ir6z<%hXMa?LO@yphYW^=ayO@lHO?4-am{ z$2@N9=#mDMO~b3~#E3YiC60LQj#-guQzN3e2cGKPiS|E~`6) zG9yzB8J1CiRa-fPr(5JFxvuJ*1nJJ}!{`2-SkTA3&lYw=6$qlA^lgrt{aZ3`=LGOs z!agf9?AjwTYe{b|pSb)dpTP5)I4-=uw3DVGkDskYm_?PbKo<#f?iKZykcVaq8C1h%g_mYqs@UcowrX z=0fgk>q>k`$&()8ujF#75xo>Y06hwmL3sPJQNsI^!Z%qfcDG*Nb)FLS`QlER#&u`D zViJ`@Pr|zZa-Mz2uVSX>thj;z%zn#hgdRv&FMxd&eue#JBdk{u?nrYsuc`)Q$ojMu z?$W!8T;k3m-q9DzN`|vA@u#zF_@_X1pPqcs?{FZqm6gfT1op|Bb>+wT_Q}u$GQSj) zbY+E!Tit;z7zJfKBAB>M(<%Nf_m9bDoqEsjO;3xDIc=iW-43F*aq7gd;56J%(QYQD z6@f#A(@L6UqJD$$ov8nl-q25`H~%{bAtRrAr$70wIyW)Nv$m*9YLNunlfD7pVI8&y z$Nu5EJ^#bL#Cbb6p}X)tO(k>}-I6|Q^ZmlUS<}UlyQHoy_Xo!ZK-Ul)rdzI&QnJ$Y zylN6eA%c=L{kYMp)EZR;xsKf=K?IVhS*`g{Vm6bg={oooZ-L|2YPHa36Y!6NjzM%( z%P>xff;jQw3j7}$0emB>Ex+1m;(tLsabk~JYSj@_4@SIk1yN6GVashpjlO z!#@I8<%w7Eof;+>En)^>#+<;f18N-%Dr(eVYp*)KHS+iO;|Pn_#B9{uX0sO7Yf0S? z{V=JK#gJR6gdq&3TaMRs&{E{Vt{;?L5P7u<4EQS{X5FdOFjG9oOXCp!&3QS5MIWV{ z)q0kOS~QQaFS zh1-PS3Vp&Tjtj)xTxQzm&vzswx|}o%#?1h+0xWh9*gq+W`rQ9nESJVbPVi8(t5|~) zoWh-fpe5V!k{<|=deWK8II@LpgKd-$_Y8)3PwbTom#t#}2o<*peX_Ke7XbJoA6Xl$ zky71SRUn759?1ARq>En_8u8+^d#l3hx|HhybzDtQaX*IA9~~A26Fn`N6ATyjZs%~K zZ@Z)D!??GK@n0j2J#ejj3PlW%D_BgBkpKdBYIt}cW>JU(*yQ)SU9!lB!2#l5mWK#M z99dCE#l0;}8zUjZU%d)gr;(_^`T!9R#MIogE;?(LcS%63+jw9RjBM9w;OFLJfKDYwL~%&%BJ*F9ttU~AJlncb+R zqC=`TD)+D`6Yur@V9i3j0~vTh0iSR2oPjQd! zY|E?4QV6y@bR*zG>UNTm09c#6b8?qD?wqzdG;Q)RlCj-#w}Wn#f59+U1r8iR(J8n( zqK5^low{`ewuVobcR+y?02=~>B7Ptu%3S)m;*R20X_}1)bJ3{fdadjqk|lsgk|;8q`zL}U>0gW0S*NC!j^G2 z*jt~$OKWK1LvIkeduHsp`F5IGdD=l&%2d5A;>sYZ1ujx^ONq;Fi)Roe#OB)Ews?P4 zalLu?Uk(3rap~39YK0eFdWB8ic#1~IVLQjr7T2LBhNQOM@)}8_;j|iHoSH2cIDKKD zC2?$r@&jY`nDBVp_;$iWE0@gMj!SdhZgE6N79cf8TGGUn z?B6{flOVU$f=Ji`;n96fsL5 zSquq>hyVb`KLTY8LpQrxZa`=Q{gMM4*r*1$il7-(0XtS{H37VUYc8%qPE?8FstZ61 zIDR9V8%Z4c^WFYPQi>M_qap5h#7tJZ z`)PbZ;suIyJoz(`owH;T3fcN!?86{=zki}5wt$2h6q&AZh0{LYCbAOI8Z3~EgaD#K zNvQ09zc>{{-3EANqOGEFD6PP$4&bXD!bhCQF*Y^_$%tGq;0N*A8Hzx8?07EXPe==S z0Ik7*n@GWv0ZAta2HLtU2{WrRLOi^L6@fgE1$e6PivQ8vj0>~6&hLf4uJ)E|=lmPf zURK&Q_yh*+)gXB4jUSZBY#7F?z$GeI0eZ2XpBR?By@;14cYdDPNRp0Pb5`9y6{;_u zV#wm}={O(Xi&z`Y8-+i4_79f5+UyO)om8LC-Wv^V#;V{>P5Wdy-j(ua-L>*~4Kw)l zk&qO?&hI|X+Si>;W%c)UXRm*J8v-wQf856@-rT-VAtWIaQI-Gc!`E@QKUvLcwi+^# zlHJ%FL)vuz_m#a|s~4waKRu3z_bC8iF8`%j`EP+!%on(tEii3rcEIG_r>LCa;f6%A z&NX{?o?1SO{ll+2U_)j4^FFly4@pN z-dxr97F6}_-d3*W?T4>fzE)(L0l55I%0MJn?bah!yVL2xh9Ot!T$|P0Rz_d9#==)F zSL>X+YX`!P`%!-kXFIYUPIs<(+sw5IHb|A(?`HP@*PZK7^xp6FdwYPc$4MiFLaw8q z%rmFcs}>lj*G7GW&mhOQT;;dtsr=?wuy?|Rdw_5Z(S5afw|m$9=+=!~eeHSbLubRU zJG-a7knR)$$vzzB>X~aJ$$D_}BjP76{>|+zzX#dYU~_nH-0MM^lB;yC`$<=-L+WcPHNGnJ?wW*LYiS5-5hfde3L(-+ajYw;nS8jfc$t z*<}9OJST$|Pb{E0_Qt$raV-}Vug_B)gw_4c=48LUxeGhqqm*{5k5byJowGD4HST{_ zFz&hLT$U~x_(K#g8u>#MFB^DG)9$avN6%a4L>^OmaQV0a%9jqrZlM_lHnI*xA_ zCF)p!g{dw}2MSX?MgW{_b~p~EH;cp>%_4P1vq+uMESQVw%_4C|vq+uMEK+r|lXKC_ zwEND)EK{m(xHwt2T%4?%esiMo{(uKOxd{D%Znh{+wvzt)Z9zSk|}zSq@HOdyeD zJeY||phVqNVXAJhFjY4@kxBxqnA@G$XChTMT%4?1E>6}>|5nZ1Oj!W#un@fJMi;tI z@jKmW;o)x2KOP?RM>&FMn)pHM>CWxAyhH%wQi_dCuFKD?yr8?Aj%SJOb0bS>qEOoV z9(W@JkdR7~})XQ$ODSw_?WSb7af z&kQh6us{&`O52XKj3p2_bhO!L52cstuEw#xz=B|s5XWq2FoHY?W(+#ls%@ozs7$bH z8o(4x2hT$%!p;y)341KWb`E1JhL})PLg**}a7Bs9?n>o9bpLVBK0(YA1T*gVLh(<3 zt)~rx4~6v(wJ_8@(*wL}iwJx=8i>pY0X+H%vj^Q1s~wUV$tnrzz>BT6MRx)2N*2v9 z{eTAz4k>V6+A-%_ZQIs0qfKdJ2O~aAJhDd&!CG3qHGuR1UG%%FYMw4z?Nu`J;RdbH z`Zd{@tp1I^v1-L_NbT?TVf!U8X#}PVVkWL)o|KtRPjq#aEJXA|i>2a@(jPF6lV)i{ zEC}p809`W}0}!TQbzqx8HX{TMiz-9G;EDRgn#1;twgJ}-sG4-9NcxXZEF%0L`qBkl zPRxcR;GnWFxMahY-9BXOf~wf41m}iYL12`93ClxJ_27pKcas_z)(`>+6-5Py4vLWh zjMA{@hyC#&jKvOvEfdZSESuwDsZYSSauQeXiQPbJLNRBADulKo%{k0QevQ@5_ZCk6 zne8j43J%<8GDNsZu8t?&>Ot@(2Ur4ID6{F)xcdI8bs}Ot5^N7mI%HI1vE(>p`(d<7 z(?t`qim{T_W`Cf}$D+7LqZZ#_s((GvO>(%=0c3clgw4*uct2f7SmfNoz?C)5ke({Bj58kT2Zt;)np2+D(r@w~>~^U72Ol^D!R30}|*6AE^o;lYD^4Hxci~Z#0{TMMIY$9E`{_ z%yRsRd6I#9m3fB&oPA0^#_93rnClsJif)YBg&B^N8TMUTYwhNdv)W)GRIo z4M|o#AMC=E&@l6Dg)|pm*5`DkTE=B9tr9faLfXU>`=o#Nn4NuXR>gDsNLETa!}tgR z)}b*`wy2FpREMu1@VTo|GekU{BykW?6P9iD1beqxhkun1w@84FA$Xr3I*nF<2ucoi zZ`|@zOfg;WbdRcKwawda@%0z7ee1|9r<5? z^d#3O(7kPZGmP7kR{%eS|0^3VO?|e-?r9T78To)Av`1UF&_)yybYd;#B8i*wm2U_v zC_u!5zb5V)ja~S&SgUnT3g9-58DJbD-IjUMK=F73wrHNkG+LbZDeQ z)GYgq-w9a@9qaVK|A3!CFi*si@4@AXz*Y&AwT*T$L&ps`YG z@Shq1(gCJT@Ga6EV;cNLf^b+P8H8RgD{dnERHYJyFbNIaDx8vCfGPvQuYveg%_y~s ze^#w*N#H<;)#bI8AZir34GKGoA7~r*6%ld8#-8E)e5*)s ziEKHzYe2$~&-WMSydHTIF6i1Rpd_F4?2N1WTQO(nMCceUdVdws-S5?fENC6ra6gZjB*UDbQ4-t6M1q?$7 zD!k=^t^k$cgh>+-f&DsSKLQ}Z1GZBWNTyEHjQ}=KLmW!N7(gsxHD0_7lPyp{WAUUZ zQ~e6y1%Px=1Lgriq$Y0Ar~!e&LHH-ewY0L}uuNtKWlfSHw4 z<9ZY{J-keExhldtYC+6iVEwH3V*u#i8z=`wu(P8HH4JC*+jk6Y4N=4Hv2QOZvtaT$Sby zz)yiaBBcXy07CMQ>-GqY1?h7#EemIB-&*D7p^t%_NHQIykovdM@^!A_}q+0 zc{b>u$TongHb8%ZFQC;RH5f5AU~>rZ?o>9HRt>()@15p5AbKj4KvY&jp#ibs=*R~Y zL^mR&jL#0>VPlL2Tq1dB4+T<0KOqmC1H9sr7yA6luRp)qw#eIAF>TO_wXbn3%CF+~ zng!^f5|}z!fLz9*$rLysCs5LaaQnws!Uy{ksM7rISj_LIfDS>NiO(wvC1(8d3neub7~B!_cx~tlsMFwM6wApI7D<%}GRI~=pWK+w=P04NQ_z3Z8`MUjMN*ms%ZR`movuHia2&J`G%t#*7mUz*o=N2oFo}W)XU+O;H|`9(9Z_hbf2jU4dX32* zl7<=OyL16#i@>=t##sTxKCW`;{^jYz)kRe!JAl-LVTKaI(U~VaesKt4ErIul&NDh+ z!qteABo1$gZ7XdRI6828+Hg+W>JCo7qy-TNO+6~qIz33jF^T2_QZc&X^=pN(pUAr| zb5V5g$k3td#biF?L-^H~7k|n?Y7b3)JD@xk376*n*vD`HCWUo_dRpB6odHga*a?sT z0^WmIK|0-ZYp?F5tl_FSxvRJEB+)GcvlH6La91H+H(>!``-+G53jzefld7LtSS;Xr zgP;(1r=kH~+o1E^?*biGJ!C2Y2f=kb55Xow&x-^6>(n61c3NIg_1#94Xw$KGRSAi} zf1RNLZLzyl+RCd!FehAoAV9s=WjNgx3Hq-SXh(9H*Nif>OF2bK+qe*=*c&7{oso_S z)bSry-ZN?zQ^4?m(4`9;E%pIik*axa%glQN=2X#qIXfWMbWRB-%XP|A$9*?Py#q%I zPWgf8^@obJ=5OW9ZsN)&tjErfJv&!q%mlsoHdaP$87?Y=9AtCQRj(uvoGF!T3KGxe zeaGn{2C|)2!s+IUNF>`dS7twRMS_6IRFuhL)+J|1*99>HSCQ)rQfx)^k>?WUN@cuE zwAwfD2yn98$Jy%b?SK69V%&Pq@y;GT49n zxLu6e=w;n_?57C0|M_FveV*V)5^^sIlInRzx*}Ja?-ha+EvaSRe+#dkrhAub=g;}= zb-2W|&o^&Dj$!Q*K$vhFwRY~^{ZM9p=Ee@hoGEY-0r83mDJ(Y?rM5Z`v;>SqhNaSn z<5TMnw_B8`m$2rpplg34iF-|hDyHbi)rnq3mT5sN5$ zBLOpUj{z)Oc@3nftP(F1l2yX*fM6BA3sP)Bby?Rowg9IosC4OA0&cpOKqMtZvps8D zN~O0Edj+|o66( zx_^8ONwIJj2_R05praspBT0uZ2yFzU=@-Z}4C0(|cp%VCNx%aY%b?p&rx){$jVfo5 zY`jVlNy;;_CL!Gfj5m3(V8{|a72+dI#%2$T2kk-#bZS5cqgVIuOL3$Saj`cK^(h>j z9*=0>K}rykzr-+xlu~F>SRsM!cK`kw0#=7US+wm-fO51t#Mo#v3t^OTP=s(ABf#lJ z%xp-ya6CeBph_2M&Hx2Snx900y~vy@iZ{gi@DhoY@Nq<|HxALrkYtXKiopVH2*E2k zs8Q_@5r*iYaPT3a9c}>07>l)zFR@JPWqG956p*&Mj;tv1;--Um6o4a4C_kT$_dm7)b zfb#!7Trc-Ap=XwW3tMg>p%W1$`skP_LJGo2z0VyZ<`^oeYY)oElY&;8RZHj*sLxC-5`7Hj`tTJVohkzmqHa%*iGT$a$|fSD?u3Ku z=s@;G(4=CDrp;(dd=g?HvJOhCgcGI;CDaRzwey$ojjS9 z)m^Brl7J8z600iDckY+`&Ug8J6BY%nePOGweq|# zxo{d{%_VJKh$&`sqm7u&4d056t$PEQ1wsBd+K*vNHah4Y*CdV8q`1zIJRMuG|APT}mKk*xU*GmMpH)alijAzxMTA{M3$&CEV@FS=ktZ3U zNud@!h4kmvw&FFO|4)P&7@MOht4ZOeNV!duCt-uArFl0Mq&7ci3aOc-$y1B%%{=no$D$nHR zdCTyKM0=Z%=t)>5^4?U|wZf=Q+EE{MQ(;vMb{V$bf;XNVVem1pf_W8IQQ^-DJ9X5bv&*A~2CsBF9LQ_3Z>j!IprBEv^ml%}rsrPS*}O zt!RZ@&LsX7JN9o|T|0%=1Xh8lJc1GeQ&!9KqChAW?qkUaVR&H%Y4k-SbS?DDs6+G( zk05CV0vDQ?Tk+?sk}OI|Hjb$SAQt+?M*p-<;U7(9PMrhi#jc0p^m)1I@r_OZIuhj4 zPX_aM7&26h7RZH0h2wXZZmw+AEVCg+s2e6nWae)Q zx+x3hPI{I@SWTUPbQ>f3u|^XUS_cmKAuLmK%VAnJ>Vzz=3Sn|Cu+)y(?o$|b7M45g z&}qx5F^ASm?NtgCYFf@>VG&RiLi2$7A+!p-XR%bH0o)RWsz9FZ^7jK+^&)U+?kRs> zJ~?0Gj$9Cy&ZmTmlbJ4)Njc1$u_rO)au!eyY_V<2x`VTjFv6(Knr3rHyi_)^P_QSe zo36^)Bt)f6X+UqZcXKQr^V*oJwUp)ZMcS)okQN-cSXJUW9>Kdkg@TU`Q3}MGCcL!{ zyYNyO7FPz$)75gIZqpJM?*sh;#2jssK|Y*8_+_SwrSdr|NmBA9hN?Aq!6wCXr!#&X z_Xjb&u<@@R`Hd_B)?U;AI8*??@F;fSh@Q1^tql>IJamJ=YXvPF zM`n1V#A4A>cG2KLG+zs2Z~}yTBRP zQ@<0p_W9;Kr($u*f?@cUx^NAd(*F3cr|!8k1V#&n;ag>cc`VPQ>RO4B>2pAPMTim- zKfSQV8$MqI5I;!*>>A$=>RuB_6miSTT45Z*K%)bIIbbZraY&&dp_z!Hkl+}?umenq zw$}hiL?cdvmecTnO~(RDu3*W97sOBRLh2NdSgB=QPar!=tS#I6*`Rqfd&k&&v!YBpMcHi7q9 z8U#4vqrf9n*oAGkCqFR#Mtir~TwGl(YG=lbEX|xhkC2$Z|R#6brH_ zOC9eriy{kOE{n3t2J={+iA9-j9lSbDVMGowD+l@|L!Ec<=HNEu^E_XHOn(|Rm9N!P zoavE_csLV({%}Xh7FoPTa@SqeJ+_%w#Q$5henptbKt80T(Da7S!kCO`NMJ?fL21@K zf*B3rLe}^-FJb$U3pxO)wJ28$f!I!(S}gB-`0!!D>IlN710X|+AQ7DP7pnBjvR;Vz zAPhqj4y6H*>d321Uh1F~wn8^)1W6J{sgnk7I|#kZcVplYJ8A0Y0x7mkd7UlmZB?{xAo%YH1i`fjz+a&Rc27_^Zyw8!kfoHA}2~Mk_l+J7MA1|~a z<~Lh8d6YKF$ul^NPm43Ttm=6X7Pg_8ArX6)bU4HYRD0{q$i*`>l}ydN&Z#$95a3u> zhR4uPZ=c_R%DanDH|u1d;*)(!VC~}S4d)}==;^8JSX=#M2v@7ya9@j|g+5>`h+F&$ zCJh!|_JCTt1oaJQ?VhGJgb0M+0=oem{zF*8;+=jKMh)<@OZlk(pxi9$QZyLB3;>M* zmRdg*hA!M4^(h1mBk1uYSdl;|Qm=HZ5gN?G-;cKXc{nMdUV`@UK1_Rs4FPq8lvPRs z@a$h#P(#rNV_@lzHvds< z0Vg*tZR>}JX^oJ)ptzLEI-a z4tV@I4IrN5>^zp$;mpH2No|w}h0cILC50cYb}|%5^MI>IW7QdGwX-Dg!e%>&fLk29 zO$f1J1<*({znwWwkRxU>obd~!aJP*j)?|DrdSVw0YzC$B^#DkRz0$>4wq zq()p2+`u~mfe$!EDEvkJ_N{GxXplowet(>?w~K=65(Oz|XN{R8ftLzNvIB)!R0}y@TxAbMhK7slkhZdWzL}G;%yOtkOc+KXK zx7OaTsG>Yy`Qe%OkZDjmZ6WU8#S@BCq~uWw<3-LP!ODt_)rDg&bwE`GYc`uQcVo>D zoQejU>q7#L6^kr(sA|F_1#r4X=^c1f<7D8@R8`E>gcV=Janb(Z!HcgGl+0*O9_n9!I6 zLC9N~(~YxQq*ty|nW9|fIj6M9$~$3BtS&Fms4OOU-ZwFp(>Zvgv`p~}v zLtz+HpFnYs7(NY{Saqxk*F?cjld1CwMco>0A!=1uQE2&Zw$K%O9+?x^7Z+wMZoLU} z6jd$XX@8$;U9A}DQc?IYpBRa!rZg+Bk=%&W%xU9AbJ`~xKQ7`v^*gXdI!%XhT6e3{ zd5y2yud6gwg7u#vq5816NFGH(Rag$(wS`4e_eG=0Sr{)qSh+z4jqolAodTOSL^RA= zt*G4r8cDl_AS;2J!n8Jx5hX5l9H&Lb-A|^_ZpxT6Y zdCwkB*p=!L$+;1AcC|NTW3r~YtVdo+)s%BC_4(smFd+mVJ;09>V!X5uQx|2EOZw&? z{uDQSgd!Lo1F0G?N>!xddOH#rMuxOUz9WUyMO|?rSAfs}G7L*GClUopHMQWFu7o-& zd>!N?st6L52$vs%bb?R~A}@L2*7yD%`A==C3Z$zM-szGEzA6wpLI%+#pYdc8;|?y& z`s48~&S9NN2!y^kN6Y(*bMOjE`|&=8fC5-UPe1Qn-@10^I>piEAnB%0KBQGBAFf|;h(H5GCO{Oyf(p(z1%(SZORCLfP?Bmm;t(!hpXVjdC-%wdFTy#ju)aSb$=ev)<+>1k5#SiRTBu%Q4Z|7i0SUum zax>BE2=k}}b60P{DM|X>VPfzUawUq$02w>NkDxqaQ^9`#EK zFSb6G4x+dWu`wV__%Co2V0GLt&A{{755AW12)W#C9YjOq%9gJ)sspH8vJ9DDnPK#~_AUZH0;^ zC+UL)MhUq@gN1`ECJ?_7`s0WiM)OH{fms?#H(B}8p!Px)fOUrV15294mb9QAq0z-; zip=7G$jDQTN|O;)u?BHTL>!OldG3V|;Uo!^Syo_-7U<7(A)Yd5bh+;;T8z{#oDnil!(pDVF%k&VjKqS+_LQ|{N1lmiZ;R3VQYkEN^?Zm#*Zn_?v z!r%|)>+3Xg$S)d&Gt={&`tn^P4Y2ow@-wn?S*oJ?UKJJOSLDV7!^Nl-rP5{}yb;U?`SCtEXysMeNfl z(caGs+n3(#lw0_*`Hdh%Fwr=IyIKR6__Qg!)>=-p<)#kep|)Cq-)tpW8aMoA+iwFU zJ@L|@*}zRdYV-a6W#U4}HO{L$083ZRITe(B&VkWne2OgyXI>bFrJZ6@u9pmAiSA=o zGDGI`pFMUPLPIF>2%pLRdG+h&=OgZ>LWsgl#yLs&%#W^OZcDs5n0a}ZV`2hbA-usopfQu3$ABy* zaQ!eYBQb7`xSblzGof5u#eEYuIuZ`yLV_DA>|!30X%rA-&I@poToUrdIc_bgW4jtO zg)s^sUl>T^bnEV?cZFm}7a^_>!rlYbKtl34a7=(F4za>$oZk!zvN;uf&+ZO3sL^D1 zE$q!thfU#_(uGbFXx)r&JpG8RvR~~3R!=w{rK^(Q5R+>Q{8mFDq$FgiU z!z60OajU78gj9H{qM0|<%SC@#VGFp9l~h5)zr!`mAAe^Rl-vrdf*oZ~fG|bCYbI2m zKL+y$^?(ps)9sbmKcVR)Eyk^#ZHpF#(5tZk@=s6B(J*q3Z5>A-A3%kLB|J(R-0lnb{Y-fY6T6?ZN^#RcRHTmjs!{4=tNPF z#jUszdBFQ$?2j3VfA#pBXjKA5wYp|-Yyb3dZ9I?enb@>X#4Q~$!-fPp?%3^m&}lna znz=5#>ajeb`HP&yk04}llAsAJwy5QYjSg-H5M)EJ9RYZ)-ArP~LBwOH#p3c>Ua(}* z*htb`N-L|KD_KDW1@?^Vd2#>2aC5IeAwEMrd+TO8gsaimf_*t4oCelCxPhhGXNGf@ zK07kXN&p#?Zs*U2x5}X!zz0y46Kx!q%;D7(2PRk0socY zgooAvkV8o+4F^adHd7XMnIz#F!%d57C@UNsdtG>dfx&~(x2hyp>YgWS5@`}Oungb6 z^AHg3qERB$OVZ6aT4I!rAEq!9Qx1Z}Gn(xtK_ZC|&1VFg+dq$1Dv!Qjr^5jb;v=*k z9$wTHibOX|f%iLtwGV!~7JS_j@;XEL>(YRNtbfo4v1lFp$At2XdSEmJXF9l%lDQ4~ z52F@|RI4m;SbEq)&=!(+N*jjWF=a>R1U5HDbubpDQ8afUxv>IP_hO+B!V!{;>O9#r z>w;<{B&GxzE}?kAulC4%07duG{vHK^k>Ihic`%QIr!Ao%ANK|bFrrr0vt(1CzFTSA zZL~vd>5dzEc=dT_wJmZ-&Az7`QqP!Z^O!PR_Ak?n8B#eIii}3XZf$rz0 z-A7uM!Q`V2XiGl~2*t`vap%fBx8(u4irvCrE*4MB^EZW4hh81(%Zl5<)vc@=OvW=h zLfmUWQSDgQVK0inJctV1=U4u>5eZ!U&f!i}%U-IW=0=~d5LoW@_9n+0<-5~%@cwHo=U4*G7b$R3R6K+MrqBdO8LJF>^FlYfPoZ&B}lm}RMf=5 z3D%M8pm+cfY6^L&5M2_CiCG_EbnKQe-w@S8a;aKNPV6$X!DPzc-=nbTDl7}QTkx_b z*cz>q*uTupVn5$F75vzZgPP)KDd4j7yz=v`gU zT#rpFPeSaUkKvoMm70tXrGN7nPO&yrEWIRW@Oc0EV4Cw|@P?Rf^2$HmrMuhqn_CG${TL^Ct*eh*W#8XOD;=XYtrOx0cg# z!`0{Cs^IXHN?OestztQQrL3JRPz)1Xf8Dwuw9OfdC&YG z1tw2MZX@Tmb5(qXL{lZ49smWMt4Z5N?SO}NP}ndj)7unvN?+Mcs&!L&3IQLDz`3k2 z9u7uS(?jx<(*NNU`(NHvGR z<+l5f+>)EFE{lYX6;)k;JyD13i72!*iF${StB%R!Q}$JQlu{%zG9IPAiV*_}8<^pm zaBDna;NbRqFNJVe$Y#Mc--I(f#j&Q)ee(>sv{d~nB&Sv~gsqW~T5`f>Bbk?db~o49 zThMGco&$!p*$IOTruQ90zKVjj>$)L=U^O)p%V*8^Ph9||g-E+!{{6j$&(fuyPZdnk z)0Ulbrauv5_UDhu`l@0j?+I3Nsq1)ZpPl@GZ=th!$kj4~fB87gPJs)QvoeDL{ENr3 z*?gp)iSt`U_^fY0>_eDVgg?wH&RmzPsFTZIZrKG+kE@v9{_yRqh*29~1;XySWd_aW zlGNu9W^;IOqy~2CLl*# zaRMk&Y^LQXj*oGYAEJ)Y5qL|Iaso32s^JkJ8-6SUMG&I&Nm#C<^bm?<0F?q1R(-o{ z-9SG#x9F*2kbmAilKim@uqy)VK57MZ#3M*4#;vZ1pQs9VxB;JGQQacqO^c9w0Uw>C z9Bj(g5{YVC_t)Jc@e^Y^XPd-o1`>n_Dvf~_Uu7%ALmb5H0iPFo%0L40B~0q^{%`;g zZb)}azh&uIX#Eihwh2o@h^Zx{gWLm~%o&SlS^&H?Hl5}9h_~o9nn646xN)Zg#vY&m zp$DJYX46SKn!EkF+N9DvRsgvUhS-P31{Q$2#Yf77fT-yH#N97!c>2Ky{=c{A>xhOM zfPIKO>2~0N3zyx7AB8RazXAPCM8;4QaIP7`7b0yX5w80Uw}XFvCuqYb0#daB}=KPG;8d24oRKb`!5tzjRVh^;3D4O^Ktz{z7Yoyup_qOLzn zobM@JzBpj_rC>$1oSVC_j%j(zv(#K}*_pWeYP;!Y$!?n1^H-+l4^OHyF=;uK+IgK5 z`SZ<70R8W!$B4TD^Gcv~k+~>~I$z!rY1SV>SO*%F=Q(&G!!%RK#0+}w*Y!89Y6!xHE=FwPFc*X@XK+VBILF=8XYWplr56oheS*0k3 z=7GDSz{mA-`|kG6tv}>c#S!JHGQbumD^%w^d3Wm;ry1@?V5Nal$O*>a$pjnzS>&F@ z1jY<8f%2JW3ZvfJ6lcR&J!^lUh-5U@Le&adUo=;(3cWn8!6X=y!wXVbn-)lox?3QTD1XGJKQVw;5-Q&^xWm!)4%X_1{r@OwGmWJTPArOIK=T=&Dj%<2bjxQs{Ga^>Zz&sDXxk zhb!RE`Lznw_a`pr;wj1mT4Ow{oJV|q7ota)ZgeAQE5Rb}4Dx823q||?nMwtibBG{} z5Pi!cN#-u#(uD~Ha&6{lxkv(1)rgEvAlTj5-M+T{lMNCZ)2knDYb0kUU4peK-hsO! zH(lB`6Z_y)yIgslcZ3y>^0m`#GghM~j|rrApEp@!jgqM=}v#*nEbEApFZ90qaF zY<3_^jgv;$%HkkO-OTq|ZCAgjUsXAbiwCnq%8o`6tQkCjrjVD%IS3{5Um{dNqR-UeP2<8&hqBk>)ue8#P(4s7pGa9B%TXH|NPUB!sU;%)J}L8>?%7I;T++yl9h zVLu+&&AQhLJwW!h+b+j1O?avGArSd8`wH(fH0%0Zh|G_;nc)m+k#Q+(zF5Lsnfc(B0!*baUV|#MI3Y2%Y z`pL2NVYk;?w+i{V_8Fh&f!q)eQ$*+yVJgU=2JE#kmH;E4TSv(3U;pzhFziDKn4uIa zWEy>PUJ5rpIzn&=3Z*0h9Up}V2u@7)7w3dQ1XyhNl9RcV=F-vdJ3_$ z6YnD?54E+r!i{wcfRL@)g-di-f^EseG_vC~9@$69S9Y3AHva7J=*x|xNi^CR5unB1 zNR(*rj}Lp7WgvDK4ea;7F3UzZ9rG-(y&W$-?@u4 zNGNQcDI#Y_*j|Z|gWPd|NIQrdQyXBY1$v59cZsPIzL>b7Av`zCu?zy8O%?+iGK{pj z4sfl4=}O*DSaAW`7`~Mv>@)@489b!0HTg2R8IGXSqYyj^Zb#jIO+v54kmZx>OpBRM$MzAFyevXn7JNnc#)F=PsS*pJ$}Ljel);UEmd~#n5wNjq7$K&z*37W z+_)QJ{AkK3l($~&az_aBC)^^@3!>OO9QSY^gmIQg9@P;5iiZYPQnI7r1o+UH0I(mh zfh&zT7O9Q`h6Oym?{w$IRG33BV(X;mRrl2nw~`=rnjQRWIT;{JlK?)bQM(lbM>0(P zEZ14SqjLNKkKfi2?A8#53z`j^-9%U{z4lHO)osiWpDda{F5?}TtI41^OzC+S^sd z-1|&Rao(SiZeP8tX)2q7GHi->!(D}A_|=o>uy!{oTAv~+Sy8y9cbM1QY!ns zLu~Vj%@GuZRud-B)Tt)P=4kh4LxiB$TII?SkR;}4ey^%ZMP?4@_fMcJwoR&}#VZ3w zd&q`!CtquC2sIX`7UTBvXyqn)M@4RGc{&*5H4PrU4Lk<79>Wz+HG#RM-}m}gtE4H3 z-{(@&R7_lH&fdp0v4YB+-h82*{Ee5vY(I~a^G~O8i6yL{IT!XLC@5x)z=k1&j+GYel+c-iH96t>a zW5EfWzz-8#tvfI{j*|c~Wj>={uc(0zqHn_cV)}3O?cq9CSrbi*ey`$Mb96k!bzy8t zUt9-c+i+Ue^@O}#tu5R7*TbI%UN}l$~eWgUHdiJ8Qh^J_n+8{#&$;Cy& zh>a(+DjSj&uDjf!KDJRRbu2lSb+2LKp( zXV^zn7NI4gz$?4rmuv;FlqM($jJ*JOMDbrzh)<~kqG~n^9lHEeYT9N^=$FhCHAj{p zXl|mGj|b!QCzjGQ0qPK*EeWny7`y&Jf-&|0nj>2}7S1GN3RjBCao0MeTauVSIqu@l zLpLa9=)WaJ|7z0Jim(td3-?hM*7z-)05D5z!56pH4BH5d?KHfW7O?Xc*KEDXDo_{ENNWJ6Q%B&1wxsUOtkON+WHCQO3I4jzjs0=!sg~izgnQf zs^o;XsdAG3iF!AG1rqS}6%jNzd6I6bhtORuPVT z?Yk9J6|H-vKz3`JTV0&*TiX@AFOCpMDvB>ogI-lrd*hu#Gb##tqew6u(Ba38E!83u zD_UF}6X-0dkkd8=lT|e8%|fH@A)wS`7_%T}t+?Oek{=!cU3*sYKCYk%f+%pGiX9dj znV#-&@dQwb_VusEn&P!W(+C5V3ob5NN~svB;u;e~r}lrB?#HPT*a}Vl#1ptUU+d#^0N|G{zDx}tk{=pg=4Ki zSe!z+iwgwB<%8{2NG)zYUZVw)V(0X*7HEq5P7FXHz1T_|k9xQ85He%8Uu4_olq8?- zrZS7W{C%x=wW^TIMUneFst|L6)S}?IdHv>&nQC4Rc=?n+IqRx4UQ_MasCHcWhHBXC z%kewW@i-+RX@3u@JI4hON28tsLqz3#lOpsTf&YVrV9WLhXx)jMD)EiMsIKxN8^B#% zMC(&&%e7(q(}nis{2HF=0i`E1F2uKr%j*oa@H$yolk>#{Fz3*(r$Cy4wp-)uVjgje zZ6a_~8bx00r&*)rwv#jt{1z@k3Dh-CqY2EIW*UV-D+rR*YqX)y@tTM<GH5)S9*It~H+_ng;C@*A$(gCs+A-WXo z!QkrB{Wa=;B8*})r1fn z#^g{#+LC=J+JJclg^w~1!%7FW=mvBi5Ge@DG;L@`psNx6n- zCnHFOC}hDA6jK7!bpp#5sG2YUlAD(;4U-2#aDp5d;o7FK9=Q_&$_o=Af9<4WxJOZ- zSQ3kD>Qyk(c4eqW1ma?4Q6a*WlSP@AHXBi!UInel_u`<@N<;jL8h#RMVFf$RN&6P+ z8rm_%mPs&&a;m*G9BNPQwHY+m(rBV@uhOk#s+`;4uX#U6HPjRd-GX!5B6OI8z!%m+Q+rj)zknXDU5j3n~VxP5`{;m-2e3P^~;|<$|x;CvGekjLW&w z^;o5<`nQOAUpb4Ux9cfi*z;{RKmHhdrJT~Ysbpqu|JNe#KCdclmD5&MhE>%ygZck2 zAN$_$xSvTMc6&1ECb;uKi-DlDUf4*0!rpRXC&=75^rN)VOd9Q=+3|w3;RTV?fsUdT z`uJZ0a}dO;ZM0f=f^ZEDzDPVvWs=|gvuli2WiFakRLSKpx9q~j;5!#$inY-2<>g=t zn5)n`S+~Kyr7WU*6hHc^{M?NbKzZwkfx96Gn5o6*ZFuW~u})!B-{0eKtK#bs0A}z- zFwo>sBD~b^GpZ1nReb-|1iCR{n2sP^8lmi83htKOZ@^1~o6IIX!Ox#oRc+3yz)$a_ zsl=>>5nI}~A9fGAM`_Xxg?f*EZQQ?q>)K^)kG4lPL%2O4K0{c^oxM*s(YELlA9_*0gEteFp4WKwwO zRb^+ZY3vjEC(+78*&m08DNAN#OFqN9tyc&y8;gLmYdpD!x9*$mwoqOkrv9v&Z!A#57$*AJ5x$!8tgX;8GwcAB-LhMT#t z3TS5?MEZ%`td(VM*a13Z3%?QUFUW#0>ja2_)M^KD;wBkk}89I&F34_p0(l!=!;st;##Ag=cb>C^h-7E6d$b169 z#}KyADB6Q#h~v}~um(PO1K5uvBzug{X6U+2uN7oXC&K?>S`HDU3n66yXlvM`yP@y4 z8yS$Evlvh%@^7b)XypjZ1JLknAnvp<>S!YZ6g313KlQ}xG&3h|WX+D__^FGr4O)#9 zqtlH2u;n43nIAUNAWa=Kwb5xJ$YSWU(^fO`(`FE=LT3c0t(KF2BG$C9i$*KpQ&WeX zOgnNA`6>vTn2;C)n8L9RVIErvM7miJdtnBSEN;VK-^tM6P80kY1~c_AbKDBmn7Kdr zb@E><$o4Lgi=1NGQT7ZbeL>{hWgaA@*77)>i78*%s;K45jreo&G@t%kS?yfa3M!ys z*CPBa$*DWgQ{l9-Zl=Qs!ELQi0UpEm8(SNoGOY9%Mlxy69QK`eERRoxaGu-UXea?vchm6Dx+I0murhJ|D4? zRAeEKeZL=39^_TubZ*&Hn93v}+V>!>4bvl-<>&#Brc4+KG8&RMoeVA?@QtphW(S7} z`Ds_wgMmEH$>(P^lN>T&lJsCk0nmHMWSJkMRFl!G$&pD~+h`JPY-3yI=;@K50f(hh zTFbEZMZ|1`34}>e!I%nuW7A`){HoDM^$q4c&{GNDCgp@BrzYZN+HAtFwOe7nvwN5>4C(Q$|9(C6@U*nNn;=LccH`ic!J<}-S`*kB>2fM zwtgYk$}e_R1-yNP$qbp#VJ=}|qinF$MzMTgRW#ca06uH`ai?V|7fub=CWH$D`;b*+Lz>6 z)q~mciIap3_cU*V`x;{YK!=H&S*PWC@Mz9LNJTS9-#gG%H5*Bz5j9&`6nn1gdu?Dx z243nx^@o?bo3`;@kDzhm>)NMk5Ws-qok_Pr=*ytVOq=b@A&&;AE`4YMQ$K;;5k3yE zWQvAdUl|O9yUC8*x<6+svmtq5sumGNC1bfgGzD!h*ke zEZfW@dL~)HY8T133QLd#2c$z|`<;BPthNOcByiBL!R+l~+!#>G?5hqrUeBDY#zEb(e=>|I&%U_!!=Ps$wA5|zfM0s$c z-7rVKknb(v3_uPoaZ-oy6-H#^Jo0)5G+J1Z_V>~ud~qqRv~cSECDaB)nf_9RI-oEL z@Yx-})fgye5|)engZHFofN*{VfQ>-Whc84p7T*vlLDsHXRPbo^Ve{#?VN&UPgm9b! zADQBG;D1rlZZsO2&EOSZ`%Ev|LJ#Q&)BFdE?c99yma-ix-lb0)cH#l@B#hXC22;yk zTUGqVCpUMNT+P%DJNW^7ozG@8Rv2*X_1u{r+qYBCU^uRtyRvv=KUbRHx;iP%~n3M~ed(^TUk*_|6R{hK+yQ4O^|YpFu@2eU6=5{~boxmW2XAq@7v-S-m0s>cOP!5j+3GDwwnZf?q#(yw4G0qi{(%V;-FRSJK+vIB$fUOI+lgE^7^ zO#$463?s9GMwC$CGCdg@pVrdmZZRoJJ_)2HSk{Dh%LwoFS|iAIN>E%qj%PPUwD7d=7djz z&7aQ*d%l+BRD34<*Nbs9OCHdY1K$Q0zg&KXOI_AMwgP^p_Q|9h9~6wUFjHR#hQ~Ad zb-`0tpe>T*^SqlE2*iB{fcpe1*@0LEeyd>u>pkfBQ@9bg;Y&=8x*gZ?e2PQ`2V}VT zHXAXlxnsYH;F66d9EZKA6XnH=Z>y<;x~aLE+u&jZB4A+sYyf09gsuS)bJ|}g_NEOh z=Z0@x`SNf6df2zF5WXgS4MkEw?uUW(F$UGzp%_b~P*cr6SA1$+>Vs-iL}DT;dz7*< zWU)@`(gB*V8SjTZSW}J+Iv$rQu^bidH{I3-_^9{*aRPGlJC*H&Ee;+E7`~A}2!SoE zGSwtBJBpX9l#0*(zxlih7KLL%31y*lsWwYdxv3OzVua;q%h0YW3NK`R(kG7~^4Nut zf`ft`LnFu!PZdE?UBz!g5=0vL@~I+~V33uPuv3;XnaGlPlp**ki3g2#qf|m19Ek`? zFsj9Gv$TB*428-ZFR3RUo)FjFR& zMULTHv*FRf-3#?mN*hDsyQ^lRmESu1=F z&ApY$P!kwB30$PkEOeO<~sj@Zm$7 z%>9k6xAAAgFAw)O@=7*jKw%N88RJHPn=qTs(^bIX%VbNBk%XEZA%O>zaeY9+JrEij z11Dk#Cn+Fad!WFgO$OM?gIJb_3ZNU-dd9;Dks#9+`b;qj%xe`Hj>#zr?|4JVjG6MB_ zEyS9m=3%*N)9{CY!yIErVF`p}Mj*CI-bzf49?R35cJm71&Y;9gR@KAHHE|p3(+c97 znBFCMR=S)ChXZ2|T6cRg#v5lG)zngm)sjbOI@tJ&XyG!9TiOSDs*c_9JS}f57?U3;^fykkZzo~oLt zx$264owS7GsX{J-0lTtK!!Dv~_c`t53|>EohyzlJ!<~lm7JP&MNBC`)rn=Onx7mH1F2#u$wA4iWH7s%JW$1F#}E$O1syYeZq>M{Wd|rofLQx0Ast z8&FS;Bz2qcmkqsEmLxEecHB%L&n3Tx7pVqLioC#MXtu6ED~tSwQVj8pd$dXt^;)}aa!;h z0E(DH!UKSBg-}!aa2$Zn(RJV*+HM1rJPM!;0b-i##I4vNII(6sjHXl}%PyX}riBJS zH7s+k63`I1YW!y^F0_^uxQ+#}x53@x;0`Lh2DEPTT6dpXU@;1{FHm3_Q)l z`r`_#9i?cg<1P&i#s-fIXHlQ8i09HQ2NpZbZapX{Ni^Efh}fc>7~aPFn0 zFaVN9$AKdW%)tN#3O*d?T&Q^~UWDHgij5ilJ+l=Lm%F6pTfs>zs8o5{ut(KhtZu{> z)LksQK~)?Vtaz4OP3c5A?I*uAW;0u_j>d<$=d=jEx(=vBRyMDU_gGM6vE*?qt1P(q z8BE85CKz1mvd*s}uf%8YnfQ%wKoXzJHc%w78qZFh^GsGu&6nTDq8KbB7Yhjvi!KE< zaR3GibEzQlQYa%}K^6EuUM@gBb-cFcgk&ljdsz~<6F^O;fB^*#C#;-W41><)FT3;t zpV5{uhJafIchQCd;us>%?ejYj|8*aPeT8!9IMy9V>>$cGShsHVV}5;FTM0l|uB1bR zCmJ3gbTEEyLeMRK+Wj6YAwDRVYh8*4qfN;9@J@yt3}Vs2Arn_wTv)T&j*Y?`szLki zjS!;ek9M{{CLTb;mxF77v`CBH{?D!1BwA=(3`3McR!hnh=?-hj6?iW++1tHYq>-C`6(5MKvUl7=8uC(r0M| zI~fd&dTg~a$QS{J;e;^w03vXVs9wI8I&h_HwV`0syWtg;qn5W=Jz101AEF)hwX`tC zYZBg~m{t*Y@&|dTx(I{JHiPI$M1xY1)IDyGL`*0X3=R-SiAl^RUoS3;H3`@tvvb-M zs)NK;mqb5Hwfs+p{?U&St%z%sND?yTlTU2vS;vXe7Dgrl)Y9+x8sA-VnKCK2kdf$* z>Z#H7SB-JpHDMuHa$GqdS2bj&YLGbuJfr0ykhl@D33`}{5RztP8o%QTLJ97OP=cy5 ziNqlb(o{E;+?Z#~tW6W$9j3iW!ouOo+IB?LGKh#{RhzkbbV0`IdCM5VJe^IG%z@FV z_xtH64v)AUKddT&X>K5B){NTj;;2GU*4;ePtJxMYn>Mt^Iux)(p;2ojXaI2^g;hv0RqC zuBvV~cW>@2w-&YI=KVOQ2$yb=E6ZJtU5qSy_I>QMD6^kHdp-?xgg-5Syd0>CU0PqJ}AH(aR-Do!<6=;F6_p%IuWf0h~cAX2=5+rn9(<77>!Y+^+I zpe6<#4~2Bv%?Q%aHue?tIS%}CLYUiOA;8+sP1>CpZQaViUss9pnc*BUWapVL4rkR(teFrQj(24eEg7_voKw8&_}FL zuN}G&ZeSoYIG*6>bpsctC`BWQaE_!|gmnZV2=s_)yBQ`?3r8z2)lWpxu*VzHC_0F7 zLX(K)57Z|&#)g725)n@j!x|x}5l}A1q1ZyCl@3fnTTU~8rm_P!?`8s-jO(_Y79UQZ zAzFDDVSeyNfr$$W?+_?d9hxE6Pm-+D$s&Z!X-5EsasUt2hJ+@Le54U>a0?E;Z9fd$ zqyZ=rAH;Yiz|q|2Gxs*`;V^(A!u9m2E4 ziH|cD@2M7Ed3mwo+j7gMQQIliu=d@bg}xdX|faE#kBy;QrzC zgg_J#OI^e%B`kOkhA%;w<4v)q3D$jIjqNR(UPE@tjfUx>P9<^XlpJjBHG`rcA;UV7 zf3F%8wKQsgD|I4-T2GUv2i)Tj zj349>iIazkE2(SEWvO(B^r!#?uXLBR4<(Ap52wdyG0!|3;~;!jsI)M`rq&JX|O=wNR+7>xgP12ZJ;mL6e_R53g~Z-Akp zwO2KTdJ&!Sh0B`FmYh<+R5F+NcNZE;42vEa*u|LZTEzF%@2rZ|D<92}EqqiQ`?J); zJ#-$qhib6Cfmh0a^*yxBzb5|iP;&W9R!n6o5(iK*kn53NCW1l%N~Kl=89V}orVw_z zkmx}iKqh4Y)J;Kv2-z*@8`4IAu+PvNkvlvD%316rEZ5`Gms>XVXo~+hcRFy7YR&wV z-2C!qbM!Dg60d17Wu062OaxI}q_>UrvsWtt(yOhYUYuRmQ)7BOl_rf&~!D zFlYi~5GyhtuWgEQfASOSLbx7XwCa};8f!hgxJjkfHbq?)rHbTrfEW=)xDKND;>FF{ zcu?Ea6>fqBm>dy{Lo5=c7{KR&yDMzSgv&ajZl(5~ZEao`@Q|D9*5)qBkvFS>dY~+T zQW4SI{fM+N;C-Sd^frJ_gE|S;?E3A(7ZYiPq+4TenQK(OEAzx13}<u<-fTX6&NgWET#koRQ8NF z`=SDa)isx==1c+u00)c*5Q&X6QYIa+&#b)y1VH}diVCzv5++?+yO$S8Vm1#ZD}F19 z0WZ+N&CzQ@pOCkbnjkeE4Pj)Sq>mQCBI3G9O9 zwKDw9$;?(NaYvqrIG6CC;5JOsa{%gSct++Jm1TZj zORl%lvJ%xIB~QsoMT5%2#>d%$A>NjMz8Or&)3!ard*KNgw*|pQRh*vnn8mwLmj z=#9+>#;nhpN~lsQ$fW)0HumbqGct%AA~?@2bdCt0el z(Cl!AIo-+}Q2)E4Fl%1$Rb!@?#8XbO{(2A0;Q#;0W7=|lV=U_yz~#Mej5+TvwK+gi zvUwG&97K2;3%K z2tL_Kdm$hFYdQv#42HgypBV;EdS#LUAcU8e(mz*H(*12G)$H`t#ex}E8+QYk)^d?k zHx*5HV}HCK?)8~axh&>&3wF5JKIKnXqA9hE3)CC+Uo7h|T+K_of-!vBVj<%JCgqYC zr6+of7YuuByb=`~vZD1{#i)N-#i*~Qe!bu4`|_+Jo6Ww@mL8wRPS0Ra=WAF_#azh$ z{+J(JQdv(bX`zQU794Nf8SLr5dZIeU({U!I^;x>3@f4%PZ>+tA7ZexGpNguO$hlx6 zH1ndzG*uK-_!JxWcdiZq4|cm74IwawA{TG%LxL4ftxGXdU>>7V$W=zBY#QcgY?;pW z&ied;sD`{kVLU#ZKo$-7WT9WqmAEqR*MFjH(g4;>-DLSL<8_l^7%as0tbu^+fQ1^Q z#fUdZ-58TUztRPNeq}J|{qY6K%Fy?77e#%agYn?U_DO@H6}39fg6E%i#=OELji{=ymb5B(II*V{ArQr z);5TDjz{D4(7v?|q90kGBX2wz5|Z1oQIdX&CK_6C3Hg3b;XSY=A;ZGKvJc(>8but2 zec_}BaW+AVlT{xA?@XXxha7waWEL{H6QfJbV>ogElLI?J&4k2ZAqewrF*D^s6)&_LjLO<@174y4yoP1thyu5cHb{V7M{Z%uh&lTlOz0U( zLT*`-fX55Xh(BWR^Xeb9l8d}zG5iBds2GI4VGKF*1kmI(E`&!f0d790$MaP|l*U*H zzL*Z&yh646o-ZPNSnU7-AYk1>FpUZ9U(zHCTJUa#A1z|TWjRpx|Dy_c9Sce<(XHH3 zgm?D0blPw@c*sv*<)>G%V)h0@ZO!{_oxm$sUkToxP9mj+z6n&N-!X75tI|J#xeB-G zor>}){bMG0jS2KlG8t`xU3?w#bxQ+XY;dH9edvnQ`DbyPjg1p4*YW$(`VY zf;Q#7%G83jsUGb@0VNFc=~_%{(o*BeoK?6GbK|Gei-x78QTusUoA4CuexaY_66JH4 z{UB$wE15NDMuhqLbF z!zhPMAha^=H^s<;f8hsmsBe|#5%H)?i-PzV&LewDPwbBe{p*KEc|&EDf{9^jIpx@* z!2RcEvKiY${XphJ$G*~imXBcn(A8Q}`DkYskh5Hp+)m43EIKM2GRK7NGjr>@Sm3S<6krCd(NV@(jyy1=cmJ3$oG6pGs zY91W2;rIL9UrqE{luP?lFhNFra-V%_OoM##*&v^X7q6w!WY0#I^Zow(4e-doYTz!t zpnls|`N_BS6G-o{?(dHEetIQOx{epWe*S9yyg24Y2I{{)!ty$%7y_N7$~3Bfo2$u_ z3a^lNE7FT6yl&4O$dnMuiTnH}=Ty%r_(yJlJe^8b_5OqIaL^}gOD;kTE>;l#7M;Hi1aeIwE1@R>?`~UrGOvk-PO-6~XZooy zu;Id0QW}dWRe+t%hxmQbm9NaCvdzkx?9^BJn21i@z?lnpQXIXy$!}0$#`8iWL=SKD z2DzHxT|rJy=mb(QL51aQP~3xQ*A1L-cT&K5=CNqR^r*GX-4zQ}Ju?=%=mx6nGTp0G zKRvK-rahRK>s|GdNRU8)`r&i*Fkg0J62Mj$l@(&r^wTt%roWa_s3>lN7)j9cV&doT z$jbC{3{aBZ#r2s9-Yyf+wE%J!PJgqUek;ZhbLv~=)Z2Jt_ciM^mAP=JPo-i5IE<9F zR+ZXxxni+GjQ-l@<`MHji5$0#bBU#cgd5lR36H+q!u*sAkWUSA9xassR!Z1n=(!ae z1Qn?C+r}AGN}`K6SNFOaMU|^CNZi0%+X%m;XN8x?&Nz{obPKrYJCjICfw&SbsQ6Y8 z%l_7O;UKQb=G=vphcl~zGgvRNv~TsZ0eN#UnK+CL{!*5XLBa-S8o6ZTGyAp%-Qr|f z`N-rr<%ZErs@Q&Jx_DsT@kMKkY$$cS!5QXW;5*o;&Xtq*j4uA<7B%4Mn6KU!JEE{o~d?j`2niH)?4GZV)r zE`zs2KqBkKB-RWj7Yu+>~XKhR8+XwE%=7!UJf zSS;Ur>F5ZYWO@VUvphRu5#-_nF~x?r?T7R_bXF!9T@UP89Pe6Q?&Yp2NP_7&ERie;0}kRc4(;gLelIMbDhhLJz01h*`sh1K87g0L9pUmWG<)66X^= zptm?KH@_~C8kdgeu~7`5+_hKK@2Txtluxd`tc2WG@7_0HeAnLO$5=pM&Fl};@%E8E z$G)vnD;TMFrjzU|J>anO1i#1xUv+hPFQ{kv>-iP^#4b$EtNHWN3CsyNOS!6=dUhw5 zOLD*P2vRCq)aDB2S}E0>hqqKgcL$^HS9&V-O!IKaE@{|@ z5CU;rRGT*XT_*b8Nkqfk{o+MQN1UI&(!U^{ndgQum=_h;w+)e#pfmS7!X3gUo1WN0 z9D>WQ?&vGjHyd*ySmYgauO{NI!8!GpEYH-yGq`cDIPz$QwC{q|$ zuJ4!9fZg4!RN7(a8)koGnI?KzZE}rzVC%OQj3_U z2fpuxWYZ9scgty??8opPF-+Lh(oUIB6dEp>7B@VG+CRw#__SKe>D+@qE7}F14fCKn z%LL*n!zjQk z6xQ?sIAgCB!q(hxw_Tu*#y-MZgekn?yp9WCP?#HLfXW1fo)@+<*9R(Q)4|scutP)7 z^Wf){moC1oqzdZyZ@8lSDkzIfL0LK$B1Iqq$V~)SOMB}akwt`q>sTKR{^nl}tgAx^ zzW?UmJivEN(2|+&Q9zfScrfOd<&jw&!om%Dn`69&5b)WC8ySFdri!#KeR&whRK?&y zI55J;t=IC>txFU-#@_4MBdW}xQoZ_J)ysq0Vom)XJmw~m2wbg{^$I#wY@E7UkUtoL zcgUG>RSG15@xj9oR|A!&3zi3w=4cHARB!~@8pWl{$N^Bx48OLvX|Bpm6?2^;)RpqV zdUR|Z0umrL3Nsb@HN>4pa2F*^5~1xx*_#Bs6v7!05=iR;G*IdAB88d<01~VnVD55+ zOAEzhFSi82!70X!3c?P94TP1!r3$|(xVkXjD7O+wO6lP!?L9zNvY?>Sdnrl(M%E@n zJDp?>AqInTh2xs>{qiR4Ep}k7Lq-etu5Vqtb6pJNLmHHPY$*hwh-IE8KdFi8C?fbH zO)3JYQ#}F%3Y9%_Dbylh9oI2%SO%C37?#LZ%E466F4y4HOUS~uT0KyJQ>VKTF0NWX zWhDW?j~jrP_L8RKdjMFEGDKQ+yf|qAy1p@GQ6)7g+fxUps70#fRH9wFo$z7$_lqy3 zdA&f)RlKCLwZe+^Y2)U4D?KSA_a8kzYpu$v_rBsVVU%!=~5H zA`joQuodKGi*GBafJSnMt2ti|h}`gH$U+sYc+0lTc*W;RkF87T0g#|7_|jKOl&ZoP zj|dNnY!$R@{)fat7I_U>D1a3*GUNf8)CRX#eb%&*6pKY(%%3n{AnY{OEoCmlgjO0w z0OyaBfS|ov6nDdoTM=TiWKpx@hB;&KvZ_p4Z(QjDfs!$?xjAKICnB1i20KdiC)o+z zWKv*1)K(WqmpGuCd&lj}X&O%b&~TLPcQO zB$ZohSS3lzoV-POm_2C&Wu#C9ZQY!5jh_uM^jglQ88>NbWfXE#3q85hd}=Hh&o|Nw za7nwng1dOyv{TQ-Cu7tWWw4jN#;W+S9q?nzu823;oS)xRbjt-tl!eab@IJ9~`8f$|rB*e)be{p@dM-oeN;F+Dne(l!y)FyFK0#D1$c>{oar0F1t&)T)(0nRq zXxvWwK-(HyKO6MmPSowMTh}1PMVu^%569M}1bVTuUV;b{(p%IQPR0Y2Dgz-Z99R*; zdoZjW4<>>v-XFlgo~je^XGrV`!D~E$aQu)44f(BZ21GUjP9r&^IjF#_PZJ@v6>V~? z55L%ejL_PLzXTe9ZVVz!!vlm3uZ;$1GaTC#R)d8AXp>$-%^Xd-Le(zjs2qU2Hi}cM zyY3)|b|d@xDQLG=D?sGTHbVPFF=E(xp@SG~0Ox4}4A4geFwMNOURm07%eBHQh*@=l zm4m5Zm*mcz#!e+74Z34~E>YEFIb;Vh#R?ZP-p!T#tP^5pT@-AFL*~nYNFXC80whw^ z7Ft>ig3K(w$R;c}uL2i>o6D!im&FrwPCXtbZ{uX-Z@E~j&Ya)pnpdl&-YkNIOX1U_ zOp{t1JVS31&q~XuY8rVVo%YGgdlgRnCvbtMHLIM?eg1bA+7FMQ*Pb3w_4=B@;{2>Q zsb{K*JGroK`&()~NQh4!LljE^U%rWd@{j8&lNYHt``X&4g<`SVS_oO$se55taQz4{ zi%6A-G2ChTDI#FDogipB2o4K0_#i=iVnlcCv@;(8<@`pgji{rIcHra&bE=|M)k59Z zI_|fXj=QyPecV033(fj;&^ypZyXOlJtxJ7DV;|cO1l8st?7{8fgnjlOk(@^qZqwtV zlKN2ARG0OrC08%bqso4Ht8Zy2Rx6r}@va7}0Qd<>Zf)JYCBxJZTP67z0~VGWp*~-h z=4#j;T^@sXJzvNZU`*hAv=E-ME zlTL&6dHHbML)`Bs#iUMRwuYYp_Omj1%D;a6W?bv>ibwwprsJPI#vR}@|4hP_7wClr zyZHQGhho2mmkuvMVrk@`Nm``HSM^<89DG(9fTj=9wih50c|>^PS>R@!cBg@`<*>~Q zB0s@nXeOh!OCeZ&FfjpQvNt+SilyBIl5ANEx%~2}cT>WhA8hr<&`JSp2mnzKE?f#n zFwDZYX%WrKMbdmI#5ZA-29+XYzlW1PjDoPva{QP-<6@DXq#JtdN`?INx`MeO!>K;x z7Z4_-{iI8(su5Y42{3wmViw7^ONN}YMiP!k6?SvijE@Jo1KF?<;tS=Fpf7pp)DjrV z>GH@VtW@4}()wGKZaG;JQ_%LNhv4E~8X|ge3xSIP)Z;^Z?KpZB@oHkvgezsoTHSf3 z{Cf-TL0;HPT8R}e+NUi$W%oW2W40hnz22?MT3=NR$vrS6OJ2u%f6e!Wcj0VSWWI88 zDlYLaACrA8#Y1e~lb^yfSc1QJESt@PdM0L|Mr&zqB>7aI z#-%dlY&xn=zn=dm!$t@}*i3zk#eZ(2L6-52KpM(lgWV2<|5xEm2J>b0hvYUH7qt{k zh`?~xJ;EhAW)cfDO)5vxd=x^qKeRqYS$Hd2AElGMF=(8IEJE7c-$}bj(|?pq)iiC@ z&uvzN&`VE_v$dOshu|;z$uNCr_fmL@?Wg^Nf)zem4}D7o?x8C7J!2r&YlR;30IScF z!r)BLy~?yjV8w)52;1fuU#Q_Rlp@gB2wf3n6b~sBj^HFh2ucwDM)=}n8r9{wKPkvl zba{CgUZW&|;D;!DKu#=Ic(GPckVugkaY24P>W(dd69Q*}xVD5KscN-d@Gj?R#3ks< zd08}~5Chgx7`2a5z}N`8esE4=7%EDGZT&5DiGur`pq(Lg)4C;EjYz?0#G%jzA;J$V z^{G8IpzaXN67Va90!yfOgxbg&q8Z(xG_<#^sa6XkEb=Y{=LXo9hmt3QKQYGV7)}aM zjH%`I1>h*bya{oQmM8F=@95Pa%b(k~q(r(7Z|A-FZDqgTkoMKt3!! zg5D6yFLDbYn|)zV2c6hYYPBCj4Jy`%IqW0rAWe^io{m-!xK6Yf5S#dh*2@tJMGRi_ zy*sKMh6m6|g7G|*ZS8kS6-Qj_5yG`mei~2c%f=5$v36A~NHqdz?2o~_Ly=i*0U;S; zaZ-XoZX6#$-SY>Y2-&4FWu>_1uz z#~0vH((F@cEjV77YFAnlLl}P^;{%5d#!@yHs}fm-8%SuKhmY=XJarDpG1(Vu5xWY< z#$kF0P)MOw-iMEn7!ajER+~nOdZ{g>u}0BGskT*dOwh_ltFWdq+EDaj-^o3Ij$sZ& zg+MbEA!kn zxQT5k5mLpL0KEcP6^8@83JCR2tP0EugSiR}vaAbzIHiOS02GEBF3vQHmX5HfHSs>l zVPW+lh|xk6)mrVcD$CL(N%a1FM(CKi!YstIq$^kNH46fFm)r*9j@!%-ay>{K2q_wI z6HucN%ln$=c}3+=nrrXsXEX&!UD)e6N6dq_pXJ42rSal=44MEve}hoT1TnI;D98lpSrJ zn-Yr^Obw+VDc3U9NU`_1n(vl7D^jP%L>d3)ttlcXysC}IBEZcwz>z&)9x>%OYgA1$7n5Ed_6?W!*c`;y zH1UsTwI?r`JEGdsI6cQM0aXYikPtTeD&N#Rak(bU*VNV$%L{EuK&=XzO#|c-MKg6G z6pN@#&U4E^CB_;MsA6I>ZyTc8sezVc_X+xhPWY`DzN#bDB7K+*iuc#$8MXV6ZW1IL7gzQyu!+#T*AZO@`~F4 ztJIrJnLTI&9N~TD+0&ut7L6bGUBKQSK|zq#!ABmXJ<`0nO%d46_Z_c1E_43o;VVg* z=iIQ5U>`HR1jNP_k}x^#Gelu`i|g&|RdSaXw##`p$~!|%kH__>XtszdNV)YKOo-(l z*LhObVvc$RRm=&Tw9rnBf4}>AGFF?yXx@ToBtp10Z?^jc%fwFTPUdJq7^ zVTCM9^2!RyyLwp;Su2MvI}{rZeNco#lEYv9)#3lae}MhX{$&47W}dt^Z{4acbXU!S zL2!3a)s>ki-<#v)N zVX6}&+p5~tU6O*4sdKIxX^2d;Au)kGh~DUULUs=h@#chl6Hh`sQ6bxdBm~EpG^CbR z+CvpUgC2aJUBvTqd;s~`?|P8Ak>KI8i@NE;*ctD}2mLBVP$6C{qaBIIA2mQ&R^#Ol z0UlJ#u z!u|?#v?nA`_%06z2*{Kn_m`qFwOFir4JYB)M?)XH1F0m?jGnTXW84aLwn?dzV(Tyu;J%7*E8xRLU=9 z3Xqe$DB=Q)%(DNuszPovQXJJV~SrkmI+L#A~;_dfEbRMhroIJ4)+803<*^s0Xp9MPJXV(h@0R6RJ5|wN)=o>0>7Q zG?gfw%tXJZ(iG{;T=I-?3i-KN%F-^mx}P@f)C1wGF=}T-dRYD%D`RJX^sw}b^e$WM z3*RftH(vY8vvHP7ACMwaK)!+*{Kpxw0`ioXb16?o4UbX+{@X?ZC)W$Hi4z(Sp_Jpwdzzxf}O3mp^Ao$`8GnxKxzM_ zYV#@}x85Ztr4({YO=J;o>xE4@!F*wVi~nXJ4@XB_qwv7A6gVf$QvkIBGm^00_Uf$$ zz=9J8yk8Ik`3!xI^xDws{!JBHR8iu&(;-LI?+A0FW0B}6nYlDGcBKx*$vN%}D5_oF z(Y=xj2P*nt7lZTZ2$M{NLO3Mcz^N)ks#%4Ou*noe{58FCbeu~w*`zU54`}p9W}c}5 zk$G}M_M^fuQzST0DRy~AWk$!#S`AWW*QAYt0wn{;K1Ea%@>m`|{mIwIe{sgceyM;z zB^=4qcFh4u`U;F!L9@507&Th%x+>${cEP(XwHCdn7W?wN$~K#En*(|9F@RzqkAcHB zJf*;@01Xo&f~My>Zj=H#%k@IIT&F=2b&|LVRh#3-sb3Eq5Ag6E-zP8ZwwuDK9`*|W z=1n2{8kV(yvPN*eAID*j-R%gQBrrJwB7U@K@%SN zK>YISq2ErthSPRqw8C>;pDK@afRdHqcAe_t`789NKOzMXaKsh(Ir`NCl4!&Cn}LJA zMSi=Hv>;!pCvm4;kDIOweWn8l(WKr^0=Eqq0=&M180h){HFE%M2~95jJb~^74R}F6az#d7GYgjmCRav~ zR$Cswjx&{Jp-QI2X>UsHDQxRElp%&a7_uge$<6wF_xflA!(7;?qDc|Vi3x^Ybyiwq z%aRxVt>HNzs^ z9VNiQf}!>anenr$!dexE=;T8{=Gst^o*a_JFIn*-NLjstV+Kp@k9R z!B`k)dljw{0m23ldKs*S6QR-;+Hl0F20)p#coy3>=Es3B;3ek-l|`)uD~9;6oj6_^ zMQz|_b)ser$o`<-!2umLauUQJsuJH5Mu?ldK1TLkTsgx0j+d7V*Zd*P4F4n%wqQuO zoniAzd87Po$^uo|!xj>45iXf&%0S#IOWu}NTCb{v?F9ZOMyzVd1RKd17TC)$VJRb3 z8O)^bi_RNKQ%%=>-OG@{bYJn?Q~?>DJ2x^C1`Iz;WtG;G`4n?ZWXx(x&ku+c-qNqr zqap2uvoy26((Id3&EMr1X1`B0R5oN!?O7gKIWzq0R3T}dJe6$k(c;&7{fZo~+~}(4 z<0V5YLvHWmyx=BWl$N5o^^4gQaBB9A?)algl7;ntcWzcnWTHQvol}n6ZqQ|8Tzz58 zA#cXE`0+gIFuhZ)cyC@dTHpBqopUlHXyPq1K>AN+Q|2h^ENYmOl_J08BlP`L>?K-5 zdIoNiXBzpyz?Nh1AUAC?uiAGd*^PsNZ{gpXtjL1agQw%#Wv6`c-u^n*yjuI-GvL~p z)1)>D&k%6!%=9w$i?{czPqt_}3$EQfgWJ^_)&8wBZHvV%Tua6kZwBU_XFMCu3~`rH z)|-*%_{^rX-zK7X<4PY-o_&yg1|s!u^52@Fkw#gDkKUns&1WA7S8Iw>y9; z4eM#paD6<(n?acRcq-%B*=Z-P8?_NBq0>z3z_tUpNQ{@Ln}+llEgH$LrVbiW{p6Sq zSJ4t4i8;T=a=Tl&T}(Yl%Pw&FVCwbJnFz^tA@V4nV)r?$_z9jToLcz1K4rS zkq-0WLzY5#v#m}$ZTo@ecA7EbT!m57YjyM@VFkQ&hss2-x#lW?EZ^r9dFhpBz1gJ* z9kvYFKIcKh%TSDZo#AAD>HUyL^)i=@hO$aYD@6N z@rh&(^bN42wViFeg}(8Lv9kx~=H!!Lh-SdKriR!Fu>+&8FlaO!za9C3;|GwW;tuhl z-)lIq&-Q({9)=xUAdP0b;Y7^{mR|ML^`Y`pmCu$hpDHk2sQI}}Jg)!d2|8z{gqpdt zYzB|=&z{)k^8lYq!1;1Cd~`A%K$dk_JB~SUFkN65Dlb)1eUouzQ~Awo+5G>?Bn&>y zacrj!l)RdcC|zN_kz$pm&>7Sl@IFtQDdK#zeBW#0Z#biO(oT@Jfd2~*gbo51Kxy4- z0B^0~xmhLR+bV0KZf88uClFE+u*9994+NDj*AT;Y7!s(+Cjp|7b_dpdc=jhOAgHmR zuq2k};TOYobASq+;y=$tvmzk$f(zhSLk`qCrx&aBJ*Xgfys*e6g%MADw2Ll8-I6S^q zy_`vXb>!1>3U{`zZ(8)vH2~6_oIo~oMPemrFCKW>L_HPCfZS%-b4Z6ZPy$|Xg592Q z(g73&;C3K(?IE!21Rh5WZ(!DP(~@hOE6#*;z3xy5}eV&Az)_cUxvA;N)Ig(&{O8= z+0?)tg!zFskSR?c0W^e5m#Q4!#eid^`Z9FyhG^qPX2niHbHQ|vgb;Dudjz12JdmRT zCc#L=5>F={4o(mSod8vOcvcB7D>C8DkI|)3_2Q;D=j=OJfi@a{QNeW(d7(H^Ku%FF z2>?%HjgEm!f~AoT24exT!Y=|LCx)?&ASV%8}>E)OMP38IKrU<>uCHQ#$M`ygPj7wmdXLSjC`m~K_xbwbZ z<9Jq^%hj#JGOLfz!1AxGM&6nWe)685&7rT#@#x<@ac4%6O*iIf2A}>HPk1l*ggzIy z{z`7SVvw{P5X4PBoNJpdVCKsf=dTN-^Ou0@HIm4K2T>5X2+`ow8-d$`kx!VoN$9|7 zI6$P`n4(EGV_bc82cOU*1K7HmcEYfo)gr#Fv?}WPSvmHy@EMBHs}(r*{OA|DcRnh$ znLPX6o$EEHz*EYqpZ)PlxOQ2g{1?OUlyhGV=T5I8@dT*;UO0Emr&D-{eT7(eYW*sB z_t5iFi10hDIyq1#zU#IkuLXe`OemXm-<=YKyqf3Dsa1Rm@J0ScF~jNH`#(PS9Y)8} zGEeRjw)1Ht&vXZV)kgB4K6z_Vu!U-yF@y6PgN0xA^5;Fh;3seW-#-uk@1M}w%A(H{ z*vlDQ{J(tC`@!q(Tx|RcF_g)*wEK|P6{udQJXaEfCYRI9z$Gh{9VUiz--T6v3#y=& z-|!kuCyJUu1n+Rz-ut-2;v_-b?Z5-LPXgfAu<6BN5;RiJZ^Mk;3!8omvGy{`;@i^6 z8w@&E_I)72kAZ)DbU5e@j=O^|rUTFX{5s{Ze#tr3*!19+$ACg!v+~daitI}WBm=p; zKniB5ys#oDgvbL9F)-|o0SF$g^JsF*)aUEBy9i3th47y;J%&QS_ijE;!wzg7>0EQ7Fh63&2E5QuxLx@?$LXf1X{F=yhkP!4Yz@&-Tq%Xc| zgJB6rkixzZveJEsQUT;mB2S?z6>cD?cRYCC+J*}8w-m4$=EtWfD-3{vwCS`G1k&{) z_=v>N#KbN<9b5pq)%|uIjvKrS_){8ZVjK#imRTG8>De|m&&HD0cF86Dv|)2kgRjDf zoe|z)*=wteJ^AR)-jb`C+F|p5V0(huEXh2Z#Ei z#Shs+Fc6S93{FsH0j4}D53vLVw=}T%UUXnJP=oWm% zs&Z%n)(J>a!H$8#B`nxW+ykwmC)GP~O(#?d!gXA_cl#!${8E*eGK$VHvM^Ei2r#rq z(Ibw9Md)W2*NXEgEd=@lux)D65v>G%W+$+oKdatUGlJoDXw({E`F^Mxy|*$ zOcf^SE$~V5Dk+;vy_`<@a=QHG4QdvhC?q5WVtFle+rcSRXC?Cj`G^0QdkH$q73*gq-3NzYxW?0}eioW5;W` ziRUE{3DuKU(+m7o2<=BZ*7L(oPaMVeW^qQpC&S~~IzjvQ@r1lPGly+@K33kI%DFQF zZlU%o{)Qs?-c&yAB)IwcWK41&*te<7)||}334D=!{j|&O^*^3XZx{GFED4#@>ra8K zF?hgBK@auunU0gw9T<6iJSy8YyvM)3m9O@~+%ym5g)U6qVmx1Jf$~&+7guI6OW8rF zip~6B*S6Ubg4gJfsdWc*XTo`{j?m_c+MARDJkvvQYkN3}BPViI;v0jJ00;(7Fk<5X z>!J}xtR;P!b|(rsUJar~#+vyKLWVy?<~AT~>NQ}hFfTW=@iP*5jQ-A<_R?cqm!%W1 zuIFXO^?c7<4d<!`lUR85DzJ+UZ^~eNVv>ZaW#e9W+pCOsjL*0h^tvqCDc{T zBuu$JIu5x$`mBGrZd*bHq1vX2`Ps-YqgNb)K6X&#RMz})?ddN{_p5x|kR95k&GIr`J)EsRC>)fv4%dy>|i zU^CPP;?w(6VjHq8zO)6-`*guieo)NjI`%}^vcV7-?)?#(*|FW4*9^RfLYM-~GzQ*z z&<>JTrw-4sum#_+G;O*`+-?AnE(Nq5loAfUwxTAK-X4^h%(nd1AkHl~GCCX2*clxt zS2D{*_~m>hGnk$K=84-8T5-c8d@dcxH)0B{&9erQnf8NzaHUJV4IgJLQ`L^0_(qJB& zX)lv9^+q#Bdw@>%2|u}G-GuCXZ=5^`hOoo{bL8UZMjc{mNYd{j&^5g5#P0+ef#37C z8f%%|LI%t5UcRJtbp$##)DlEz+A`$DTR(E&LGu1f|f!Ucqj)%(xL2JcCJ`LB_d5VMty|%&g3;Lb}_6gAZmeKeA97SDexpC z%yKIZ5xoKMoG!qcn|jHx?p8vp-K1u4_awBK_{qL`Z_vMWd@|P3HN`|xe#FTd1t~Lk znw6K>V6r&NOcZGuHnu={N|?i|`aeJ8=BDvo%33es44$^BIq zUbr;t!yH5@8tXGaW03!GEm=l0J)7B&6e%#z9wc`VTfmO5*>1L6z!n3jAi}2$JQ3Fe zU*Uqia2+5TJ8rytU!i2}UH1{G#>F3M!!9X$GUVe>gaXbIi>NqDlg- zwr^d9T?Kxz;|aoz(l688!0)fnH)XI-HQ-hWtFb>g-oCkBm{FDgJ@{-X#S!#1>@Yuu zxrCU1YXl3?h;Q!y`#Sv9M{tKPFC*T?lnyxGKV;!ge9KQvG-YL6OxP433EJA;s3rIxhDo z$AHDCfm?&ofr!c4dsIb#`tcQO_x`;PVf6r~dsw$J*zTp9_iuc7iJ=D2j{$Q|bKLD) zO#tG=K?pz`0EINYW*Br3*8&y{odixi844Hgn3t8x=GN2>6I1dXGx?s@;b?~JjE074 z%$K(fOD^-LO*{4Q`f7~Y8ADtxe~pzfLKpI(d zf;P(&Ip3^Y22*pp7=ua(OPpp=oir7z%4t|14h9E^F22=|_J3B4fc>zA z2&YX%?|>b8tJQ#fC2b^)j1}Nll@4ho$k?02?eHw>U{tv@dlwzy4EmGT>Z+_Jvf(aS zbWbaP;!HNC=1Z*QAC(*T}wkn6K};5B#+O;Wg2 zZXg`YI2qV6AD!Pe%5YWc^Cu+_Xr{DY=(;NM-VI?VNr~3hPEPPH+yX91v%yO$b9-iH zA=_6*h$7aCc;9kyzK067lZ`lndy|_4P{1@ox6^?gQ$6YgO##FTC{3Pkt?E?o%iCzJ zZCW&be>!PO8#cfDpAcNpD!WDck=zl&z_RldQpyYQN7#!t-} zuJ+?&Rok>sn_J!~zax*(L^0zujO$@<5UxW?jtEEV_itUlxqZt%W)_eML8%=M$*qng zxrRr* z;nR2!L}-rw)!HCszQwJvKA zeTeX7Kq-jYC;gLdzmJ?72xv4M-*_}m6m9D=4`eMb@Q()Mka?wA-5L|vFq~!JkwEyl zF^Tla@sTTn^B_Dx!B&ZvHh2|<3fvV1$;S`Y6hrd1f%oKXOsxntr(&9rpCmFM6rJ#} zga;w13XTWy1U@7fra!PQ<`@E61GaEwxM;2G6xm_^T`wGH3U+t)w*L6D^}FQ#1#QD4 zuw+wnZCw^HyBnXa1NT>=B-4t89)Mg&;UPpJ^GcebTqQ~xqEqrsQ9qv2ibTfT+xYCW z4f1uJ-6*+2ftk{SJ_LoVc!)r&qw=;+w^90EQgPCp2m$~HA(u|Qt!h9ZiMlCVe)Qs! z(Pw)8GK45A|dTpK${VKT34Gkq)j zrqZruOPm&_#67{5=nwjjj>XY|y4BjI;ke$XeV}6{(jUUF7ueDdEP@MH@Xaadf{=faLQL-t*69T?TBq~1Mz%&BLe0S#)YOrHKjqyq0_x&%&%)7nK-*({&4&C8 znB6+qBb{?JB&99U<77g$i${z;S8JLUZKG>5o&`Y&4QdMjJfROwDvY+=1}wH54-sMz zF1Mb6K);JB4P5jGC23Rdjsk&wvZi7J++B6R6uR>xle|ius(^`U&Y^cE#%r<13!PkLelN_e zd|m5a?JMSn$+<52ipfuwS|vPBZ_9^FK1be-Nw29>zO42wGfTA~8#T|>YBAy7DV>{2 z=D}NaTsc19jg6*{YYx#<*vaMjC`LCw1yEP0g<>DS{`;8`o zz60)|?xb0DgxwxJY7}=w zEbK;(tcqok`^DMdszy~}yR+CMBMK#BZ3rI+7-u2C2e_e2c-OF3)94a27%wP-d{tU* z*o+!37>oc&e@O?n-)_)xLqwRU!?&t2jaB>IJYBAU^m9|A#B2TUnfK?yk#sz;yaN-={WgSmu(|KsmXS_lfHDUJvR+Kz>pi5{d*?(M7HJ{hal4X89 z%LF#ct+iUsAWIeBO0!TU`nu)g*xBRv&@U`We~_7cG3ghFi(H(LJ~~IcC5V zmE)*fvPjSO-rzy4mwW+?F^$}%A=)S%Cb|7M7{=90L^&8=S_6_-Fou4xFBiYfZzp^Jns5ih2L$o4YDLo78iA{n7xDhzh6JAt>PtGzl?=R4toUG&DbqPC091#7f zP{_oecnO{^+bL<>x{On(_i3R=t3VZ7^~1WXm)UPK?%gv7Y|kj`8;Gaz9M5XHClQ|y zjt0C$K(t!VbSe>e4n8519OPOEB$wN4J ziU^Ym{ZquoETMoQ0Ziv{w-1m{C^#hG88mG$C8cZ02qd{?$yc*fc0sqmDza**GXgCg zK$})5@Ina^Jx=(Fe-^`~#=>eflX^l%J5CGHJp6XE-f}~~8O8Nh2LWF^EkLfS5^vL` z2Zb79V)plj(OpCgwMl->vnMV^7MR=nckH{}@PelD4y`L{@DOIPVqw(*i3GK=#}RkS z%IB*tkhZr2eLTKFO*7Ne@#EB8NA@^A@Gx>^INpC+0@!zznqfaMy~UKM$ghk*F!ZtG7zditxpr{sxN za#lU9y;4~%Uv$%yGRv3Xd=S*>>qV^=o~`dG-e~5u>eY417k(_x78{&?Ce34OUO$0n z-sRRKEXc2o56PU<)3H_?T&N0orp3ERPZxWW0=EsbH2s@Z@x7 z3p*S#A0Vp=Fc$cshOa{~J+^X-Rqm|dr^Wy-7a5gxiD02f$}eq9sLx3*D2)!^%{_SD z#6q=z&>F?fI&?Oz4#G)?UdKyYLD+Tydz2(WqNn@+P($!4-AMXU#si**P;fB$gy50! zycZ9DosRL<`?-(;Mv-Zn7bqDz?GV;HCz}N~!OC)q5J2e4HlbfQ;-v2x9Y7MH#~Y>s zW>4T96xlb(poA%y{ESH7+TlbYV##Wz!h7K90*((u)`%#A0LAN7Odu3q~kHQW+LbWFnBd4j|(9UR15Od|0%LR{s*Co5%H)XSHv zC~4(w$}-Tq&s>qR9+|_&Zq6{2%;`4rZN;$8!%LehokQ~DF#;-ZKJ#P}B)4|%Cn=|w zjL#M$MVCzvK{#>Qk~UDXT||E>X~TB#DAcEU$s}US47&RGEE(aQUYu`=`7RUP#JSH6 zEos2+aPUwMW=Z={8X zHzPB$MkX>$O z7uayo{&@d3J26Vlg}#|@^)vOES@o^{7hPbXP|Oq_Ym;fZl`%~wpK|MqT$w_PD9PRj zs`bu9lQlLwM4oY~~@ASTg=p*iZeVOo<65qcvVb#u?*`>&G~m%d*~wN%n1w^R|rE#62=Mo|5_5oAUD59qW7M2gdYe`LKMl%c#&tDL@1< z^Yk&JI?Q}YD2EOCTGTN%<|>=o$~(V@|v)Og~?Hav>gl~ zQ|Z~)dw3pjYfs6V*H_NZYRrKbW zLn-#1q(>qI&SA16A4(fEoho$W`dY{yg683jx5bSKMcQJb=JBqRlXwmVNH@CKscp^_ zDDbVtRhVljmjOpj3?HlmeF2y^MLs7zv2xH9=H%xyZbdj4xn}ch$Y;9?dxXA5keyA= zIBI5R!~N`Nl$5#I+y*z!T$%aC>>D6a$5Hvz%yqlAF%*wN$yW7o8l+iKfVX9kOJKI=E+^wl4y*G|!b98g3dcHRa zrRxO~nX1D)$xJ40YsU~VnaZTCon3gxG2P;9Wb|1c;!&p~p?!WuV2+HhHLQY=X9dkitVlH!HjR&>a7WkxUDWti&B#*!q znODC|yBB17&O(Lx2ZTAY;%#AXZtgK@&I}yozyWb@fqH7&Mt7V>ZmKq-vvUFaO#o z%$cOIo#@SKvc!rA((xQ2t}j2mCi|+g3YS0q1k|gxbi`y{W5&$oCXFO`e9Ubj(o#J( z=7b?pm=bVNbL5aJEdeDwI*AiuSz=kt!A{(o)y(R3 zMiCOwjLJN#fh@lw@FVqUE=w&qr9-JW+vXXTal*t=V_uJswFq_UeU;+>SyPX=nOf^Sacj+I-t&XJk6R zR@5Yz<7H+s_~{w6_H&X0labN1GIeEHZ+7=SQcWo;&8*Bnjipf}lCOn4%#Trw}p(y@I~>>SBfWge}5dLUq`LvK6L$zzbo1^|5H| zcgMZtoHRZL=t@aD%-e*=&lLIFMt@5NwN{LT;(WR%eQt1 zJx(_#UsCwxN0UTrE6S?a4*HO&@NH>crjo=dHSCM1^s0&Go|WZE`ad+Q(dHSyJCkt} z>|54PwZkHej{ZfFGJRVvAY>PR*TKUp#F;kOqNM+48o-s>sv_(|GiI zUwiAOzXUhrg*zj%F0uI}cvdxe4nH)Pn;4EqFhH!^T68!y1oMC3b``u(VWhQ)C&}ZP z0hZ68Fh1m@8PrA9tDYVJ@ecA)A_cbIiHQ z^H4vuSb?+7^-$zYvp$Lcwy0xyueb~E&$cVnc~x*QSb{Nn7(_P~#R}_n;lTmJLAos! z#1}A{c-GlxV$B-#0UnkroFXzd1hx}32S$?0XwoKob22Z4{iL!vBr8SA+a14aSzD>~ zXfUy22^t1J378-Dfq?{csc|(N;`stb!-@`J)SkfaVhmHqM;3)*7O+%<$=E^!w?6XN zmh~qfr0RgJFEk@npe2BFfy@@D2j~jvdN-_eI5-x-N&?G3+cTnj!WOd3`ND0+ZpR72 zG-(C!z-V+F*GmF8VB=v?~Mc-Dl^deQaX{t=+Z)6Uptv@T`d2y303wV0PFWbRE zX2T>NSmGCiy3MRfgtTZE^FFOdc!_FPNm?Qy$cP_z1H3o6zTD5_VP^WIsSi#*9a6Zs zOnEi+B$B-_`drs5t^5lwf^RMBDlP=?Tgg>i90hR+(~mPQ;JfB*Jl+Ld ztc*wO>{l;b<_>c&Z8|Lp4KB*Q&o5;AXV;yU;uJtgFAJzifd1;IC;!))z?!*(Lio zt;uRl$IZa-5^`y6(uZ6SsDW_}YIt%=zzwj@V_z7u)^#hQdrh(e5S$WFChls5ok)6o zh%6*FXkZZ$iKHsYJo^KKSBaApl@WBKpb0dDJ8Jm=8A0$Gi&tP*1!>th<>ATfN(ifq z6buJg7HSb#h#Gl4#8wOoV*;+6L{R#XqbRw8u$$-!jbV)D5w{Qk5lMC$CA(3Mp9;X1 zfKM5~os%T?Nv_l6d75>JKq`r^5-uCb!>BhI!HHCHRf0<*zN>be09W(Tbkp*b;sF}7 z4(@6lwZRcJ05s=A^oQC>02693fTA>bfJ(t?3GN6T0^f!S5^NP3cOye+6(osYDai!5A zmID1uC&?umH)>cOd6s5YFrnZf2|81-tofnKPwJk+FC|c^GQxUNh-x41%Y)&Oq&~!i zPz2o`@X<(70f^PZZggl7j|B5(G1VA$i4|-MOj}F=8ZAaBK^M2HgJs<)brmLIsSW<9BUZd4EbG}i3svudM$ zTZjPfsKMji`=;?Lqik`i4A{$M;2oUiP(7Ykxnx*gohk3^AY=OKq}#W*RGA-_Rtwp& z+E6N6p>^JQddSWgmhMo| zT-vQfun($jd^S7X%97%^}8YYh892Z`cUhKPAfuZTCw@!_b5x= zs&_`%uGnQ-7WaZYCH3FmQq*TV5T6#B;q{Ew!Sk_IL!1;(5j}I%hBHbE=i#HiLMHTx zisaahnj56rSLc+`Ehh7X|4-&i99qVpw~n)ToUBJdD857Qlmn)z`EDc7yx{UqJh2+H zK+3!dXS{L#$&=Y^9@X;!s!`ts&%hU+d^3Hc1Sh7N&-)BwQ1C9w&$oEgNP?Iz4-3bO zW3TNb9k1^DZrViPWUmvrjiiI0;zk_DF5XLVyWVamZdz};&6d;b#A)02gLbFoXoFi- z%L*!>k<_my|8jH%kt+}p8vl5JIumgP*DMMwxJC&+guBTIE-m0bp_%K36S9&~t-Ap< z)`JcD2V8UnwH&y28%*7rb&OvCh0#rh*@J1#g3;emym5>O3^lxaVjB#tqV&p#l8Ch_ zsi>d%4DzjFxZOoZfWq-0g$+$#IW+6_K{IU1;5%i$Xwt6rBZR5eDpCouO!IKPp zCiv@&lNPF5avf64DiV)#HC4-NLIeR3O1Vd$5=CFWqByJs@v&%HS8)4iT$R+)vI-e} z0B>Xfb%@q%p^u1$CHjaL$ofYgZ*Be(y}o{bfBk(3ha=cwst#yzb4DUB zy(UB-`9xD_{Ymwr<`wse3zr_b7gZDq*;Z;2>ens3EIE1#U`@ ziQYaySHjZfal^cSb}e0^-9W@Rp}*E;BR;2z0r6{BY)k&4-#tjF;vF>_*CM>Mt@WMD z&Xsi$p?h+IRR%o-Nem$L$7>35f-YL}*+nv~wNeB!84N$WxJK;}lT)QRlN*K#Ve#Ri zc5DSvl$_AdkE{nI6Tz#13g92S*oFg8riI(7zXyOS#Am7AN3DZn7)K#+3Cv_E5h?_{ zkH?7fP%?ya0CkV>gbtJHsE4LfsPj~Wuz^|x&BU@HZ3W)noI1k88zYKT3Q9gXK^;MV zYI$Ndp>pg-=qoyk-5e&=DiK!$f$M<5oTOe5k%`3gc(f&`e-URuN8#xxYxQSzuJ z9-s)lA#62@bFl{Wh$9(tL&`2_*5p}G>@_43s2@jW5)5f`L7s7dmnsGwG4r5hkqQ-9 z!yZ8I(+eJ9j%mEJ`N2TqXr?j77C@+)lJzTloLjz@Y!wcbel3V&lozeYHhs0MS+ty~ zUU9^etbyb>gi!Fvwsx=tED_xmp-X73V~|Ms~x*Woy5=$9_NmUN;4WvrMeAQ=N>8!T%9DkmKUwA*tt)2D$DYZx;`V=Jb}EuA7*m0c%Rs9xObd!b+q&Y>2J02ucwS!7+*Oa5dmNzK$XF#DsRmflWG72^A+h zCijA9suEPEGscdFNrSJZ-r9`4f`w2rJV5N7I* zJdli^MecMku-<>4ZqCbD;ug*&{O<~=QThkCzVVg*I~-eAYoG=!d-cm5Tb+|gax6#v zivCW9ePl;Op)PI<63~g`_&7Mi3c+qlf{~D}j(~$tOJ{(Q$~c}ww4XPHaR;u66*Ynb z1Hex}R1RBlka1vW`C%^!2w`82H$xg?YpU2qA;p-ci^d9s zXqfgbrc~sw#?b4MTz*&rOek+OIz7s`JMluZQgQkpv^E6vWRJ7kGf+-Ov z2!esZmt)ckhO|@*-2xdb6cUPqKc;OZqBq>x-9%-OfJbx>z|arf7a~ra34dU1z)HYt z81r}g_JR{=?d{#N@Ww->QsOOV2@ISJuQii_Lpkpnlq|IAa@QW1du-^Whc^!fq(M9Y z^d2KHa#zHH5Z5W#nF!ofQX@tItbZ`XA5uADGM%z}nALtfsv%EA79Nk$(SSUr1)oQT z6e37Po|w47Fn%!^Rg{y(;ev%Q=+mmdge!75!6oqscL_p%iDDL5Drhs%x$0;f;}6+p znjP9Mt1ck}^TQOw62%-Y#5X z%r)~v{JYcX@-Z?egXBy&1FJZGSfE5(foxaFl3m-XPu;1U3Ayw6-kn8kllBfZKvmzE znGqc0$?hnb!~^+u0p8Ny7^f^tD1JJtq&$Q7#l@g%nc26z1OI!o2+Hw-7dimrwV4sm z?>UqeVv~`br9mP`D&3cJy zMOLtU<;p4>&f|J6<;v@Lya1IT#v2KI{BT4p9nTyppa6EfaWbRu@2{Wdm$({|&am3pr0r+ys* zlH!V7Wlc2Nx3W&jZ;P9)y>u&vZFX$^@))?wMKXoII|>o;Q@~Vg(e$iYjI@~hX+N7V z{i`JO?D{_O-&0mvQlJjTnt~CFU`pf(E7cTuFK<-kdtKFTrPc@6tYTBFE`I+{@V^>l zDI{+J8~>RFu}W}4(vQnsN(ktm@CyB#%0E&o1pTZE1stjBP=D!e%&H_sM!4HiMcV@N z&^o3z<|;kTS9+YU@^VQ}pz@j;Sk#T5bAxM*uTUkqU-Io7V=%_W!5GV_NvNUM*)|GK zZ!w~|)?!pdd-1-MV|5u)>?_o2V*<5Cgr2aOnH@U>-X1X+frxw&1DW%KQH$5ToM#f8d44G*O0%D7NbWwuS_r85pGCG6U;Cg zYgK49>6tjPE<;8#h`OYCx?*kYV_a?n_Y{5`aB!d=L99$-k`1v0@O}(>HxtOxff5SM z!Dxe>9E`V{i@?uyQU-rVvL z#_7&<25H8nmg#izJL2V$TZYqFo>g_dB&AN9Ldc?id;Y`2D2Flgt*Q3$b@GqSc1@Qp zh2gIGsoKNd$`W}BT^`XKLk}@*jh!1KD=PNirM(2`Cp#6lcw-8D4E$APlUgC!n?vl zey+E|4@<@aVUbKrWx5yXCBS!4_G&n-xLGP&G|*8_JyEi1#Y>`5gK3tR*4th??$EnA zbwk8<3{%H*!Z7yyGzjW`1Mk_e(+UF5M|^F!jYoy+Cdi7HZdRT6_WP-mX65(vrugMH zsVnqk5j#|5h)bAZgAp!p3>W@`!K6YDB7H$1r5^^ln#c-(Sk;<%T}Y0VG+1T)=VDx9 z$$HRCqvAQcp z+~`3CA%lUC4l^1d9tiroVOKvTofY(2uq=St$z&|dXQT~7Mph~cp$(Zo* zAzg-QnsTz)DCuU-KX(LfA9gltFs2YnS)o;#ehE}bMGi}cILGjo^SgLvcUp~R>NuS` z9@otn0o78!4S|y%1+7T)yL^;LDgP9^I_0{M?JO?&FP3*$>XBX2F;K!IJ#FpReQf{b z6TDu_c+#|-Ctdbl$u{;v-@d7G?d0~?$kUN zyhzma(q;f7fYfWj-PWzwqX>*g$MM_XNP^ghS8mXXLxiM;L1|o%l1|g9d+^j{Uj4H& zr&CnXup1ENyKUevgrOI;6Bwj7d5Nyx88sktt6J9KY(9PXsy^3y;WgsIU?xOP z)5_hIPYTc{cAt?8vPVK`88a)>s8s%Bx&kpAPK~_VV;mR_$n0ErleX(=90q~kgwurA z?l^U*%MyHR#A%G37duV_MMN6blLov#Qmq0}b*-=>8fop=@uqa_Xt>r+FFCN_UeO;; z*l$B98*KHPbro^T4s6(^P>u~)oZD%a!|yGwmf*2mV`=XJ#Fmqgd_2}q4xwWCEwG?w zO`HmS-q*i7Pz0D!JRX0zoD6|d>J!q zwkb64lVyfABHnH_yggb7!R!HDF73n=(YDd>I;o$gb=M6dF9_Wb#;;++g}Da3KbmRW ziW~I4i(8F`o7Ew{t*|0uH~*ZgyTRVGkYM$@u;jko9l_od#_I5#ZNa6sQ8(DHHS2mG zK35N{yYL%A#{SVjky@P3dfBW>l`jDys+TZgaN!^nA~-~7W-OZv?v?s{U9ll>72-H2 z%;fw(7q{WeVIz!3m<+**!TUEC4F%qhkXx2y*(Eg=a?2vLU6YRKl_elTzJIg>S=$sGUFGnx?ZoIiVEos+Z6*42_uf#tJJPn#%a{Ry7v zb26XHpWsuN&!tzGZOete@kw(g%|2oMhKP|qImV84Ypqr@P?gRzcwVSoxlH^RJ}2|I z^pP%F`|^7tt7tXMV@7{j=i~~Q$LG6HeFCYD=TUHsFH~OTzx7p@WqhWRPuCeMJBk!~ z+p?Wztr7Z>pLh^Nx9Sj6M{eC|;UdPx&ye4O0owKXYSGRVp`3?-0IyA_>aoWAZ1(CzwOZGp-&7Byp10+&kIY)EgkRa74Wukuj7%D)p&OkQf7 zAd&C3c5NErBtN{B?{k?f2^wv)IG@HZao+2|WKgvAZ`)wn)o)eKr=!bA2tsNAO%^wc zkI+9ozYD74RwL|$?HE6YK;K7& z04HlZow(EVJ9Ruzy%4gPIA#6uY2wH^7N5Hc;Gm? z35PKU9c(474gjXZC<&cb+wEX<03+RjrUbZnUfYlTjNe>v9&|Qd8UMqRaUhxu7~kA8 z*vGS)s4sU16u4g=&~vGEpFJMyn-m0}tvpwv$Ca7PG(E4Cmq7xUjjrv~+Hn+T3F2EZ zm0CT;svSWRHyQ<9>#F+Vz^oyIt-H2Xy#*H#KzISGOu$85P3Z5F?nX2?92^gN1N-0+ za{Y4fB^WKhbzeOid}$ByZ3B=i!$BVsGy1)VE7g2|S+Z z7ODkZ`)=^1uC~x?N(THvE-p%;Pxs*omGQ^#6e<^qbH`+lB;b0?3sbd6D5>1=!f=Z; zlXRi&GDp61h33f&X7>s$*r)Z)Ehu#TQ^{GBSuYxTmWEfbOiLW zQFRAmHUNaGKUpU#U|jLLY>;k+M5~Ji{l4Vn0C{#OKvD69pJMQV27;}u@Rnff;E77mUfF1rTfS1R}OmmBE16)^!!oy(CuY^d1BTJ(fDAA|m<+(t0w7ofUwHtvtIk`4&kPOU z2iY&-DBb|NTJ{5CmeK!h$V%=>xuJby@8*U=EJkD*G#t@KD0EFq^NKJoaCaFz=x6*b zx2^{Ic+yIeQ}ICB?bq3z4u$vp(_&JeQRGJm#7l!|v9@B8l+l5ap(Lj04Cw_N$r%p3-% z{B|K*QKrk!k2eeXZU|Ig)tny`6Lo8B4aRnHP99T^{6-<>QpR)Z+G3g$lFI5MMGS!Shk*E9}ssP@lb+_XOFi7#k zrkl7?=!G$b5QMJJk6NvwW@05((1=dGkF8$>(I7;a)1co=9wC}3{kbucf7;yv>m??{j_^9A>XWl zV#F?dARg4}nZZv{ywt=a7B~q(ToZr=@c9z82rPuEU_SB{sVeA2W7MLoRjOI|fhag3 zD;d&(;Eg1d6nMQ;1WNn@9#3>ckpmRCdj89}5_rJ^h5^qGinC6yUNUGwG$mNG2(y;$ z>zh>=8`HalBA{0Di&w<5AV_r)F$J$=vZBV@>!=T|lwM#WR3<>fKMn!TJ^{uC)Jk~3 z!uB{Bi_h&KvUc`FxldtwgK#TsG*f(YwL+jG*5R9m_3AXzw9#s%%|<7T5a%~^{4CNX z@6ne~2h|S?mZ=HOw$~YfWAmf1q}^7+&^&G2Lg&<1W#saDNf+{!b zaoB1&4H)o5K@$7TFb>)b9Kp4$rVi@o6i4)0@+EMV=%1r*Z~TZN7IG^JpTgpHguosp z_87S_DU^B@(pLls>vvBOxg=v{p8KR+HvsJc5JtxkhYMLc48}&prqK0|uodbrkR-cDe_X(8;oS+bBa(-lu6D`xrj?y)4}J+ zs<@ksQ(;y-Orv%D&+W8*d;AcQhi>iPw(j5FwCI;>LgH=RfJ%aphyltVL$FXU9wG8l zPVBBF-&&Z7irEvZAaZ9>v=(;fFsdZR6}Ta#2PqeS8gV2Sfm zbO6$d2yjB*k+}UpB4?5xq(AeH9HVw|s?k-h%psP*(q-THP7y zL5l@Djd(tY1%wqn5vl_UkC#&pgab5uNJ=3@9g>QIDk};^r$j46WR+Z{q8W%x77e>X zp!>e{Av6;A6q`xQlh;FjD0%)>X%U0zeIP1N5)nBouZ^hHEZeq4#%?MiGhNPAPjR&9 zKV!5ForQJn0}IP{jjLCGi*iYCgbGh1aMdg?{v;q{;K6mVF-ZeMTT!i3(cJ`kEok+4 z1}#xWfW%R<-WjA*QSH%~!$lsSAdi5!CVXfkSeF8gEyimJaBK}&#y8qpZp-+JFXjfH zPqbHazu9*Ipuq`Ru#TC6r4Tk##7X*-FPXo8zWbK8)Uqy}67KeC>lVDQzcOR@Up+zV ztxQ<_N%l5a=GxZ#Zm}Iy0J5oW)~Zlh@`AuHDK)#-ueWgucfD;4xLBO5_OD-mkF#`*C~ddj+6II=-zSQ zsFAVSjvG5^g6Ik!pqX1Cxr(-<4xXefz_s~-W_w;#C0>!`ZEhD2@q2~eZQ*;D)5*ik zV5lFC_CmR*901oAEA}b8dK~>?{%*0*Ekwa2V;ye#yR$M()jvh5Xw7o5NQyJqw}e%@ z7SvZNKbn~}Z~stvvzSd-9dOg%E~Y9;HmB=P-tR}|$+t8kXT6K2kBF~#)vGmozHZvt zE@Jjvm?^bFc#___vscJacG~M@HRH?a%+k43*a`0?ii+SMdRxuOBxH-RQ!^Sq^JgBP zzjdblv$*|p+2F71A7`*LcgbC_#_>)Lz#&30I)=naNzPQklmz zbFT6{RK+dM!k>5Y(4OTmo@>^fWC)O^vGqv+Ax(E+-AAZ$m@r>G{9?EPBoDe%nGH#A z24Gk2Cf(mc33)Zf9~;MAGWmt^E#Y_~hVgCycQ-%_AuMwr4s$2;CxjKpLAPgj$H;IU zk~)f1d^Z?FGiqH8MtBI|Th5=3o3B3Kox{qQ1Fs6aBmBAGFeXwdUi)zfLvI8qRMLrO z+PmU$LfTVEm;hJ;u0n`cAZ-#j1u*qRPoX275Kj~Ih`CJq2au*onpGu8vMmK>Al1!l zBCs{ZH-;KG9>AXrzFVMuS%D!a*o8MU^4ZVan#Xh3Vg4t7NGv54kmO4;VTD>2JL+Z2@=FfQof0($`EiOE1DAwVFNl0 z5CvHjVJ=G|GYD+0U4Jvn;A&1_DKH5_&k)*Df< zACV$|jJ5%x0<8gtZ4e@*)TnRHJ^tDkqaBNv$5mk@8rt~e??9)DBgN_qA9+SFLD>y5)-V@(o(z0keTnw zEBR93>&gotOerV4mMRe*lKbc>^n3+@Bk)Nxd%_m!&y;CUX=kwk9lyftD8qwUGpE3%@obkx% z9kwcVUmY7|;w--2zn)b;aqNC!rql}INdmiH$dH#z>g9CG7sln8Z8&inyI({ekQFW& zUiUv+G4EbBlF)dP;CI=Kds$UHr)Or|zeAEX0Nam#*8^@{AKVbnJ4j!syn_F+jVRYu zR>aK7Br26(Pm!nBn+J)aQ}Yo|Bt!&k#1ZqIqyx+2w9|4zzwUXk9!%ogt<7Qi^LJ{k0m24AT3OU94Z z)xOAMKeE3Nxi-X0U^w9?#bajYMz|$!0$Ec{*0Vk}^cI&@pKT!&1KzCQ0TI+>0K5Xp zhZ4hwtBY2~-bZ&y>^m<=#kR-r_-n2)C6G97LR+6|_Rot%HRREwV zivt9ejY%mktX1i?U_q!V>cLl3OHw=GUZ<$SDD;+nV6WkQHXfhA@MK=hT)ZuQ*P|E4 z?|LvN5XQ8U`4>KW{DhJ1Q8;QC4Ln`AGE0RQfb4ZFo^%KDnbfvjOPH5{=osj3^!hj; zPJ3)2Y0c^&o$Mw$cC#wRghq6OY+-?0`#A<98F%rhAs12=ybK8B<>=$x@V~vUcHz)6^6|+-}C#{A4;4(_=U}=7-;!&bkHL1hsNY8b(4_KoPTl z*^C@R2-Fpg?@iYLgklH)SW91$VHYMune#?T8}~7(ioPE3GrAU>6c6U*ot!0V>Zgr7 z(;f6x8_9oavO|kHAg*#PmZ|@L0~U34%bz#sf}by|eD?xa681?^4^OFjjZWIgfq#I5 z@X(!@kXHSMhrnR%4q)jTh_MEPBG_^|?Z`{x$d4OID@lOt=64VzwaKcg+5Gb-^3H`h z9JonB$ZG-~u2u7Z>y$Qt_}@n8Bqxp|geObdh`0(&F4sXs0EAuYfJ;hXdfM{SHURa= zQ5^Bg>VC)3o@b|V=V1tcYZCqS4}@Mh8rOs&m}rSd(T;2A7vl7IjR+8WVVXjn*nr7_ zAE0?KHV8Uy!$B~#uz~0U4cN2-q|ZYz*rXGB@TKrutWKVTjkk0lS~-<_BZQ&{q*U6C zFs!Z!+?;q&A9}9m!34~&w?e|9$FwzrR^5rhh5*vVuL;2RTt9}g)IsPTgofOc6SV{<+*G9Zv zH^$0wTV5xrW1^i_&~lqW8~+~%h^E&eHUqzq%^WZ4CoR<7e|$oZJ#7Lq&8*LOJ)SW< z<_b^Kf+Y^W63=DK@@lTVVA4;1r#1}nR2M2Q;eT8Wf0mRmGcturQ~6n*<{Fe=8Lc(z z7Xvs&hfsm z8Q!#jEZYN=3%M6mp>DzJ0P&)Sc+Ao>Odt|bkzM`FwPghY>amJ<8F@3RCnB^T9P~tJ zlkh|wJb>Q-T_a3eJW@}9Cusd{f@cJL6+qp5NLR_co6eignzHa7GUR3l~KPDk)ONKTwI41K`GCXNF|j1x9m5$t&~YaV|1 zeUB*+T84Vz+jqO+?ngWc7iZ>}vW|J4n=!ixg#3s=qw@WDcD`E(n!u~*hqJTYzP+Vr zy*oP-)UV(x`KhO0&r?0N?+w5Pu*_>ttvg+|3Y(K@cdV5|d@h|4nYOq+mUl#zyjY&L z@eD`(S8N>r$+Ju@JH40W8<3Z#C z4Z-ysMC)kR8!+p35Ss&T=4rFjtfxVv1K0$FXowuZCLoxHAG?TVjkwkw)syc`0FZ=t zX&Y{bh*k|Kg$27<%*Kb-zkf0pODVT37Rd}|`7fUEe(-poi&uVU_A2A~MLom}Xa8}< zbIY1VvckWwWz99NzCIcb%}aAwXwQgCs2cNRbIsmtuK9h9=|Mi8q;gRPNX)T3<)`Ho zTd4zCT|0pWrQtQxu+a=isE1=W2oNMEYUrmYug`@)|M`-Rqb1)W1~>zEhEIrRvbQ%U zsZY-F_WEQrTvxDGxp&=+?6c*ag#wHJ$t^k8G5Spar;am>dC+_Y|Mwgq0px#NiOy#x zXRUo*5+Y$AM2mhc@I8L3ai-ENRDnK(I47Psz?HT3lVL)^7ohsvi0K!+Uz4sdIOUw` z^P6xqh0nJ7%Tg-R65o8YyDIpSP!E$z!08SUksj(*JhP?l znTQFe@Cc~AWPxZSqA0`w_(1l=?{G*BNIOfms;D$dsse`SFu`P?5d4!NOva&#LVI19 zlUlpUqcJ{yG3aM8QJ*7IF`gL+Oq=xt0UKIz>?TR#r-)(`0UDy6P^>mbA2S>%M;ZHx z34%^Fi^lMdv_Q)e?CbshfZ_x2leMDk$;z_WvVXh3Pz|dnlfAilHw|e1srri~e>5|P zL5N$RyZ&4Az+9T+%IqD=yZq}|^J>l5HcWqoMZ8wbX;Q0$XXs5l6~!8zchKq;HRH>( z>i5}~(p(2$EJ!*kkLfi>D#6f&xb1BJaku`)nU?(G-XA4nhR}#~=+AgV{nDJbbJfJ1 zJhQdhw`jD11M>x6aCB5$s8n%NGj0CNXEk$V6Lepb!whzCUqh?wMXhGT11b+ayrE%@ zp|$lI@V2hkL&Q`MBad{R(Bb+WFM%Qe;letN#E-%>gs?Trh>LHlsDXN@83l`E{PzJ` zPF^XaLy8zVI_f@xr)|9hPg|#<8uX^T?jV)kP*QkuYf*`pN(fvX_BJAfs+{yk59}nK z*nzfKQ>7|Doh{7b0KVy?f?%1!p*}$ zW9sKO%%AP+!(qUJ=E`>qiRA2HWO%)hVf&NJmErATS`Z!HOip;*DsL9kC*xe{V%5}e zqw2Q`#VJFsyo~3myKCo!-a@mGjfA~-43^5ET^tm{?UfZ2Lj8~b3w=<&UtYDp$iP-mvZ&GLT(pEHY zwHcqh1J7z?xb*hYN}2`5eY)I#9#6QKC-SL=KQjh$=FdFB|Jr097q;(P{s>D3A0D9V zhvVa3#t+P3GtX+6xax-Uz@AIC^dguSVL+h$Z;5NId=tVYUTxwBF}-GHGfy`EU@SGs zS`&&Nw}x1?Ek6d^+H5yFVLfd_6BI|CxQ;;ZNz!VDj^`q>tsAuBhLbewk>`ei4<5Gz zoS;Uk?@Lw5Dr%t7)U4~J&B4hdi5z%&^9ndthp=IsrgbYO%tY(DZT%ANw=6NaSoqnx znjBH`wA=J6g`BEGFC`DbV!{p&F0pJG@ZPk5Oj5;y)#FGVFR*i~70pj^cp0 zv54vOTV<-kS(u;GSvG@5fH|L?d^qTGu&zpFx-@}h>ct{MxM%Gmmrf|8@J3^J@=AsI zRo#GXSmxy1447Zd(kW;ww~sktoq9j$&rVBDIBkmRUKf$cICZL9@T?tV@Gw)uifEU@ z6C}$rMc?3Mr|5s&9|h^`>i-0S!Z_g8=}$g>&deY3sEw9%NGy{Fd)hXDAgsdx;3PO& zw->*wS2%8G=3STGrkT9!vTM?NZLu%x@HAUwxJUZc+F*Ec2nY(nV!Jhuw1^02j~Me| z93e(VJ3uJ+x`#0Htu%4d6ag_1*xn1Eb!?|`+ja02cYzalo`=x%s%;;IUFIXies0uY zArgm4>L+zL6|@km960}Ylrf~}E!LSXpS6om|v*RJ=T;jDLHR(_Y`Z!Hci{EKA0>||s1#2{^D&d*n zx~jSRq$0w>35gA?QX!~q+RYjQK_Yt_kre7+Qi2BjA$-4yDEGckst=gp!WbrM#~lx0 ztm|-HKtCXaYq@DyhmkFN4SXC!Ei~+g6OsmElzkC`r0Kbi8$pi(dm32Cw9+7nI!WAw z(*cmSQ@XF%wTdzkE423(6-*!+_?88_doK+b6UL98P^$4Tx)IE$8kMYWw{=Ymc)4%MkR4@h4 z^H9rX`&Zm_zIV^X_J0$$*a&LR=L%?&LYbvp8ON{lnaNzPQrVV-q?1Ms`y5V3Q9X5G z^NTG5JVl%WNh67{ZGxuPfd6z*PdZ8BG=m2C%n)8Ijt|$P5L>HLWHOdaoJLNw_}qn` zQW(^l7C{rJDa82WBqVBTb0=kxz(x%3!kGr=Ow zC$R?IGezkFk4iS#)gTnO?WC%f;ZIBJ#^X++zB3@;eKGwP-?vTxoKs#W)VR_TU0}kC ze5B-GBVD$2Ndf&yI*`P7NdLY=rU%Li4qp_f1eSjbUVrcGLmz_1szamh_@z4A3TXO8sHtWFp z;2Qp^U9&C|RwUr10C1ioGZJ*tK`$O!mwy4&E6Wz-ugoIzYa;U-O@oGx>iNJrK9a*> zc@2>|4lrO&-MTFMt1{|V%7!XxzjoG~HFvGC=B+jH>8<%|jo(zOdkMg#jOB1q;)YUq z;Wz=tlQ3)mK)spEhB?TXtRk=q#RWfW@tX^gv(8+LOqLhrwpf+L87tDY*r)l z3$ z1=B_>u0V5Br>?-D2ng#9=w||mLSQu{4@F?~1Km?&l}(+9h|#@8p}BF)>2vRapeH(B8B_$5KZ5~0C5Q}ST$Kv(X!13ne|2+Jki$kxu z=9M0F*%3B<;wc`XfNz{Yr`v=w7sAhG$8V*rmeXnBE!6I~z^98sEnH*sk8c~J$Bf5Y z#;;SJPlaS&c3hfiziv{=YeQc%lW@kf(2D_p)y@CmZ9qwmweX0U)4y{zzF#h>B{7pF z@}Q^9n#p=U`J?rxPr{lill|=6*<0$u<$b!~CtG387WW7 zeVN^;wIGLq%Ep1|Y3u>kA#8^Y;9=D}Z2%PDm`gl}e(G`3Z~^=PA7+FXBLM}xlN|zJ zV9CkK#q>nM{t$V_Hhwi&(! z61XA|*f;x4e9I-2KK0){fNk)>;DHWo0=8;cW^`7dJN4&V#A+gnfdw{_&@)ts1(ol= zEKdcaw~6;N@mujEk_OpC1K4Co@W&<=jqSd{Mj{t%>A}!;McSMxqnslt=8oD4^7im zX^{{RFtYDK7}cLVtdRvT3_pSCQ)>XzVZAsoEUbGGw@+b1Jhz#q96joa@ zV4?Rp_S%=-EoHCwWp{sYatA^%IAVN`UA(pPIYnB8oJ0}-qsOOlZ!k^fQl1PMH_2w~ zPauK%{8#n;Lamo)WPfy$j6SD0d4>E}=HayL*rN z5uGUn7=1J<&{=39Njfw1GJXzOVo~)~WV~Y4-$Q_=Zguzf(Tb8IRElbo@PA5Lh>YN@5Bm5gA%o>$GEbtQ%0bq$5zHTkIlB$kXjGc^d5 zsH-YX)fJYe>T0J_Nnn+5y;JK8Tc<(0s+hgSY~}o6K9Exk=M+^Wnt}<5rm+Asc6Dn z$x5oAPO>zIE2{hij~zsv?OQjyzdf?9eqqP>v|%+h?Pl>(KC31mzg#YH4F(YqCVK1H zh!x7!0KpG)uF?PB-n%!+bzS>m4T2P7LsU42Q|hU#V35jAQ#Iwv)2UWxH-%DVHmiDyLGZN|o~k@<+Zy{>pbq zerxT$_Bs3X>6zxBM*^Y)km&BS*M2|F+UxOKq)Y}9Chjzl;VJ`;IFG~V7RJHgg-6O^ zblZSBUl7SIiF`w`CYV9M16u_{wNZBBADRfpOB2|8naFTxgg=;~DmJ=85Mw`dLdgBN z5JDaS`YCcOHdkr*q2LckWukCF~nmB!|=Dm{4QY zAa2~})j)GX0a#eKK}(Uw9JV3vVRqB4g};4b`SMV~ml{?2h@~jS$)GzUNYYdXi@4`0 zGP4^u-raBxIglYi;?ST&=rrdk$0pnLgAE!k8jub2l}t0o6Kx|Fgd^%TKfzGHx6n*- zlrhm%WTeYepNdtue#>_J0Qt}wkhhawFG33R*+V2Q@vVlM{7s)PDodFw{VE2X{dLKb~ZVbon zESY|d1!b6?iL;>+FCjt=2F4u%jtL=h01!8xL+r_DMu{a&dr5R%7NP>6;#)n}?{*^u z5U&Fx&4+z*2flP$Nvc|!+GVXqx_hz>-YaguS)F)>Jvv)lO?FTXvK(6Db) z75G6e5ZJp2{^EAJT?A&KLlBNZFv|ISM-Dy`_fS++0Q?gd?0&_BIz$Z!C z`&;5>a8Q+o<6U@9&Gz<{HAb`Kcj3z2fgxiQMsQl{!SMruNTPNWRT~XNg>k(G%zZ+y z-hj7LuiFH!MgWKJW(R>iI*7!gNAWCxiB!?6As{S?ld{@Uh^geTKBWuPSsd2N%)kI2 z#8oUYLi#69+1@v{Q!=(sWQz2iX}FK*;ZT9dq@h^b&q?Y@lG+rKwNSWciqrP1olek# z%OJ3_>p|B?tePmQAv`3k;aU;4LbnC)C>P$50Q5p&JlC&vdLE(^)vy`Dp1Xk8wf^#{ zcMG@d)nSC+yjphd_*Y?tw3&rREF<%ajQh66`J!kW;Nncc2+49~i)Mu{ik}S*IGTCM zCtOEdF4;+gSU+;q!qs$JCK2R5w3XwDW(3dO*a6kP`z5$Za#;c^+sBh>*jMa7u1NS# z+gTZgvd;^mPY7V-yM<5}eN#gpQ8mzr&G=$S7bI8vbim31d?~KXbYVti7rq`alz{SI zI)LyS)EBhr76+F`Z`9QV+DGL*!T_UCd6C%wipJfAdOAhPs?GRLxK(HvhkM5r1;Hv2 z`+NjfCBh~p4AVa9MHdCK3^xme?BJO9RMui|7`&8fgWuB(=n61Df=`fXn6T9^5t_p$ zi51LrIbj#!m8#XihbgDusKY@Vn8BeE& z?(mWQ*bKcqR@epRF_`8c{L0v-7dQe*8EZ!9Wdkdmhh#puSwLuzru*BcJn>`^u4(IM zFo$`|PB<=~i7`7RSjKeS>nn?uz7JM<&GpFkTJiHGO?M0*4QT{C3gJ*o@CBU`fY3$p zcV-OlX9)C5hfIm^0#GqC)nxYGEVVnXkHCrzAR_o+tb1*|+wrEa`B4`UZ`~GR8v?7K z4Va@YkUDGKMgYJ6CgLoTyFX&(>i*)*uvh~H?B!RQHnFe5(;uJ%O~4Nj1ZdRoI!%Bf z)DTVy_zLaFMV!TY*9*KJMG0$%^{CNBwFuw=(y%JpmK~bo-N|@8q(XFTnGyZxV(HjBdiJrlesZka4{WHNP zxQ*8qiHaFS0fD1}COTg2dTtBAi!|>yZgc}d328gMb z0Pp*_E0ESDQ8W8JyUvDG53LELIqDukYQw*n4<;c;y+@U(AFeJlQgKbjhpG->mQBze z?@Q<&NLfYq3*1}?Pwq%n7Z;7ImODC1H-KBpsv63xfW`oxu)psDm0=hVXvL>{aBQ)9 zgNq+IOHUcJVH}a;%N}0LTz&uZ%kO=DrSFjAvA%~vch%pLaEp(_{-y(9o+9pPDg$|M zL*K}d9EVV)`0&8TBX);=0EL%3ob&j80u&EKTKN3JbzDPn)1-Nz+YDKrJD4dB;fN9c z{6bL=1v6et8ygHrv7u@R#&ls9^^)c- zQQ~9FI_X+JB?OD94=g9OyciH1>uS0;I3RV@>@dXYqqWQ0T#-?*UA|gEJecH30c~25 zRC?H95Js>R;|tP(f8kuD$5Y^~>8I2TgG}|sC7CEF>1hg4D^?sS-v|Dqk_Y=kfEJM4 z0S(3QiH4kI2V_-nLYw{s0*S#WE(f~!V~gR2hj1)8B(MZ%BgaDofe8cB0E3IArGbOW zfoU99OnPh91=EP3?~qSGUq2^Pawsin9{&WZbh?Kga2e>VluRhB{ zh)x{>i(r@Htxg75CA6?$i3F+4rt_O&IG7FxoayTLk^W`18iPG0JuvbQ=>WzOflpzG zy#h>n9Ocl^tKEmAi;4z0V9MBhLd(@?&l7+>Z$j8K;C)2<8I3REXv9w9&Ff>?DvJUM zfE({N>{B^|0 zix2+zPG}q>&FO&rm?RvUyK@)a0j?9~4N7D_{Rb257+whw>H%qkZg;f1>D1oXiEn!w zymL2h;FUzD42(l)A;U|AG|~jigXPOF+Aj&42d`A~nuT2fjyK5uaCYjq|La$2e~*X2 zUezx$oq&zdsI}XOr|7rap@)AFqaGM`J;bSZ8=W9BHef&2ITU352LilT=GCRs3a_!O zjXiB36WtmLSZzU}(tn8`0=X7rMgtSTx%l7fzUEmRPqSXjv{URlbrdX|Eifk_mUAhF9*BV@{gu(D>l*}7SC4u#M`EB^F1f@-2C<|uNVh2p;-u;h0RK(9;y9dc-3;{$iw;WPLM4_DP&fqH})FLThvH0Qq$hi$s4lc)p zi~FaO@}>h*>|KQIgT)6)DX#889s!dS6b{Sw;dl&5AmX7k%SCPtPq%7~f}_OI1axU_ zt{-EbDl|$6O9=@BvQjt=C`kmBF36(@QYMzRj-0zn(0mucN49&B%II?WdF@H_RgbM5Y}_hTf?U_4;|m>P7YwPve=0~RM|qpUt#kn8L~oO0ko z=4ghNWS}F|;0`Ig3aliZiVS~+#hI0O)G8WKcFC|QaRX!@EDUubEP(f&p3`nR9%LfQ z1~Y_^r~->jx^)$e9fqLBTVIdC=mQLqJJG^Bhp18+@73%%fB$ zf?yBwSPbX2L3k4cC>@l=9pryd1;8 z1(pEGCf5;kS%H&6B80)XHNxaUVc-M%8Nj?~)x(EM!pKr9aigI&`IDoA8Lc~9{C#p% zn1&EMvSLJZ3|MXtA8sNFv+t7K*{*{BMy*ryjTSS@m#mG#@@Dh^yBC3=A-ux&@OeWO zFVdI+XpfXRk%moClsYsuB=vC52(>(MMzc5fQOT6Vh!Awa^<@fKDtU%c>5%&QXd!#n zkQ@#tfV%7QT!)uLO!bP|Qkxp4S|3MF5VXT?4FMbg_7_n|ry61-A@D%0g*XwlplMEa zQBS6^Na^6h5hTakTPdJXoow7Yjha&lT|R&@o9!X-c6I@<3>z4Um%P+Yi6F@vb$wWe z8Mn{8VaK9FJ_{rEcTUODtrtgAg}Kn1OP2k|xTUYR8ri)oe#%*}{DOX*C&P-B7&7Vh zzj=ygByl~^GqL1m@Qhqy|M~rGPH+y!R**nrbgmVCBFgGkQNm^6mhWNvU9wg-p?7(V2ixVRxdRI#Ha zyZ-!%5Ic}lBix$yS$6JlplL;P?*BNJhyn&UfMNrGLc9*NSa^x6f{0rpM_8=_B`x|s z;!Z#p3vHHi)ZHhKVWm5RJ`ij-N+N!vSRv8D7)Fg8N2J1BRAnC!rC^1?)>J4vlwAX8 z$P^Dp8IQ(uR(~;4L$c;Xqew#-YsoaTqAC-08Ce31!GlZ?#w6~HHy;dVab=svEQP$J z84Q)!79ClFx&pOn5iJ5MnkYqqdcndT9=nJjuM9kh)jc{OZWb)5n1GNv6KHEuhnUHdIas+ zjjFwBY%KpBy=H!hLP$}_`Z1;4E@SXzW&I>OxxACaaWDLI8Px|L&%?QhdJ69>BO{10 zsc|V$G6MM0W?A*Uy{tayVWhgHG#F~35oK!m4w=3rheu8nGm6{Heb1mc&LZ2j&)v1b z*)BP;q;-E>)t)V;?ytW&rfy<(^oo*+`5t(t<6kzi1ebjpriab;AewCwGtO6vP;8>OPkkErAjLc1YHcnrM^zGEBI^V*p z1-EG#JCt`0yoXFrY(8t~>}1J@SZAsrp2}LO+i5quO++&zV}HaUgo~?J?ZG9gR!88& zZnFxz_#Wb)Row_r>%Ddh_8oBYb3?={jP3EI_%#E z3`-u!_ojP3%)h3O21i9jQ)^J5V@Q^c9GL9ElkHA82<5o_AFh$Z-7EyxGjlEn5F_+= z-QjpJB}1w!o5dvR&Juv0&Enl*xa)ifsUF}&oXcbUD(|Xaed4g90SZb~?OYyA1_4ET zO2GVV7XJ+Pgy_J0jPy}NF-VT8{ewfmzm|7*ujoO&x!6tT@?_Ze0i-e?O%KaqFfY6F zD<{?`lcYbhAcQn$SW;^Q8zZ^qbUut7Jymv@WH+XSR`e9oom+P``|#pFX3H(HAk&79 z>?}yRlU7P>HfW@EH#PV>iN1=e{EG+fU;^Ilj(Y?#7KzBNgVPBo5Q5%<@QvaN`Cv1^ z9h&kH2qzXGl5~viu860^>^~Zf4~Jx`r?|Tz04}&Y=r5pJ*pZR!q5xLI04~nv7vWwNFfJEOP@lhF)SuA=w4LM<&0D*~}^*@FL{qsm$X@K*_eat^@S0-4dK9 z3A)t+$055l=CjMrU5Kz%Pm0s=5CJ;TCHAtU=EN<-BNE;9A+b|;p1_uoDY-V@o2N-V2=9{wlUQN=GW8Qv%Jmfy3=JcpmJZt$ za*FCK3qMtFm9((zd~gJFnP0b)4X7fWW3Z_=5i$GD=4Ss#G z$#j_@c3dw-fDMI2j*%pT**O9vU>)v^!SrLRlYOaG1TA;!DQ-we#5c|0V+yHmHqnF4 zEG-Md%mP$Q5db*Y67X}yO#mLUA#Ba*CZVPktx(IE#Jjv>|HK)TLuf@{$cM^3C>bzi z#W*htgwo&vmJAEKtr?`z=SG-X=vSf+?i(IKk_>1oG%+^3k5?rbfs*VSQwO9e^h@mY zX`RALnaW%^2R3-u!`692ZF+p86M&8cwKVj#NXMO^E%BI#EUuSc1nK~y;nN*6I{`z6 ziqQhK(5P_y9?)e}43Skfq_8?+en6J_NkKMc!Q3hTZV02P6OdkGL_abxU944*;23O7 z8XNo4ve74`y(-vBoI%Qt#8i{*Fsv)#y&S09w8Z&+U|xWjqdwWt!+%3w zX1Z7^U$T;LBwk{u+CT{ODZn|M@tY_IuwRoSe4|B7v0oWH1)e0zcHdm>U%rOZW>W{X zllOWJ!L2=LLz-;>J%IhIA$oM9)vh)hVXq0%w$X~bsB^G4J;KK&nFM8`s-7wH%W$g6 zwauL_f69UtfQ^r!8azod|LuV)k z@@6f)aXkH_by_{xTGv#Tp(8@Pt##p=-L%>l0hqcCi~F$;UugU-dEIK{0mRO$0(Gee z?`+Sn!yPd$g1#1nv49jDLv zKFJp-77h-9S_2{xVBxsBF=uAVw*=Jb58_61JIe;kSU!;|>svrPMcfUUA(VLz2+gud6A~q%vy&wsBua_^8=+h7m6{DeJov3< z)N*|nHWeL!u>rim_g#vW2>pTQxrB4zx*dQuw3}6+FI4@o*Q!;Uz;P3?q7=X8!fE7; zMCnHmB=tyA)N-x|5C;X$R@wQ@emD~`+lAC)=d$v%O9*jvJ6}yv>c=k=rYQ~yNCb?d z$j_F#TgyO8-}&`O&zQ0d5++85U zg3H(CU48PBL^Z@*-llU;w`Yf>K)M#EQEdS;1U_J4uZL6H>oo~SFZ5c~9?(4en&G`f zc&Yr8?oGyD9hG-(O6L`Gxnr$SNi#*9l22Oef?Xd&k~hnJR4K0t1bbGabxQVaz0Fy| zzOA(qvzu1?A~6`3vs%aTOKWl%SgolsmAolW$#txCywhBVDtx_M$5}R5#`1}{j@M=( zEV>~RmH4$XS1A2_;Vqo(QjL6OehYW_}0R(8_S!-mgEgFj4$ho6YRo|Gtyvl5`?jv?60y& z4ibdk3PAEMztv>5002l+~7x=a4N+ zYcmT$c)^)#td!4d+E=x7?8aai-g9RXnDz&$$K`vlQ8NRPzX+N%7l z>+hsbxoa$EUfv{ujyE39O0zu)Sq&U;b3Z<*hE%$&#sB718)9`sljBFJl1^U2ZG2+S zZberAyW*J!c2Ea<~%VvQJOzHD_xSOyD?m8_sAxbk2_itl^ftkx5^LcR#R@ zE<;%Z+VarQCgckQumURqybC5UWyLH0DohyQH5bas|8BZj&Sh^rh0-650od6nWV06O zj{amB#1vXPg(k!hLi!DlB@++1CjZseD2~d+$|UFtAHX)3Ee5C~q?*#gf#?521~t@r zu;x|Xbqg7tiyjPUMK6odD3XRuY2bi{MI!~Y8q@$4r;b`RHPs^+5g8DZEdm7SaK~e< zr|Zlhbs;raQCV-qp`5@U0eMv`jTg*QsQ094WZxq&P(V^Mk!qp5Bj_hg$M^unGgLNl zT$pv{ddS5OFk8ye3@U9vI-y^Tq=v}Gteb~DGOSKW*AG892y+zMhGsf@gIx>(Id-w; z(e5`I^caXSVEd%ECHP>C$^8&E3Z!}Fm_BR-49-yN7M;fffbPLa0?9l!P$5Ijogj#P zv4F-GIx21qjrRqNzGx#&0d9Fl>o47!7E>)MU)LR`rWLPCj4&9?zz`Z8gsC)JZNPC%tLM=$o=unn!4!aP zJ#-oz>(Zs)y36IVf)U73upGx|(^QjZ83*fuxDCcf%Hs~pAJaD+z~}-lYeo<^a`(d` zL2W@zsZ_=H038MeajX&Ebi(p3I&ejo6qloLY-sSwL}I5{{PnM$TUQ@A`p&?nBV;Fm zGYB-QO*FU|KSH;o0_ zo>EU+7Y@BM`8c9nmx`n$hv|TVsv|7;l7m)3rM5u4Zg!;&S5XNPY(cJ+NkH+fL&uK?N&~zK^o(HU8zutg+8#@1L7syX$1sP-|m9LX|fe#@c3n20MhY2;>yRYX0V|}F1}~!C8LAK900GZhsr{E` zNES%SH^d`Uh~GVi7!{PS4e;JFcaQQh)b}Mq*J33K%**atd_>_j3oHt0(AybRq~|L> zJmVe;4Qi(?B*k4irZ`PX{-H2clpG38%xf8xd5GA#amzWOWm} z#N2bTCfjaG*7R+&@j`0PXBG8;byd=stj;TnGJJN-;gPldKEdlZNc1af`w30?BfQlf zn;}rqI(Vj&6Rhyv%wq|8Cv8oPEl;EFEbSd3NsNp|Voo6;OiTh3%2t;2#L>>_nX6Q# zXvcTSsqC-fP9&!`(eLDA<&@4@?Adui7n;bo4L3FYG%+6L(7yw-V3c+i_2ny^=9Y!nlQUk^(x>~v7{xQ{hwo;|b zwk%>bsgg`hYF1t+F_NSur%e{kNuOfs_`Os3Km7qLk4{o)oYdXybXntP?UED%GT@ZK8PaA0!Kfp&aDgh|_`? zC@_mdw85y=^4c8$mb6=lmeQ+-u+9yAgj@@2wOWhp!)u*Z6A#^Lql>6)QKud@yk=ZJ ze>+}ulp>uh}H07i6W2WlE-+Ne|%*7Mx z8f|Lw0EOmo67x^K%KlOD5%2Nn0X+;EA6G#yuR2YyKcQE&Hsb;Huf3|~z)nsA` z&*v9t-F|)nPCens-@_14U}wls0vP!NejeegHN-So!6#IbWk6UdUwo26Q6g^k^CA2b zU>r|B?_b}#cIP_9mzLn+NiTVbpHMzLx8To!25=@I2*FwkzBA;|!(~KpA)B!y0o+dj z^)!H*5@H%|N+LF$cSP9l9HfFKTsJ_wwU8SEazn@fsT1YK4>-xQpb_C3SnaBwA|Da& zj@1;x7Z5mRJngZ#ZgIZV^y1zJvo1)*w(i|BJ_AaKAzmUFS47m~GLH}qJucH7G7u86 zyCj!NR6$b!@hA%g`>A*7Q~9h0aTP)y`OLumfWw~Uq&oQ!CoR2L`k z*!o>u@@jINnEn!cyR7y7F^SS<*e=&umPL4A;whnfjWrBkuE!+Z^2tlYtRu{$mb6{H z1)n12HiwD9QwWME1_FfU2>5~Wi0=eL$zoW9s#bG>KFO*zZ89heKGqaLvVT!fp-Xr;ot=5JlMHWs@**eKJa~7( z$q=yjBu~`~n*0b!v?n`WjT`9!_6emO(na(Qnh08|mV=R&bOLIgMC-}EOAlyaI@kU2 z^a$s|KF+E!RyF&Vk+c+}LAxc=qe3;3^cyvihvJkXxo~}0nfv8ICGt*PRho0 zVr(c}Fwc)NxJ*nFH-on$8C=pd$NC1n@Tsvr3zhi&!Hz`98OvyL5I#P|C?OX&nEhKZ zf%uJJ8wb=dnoolBi$YgeG|@>kR?~1`-6D zL5WNZQCww(u@>st!MZ92V6hVOYTcRQ~ z{TEujR(ORTBKn46Iz$TUv>L!)saESi$!#{8y-wKiyR~+s-h@vV+_}2uek{D`ONqjT zRr;3x^3y~bfaVEzXIhShqnhexSyT{6krx`d4QjFKguG$ zi&ZM(qBoKRS^*;+l+K?rAp8tNUy@U7U3__l0dd~Em2WlA&glKuwqR;yJLfZ5b6Ez) zpK58zx)-=?z7;>^5L#}l^A<7bik~I-E7*d;5G;h6PS@}%@6!cY-DlSJr8hg}W;e8M zwdW!tr|-ertcnYC*kGr#R;|&hhcyHhZMAycMk|OyzuIlIyKUf-2hFh8sN$CGwdHR8 z3UMLi+14!808g%)b0Q4-iUVWFs&ei2ihzSIRApLfMeoU4aW3p+$eIjwY z@No^qbu+;Y6Y9iOTp)2pBWVvVbGUNCa^;YWmw@Q9!C)b=Xyfw>(ppp}mM>_EU7 zFjm&&&b?3Wv8cur!S?~S$Urp^dHfEzBEav4oM1YOS$#{`rUTfO2jdDgnhd4Y1p)Ua zn3oKuCAYMXyC<%c6=RgKgy#)`U|vN4Y4{l;;sfxjI*oP<0U?@xRO`W=c!B4Abth)1 zX#!+{i*L)Dsr0hVJ|t(YkVt%u$w5zwEUD%su;G&-pK&@{Y)WKM~`p)Qp4a zxQiF0%q1~e367I~sXr-dn@DoQ6^`F2x={5xDFr>h2Gq!ESZ}snIBP+842jSy^8uP6#%w=hv%#*Y9<@z^Q6eq{2?M3h1g{wOMcY zQPAyln%%a?Btf;~dA-PQ`Bkq8l>F2Ekr(#AdwNc^ETNxXT}v3SfAX|8UPkwcIIkiz zNeH_&F>flAODvUG62^R&MQfA9>*M3NK;8rGQm@mlMPXF0!&M&Z9qK->7IZxbB5Fae z0sJ(t)pe^K+#n#mhBVs)SX#Rg__Z1W3)fmABbO@9paP5Il6qd+dpzmyj^@NV=x0B? z8BXA`Gjm|44V0v@b06+hq47PDoT<-_3O7=UHSESKkbRd($!$3~X~P#)%yTd8kVtIN z?+<*>2CSPWY}cgS4VCQ$$SGhPP*Vwncj7z(-X`gS;YbLaW6C0~ha>_MkY=uivcget zIDjV=cs3YM>q=r>>INBcC`+WVlkkz-fEaHFjpCRm!61?tf?hZ~3}Kz69qot>Otu>} zvX^4=8G+4?Hqc7#8TWNK8RKj{K@jUTZ&Y zGFZ2~X(t}i&&H@d$?auI2j`kzX-XKRH-x;$w>7i7&WdF3uK4+FO}CuY{R8+2oEbXl zYR(5sc<&WQ)R4(6|Jx^EC)c?$GUbt6!4f|BNd)R=*l-!wC*p!%0fb7zKwBmaWuGg2 z8@#YoBA*NNHksrv6h5^J#_`dC`3A)4kUn;UAnJ4?uN$>->xysY65D?$VhcfXI2f3fQfzfI*>;@&UM&bB0dd*-;U%R{yhY| z=HD?6h;G=+8Pqa58yP~y-Qn*1sA3PA(Cg3cM{t&(umX7kMXF+P;Z07^26(EhSINlI z^(a~cNdlEsq|X2USp2l02!JEx_zI-cWz8^gd&~<;9R!OH!6VBwS-eR29?AL$ykaMX zjfUV3itRMYY2tr{uO*ZC(Jn>**3n78u7WvDf|9|S+f)Ybo*X$8Q*0P|F_osM-s$Rv zVSMRYY*VX;!D#>?0Pxh+X4L3aJBXIl>tR(!ZAipD+{9e7=!LO+CkxZ-8VOo45;94d zm}Np#-Z}cjoqPcF7$KJp_3m+H8*lG)uG1Q*S(|-rdoqIs${YBNPPJ!g1pm<~-{WVr z_Ohg>zXd~iHr2^ST=7$^RgPgRAvvXRSa3R^{aA|XO)*hC4!C|b4sOL(8ZtSQ{^zG~ zijBcv>Ls~^Y5VV=<}S!MKN0Kp9V~Gr>z4T=o+VR$nIyF-Bx|8?&lIPxdX2E!t_D#0 zAdX-)fXuwrMHGj6x9v7-ZI?tXt!~h2z<;$}^8>ewS85bi>rKxKy0uP_=G4|-K8>PL z7r$}wD#aYESDpKW{kH9o4L1BQ<0lBmht%@!uskJ#m}?Wq)nZH=4-J3&8yQTS)&%Qm zpoM8qh%Tb@0ratiT3>Q5vNCu);a`^&HG3H`L@29@2?{mIx1IaHEWS;}BqP7C3t6m# z0um)m8i3+lC@L#K-f5!|QJYw&M5a6=> z6pZjq_-IqmWeQ5S%781I&#zqa_au|jA_P)QrKI%rmQ6h}%$roPx+UM6R}oOvzY2iZO($t6C?)C7 zUo2Z{n|cXwm344=Ru5;p>+B?R5l)Y zeGLpiaf&GnE}khBDfk;z5r>N;R0n>}o+zOUC;<{Ll?}$hd0JWHh%yF*&8tWW=CxnszMEb<1cm~p%ys@#e1ZDe<1czlK#m~T1jnH{ zN2jKlI8pZ>qK@eS*hP{>0wDw%*(m@D-cw-@2oU)=DAH-T5B)80Hi2oXzg=-|pr8FM zda8Ne&jtsItOvHuYPT zj)gXwlK7dB6Iht601VU~=nJ#UaiW0Nn%Hzsvy0$>h+W@n`<=Sq>3~;<3%uKehiIcw z3pXeAt;{W2bZx|YG;LRaSV!Z=* zQ#hzryPn&^|A=ni@yH5@La8-eI0}TVz{4%NTJPX*x6^CGVF31My_%2CyBX|V-l}JH ztp3ZVU_E8Az#kC{yuLNNu%C{9Aa}u}l(5e6H}S{KBVHp{eY|m@eClS<=&~ROod{ zl+Pbr28R7GJVF==SUCc#imWz8n)%8Wr#ZicJPtHE&$r;R3kym8>(~Gji9TxbSGH8V z1`P|QpZ<6Ul(0U8vmpV=LDNf6|Aam-n)2s~LQ^}0&5n?w9oGZ=O|20GJs7;Un|L`w zHw!y$Gk&k@92%xQE<#5rr$T{St*X+r1r27LOe$Xoj+cR*$)xzxIcz^iQiitWv&y&w zR@k6CYoOyrf@`jfb3tP!TQqkkKqqpCPz=jx6f``qMFyZX*cBLUaaL`ghT)@RG1|J3 zi=latu4pW6^SpfT?)I%elT^(i#i=TMlq74A;y8I{>z1S?9DBf81EWt85`(7_%J6(j zI=CffNC>opxfGG8_cn!%NUWa1Pc)H=J8D&}k>a_zdR3U^aSfKam>gM<+UV0FO(egA zp+#T-EBQl&S{P5_RiZ(pEgH3qehWnKcp+p>u#NSd7%^GRFd2wLwPrPz=3kG*&l8QM zsW)~5z~7Ie#Mo){cW$vwxaBd3V3;7jxU|%d#{0a8?ZP##cShm7;u0nQYH7(Z2d5jM zHQ~ugwHvM0YNFuejM$_PcCIGqmJb+H;U2C>c6pzeknCbK<*`-MG-$fS6x^1T9nTlF z@iQRxY2w5{Eg`;3Yg$v6;$h98mW7pC6316z%2}yF)bb!P%!$KA?{o4ql+Gms~r8*LCW|i@Q>-~39;AE=>=>e;VJ%jDm`2D@;|YGsg-}!iu0mZpG?VX zxK3qFnI>EKkbL{Um-SOopop@sq%}sOLeY9k&2pXbrAqaBtD{MdyB3|Tg5v8_4a_&d z7Pn@rLX)>d=WxSbC8w=IX1w-|JErI2C0<}kJt8xRLZ2%X3lelSzINEeHjQL16wcmV z@+@kgk=%|up}wuIILN*dNqLt}&==6MvFAYN{3)c1Ft`|a%ECdU*bzj|G;x~h|4r%* zV1&V80wLX2MUq&Z@xR&d0lE4y{40`x)HEei5y);UJ9n?$eZNAIVS1axA&f-nq%Ls! z{94=L+;k7?t2dc?Ku%x$Qe>=eU^kH!F3W-y6`S~y02j6kL5Qe?jHC*S;yL8jli?AW z-u9_K#^QsT&=1_B8x+|O78daEM=~=deZqBydBX%Y(ps~jhv5yPp>TBUDbfVDc6CU% z2sJ@6j0p}(B{Nr_B1$lAib%2ODXQd!h-<>FGDVWOT-wc8D1xqA2#6T)Chxay@?lGy$ckI zMh#y(o8%L6rZR|ZVCVGQ`&SH z+9y(VyqwhU%iN*lb3n=6wd|MLql=Q(ojAo`DU z&-qgb@1~m+1G};nAZR)T5ZdNgW#)j z7|bjG+5W+om4mrAtxO3wVt2|VmiK1+!z(IoIE;kkx}<$!l%Wq4)QcmkOlKTKLv}7; z4iM>RNSrqiB6eull{oLhB^o3Yw#pQd3nFZ-c;p~g93zelqM{VX7-|M7QR*z7D)x}X zbq&#^VSbe$FxgZwuo=ThC)WY)STI$I`w6Qp;QYelk)tG2NSW~=1!aks$xU|(ogD?3 z32;>!jEV~3#D}aVS@j60GGt$l(xCoR24d7adJ3Z*7>Xs=V-at4QqZZ8+RMj}t=Oky z+}lEJ%8sepisKa#C>?i^srm;mr1uz5?3I2NgiafJoExbIBoc`A}aFcoX07j^gb{&s?1SZj3f zw^fUP-x>7a8S1rLKJX9Sup7lX$+vWlpUC)a9l%ZvL8hR&D2u0uh@A^>Wl`P649U4- z2-Gs(hIyI_`62{Ak`fewTIXB7Ki@x=A}QF8Tahe-%9SF1oK?y7ul(@9ki3&cax0)H zIy2Eg6fzro$35~y1X6f2tC;(rnsfZ^CF$j>_Y6&DQ&2{kqPa+yAd*=;ABczo!}z9K znLVeVtFiVqlVlqj^|+MGes2>GeQa}>!fG|7B8#n7WGl4$(+MJ`8?ABX2q==|X#Om# zN==p=(4QYeXSYqMocWajBRyopxf8Fo@3WdpQtdFaGFq`L^T1}U)~91hyr#jhw>ey_ z505t81mS1?*y}%AB}_`ZzLF9qW8zYC_BQT}8C0dj^u`PA_;0cdmb+>kpMNn`N=!lW zthlhhfdXRL2vm||v*bea@u}4w%W9QwpIQU*MzYx{DLe`%AQHKY#HUAgCYv^%qR%p_ zz}e72AZgeqwOoRZ^xNHf*y#}JchKur;Q`z5;1TP4h$7PsUBon~^=iGY8{jJ6feo`C z^dQ4FuK``zS=K}&ZC;hQsT>?la08e*%0sq>zEo>1=XyXssLoc|`OSW4d}S}B9y^!A zN0hwiDf?=QQg`enHfpEvjmCz8qq^d5kO=Ck3bhuZp3zD?8~m-awiJ?r+nvQ~~xqx&3A*pcz14_~1z=_75r{aLXUKgZ6(Wra~AqejcL<QCt>98&Z$Wtda82MAZLyd@#N%|A= z7ZK-Lx`v^<#RGV~Lb0@u%Nt-`+#!%w)HPraQAbz{M1e(i_?K!0P>ALz2)sH&Bck{( zDJG>-@lZ8=t3y|QO-<_;S$~vF(R1W5L8FgaJ{r%$_Z_WC0!Sd7Qv%$WFm|J{f-xKd zokq2E#{M8Pim!>vaedmSiw{qr8h5_N(4|Ot^zSOszMgcwG8}|>!WFX)gZdVB94rZ2 z@Q`ga+%}>p*Q(8y5unR)U^w+8_q$-!q4XQVmN5GakB|>TxVa2`S(QpnvxLZ)@d&k? zc|U>(VsH8|Ig}5TJTpys+5jENQ&&q$*K=-V$guM^p5pv}#>Vlqm}h6V4zqLv6h!3A zYLuzOL)@LIzIfqx*|jV zM8fvx=cB<_GM6avJj{DuG;cJiLQ~m^lB-a7oeDt+n=Y=k)e`tnvFH+#3<4_JaE(Iu zm&*LXxjQ{@!9ZLF;K@9KSh7!H!@_Yn2(N59p9~%$hOBdK{%CLfcrQ{0JC;Euw6 zpr5f*!lnah`vgIaZyok}Hif>)N ze%-kzii5jK;Eei}O@+ho!UEFA)-(WE8SNIYj~)-;uSsE~rwGB#rEJfFvQtA;qH;}1 z-D6=i;jI%sy=?KEmF_;13QF#vW+GxTd+w+dds^m9iS+Uf-~kd(r3)|o&?@K}$BQ0Mj41Hu z*~y6#rJx@zp}b+h*zGo%stoTpm7uyHx?GXY= zM)CGEm{ql~H{P|4nJvZsuq=)(PDc{pp&FRPTCYgmeHsmSdF@mP)qZP zZ=@*peus;_djOE?WyyQEj|PZEAbqks%o>-W>9BnQ=*05%uV#kgb*pKFJSqj-i&TzMM^vlMz>)9;2+wN-Biq2KGa zaN7!?kf~K00Gerpp4)5ndO_H%wxO|UHV~JoR)zmLLdV#D&bBTZ?`^5@Jt$|Yq@iiT zAPZLE&d$KYg}X?PMQ8IFLVLT03oapU(Rft;(tR}c2J!8A6K)TW2SNEpI1drd3Biem zWq&L@(96lfrEdLsZMhRnDQnOxSr1cXZd{KLw{k%Eo{%Bz(dHzJS>Oc70#S+!mF>Bg zRwOSw1Sb?1GDYct!SWDx2^L)NR2h7YI-o2ebpz>4$gIurVI@I^MPz^l)dXyW$neLEr$f9=2c+sf_0SY(AmNp-|x$231_y z4*fa0a0CY+OMro=@C2H{UW%1)r05!r3H}t2P*lh+RiY*ULpB@^NKNOsGd2nKfXyz-TFWg>-6pYcesu)rBQA*FtY@?xV^pWTBkf;Fx7U zC@s?h3EgXBYa--jlT*@^KAxJ}8p z3PQPopsP){8UR1NRr71TsP4O6FRV6#YP;9yG<#vS+4E{0s4iM=7ykt?89^-8YO94O z2zF3Sv;ONX+hX`&+;{g>J~X4TdZfG1@nAY|qLsgLDiKZVBODD{6p+ znm=#DeHN^82*dW#u0$5)uLmkvJhQ~))WL4!4+Oaf>?gke#T@!8HV#L4DuV*{ub5vI z7Z`BI;18qukU8{|sw%En6*%PWFjP3PusRDz<-@_F!9f@dTvox+ugZf5x2|0=24uTr z@3^pZi)spk-sUNFTVxX>dJ!P?Mz(8GR9kL@={Cr8%Eoaf5AmHd{{^aOj2Jz8! zue2Yuz=hUoPNUx?YQW&ul2tUC_0VtDnjWH-)Pe6UtpFQe!toHJ^*Qh@h#7cXiUSR?wlkI#l% zuQ!^lUeu_0_#d{{kl@uJb0fYDfV!hGbLcR< zXd{>rT(l9*sM~Eddwvvk8@-@Y577glkVFJg?M4VV?ZImsvD=$oQ12l6v|j~sHS8VK zpF6NM3dZ}27bykJP9v)M)u_>_)w*FFW7}(0LyS(t@4BrfLVY3rd)N!Z8k$<|G!TB! zt+m5e!|R5Po~sL85{ETgmi;lWX*Og=E8y2sf-OrMapzqW*uaGN7{CzDZ3uwa3Lp`U zdVbSI+W?H6Gz`^f8oIDhttAh9yr;hhvJf_8?pLH}-u6Y>>YHOA1L;IiYm zEc8bxg~#F0*}8X&hZt%Ecb8JBmOvwL%^d2a@z%(^M?lHc^??2X^Ete!+VvhTq-~tb zeuVd8$BWUe#F{w4!qa3=Wd|z2SZ3|{`GRCufnH@0ls}jch6(3ZDbeizzw-nKHm#rO zn%+AZjBVbu6W`X)#;B!yA6J&u5mT_%HI{WT*wz<=byj3{*=k?JF6vBf2Y(RR@0oDM ztDzJv;h$HViI_?lv48utoR7SAW0azp#aqJLo>psiHk-~gT*mc@7~F3?1{gzZ{fjcs z6<&dvi4-oMhR#loXZfBgi0-ou*pk4M1b5|Lw+1AT2#8%#7~<;Y^?=V6^yn5<^STJ* z(}=>Fk8nSYHk^PF*Z?7YJV1!_>J8&LsH<3i`P4PT*8b))S7Sl(A zBO_+6Zx$W=*%~5d)sgcXn1WCDLU=LkaqL|1!u6Qq(UeH`=D`t6OCB!}EckLz^j$7N zclCdPDw;8DZV$YP0u|i}-F@e>lK;Y}q7MlLQ4r5}1pqS(jk*kW91ZP1l7^Q3y(^nU znQELSEKeT|-C#66iVa?fe4(kUxSecd4CCd=uNrfE#w_Ge2Zz28~Ik;#` z6a=rEf&(57;TiHil7FY*ML*%qcj0e3AB-s!n(8Lo(zp|E02jRp!qyRMNJUzC$`3{! z*$^=@_wo563JL-s#rm72LHjP!7)l%J(@<-vJ6r_xxbV2N+ z2FHc+)x9tdNn>>;)edE_q_dlCCxt6~;dE*_Rfa+s(p0jyGmDVKh5NIz(@GVQu15tU zG(<@gE^8Dp<*@Eb=e9;cpMKIvYf5#RH4DldO;;@hsbP@93>S3D*xHZzcwZk&lyOJR zTXq5)`Am%2DN&)Ez3*)+5ODm{S$#%(jUiV$jj-19{T>jRd-ayFv&f#erB7u-|MgQcp(z1?8mlFj|G#=F+bkpc zM0fx1T8l(x4@IA24VPHMNL^`in@X}53csJVcUHAfZ;e#o@Fb}~*4^7&=d2nF|8;=72>WBixgccVr6!UXKL<>W(1Vp1p0p`#VPfqA)jiT*(0O?9<&GN25k9 zBR>(`(}E(d=?Fa!uwM_T&aAUin?zJxP@1vxM>HRC+!i>V02^D+*9mvAS{T*?7;1!c z+BQR&iqv4jfRHUXUb}wRaGSE>6rZcQl)m_IG#L6g zC$D3Y>}1Em{_mdR4#*%s5gS${fi29a?f*@ee%XoPaQ zhP4+@oii-gFB7<{Y(xZy-W&7%f%|CS{AMs3!v}We>XvLQBsiBN(1yTYA0{*zn*8+z za-AR_zsgWSaCz`At;B;Wt%U_7Q-E-$8N#^oZ{pESGG)aC3 z;q%~KV-q6DA)ivx^Y^xPZt5T3{*U%jICQ7`u&oFy-eB~;ouq9ZfkkpKgN^bYqAgW| z5U56vDrJ?nm`88thhf=Yy{*8Z;z>iZEnh2u)Z^DiseZ z;QcD}sS~DXbL7s4Get31~!p6$Z;1fvn>OFn@9;&3`74&eRD z{%BV5EB93FGv@{&HCFBn{K1+Wa3a2W?f$LoI<|%`!N&l6B|F`;q4H($sKhbVTjaa6H=a!o#(J1kLo~u_ zWqJglll?|r3e?Y2KPw7_uTigj>V^Bu6BTUhJu>jw-h*vb$b@eHn3OAMgGRbjGxIUf$(`2novYgmAd(pTN~!*;WD;Fk{7T$Xl6a}!c6byDO9j2t-T z2+0o^S+KI%^8;q#RgoVs%MO?{d-Ki`)})ePm_#J}Gn+PfI3>v)o6O>bl623x0)r8M zljfPvoDE~%CuhU5S;3qQgPI~|!*Vt(zvt!my!@W$SFB6e(|gYo{zllFmslo3*I~mH zeOJ>wUyh&s#AdB*4otYIpV~wz{!6HSoJD0dAVp!MQ*m=r6h=<9l)^}?Vv37)JC?|< zV)_(!nUZ3~biZUd)^YNznD%=Ki4@&0xZ{Xux3QC+7HE;Vq-a zl&OzDWfA0}#$410_q?>YGv{%09yb>?=DLhrmyzo-SS|L9^0+DSq2f!4sj}H7kv3ki z8AFTLwR8N!rnDJeoAmsyFLo956`Yr_*@_)Iueq}CmS902mWIKvcM+poKm1()l31F#lq42s z#w3^Qwk(rp#uYs?xzDi7+ZZm-1MWFXyCkX<{x-q#zEtbBggaG5#-3 z?wpc)zmdmWE=|m(iO-@mQP`ZCEgDl2Is97z3T3@qXZJzPL6y`a$*DhIw847hC)lU+ zg`XLTRVovH=KNL8U*-H&&R_XJRLc1)`xIWH(MWkNr_>nlpQyV?q5{M|zQ#yMCC3R+ zT)baVKlv*`3M9b<*dsjoAV(Jn0YZ?Y3-F8Wj}%=%7#(46QYb8${FUaQO2lVn@>nnI zxd#VFx@h%-`K#v&FGzh0pVEL_6PRlPb4_5b3B(%6!BsRmRL)-+7pPo*mCLW5MfsJm zHz{{rbD2S)fS6?xe}|M~t7Q?Fq)*w4+1?IG!t;9v#&8Q?(WrBU8w;#h{6JcrGi5nb zmNR8JQy!Eu*1I z0RYDe&Sexa?#40-#W4~t#WIQ*b;D4s2qJ9gQ@Ylav1(lN3LwI!%p|M^BW{?KG>EWC zNPq~NXGOS!mejGW=PU69v-@1(JNSRuAA#k_rHr|hF_$vtQpQ}$m`fRRDWgP6%fliD z<7b%{{^`BneE9I{-H&eE`tae_?b~-heYpMG?Vam)9$vk1d+S5P`<|<5_UN5u^tW$) zut;r0j0!uASkMJtOnB&bZ84|CLoa0dl}&8((hJln+~b(1K8Z5stxuwidF+!YV_tiK zvTFBgiKJn12vfXzn)hC)XY)kYvBf%moJPM}DD_7Pip-h*evE~;kojAa`3PgESDF3= z-aH!^Pk42?n&rHC&YS1FdCr^Xym`)>=e&8&n^Q>piXMh%S59rX=M-O_8cwk&7Ma<(jI%W}3XXUlT7EN9F9 zf5w)*!tyK16}5UF3%v) zrRH;lyLsIh%a%&fc(U(inaIYm>SESO_~DfKtHlq;)W?RWi^);}L1MOUDM`!;FC~fj z;H4xn7aWtU7@jW9kmC4Lr(Y!|Tp>JNOuP`DE>23?(b9D#PDzBP!$Zt9PxrZVGV4&l F|9?WQr!fEk literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/compiler b/dist-newstyle/cache/compiler new file mode 100644 index 0000000000000000000000000000000000000000..284be339ef0c4a2b298588f25fc8528ca811f781 GIT binary patch literal 16883 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 z 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/improved-plan b/dist-newstyle/cache/improved-plan new file mode 100644 index 0000000000000000000000000000000000000000..d7805381f916d92cce83a7a56ddcd40480601280 GIT binary patch literal 4096244 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 z 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

      W*2d^;it2sA! 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�#B$6GL~mH)kBI3 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 ZcU{nvkmHfAz$$is1WBa7-{`KwqV_1)3m!rZ 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 F{{PoaI5q$P literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/plan.json b/dist-newstyle/cache/plan.json new file mode 100644 index 0000000000..46550c61d3 --- /dev/null +++ b/dist-newstyle/cache/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.14.2.0","cabal-lib-version":"3.14.2.0","compiler-id":"ghc-9.12.2","os":"linux","arch":"aarch64","install-plan":[{"type":"pre-existing","id":"Cabal-3.14.1.0-e488","pkg-name":"Cabal","pkg-version":"3.14.1.0","depends":["Cabal-syntax-3.14.1.0-782e","array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","mtl-2.3.1-8dcd","parsec-3.1.18.0-eaa5","pretty-1.1.3.6-a64e","process-1.6.25.0-cc37","time-1.14-17e0","transformers-0.6.1.2-c8d5","unix-2.8.6.0-7c77"]},{"type":"pre-existing","id":"Cabal-syntax-3.14.1.0-782e","pkg-name":"Cabal-syntax","pkg-version":"3.14.1.0","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","mtl-2.3.1-8dcd","parsec-3.1.18.0-eaa5","pretty-1.1.3.6-a64e","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5"]},{"type":"configured","id":"Glob-0.10.2-ea89db4791357e6c50481cb552d3158e97172345f38f12cc0beb83193b0407a7","pkg-name":"Glob","pkg-version":"0.10.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd2ddbecae8f84e8f4cacb5b856901a19c25ceaa11f2525d3ee88d034acb0081","pkg-src-sha256":"6af672ac8427d35cbd42d64142dc288feab266f0be92dae3c696e8860d8173c0","depends":["base-4.21.0.0-2257","containers-0.7-f244","directory-1.3.9.0-6367","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","filepath-1.5.4.0-c1c3","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","pkg-name":"HUnit","pkg-version":"1.6.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a79174e8af616117ad39464cac9de205ca923da6582825e97c10786fda933a4","pkg-src-sha256":"b0b7538871ffc058486fc00740886d2f3172f8fa6869936bfe83a5e10bd744ab","depends":["base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","pkg-name":"OneTuple","pkg-version":"0.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd7266f983da2970e5662168add810dabadabb3a4bb9b137181eafc0ac7ea4d4","pkg-src-sha256":"174da8a0f4004d17b08182cb25b0e045fce5de1fdeae84e9d75fdea2867aab55","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Only-0.1-8d43c6c20012d33bb62db114853befd149d2df3e331b87965b6eda9750affe0d","pkg-name":"Only","pkg-version":"0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c6033d181e0f802e9e8543f683fa9c50aeb01cfdf6c83cd5bb72fb47aa863b07","pkg-src-sha256":"ab7aa193e8c257d3bda6b0b3c1cbcf74cdaa85ab08cb20c2dd62ba248c1ab265","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","pkg-name":"QuickCheck","pkg-version":"2.16.0.0","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f4210647167f873196b01050ac074a44821b6687e26f792ad3474b6388c5f8b7","pkg-src-sha256":"0b563fa6ea11653d76d57e96625f4a476e02b9fdaeba9c05d2ccc10d8da802c0","depends":["base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","pkg-name":"StateVar","pkg-version":"1.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3c022c00485fe165e3080d5da6b3ca9c9b02f62c5deebc584d1b3d1309ce673e","pkg-src-sha256":"5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825","depends":["base-4.21.0.0-2257","stm-2.5.3.1-c578","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"adjunctions-4.4.3-0232a035c7dc59f34f047cc05fee3fbd824f1ce43e7205e02ab69f9f467d123a","pkg-name":"adjunctions","pkg-version":"4.4.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"766e116f1c348b6518b96291961a7768e98fc467cfd29e51c230177eb997e676","pkg-src-sha256":"8beb121cee2bf913dac3188ed1e0e05cf1a0d0f12d4cb4a27c0da58450eb189a","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","pkg-name":"aeson","pkg-version":"2.2.3.0","flags":{"ordered-keymap":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7d48c2395ef168d2c2070fdb02c7998384be27d31a03bb35d1740af4a19a857b","pkg-src-sha256":"daa25cf428256ad05d21f2bfa44077c1b14d6c784b7930a202ee901f11cc6baa","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","character-ps-0.1-9500e493c7b470cbd752968889647a1c1ab958181b7e879d1114b1887e9331f0","containers-0.7-f244","data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","deepseq-1.5.1.0-8867","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","exceptions-0.10.9-1a86","generically-0.1.1-2547f373ebdac0e2fab3ab10db427d8ea8515724237ac8625ee8d5c01fd71e1d","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","network-uri-2.6.4.2-71f3ddac32414829743f6763bd076529fdd16d0a0750db7212d67caed65bda86","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","semialign-1.3.1-77d5698df52d8ce03ff13d57f75fab385202a6e06d02b6ac179b21710d7e9aac","strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","text-2.1.2-3aff","text-iso8601-0.1.1-d9c15410e246a269b2d8fbd5e93292ad79f9cb515efb67ce7e8cbe63adb5cc53","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","pkg-name":"ansi-terminal","pkg-version":"1.1.2","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8e669f090aa3b9a62ef78f687dda12a19231ee163d2084522464036980a322ea","pkg-src-sha256":"a8d04a3e0451e22a6499a92311f0df1196dc65b687df7d10e3f30d92420156b0","depends":["ansi-terminal-types-1.1-45ed522ced82418f637c53b7754e419b62ba4e7b4d276206e9735320fa1b69ea","base-4.21.0.0-2257","colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-types-1.1-45ed522ced82418f637c53b7754e419b62ba4e7b4d276206e9735320fa1b69ea","pkg-name":"ansi-terminal-types","pkg-version":"1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"135f6a381afa19d53d0a3fe40b6dd47e6666c538b09e4300fbb1438759df3248","pkg-src-sha256":"f2e5333eb78da5f4dd330fca0c81a59276cc150c625647cd20f57b7f297a5d25","depends":["base-4.21.0.0-2257","colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"appar-0.1.8-02b0baa029dc0d70860f700f6e3b71f64df5d8262a68877709c6815e9f755703","pkg-name":"appar","pkg-version":"0.1.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a5d529bacbb74d566e4c5f9479af0637eac5957705f6db4d2670517489795de8","pkg-src-sha256":"c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[]}}},{"type":"pre-existing","id":"array-0.5.8.0-8939","pkg-name":"array","pkg-version":"0.5.8.0","depends":["base-4.21.0.0-2257"]},{"type":"configured","id":"assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","pkg-name":"assoc","pkg-version":"1.1.1","flags":{"tagged":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0ab39b4d1feb4caca95ac6e314f48782b27a86a6b8d1f5e8dc4be9fbed11185f","pkg-src-sha256":"231149b7fef09f5dd95af51228615e3b296dbd0faadeca053e0644a4b13b0ff6","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"async-2.2.5-c572a47cf957798aad85828e666dfc22e97ddcfb87cf19f3cfbfddba4bc71c1d","pkg-name":"async","pkg-version":"2.2.5","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b","pkg-src-sha256":"1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7","depends":["base-4.21.0.0-2257","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","stm-2.5.3.1-c578"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","pkg-name":"attoparsec","pkg-version":"0.14.4","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35129d0ab1741f000f1a7d2fc839544919ee6fbb8f2d6e7f0a629c41f91035f3","pkg-src-sha256":"3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c","depends":["array-0.5.8.0-8939","attoparsec-0.14.4-l-attoparsec-internal-aa3b2387b13df3f3beb7059d76589f4f94dfe5511f4c02b64d73018e0bfbc704","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"attoparsec-0.14.4-l-attoparsec-internal-aa3b2387b13df3f3beb7059d76589f4f94dfe5511f4c02b64d73018e0bfbc704","pkg-name":"attoparsec","pkg-version":"0.14.4","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35129d0ab1741f000f1a7d2fc839544919ee6fbb8f2d6e7f0a629c41f91035f3","pkg-src-sha256":"3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib:attoparsec-internal"},{"type":"pre-existing","id":"base-4.21.0.0-2257","pkg-name":"base","pkg-version":"4.21.0.0","depends":["ghc-internal-9.1202.0-2045","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","pkg-name":"base-compat","pkg-version":"0.14.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d01078dff437dd547942a6f12389f1cc874328c1d61c0b795b9a6b822f133c96","pkg-src-sha256":"74e655541e645e8fc7aade1e6a1b6973561be0bca9369bc1623aa345019a35e9","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","unix-2.8.6.0-7c77"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","pkg-name":"base-compat-batteries","pkg-version":"0.14.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"da5b0de54d5eaa630890b63fae694243b3c2a624648bab1878a7e4b0114ed38f","pkg-src-sha256":"3d2bf42f04cd02c8f7ed346454e29e188e1c7865d075c4277ea25197e53828e1","depends":["base-4.21.0.0-2257","base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","pkg-name":"base-orphans","pkg-version":"0.9.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c95cd3490ef99998a496de26afe8879a1d7780fa181a4479a956c690d74f75f1","pkg-src-sha256":"17a35079c8719014560c028d9805ec1301b900972adf212e00af23fe3ebfabd8","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","pkg-name":"bifunctors","pkg-version":"5.6.2","flags":{"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"115a621c4eaaabb07834f9e4dd3371e21f39d034305062f4bd5cd72c2f8880d2","pkg-src-sha256":"1086a9285061eed0c2c5d3cb65aa223defd52fca6d0515bb69ddf2dbc3d9697a","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.3-bcd2","pkg-name":"binary","pkg-version":"0.8.9.3","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244"]},{"type":"configured","id":"binary-orphans-1.0.5-ad4a5374a69f5c657272e163dcf897c3231fac256e07496e701fe7896c7cb36a","pkg-name":"binary-orphans","pkg-version":"1.0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1217df567aae672d09979480c362d27559d226081b9b9bc4107d4af008da1f5f","pkg-src-sha256":"39fbae9e8c2a5193c07afeea34173e5022f82885d6cbb32062b5f1645c44408d","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"binary-parser-0.5.7.7-4a66f2ac489fe1ddc738e8a06199319f65019d3de3dd76f80ba80568510691de","pkg-name":"binary-parser","pkg-version":"0.5.7.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"167d6c5161f14b50b3e68fe529577148d196378aa010440a17af29fd7653ace4","pkg-src-sha256":"59d3007f0cc5db875de9468bcd05850a9ce893a229cfe50c4a2f4383ca72d27b","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","mtl-2.3.1-8dcd","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bitvec-1.1.5.0-8eebf4a69411301b81a7ebf24927d7b97a6e7f3c39cac637bb1f59575cd3d2a1","pkg-name":"bitvec","pkg-version":"1.1.5.0","flags":{"simd":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"434be6dc60e22858a52869c58038c35353f1a778b9679ebc06a2165bcc7f88b3","pkg-src-sha256":"83d27cee5be1d5342ddbf39999d0c8ea54cb433d0891eea5471fbfaa29f8dec5","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-bignum-1.3-775a","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"byteorder-1.0.4-9e649951bca62f92f7670a4972b9b8dbcab1ab62ae94819d9569073d4b734df9","pkg-name":"byteorder","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a952817dcbe20af0346fb55a28c13e95e2ddbf3e99f9b4fffdc063f150f13b20","pkg-src-sha256":"bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919","components":{"lib":{"depends":["base-4.21.0.0-2257"],"exe-depends":[]}}},{"type":"pre-existing","id":"bytestring-0.12.2.0-e6fd","pkg-name":"bytestring","pkg-version":"0.12.2.0","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","pkg-name":"bytestring-strict-builder","pkg-version":"0.4.5.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"98acf30443428047f94ef312376fa6952e7239efc81f7f37c868678b41a9321c","pkg-src-sha256":"3b9ae00a210638d7d3972247f7106e51735327081cda17f4d0c1283b1ca2dd0b","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","pkg-name":"call-stack","pkg-version":"0.4.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ac44d2c00931dc20b01750da8c92ec443eb63a7231e8550188cb2ac2385f7feb","pkg-src-sha256":"430bcf8a3404f7e55319573c0b807b1356946f0c8f289bb3d9afb279c636b87b","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"case-insensitive-1.2.1.0-e7a044c5f8bd9f6ecaeb790fdf08042a8dda0407af41c14bc8f42e8c8582e76c","pkg-name":"case-insensitive","pkg-version":"1.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9dfd3171fc7698cf8d931727d3af3a7b389135b583e46b5adac1f9d2026fff61","pkg-src-sha256":"296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cassava-0.5.4.0-547fe2a7f81de4ab8d0139fe4a2a91417a4a20a27c555830f966b79a6779a27c","pkg-name":"cassava","pkg-version":"0.5.4.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7d1cc4bcceca83f1220db147ccbd3a5e58ed1cb8513c26ec02fbadcb058cf5f0","pkg-src-sha256":"d9dea5652b7bd2175161c00acb5ca107e8b02662b88517e943e06933d6aeab6d","depends":["Only-0.1-8d43c6c20012d33bb62db114853befd149d2df3e331b87965b6eda9750affe0d","array-0.5.8.0-8939","attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"character-ps-0.1-9500e493c7b470cbd752968889647a1c1ab958181b7e879d1114b1887e9331f0","pkg-name":"character-ps","pkg-version":"0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b38ed1c07ae49e7461e44ca1d00c9ca24d1dcb008424ccd919916f92fd48d9fe","pkg-src-sha256":"22de71fde38b236d3e9168a832b5e1e75d1fb4f4028667bdf747b3b4c8c1529c","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"code-page-0.2.1-349260fc61af4c8990fe648f65291d3d79c683b9fd1a6722da7fca63041e3b8f","pkg-name":"code-page","pkg-version":"0.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fe596b0f421abd2894fdb7049b3d76230eb1de6e04e9f635e2695dd55ded856e","pkg-src-sha256":"b2f90e19c61ed8a6ff7295f7f123d4a9913c790d4cf2c6029bc299293fdb2aaa","depends":["base-4.21.0.0-2257"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"],"component-name":"lib"},{"type":"configured","id":"colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a","pkg-name":"colour","pkg-version":"2.3.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ebdcbf15023958838a527e381ab3c3b1e99ed12d1b25efeb7feaa4ad8c37664a","pkg-src-sha256":"2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","pkg-name":"comonad","pkg-version":"5.0.9","flags":{"containers":true,"distributive":true,"indexed-traversable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"75aded79bf583c908e4e4687c0ae067f256e2507536b75f58ffba7748767c353","pkg-src-sha256":"69fb0eb49a80055a9b76d31d0a5648777c4050ac8dbf56a9344b862ed878a789","depends":["base-4.21.0.0-2257","containers-0.7-f244","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.7-f244","pkg-name":"containers","pkg-version":"0.7","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","pkg-name":"contravariant","pkg-version":"1.5.5","flags":{"semigroups":true,"statevar":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"470ed0e040e879e2da4af1b2c8f94e199f6135852a8107858d5ae0a95365835f","pkg-src-sha256":"062fd66580d7aad0b5ba93e644ffa7feee69276ef50f20d4ed9f1deb7642dffa","depends":["StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"contravariant-extras-0.3.5.4-1c63134b79200f93c74249179665476ae914afe3f78944bdc141d07a93b885e3","pkg-name":"contravariant-extras","pkg-version":"0.3.5.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8c6d1c20c7944441a6337ebce2fd2901ea8fb6246bb2df9332303e89121fb7c3","pkg-src-sha256":"2f3a16d38cb6778704db7f142e54be169db4362e033b2d568c172d0c6e64298e","depends":["base-4.21.0.0-2257","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","template-haskell-2.23.0.0-8814","template-haskell-compat-v0208-0.1.9.5-52802155b035e1dae7165ba040f1dbedc25610fdd0620a27d81164e921a02ba2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","pkg-name":"criterion","pkg-version":"1.6.4.0","flags":{"embed-data-files":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ffef33fe1fe8b4511054102e6f8ca892c94be4884464aa2ed76767bcbf8c9f73","pkg-src-sha256":"062bf47a43278dfe8725391b5e550905f185801c79ea772a9cdaa672b2ea2f51","depends":["Glob-0.10.2-ea89db4791357e6c50481cb552d3158e97172345f38f12cc0beb83193b0407a7","aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","binary-0.8.9.3-bcd2","binary-orphans-1.0.5-ad4a5374a69f5c657272e163dcf897c3231fac256e07496e701fe7896c7cb36a","bytestring-0.12.2.0-e6fd","cassava-0.5.4.0-547fe2a7f81de4ab8d0139fe4a2a91417a4a20a27c555830f966b79a6779a27c","code-page-0.2.1-349260fc61af4c8990fe648f65291d3d79c683b9fd1a6722da7fca63041e3b8f","containers-0.7-f244","criterion-measurement-0.2.3.0-10cb8504dcf15b9990e1e58feb19387ffc16a5c7ae2ba1bbdfed2d6aec3860b7","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","exceptions-0.10.9-1a86","filepath-1.5.4.0-c1c3","js-chart-2.9.4.1-47775fc2722951431e2f51fd884a610c7a63daf6bab1577aedc4eb45e5853abe","microstache-1.0.3-67bc1d5a8eb165e954bf69c24601841a11a39a4d117cac7a0c753cdeec5a45f4","mtl-2.3.1-8dcd","mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","parsec-3.1.18.0-eaa5","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","statistics-0.16.3.0-085ed5c05d60a69cef5d842b5c943f4d9974ac0aeadad8b897ff978c5fd78092","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"criterion-1.6.4.0-e-criterion-report-69efa1c1c8d6dc0479fdd2da953554123af13ce8a09b7b2e26aebcbf101c0c02","pkg-name":"criterion","pkg-version":"1.6.4.0","flags":{"embed-data-files":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ffef33fe1fe8b4511054102e6f8ca892c94be4884464aa2ed76767bcbf8c9f73","pkg-src-sha256":"062bf47a43278dfe8725391b5e550905f185801c79ea772a9cdaa672b2ea2f51","depends":["base-4.21.0.0-2257","base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3"],"exe-depends":[],"component-name":"exe:criterion-report","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/criterion-1.6.4.0-e-criterion-report-69efa1c1c8d6dc0479fdd2da953554123af13ce8a09b7b2e26aebcbf101c0c02/bin/criterion-report"},{"type":"configured","id":"criterion-measurement-0.2.3.0-10cb8504dcf15b9990e1e58feb19387ffc16a5c7ae2ba1bbdfed2d6aec3860b7","pkg-name":"criterion-measurement","pkg-version":"0.2.3.0","flags":{"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5d337a2d833839254636731cefa456c57f2c5f6d7ee0ff440459149ad1f9cb7c","pkg-src-sha256":"cc75dca35e8473d6e0c7419fd5a577c2cbb202b3ae0d8af237756c2aeb7cdfe2","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","binary-0.8.9.3-bcd2","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptohash-md5-0.11.101.0-6ef6b02f258f6f7020b2f5ff2a766450202d89f9af79fe0569cd2df472fe3243","pkg-name":"cryptohash-md5","pkg-version":"0.11.101.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2e42586d73bdb149bde829e37b6546d84e60d7fb49c93320633b71c25f4dee54","pkg-src-sha256":"3b08db0ae39df2b44e83053ad30d7546a4c6200a852c22a240a7e03ae1080f05","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptohash-sha1-0.11.101.0-342ec414baa3297102a37f85be3eb10c1a9a2de6a85d4960185dfc29075f9bb8","pkg-name":"cryptohash-sha1","pkg-version":"0.11.101.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2bdf29dbd896bca86bf198c882fa8df1cb31843b71f2907e059b7c10bce0adb3","pkg-src-sha256":"a4042c97ad02eb68e766577ca35c01970c33e96cfd74ccb4dd403e3476a23241","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-default-0.8.0.1-a44e3ad8fa565cefafc9fdd0bdf740d4c790fa80479578dbcc8fe6d251e0f7a5","pkg-name":"data-default","pkg-version":"0.8.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"536ff91641a39b8ad302eebceff767d86ec6b543b44b1db9104650a2b1bc63bd","pkg-src-sha256":"ce085de8ec2196f0c1d30af0ad8a517d5737c9edfd4ebfbb49e8687dfc40b6ca","depends":["base-4.21.0.0-2257","containers-0.7-f244"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","pkg-name":"data-default-class","pkg-version":"0.2.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"788dc5c0be3981ca83ad11206e300a77ae8a1c8b9bc4f9630f563d37f540ccbd","pkg-src-sha256":"0ae530c4fb0bd6c8a8ba399429ccd9c75f9c7696049117178f4ceeb2bd08d5b4","depends":["data-default-0.8.0.1-a44e3ad8fa565cefafc9fdd0bdf740d4c790fa80479578dbcc8fe6d251e0f7a5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","pkg-name":"data-fix","pkg-version":"0.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ee78be6168ca0878d670fede957195d3debf4a37a806d13d72182b274901261b","pkg-src-sha256":"8df052d18c047ab9e9200536a8799b5af3997ebecbbb091a7384b6be8416ab37","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.5.1.0-8867","pkg-name":"deepseq","pkg-version":"1.5.1.0","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"dense-linear-algebra-0.1.0.0-2ce7029718edb63fcc379f634a2dee741609ed83e118098f5ed83ddb7205faeb","pkg-name":"dense-linear-algebra","pkg-version":"0.1.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"918e5fa7e367a58446dcd2b2288a7d84113b0820b5b5e1cef5bd1bdc601b4368","pkg-src-sha256":"f7777a7931b40332ebbc716f64abb63697cbab0128e5c1228d47760c5597f2d4","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"directory-1.3.9.0-6367","pkg-name":"directory","pkg-version":"1.3.9.0","depends":["base-4.21.0.0-2257","file-io-0.1.5-0ca6","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","time-1.14-17e0","unix-2.8.6.0-7c77"]},{"type":"configured","id":"distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","pkg-name":"distributive","pkg-version":"0.6.2.1","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0f99f5541cca04acf89b64432b03422b6408e830a8dff30e6c4334ef1a48680c","pkg-src-sha256":"d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","pkg-name":"dlist","pkg-version":"1.0","flags":{"werror":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"854727594c5a816ab3d10f15b1bc4fedaf9e3f7d1ef517a2bb9011f29ba261d2","pkg-src-sha256":"173d637328bb173fcc365f30d29ff4a94292a1e0e5558aeb3dfc11de81510115","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"either-5.0.3-b26964fd7f3d0a4b0751d250d1db8516051a3d9b685db4b9f1efd694bde17443","pkg-name":"either","pkg-version":"5.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"de3daf61db662a48c10420dee21e70966c8ce590263c563c70d57ef5e7cc03e1","pkg-src-sha256":"6d66691e84955a90a2d169f71cf51c83d76c141635cb8da2a60ddffca4804801","depends":["base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"entropy-0.4.1.11-d3058573191edec3193a223459f31bf318011102d1c9c7265a2a8260f00ffc62","pkg-name":"entropy","pkg-version":"0.4.1.11","flags":{"donotgetentropy":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a40e0ff033e6b392d3d4aa29c4d2b89b4e915f69f10e3b240f681a18279dc64","pkg-src-sha256":"f5dd5a01278f8318d9793ed6071b742f13ce36c7456328baae4acc818e2d92ea","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","unix-2.8.6.0-7c77"],"exe-depends":[]},"setup":{"depends":["Cabal-3.14.1.0-e488","base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","process-1.6.25.0-cc37"],"exe-depends":[]}}},{"type":"pre-existing","id":"exceptions-0.10.9-1a86","pkg-name":"exceptions","pkg-version":"0.10.9","depends":["base-4.21.0.0-2257","mtl-2.3.1-8dcd","stm-2.5.3.1-c578","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"]},{"type":"pre-existing","id":"file-io-0.1.5-0ca6","pkg-name":"file-io","pkg-version":"0.1.5","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","unix-2.8.6.0-7c77"]},{"type":"pre-existing","id":"filepath-1.5.4.0-c1c3","pkg-name":"filepath","pkg-version":"1.5.4.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","exceptions-0.10.9-1a86","os-string-2.0.7-2bc1","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","pkg-name":"free","pkg-version":"5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7f3992a66987bbba5a6546420f6129fb9b66b80cdd005d34ec77a1e1c8ed8340","pkg-src-sha256":"72867f7c89173263765736e8d395e94291f1aaea626ecb1d673d72ce90b94f89","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","exceptions-0.10.9-1a86","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5","transformers-base-0.4.6-7a07e7f280ba7e8bbdb9a29dafa466fbee968bbcac629da131993691422c6440"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"generically-0.1.1-2547f373ebdac0e2fab3ab10db427d8ea8515724237ac8625ee8d5c01fd71e1d","pkg-name":"generically","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3f64278f5c582dd7c6963967b1290079bcd03b8348989f909ac9bd972ddc452e","pkg-src-sha256":"04c5a436bec4b041f71a733f56a1bd7f435f63dde8d3eb5c1f48d55b4dbc43cf","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3-775a","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.13.0-b38a"]},{"type":"pre-existing","id":"ghc-boot-th-9.12.2-573d","pkg-name":"ghc-boot-th","pkg-version":"9.12.2","depends":["base-4.21.0.0-2257","ghc-internal-9.1202.0-2045","ghc-prim-0.13.0-b38a","pretty-1.1.3.6-a64e"]},{"type":"pre-existing","id":"ghc-internal-9.1202.0-2045","pkg-name":"ghc-internal","pkg-version":"9.1202.0","depends":["ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a","rts-1.0.2"]},{"type":"pre-existing","id":"ghc-prim-0.13.0-b38a","pkg-name":"ghc-prim","pkg-version":"0.13.0","depends":["rts-1.0.2"]},{"type":"configured","id":"groups-0.5.3-ba0008e04cf3959eab1111ad5fc120b975e3f48273a0575b3a1d94ab9cde8c4f","pkg-name":"groups","pkg-version":"0.5.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b536d995c65281f5b891a694213fe4abce2fcee71ebda08bb9ec9e334cdcc741","pkg-src-sha256":"ce1e52a8be7effbd1f995eadf0ed34fa45c412656d372db8a38f9c955e43ac38","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","pkg-name":"hashable","pkg-version":"1.5.0.0","flags":{"arch-native":false,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef","pkg-src-sha256":"e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","filepath-1.5.4.0-c1c3","ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a","os-string-2.0.7-2bc1","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711","pkg-name":"hashtables","pkg-version":"1.4.2","flags":{"bounds-checking":false,"debug":false,"detailed-profiling":false,"portable":false,"sse42":false,"unsafe-tricks":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4940cab94a15d469845ccf5225f9cb3d354c15e8127ebb58425c8b681f7721d9","pkg-src-sha256":"ca0e299fee6c0c918f45ce0907afbff1c3891998bb792d1717e4d5f12350ef0d","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"haskell-lexer-1.2.1-70545e0737c01a894c215b16addeaedf6f26b2ca4f6a1ab3a6a4915427552e89","pkg-name":"haskell-lexer","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"393300e223f7b84c334d87780481bcede98392aa8bd82bc882d76b54b7d1c699","pkg-src-sha256":"9d76e1528106b1b32e6e465264e39381ca4b450b72a4b5331e7e5127640a1a41","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hasql-1.9.1.2-inplace","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build-info.json","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711","iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","mtl-2.3.1-8dcd","postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e","postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4","time-1.14-17e0","transformers-0.6.1.2-c8d5","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hasql-1.9.1.2-inplace-benchmarks","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks/build-info.json","depends":["criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"bench:benchmarks","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks/build/benchmarks/benchmarks"},{"type":"configured","id":"hasql-1.9.1.2-inplace-hspec","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec/build-info.json","depends":["hasql-1.9.1.2-inplace-testing-kit","hspec-2.11.12-f2b47053dc574ad992919ebea9064b64551fed477c23d01859818db65a3bd372","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":["hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069"],"component-name":"test:hspec","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec/build/hspec/hspec"},{"type":"configured","id":"hasql-1.9.1.2-inplace-profiling","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling/build-info.json","depends":["hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"test:profiling","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling/build/profiling/profiling"},{"type":"configured","id":"hasql-1.9.1.2-inplace-tasty","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty/build-info.json","depends":["contravariant-extras-0.3.5.4-1c63134b79200f93c74249179665476ae914afe3f78944bdc141d07a93b885e3","hasql-1.9.1.2-inplace","hasql-1.9.1.2-inplace-testing-kit","quickcheck-instances-0.3.33-2034df2a61baaa8c3f393fb97bad47587f538b28853993d4fce558e2d5798068","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","tasty-hunit-0.10.2-5186b61e6bd8a2f8794e90bd53aaa761247ab1d99357ac0e261b95a0a7aea3c9","tasty-quickcheck-0.11.1-1d1979544859d8373b0d7b2e9925aae0869f9059ed12b72352541da8da8bca2d"],"exe-depends":[],"component-name":"test:tasty","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty/build/tasty/tasty"},{"type":"configured","id":"hasql-1.9.1.2-inplace-testing-kit","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build-info.json","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","hasql-1.9.1.2-inplace","transformers-0.6.1.2-c8d5","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906"],"exe-depends":[],"component-name":"lib:testing-kit"},{"type":"configured","id":"hasql-1.9.1.2-inplace-threads-test","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test/build-info.json","depends":["hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"test:threads-test","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test/build/threads-test/threads-test"},{"type":"configured","id":"hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25","pkg-name":"hsc2hs","pkg-version":"0.68.10","flags":{"in-ghc-tree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"725ef6da03d3d6e332db4de0a35bee45d72e4d31decc5ec7f153e6837af5f03e","pkg-src-sha256":"6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76","depends":["base-4.21.0.0-2257","containers-0.7-f244","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","process-1.6.25.0-cc37"],"exe-depends":[],"component-name":"exe:hsc2hs","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25/bin/hsc2hs"},{"type":"configured","id":"hspec-2.11.12-f2b47053dc574ad992919ebea9064b64551fed477c23d01859818db65a3bd372","pkg-name":"hspec","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d16b4a90470b415d56a1b561a1735566b2d8529bdbc5b26a965785768cd26ca1","pkg-src-sha256":"373a16d16f567b753f1bdb103d2515e1cf8d23768c63869d66f0b2f9809daffd","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","hspec-core-2.11.12-22d1595ab42c94dffa904863d898d8aa0405ffb4b3ab6c237eb207fba5cf9d8f","hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3","hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-core-2.11.12-22d1595ab42c94dffa904863d898d8aa0405ffb4b3ab6c237eb207fba5cf9d8f","pkg-name":"hspec-core","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9862660946d84cd40142ef48b42bcc6f6769cc44ca554f7eec6f3dc695b5097b","pkg-src-sha256":"cc5125618268d1f99e4169349c4f38bf48d3ad0df6c4b56396e59c923800040c","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","array-0.5.8.0-8939","base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","haskell-lexer-1.2.1-70545e0737c01a894c215b16addeaedf6f26b2ca4f6a1ab3a6a4915427552e89","hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825","process-1.6.25.0-cc37","quickcheck-io-0.2.0-f6e0d90e2f353ab1d727127bfc6e5b2b804dc18ed3f0f957a6d6417fda72b976","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","stm-2.5.3.1-c578","tf-random-0.5-6a38197ac754fec973cf4b2dda2d81b40a4abfcbf9fab2c4c29b9f63dfa2875e","time-1.14-17e0","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3","pkg-name":"hspec-discover","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb6b6048b6f0fa539176f4b8012241e4c518c9803eb7ef58097c42a68b15b1c3","pkg-src-sha256":"97faa38ee295ca0c958b8c30a6a264d79e51857d724cf11304c0b942bc7e9b10","depends":["base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069","pkg-name":"hspec-discover","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb6b6048b6f0fa539176f4b8012241e4c518c9803eb7ef58097c42a68b15b1c3","pkg-src-sha256":"97faa38ee295ca0c958b8c30a6a264d79e51857d724cf11304c0b942bc7e9b10","depends":["base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3"],"exe-depends":[],"component-name":"exe:hspec-discover","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069/bin/hspec-discover"},{"type":"configured","id":"hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825","pkg-name":"hspec-expectations","pkg-version":"0.8.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4237f094a7931202ff57ac6475542b0b314b50a7024550e2b6eb87cfb0d4ff93","pkg-src-sha256":"7b8dde7e230ecfda90c95fd80478b244a45e68602fb3dd4a76f4710619be21ff","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","pkg-name":"indexed-traversable","pkg-version":"0.1.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"42d9e84a65a0c17c248233cab98ada872ff6140dfa24d109d6eb285204d07e7d","pkg-src-sha256":"58be09afdf3ad5a25c2aa0d2a7df80d602df09f4e76d3abf2b7cdb0e75d03b22","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","containers-0.7-f244","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","pkg-name":"indexed-traversable-instances","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"68df0fc8070ae2c15f9e6febf1449fee364c131a6d1e93cac45e7895ba86dd89","pkg-src-sha256":"3c2bb62fba141d6696177070d63b88bc56b194bc60f6b73d2263b0244e2fc7c1","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","base-4.21.0.0-2257","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","pkg-name":"integer-conversion","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"941d4ae16e2124cbff5defe2abedb49efc8e03a594f817035bf231a317e6c1c9","pkg-src-sha256":"c18164a048073310f6353ebc64c9037b52a4b8299963ce05e027bcf60e22155a","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","pkg-name":"integer-logarithms","pkg-version":"1.0.4","flags":{"check-bounds":false,"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"caa8eaf9e69fe19f0d356b3f3185df628131407413c182b314ac5dfe2217e4d1","pkg-src-sha256":"6a93c76c2518cbe2d72ab17da6ae46d8cae93cbfb7c5a5ad5783f903c1448f45","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","pkg-name":"invariant","pkg-version":"0.6.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4a9a609f4e93ffed158b3b4f5a80822c6da30aa71a5370307c0c00c2d658d1c6","pkg-src-sha256":"a9e2ab4ee3e0d4613beb7bda36a8ebc4f72318450514f4832d2fa43b74f0aeb3","depends":["StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","array-0.5.8.0-8939","base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","ghc-prim-0.13.0-b38a","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","pkg-name":"iproute","pkg-version":"1.7.15","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"81ed5d5915467825e2381a8b2fabd7ce9b83c4209f4825bd15270b433cf52862","pkg-src-sha256":"18a331a7e0e6f9dc89a2da95577b0d76bd2690b8f832b72b46d6cc9b667b4ba5","depends":["appar-0.1.8-02b0baa029dc0d70860f700f6e3b71f64df5d8262a68877709c6815e9f755703","base-4.21.0.0-2257","byteorder-1.0.4-9e649951bca62f92f7670a4972b9b8dbcab1ab62ae94819d9569073d4b734df9","bytestring-0.12.2.0-e6fd","containers-0.7-f244","network-3.2.7.0-f2653386051cc13abf95fa115707e79cafbceb178390f7b42970432a486d675a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-chart-2.9.4.1-47775fc2722951431e2f51fd884a610c7a63daf6bab1577aedc4eb45e5853abe","pkg-name":"js-chart","pkg-version":"2.9.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0f4bc23d19ac869ec0cbdbd7596a5074ba4be68e85fa5bb76a3bed559907b3bc","pkg-src-sha256":"0a08efdd35bd1b8f293f9163f59305f31835304b74c3e3a1a840fc94bbc9bd0e","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"kan-extensions-5.2.7-fd71101699e0be4ec0b2d0eacb39fb1ed64099e371380d28eaf7af86478c997c","pkg-name":"kan-extensions","pkg-version":"5.2.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b91397acc14202e8a9eb5717c9d5ca12b63c00b410e902cb11f76d38fcec7895","pkg-src-sha256":"c323acff95cdef6516f2f1a733a1f00f7e0caa1b7061f8831ed82e18fd37e158","depends":["adjunctions-4.4.3-0232a035c7dc59f34f047cc05fee3fbd824f1ce43e7205e02ab69f9f467d123a","array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"keys-3.12.4-c5dc715bc88a1e26df71e6e3ee6a32f09c8952ee4121ed9f2367504503fede5b","pkg-name":"keys","pkg-version":"3.12.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ce43085eb0506a2fff6020dc61351e1c0c61c29f90d3ea5030756f3ed50caa16","pkg-src-sha256":"9412a2135cbf7fb285e01016aeb311d022ba9962fd9699ddef620f6dabd68912","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","pkg-name":"math-functions","pkg-version":"0.3.4.4","flags":{"system-erf":true,"system-expm1":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"859a4f623c5f238e345f241e38c551cc4776cadc59b1e511880bbf7968f7419f","pkg-src-sha256":"2441d8dd50eff445356048b2a0cdf88c4a7ba0f56614293d4975e1b081faf8fa","depends":["base-4.21.0.0-2257","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","deepseq-1.5.1.0-8867","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"microstache-1.0.3-67bc1d5a8eb165e954bf69c24601841a11a39a4d117cac7a0c753cdeec5a45f4","pkg-name":"microstache","pkg-version":"1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"86a55f331563ea2e4a16f62c13fe601e1a9d0377d479bf6d5f03ccb3bedc188e","pkg-src-sha256":"35f290e57bd40fbaf7695d85efe34a2836441efbbb9deb696c7982b898aa898f","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","parsec-3.1.18.0-eaa5","text-2.1.2-3aff","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1-8dcd","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"]},{"type":"configured","id":"mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","pkg-name":"mwc-random","pkg-version":"0.15.2.0","flags":{"benchpapi":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"89d49395d04df402d33550e4083438e7e26adb0db9130f8f985cc196dc19bb80","pkg-src-sha256":"5843ab06e7c9109326aa4eb5e26486400d6e3bce25944f6671ce989499174133","depends":["base-4.21.0.0-2257","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","time-1.14-17e0","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"network-3.2.7.0-f2653386051cc13abf95fa115707e79cafbceb178390f7b42970432a486d675a","pkg-name":"network","pkg-version":"3.2.7.0","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3a1ec8b8dd32f1d5a541679a67de60d6626487a95f20c6bc245268ae7142ab7","pkg-src-sha256":"68548e660632a3c09b230c33fe08cc880273372b485e65cbe7a717936de9728b","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","stm-2.5.3.1-c578"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"]}}},{"type":"configured","id":"network-info-0.2.1-2658d80a75488549cff839d72e297acdf0396af206b53e3cb4bd276adc06c77d","pkg-name":"network-info","pkg-version":"0.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2798c2e4cc2c32108bd4b05efa921ce6f054ebc381c5e465c9bd74c7d538af17","pkg-src-sha256":"9b2d88312fc8280351d5003200cc07decbb865f85d3aa7b1094b238bd6a8b404","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"network-uri-2.6.4.2-71f3ddac32414829743f6763bd076529fdd16d0a0750db7212d67caed65bda86","pkg-name":"network-uri","pkg-version":"2.6.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588","pkg-src-sha256":"9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","parsec-3.1.18.0-eaa5","template-haskell-2.23.0.0-8814","th-compat-0.1.6-3e060d292da30dc27581db286a416acde858d5375461cda8fa4fe024bbd817d1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-locale-1.0.0.7-abff9ded3ca3b185256c0c1653dde775890d50ac7090725f7fa2a98bc48b1a8c","pkg-name":"old-locale","pkg-version":"1.0.0.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fa998be2c7e00cd26a6e9075bea790caaf3932caa3e9497ad69bc20380dd6911","pkg-src-sha256":"dbaf8bf6b888fb98845705079296a23c3f40ee2f449df7312f7f7f1de18d7b50","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-time-1.1.0.4-b028ef2400e5e50da2d6cb6830429dacd1ed2866ac3354b1697daaf506b668de","pkg-name":"old-time","pkg-version":"1.1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e3dfb5b1d7cb24ed7ea9bbca1153485ae38fa0534b0581886dd42eeedf82447","pkg-src-sha256":"1e22eb7f7b924a676f52e317917b3b5eeceee11c74ef4bc609c0bcec624c166f","components":{"lib":{"depends":["base-4.21.0.0-2257","old-locale-1.0.0.7-abff9ded3ca3b185256c0c1653dde775890d50ac7090725f7fa2a98bc48b1a8c"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"]}}},{"type":"configured","id":"optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","pkg-name":"optparse-applicative","pkg-version":"0.19.0.0","flags":{"process":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0b47b3ff7eb4a855b5f7d401690365fc62a32057374927ce0d478b620996222d","pkg-src-sha256":"cf16aeefd821730c7738447fa7c6b7ada7ca1c9cc25400d64ef283294d345871","depends":["base-4.21.0.0-2257","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","process-1.6.25.0-cc37","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"os-string-2.0.7-2bc1","pkg-name":"os-string","pkg-version":"2.0.7","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","exceptions-0.10.9-1a86","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"parallel-3.2.2.0-7116e242336785fbdec97cb2fcf285015721d55b041430d22f749de68ee23475","pkg-name":"parallel","pkg-version":"3.2.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9d7b34ac537940f67732eca31d48a43bd78fb65a91baebddf63bee4fc3813d81","pkg-src-sha256":"170453a71a2a8b31cca63125533f7771d7debeb639700bdabdd779c34d8a6ef6","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.18.0-eaa5","pkg-name":"parsec","pkg-version":"3.1.18.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","mtl-2.3.1-8dcd","text-2.1.2-3aff"]},{"type":"configured","id":"pointed-5.0.5-63eafbf3bec6e7e3467bbfe38ca8de6a3a2ab76bcba360e69b40dec77df450ca","pkg-name":"pointed","pkg-version":"5.0.5","flags":{"comonad":true,"containers":true,"kan-extensions":true,"semigroupoids":true,"stm":true,"tagged":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d02fd1e73a62348377cb9b1697bf576af45a61a4b911732a116c8a4258962910","pkg-src-sha256":"f99d95cdfb50083f762fa816ba53eed481e28cf4c0e902e2cad35e7452bb6ef1","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","kan-extensions-5.2.7-fd71101699e0be4ec0b2d0eacb39fb1ed64099e371380d28eaf7af86478c997c","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e","pkg-name":"postgresql-binary","pkg-version":"0.14.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"06366fd82deda89f9237b885e9493eafe0b9903d05c19761288b048dcc9a99ee","pkg-src-sha256":"77a1c30557405c42ee9cdd0d67fef7f7a9fb3d56c2285f6e09d706b599a61724","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","binary-parser-0.5.7.7-4a66f2ac489fe1ddc738e8a06199319f65019d3de3dd76f80ba80568510691de","bytestring-0.12.2.0-e6fd","bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","containers-0.7-f244","iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74","pkg-name":"postgresql-libpq","pkg-version":"0.11.0.0","flags":{"use-pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ca7facdf755f7ad3950e75eee4a388f52179b027ca983be362c400ab0a37a4c4","pkg-src-sha256":"034ab1208fe6bb33009b3c7c75a06dfea5b306e289a013fff2e2e450d63ed2a3","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","postgresql-libpq-configure-0.11-7667dee933e334184e802dc210bc38df5950fa2939614dc1b530a26d3aa7bba9","unix-2.8.6.0-7c77"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"],"component-name":"lib"},{"type":"configured","id":"postgresql-libpq-configure-0.11-7667dee933e334184e802dc210bc38df5950fa2939614dc1b530a26d3aa7bba9","pkg-name":"postgresql-libpq-configure","pkg-version":"0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"019c5d83da0b4dc0b4487e0e868f2eed5efa25e0688f5cfc2ba8191a80e527aa","pkg-src-sha256":"8d4fe34b5475dd0c8339b5c05506111a10214ea18a10cd366e5440eaac95b2d8","components":{"lib":{"depends":["base-4.21.0.0-2257"],"exe-depends":[]}}},{"type":"pre-existing","id":"pretty-1.1.3.6-a64e","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","pkg-name":"prettyprinter","pkg-version":"1.7.1","flags":{"buildreadme":false,"text":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9c43c9d8c3cd9f445596e5a2379574bba87f935a4d1fa41b5407ee3cf4edc743","pkg-src-sha256":"5e6ea6903114fa118fcc359633dfb7ecddecb92c06c853d02a77b72b251f0b45","depends":["base-4.21.0.0-2257","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","pkg-name":"prettyprinter-ansi-terminal","pkg-version":"1.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b00f727b964cf13adff7acf575a71fa7e405f5240aff50b07f10df76ab89f8d3","pkg-src-sha256":"813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3","depends":["ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","base-4.21.0.0-2257","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","pkg-name":"primitive","pkg-version":"0.9.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfdd6572944c11e69208237dd32a2eb9d975b4f4e9064a7b8dc952cb0e256846","pkg-src-sha256":"44b4de41813c7bc5db8a57f87c3612a069b65086946268ba165097252ebd3d76","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.25.0-cc37","pkg-name":"process","pkg-version":"1.6.25.0","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","unix-2.8.6.0-7c77"]},{"type":"configured","id":"profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","pkg-name":"profunctors","pkg-version":"5.6.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bfdb8c8b8cd4390e30219219edaff6ae7f428516f7338f0b7c39cb16b84bad2c","pkg-src-sha256":"b9c6f427368d2e811e4c48b59005218672458fd2f00a02cbefb8be9c751c0ef3","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"quickcheck-instances-0.3.33-2034df2a61baaa8c3f393fb97bad47587f538b28853993d4fce558e2d5798068","pkg-name":"quickcheck-instances","pkg-version":"0.3.33","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"709fb12799f1b5b00112150168dbb57368ce6c741ec01f23cf44f9e7743e6cf6","pkg-src-sha256":"6803cd547b027bcab7b029a69ad8428e28af842b7709113eb6a43ab2f2f08866","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","case-insensitive-1.2.1.0-e7a044c5f8bd9f6ecaeb790fdf08042a8dda0407af41c14bc8f42e8c8582e76c","containers-0.7-f244","data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","old-time-1.1.0.4-b028ef2400e5e50da2d6cb6830429dacd1ed2866ac3354b1697daaf506b668de","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","text-2.1.2-3aff","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"quickcheck-io-0.2.0-f6e0d90e2f353ab1d727127bfc6e5b2b804dc18ed3f0f957a6d6417fda72b976","pkg-name":"quickcheck-io","pkg-version":"0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7bf0b68fb90873825eb2e5e958c1b76126dcf984debb998e81673e6d837e0b2d","pkg-src-sha256":"fb779119d79fe08ff4d502fb6869a70c9a8d5fd8ae0959f605c3c937efd96422","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","pkg-name":"random","pkg-version":"1.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0b4f649c3e78713b2ccad1535251ee34b148237fb2229d7058c2b1d9ccc324b8","pkg-src-sha256":"d840ac83f265b0cfa2a678f8ec78627eb50cf9be2f067c52c8a4239c29b71a35","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","mtl-2.3.1-8dcd","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rebase-1.21.2-dbc3dc89c9855716e4e914949e74d3628aa90b0cafd9256d6d9dfb3f52c4072a","pkg-name":"rebase","pkg-version":"1.21.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"977dd7da0232b7469966f04efea26d46ff417c3be5893de2c091d40bd8bdf997","pkg-src-sha256":"6c19f5576c888078f0c7f172da05873611bfc070617d033f4f14fedd3e82fffb","depends":["base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","bytestring-0.12.2.0-e6fd","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","deepseq-1.5.1.0-8867","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","either-5.0.3-b26964fd7f3d0a4b0751d250d1db8516051a3d9b685db4b9f1efd694bde17443","groups-0.5.3-ba0008e04cf3959eab1111ad5fc120b975e3f48273a0575b3a1d94ab9cde8c4f","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","selective-0.7.0.1-b88f9e87ce96c09fb5b13045513a47a15cbf30d46e56f133fdc36bc56bdfe019","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","stm-2.5.3.1-c578","text-2.1.2-3aff","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-instances-3.4.3-ff9124a65bf238b5f3e6aaeecc4532740d0219fd64d6fa37a91d2463c73b61d4","void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7","pkg-name":"rerebase","pkg-version":"1.21.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5971685d457bd378a4d6f873fdd6fd6f3808321fde36a153da53907ae5d73d72","pkg-src-sha256":"77cc0d707ee0886b49206065476e77d0600e4c305b37701a38ef55e736a7fc10","depends":["rebase-1.21.2-dbc3dc89c9855716e4e914949e74d3628aa90b0cafd9256d6d9dfb3f52c4072a"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts-1.0.2","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","pkg-name":"scientific","pkg-version":"0.3.8.0","flags":{"integer-simple":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ba83a6701dd0110138443757aca4a42786afa94272b73045ef878fd860d1732e","pkg-src-sha256":"13b343bca8aa26d7718e52e622e5a118056653edafcbc7ccc5333be7217218cf","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"selective-0.7.0.1-b88f9e87ce96c09fb5b13045513a47a15cbf30d46e56f133fdc36bc56bdfe019","pkg-name":"selective","pkg-version":"0.7.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"542ab572491898552b42d62d43a7e8c70fb93d714c06c06a4de6f331fee87df2","pkg-src-sha256":"dbfb4be71c7956f54e099c34ffe538dfaa99ed3911208df5828563da22b6aee3","depends":["base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semialign-1.3.1-77d5698df52d8ce03ff13d57f75fab385202a6e06d02b6ac179b21710d7e9aac","pkg-name":"semialign","pkg-version":"1.3.1","flags":{"semigroupoids":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfe515a9e43230f5308564a649a04ea1538499ed98b944644b77bed5394b9deb","pkg-src-sha256":"66e87bc254ffec2ee908bf625c42d3b7363238d6ab1cfba8934bbee7590c9df7","depends":["base-4.21.0.0-2257","containers-0.7-f244","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","pkg-name":"semigroupoids","pkg-version":"6.0.1","flags":{"comonad":true,"containers":true,"contravariant":true,"distributive":true,"tagged":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bfee06a6d88038a88ddd10fc21c230bf5ee3a14d0584dc6ab7ad54a9252c2c21","pkg-src-sha256":"1d532030862414f5d4f2f6f001783f77aa14e5f05ee8e3c4a2d2129fca29cc1f","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","pkg-name":"semigroups","pkg-version":"0.20","flags":{"binary":true,"bytestring":true,"bytestring-builder":false,"containers":true,"deepseq":true,"hashable":true,"tagged":true,"template-haskell":true,"text":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"925341e6f7eb104cb490bef06eab93bb7995c7c67c51ee938185a2ddefa7aaf2","pkg-src-sha256":"902d2e33c96b40a89de5957f2a9e097197afcc35e257e45b32ebe770993673e1","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","pkg-name":"splitmix","pkg-version":"0.1.2","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"110fbfcb513b77caf17fa5e53e5ae50d1b4b178d0eab2a86db9814a8b476c6f0","pkg-src-sha256":"3e5342d41a80d925e9dd95b513ae1d076347f6802209a49a8f8829b7b577d4be","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"statistics-0.16.3.0-085ed5c05d60a69cef5d842b5c943f4d9974ac0aeadad8b897ff978c5fd78092","pkg-name":"statistics","pkg-version":"0.16.3.0","flags":{"benchpapi":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfc4d4934eb7ae0c1fde7dbcfbbcbb59bf6c3d099a5b20e02778b4e4de28bc22","pkg-src-sha256":"03ec46e6641227cf7318b7a1f87acf005d38c8cfc4e13f40ff9014a9266ba1e7","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","async-2.2.5-c572a47cf957798aad85828e666dfc22e97ddcfb87cf19f3cfbfddba4bc71c1d","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","deepseq-1.5.1.0-8867","dense-linear-algebra-0.1.0.0-2ce7029718edb63fcc379f634a2dee741609ed83e118098f5ed83ddb7205faeb","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","parallel-3.2.2.0-7116e242336785fbdec97cb2fcf285015721d55b041430d22f749de68ee23475","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.3.1-c578","pkg-name":"stm","pkg-version":"2.5.3.1","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257"]},{"type":"configured","id":"strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","pkg-name":"strict","pkg-version":"0.5.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"58c373b7c7748cbb4a5a6c8c15073f99a1c10a9a9bb6894ac33f43a5cdb901f2","pkg-src-sha256":"77719280c2a86312e748227bfa732eeaae0e7df48d57acc3c2e5b7b07afe2f8b","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","text-2.1.2-3aff","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","pkg-name":"tagged","pkg-version":"0.8.9","flags":{"deepseq":true,"transformers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6aad7d2fd594bd51834450d97850b9959305951993ea739fa2bbc18b55d8767d","pkg-src-sha256":"6daad88ebb414ba6a556d2898d2cbe7650e4276010e3a6eed939daf54b956784","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","pkg-name":"tasty","pkg-version":"1.5.3","flags":{"unix":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6b5dda3f16db1274a0b3e6c4073ac57172a1e96b1dca05666c5cbd1183639412","pkg-src-sha256":"54a0c7b644813af871a3726ac8771b5e17b5158c792a7acf8f9e2d3ae9360780","depends":["ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","base-4.21.0.0-2257","containers-0.7-f244","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","unix-2.8.6.0-7c77"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-hunit-0.10.2-5186b61e6bd8a2f8794e90bd53aaa761247ab1d99357ac0e261b95a0a7aea3c9","pkg-name":"tasty-hunit","pkg-version":"0.10.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"22bc1122e8256664d7cb1e44c6bcace95676c523179947bf2403db71af43dc6d","pkg-src-sha256":"5af01fa7c1ef98b324da062e36f79986a8b1b83ff0cf6fd53f95d976b41e03f6","depends":["base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-quickcheck-0.11.1-1d1979544859d8373b0d7b2e9925aae0869f9059ed12b72352541da8da8bca2d","pkg-name":"tasty-quickcheck","pkg-version":"0.11.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fca860abe029f9d34cb5168d6a9ab438d7fc4c016c8c594bbf1655d58982fbf3","pkg-src-sha256":"e3d4de7455ed342f8874d84686def897b8a316ce198461da18106d8a1f63246a","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.23.0.0-8814","pkg-name":"template-haskell","pkg-version":"2.23.0.0","depends":["base-4.21.0.0-2257","ghc-boot-th-9.12.2-573d"]},{"type":"configured","id":"template-haskell-compat-v0208-0.1.9.5-52802155b035e1dae7165ba040f1dbedc25610fdd0620a27d81164e921a02ba2","pkg-name":"template-haskell-compat-v0208","pkg-version":"0.1.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d4f8983c055017c7dbe62e3e2c668ddb7d1bbca3087563477ff7eb2275d3c6f9","pkg-src-sha256":"51359f8dc8d51f30b59521d214837d13c4f6c9b5c4afd0eba813c26cc2449d1f","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"text-2.1.2-3aff","pkg-name":"text","pkg-version":"2.1.2","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4","pkg-name":"text-builder","pkg-version":"1.0.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"19bc28b9ff0eed90b8154be50816bae255586e7c5533fddd2ce49b47c498d509","pkg-src-sha256":"9323f4a824e7b951cafbc5c180402658d4fc9f95afe4a4e2e5b317f75c619be8","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","text-2.1.2-3aff","text-builder-core-0.1.1.1-809ab74cb9940ddee34595551352e1bdf559835dfec083686c2cd4e930a2ab64","time-1.14-17e0","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-builder-core-0.1.1.1-809ab74cb9940ddee34595551352e1bdf559835dfec083686c2cd4e930a2ab64","pkg-name":"text-builder-core","pkg-version":"0.1.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"402fdf2f2695950643fea299719c3dccc81c797d94bbcaa7d1cbf182e9937afa","pkg-src-sha256":"a9a30930dc59f8bd2b243991df7c6a8dcf2f65353c0df1b0fed8c1ba1f2d7d86","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-iso8601-0.1.1-d9c15410e246a269b2d8fbd5e93292ad79f9cb515efb67ce7e8cbe63adb5cc53","pkg-name":"text-iso8601","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e07a625eef969338992bf9bba8e5dc73f07ac65f991ba636b8f1175890d15849","pkg-src-sha256":"9dead2b7ceeae40fe0fc060bd54795c32e9926c9d1aebae8f9b9a621fba88202","depends":["base-4.21.0.0-2257","integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","text-2.1.2-3aff","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","pkg-name":"text-short","pkg-version":"0.1.6","flags":{"asserts":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"41be94ccd3f6646ab69b0b05c5130ea3c7911a4598ab9b9192f21ad25a69163a","pkg-src-sha256":"8173ea138d7dc398747b636012bf6e79e17186560b8a7a7fc9e6456d78556eab","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tf-random-0.5-6a38197ac754fec973cf4b2dda2d81b40a4abfcbf9fab2c4c29b9f63dfa2875e","pkg-name":"tf-random","pkg-version":"0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"14012837d0f0e18fdbbe3d56e67da8622ee5e20b180abce952dd50bd9f36b326","pkg-src-sha256":"2e30cec027b313c9e1794d326635d8fc5f79b6bf6e7580ab4b00186dadc88510","depends":["base-4.21.0.0-2257","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","time-1.14-17e0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","pkg-name":"th-abstraction","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3011403d85b0070630e33d66b9370535ccd1e0e672ae58f847550b2b15bb4fd8","pkg-src-sha256":"f9b6184aba4c6b61dd0d96f7dad41a4c9db0a01d3cdbf993a7d860488f1c04c5","depends":["base-4.21.0.0-2257","containers-0.7-f244","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-compat-0.1.6-3e060d292da30dc27581db286a416acde858d5375461cda8fa4fe024bbd817d1","pkg-name":"th-compat","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e83d97946f84fe492762ceb3b4753b4770c78b0b70e594078700baa91a5106c2","pkg-src-sha256":"b781a0c059872bc95406d00e98f6fa7d9e81e744730f75186583cb4dcea0a4eb","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","pkg-name":"these","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35c57aede96c15ea1fed559ac287b1168eb2b2869d79e62ed8c845780b7ea136","pkg-src-sha256":"17d6d933365edabf801a16842c1403bdd37cc5300faa2fcca980decdab22e4de","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.14-17e0","pkg-name":"time","pkg-version":"1.14","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","pkg-name":"time-compat","pkg-version":"1.9.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"31af49b09fa7195071cd841aa142eb1c4601d4a336ee76cd63242eebff8f98a7","pkg-src-sha256":"502ef8694a5b131b47c0e5df2e9053d005a3b345b30f5225af04f081d3ef5cf0","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814","time-1.14-17e0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"transformers-0.6.1.2-c8d5","pkg-name":"transformers","pkg-version":"0.6.1.2","depends":["base-4.21.0.0-2257"]},{"type":"configured","id":"transformers-base-0.4.6-7a07e7f280ba7e8bbdb9a29dafa466fbee968bbcac629da131993691422c6440","pkg-name":"transformers-base","pkg-version":"0.4.6","flags":{"orphaninstances":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6f18f320e371c8954c4b6b211e2fdd5d15a6d6310bd605b9d640f47ede408961","pkg-src-sha256":"323bf8689eb691b122661cffa41a25e00fea7a768433fe2dde35d3da7d32cf90","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","stm-2.5.3.1-c578","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","pkg-name":"transformers-compat","pkg-version":"0.7.2","flags":{"five":false,"five-three":true,"four":false,"generic-deriving":true,"mtl":true,"three":false,"two":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"044fb9955f63ee138fcebedfdcbe54afe741f2d5892a2d0bdf3a8052bd342643","pkg-src-sha256":"b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"unix-2.8.6.0-7c77","pkg-name":"unix","pkg-version":"2.8.6.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","time-1.14-17e0"]},{"type":"configured","id":"unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","pkg-name":"unordered-containers","pkg-version":"0.2.20","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"233cbcdda6c2698932bb391ce0935fb44f80c115621ee815a21ed33ac8ede422","pkg-src-sha256":"d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","pkg-name":"uuid","pkg-version":"1.3.16","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d9b015a3498d4c0542501099491899c0f3df8ec1ff3709cd6e178127e99c7794","pkg-src-sha256":"1a4679cfb4ec5fcc8dd584bd4fc66f744bfd0433c775e400235058c13f720df6","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","cryptohash-md5-0.11.101.0-6ef6b02f258f6f7020b2f5ff2a766450202d89f9af79fe0569cd2df472fe3243","cryptohash-sha1-0.11.101.0-342ec414baa3297102a37f85be3eb10c1a9a2de6a85d4960185dfc29075f9bb8","entropy-0.4.1.11-d3058573191edec3193a223459f31bf318011102d1c9c7265a2a8260f00ffc62","network-info-0.2.1-2658d80a75488549cff839d72e297acdf0396af206b53e3cb4bd276adc06c77d","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","text-2.1.2-3aff","time-1.14-17e0","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","pkg-name":"uuid-types","pkg-version":"1.0.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5ac2b681a8d7676f6a51ac1b113bfdcf18dd7fdbb313034850ed6493eef96da0","pkg-src-sha256":"7e0dd953483d6fd3ca49bcaed6b11f9e3c2787213479b2581e07747836b8357e","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","pkg-name":"vector","pkg-version":"0.13.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f","pkg-src-sha256":"28f203c786cbf8ac6dc3fea3378ec36f34173d505fb4a1dd60fc8418ad91c423","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-stream-0.1.0.1-0e36f1198471089cfe8d058619da9c3b3cc767a736e96bb4d43e19cc95a49251"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.13.2.0-l-benchmarks-O2-cbae7d44aa6e8858e46d32d034fdd0f880ae087dc6e6261c1508f04327fc0033","pkg-name":"vector","pkg-version":"0.13.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f","pkg-src-sha256":"28f203c786cbf8ac6dc3fea3378ec36f34173d505fb4a1dd60fc8418ad91c423","depends":["base-4.21.0.0-2257","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib:benchmarks-O2"},{"type":"configured","id":"vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","pkg-name":"vector-algorithms","pkg-version":"0.9.1.0","flags":{"bench":true,"boundschecks":true,"internalchecks":false,"llvm":false,"unsafechecks":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ccb940a004509aa908a16fa6b9b9f4e409e8a660fb5dd4c88274c8df16b1ffbf","pkg-src-sha256":"d2b674676802670d8a682b357da6b6b5741b4a33b191f0ffe5f2b2bc40558eb2","depends":["base-4.21.0.0-2257","bitvec-1.1.5.0-8eebf4a69411301b81a7ebf24927d7b97a6e7f3c39cac637bb1f59575cd3d2a1","bytestring-0.12.2.0-e6fd","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","pkg-name":"vector-binary-instances","pkg-version":"0.2.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ba8f2c5a9527821ab47bbd991dd7b7533bcaa68662c84c4f16b871655117ceb","pkg-src-sha256":"b72e3b2109a02c75cb8f07ef0aabba0dba6ec0148e21321a0a2b2197c9a2f54d","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-instances-3.4.3-ff9124a65bf238b5f3e6aaeecc4532740d0219fd64d6fa37a91d2463c73b61d4","pkg-name":"vector-instances","pkg-version":"3.4.3","flags":{"hashable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1b4d6bd6b2da3f2a853a5945551d1ad93c5c96efef2ff3ac19272a3caf759336","pkg-src-sha256":"67259803df61fad998e2e8410253ca0552d25d7dfb87d0ddc702c82277314caa","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","keys-3.12.4-c5dc715bc88a1e26df71e6e3ee6a32f09c8952ee4121ed9f2367504503fede5b","pointed-5.0.5-63eafbf3bec6e7e3467bbfe38ca8de6a3a2ab76bcba360e69b40dec77df450ca","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-stream-0.1.0.1-0e36f1198471089cfe8d058619da9c3b3cc767a736e96bb4d43e19cc95a49251","pkg-name":"vector-stream","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5ac96695212a45ae7dc16d8031dbf5311da53e052c35f7ad4a8e2db7fafb651e","pkg-src-sha256":"d0f507334bdea5431a2f07f525a97f29e76522c32210f5de6d5a2b4f1d42bf7c","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b","pkg-name":"vector-th-unbox","pkg-version":"0.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"50d26b8d489c9231f6ecf388233507bce39c41c80960275f20456358e821f6b7","pkg-src-sha256":"8aa4ca464e842706e5b5234b8242d1aafec9ee755659b0e3ff44ecde13a80149","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5","pkg-name":"void","pkg-version":"0.7.3","flags":{"safe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"13d30f62fcdf065e595d679d4ac8b4b0c1bb1a1b73db7b5b5a8f857cb5c8a546","pkg-src-sha256":"53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee","pkg-name":"witherable","pkg-version":"0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"85bab588ebca37996fc3171b9d8b2e065eb0536c9f44224bcf037c0849a881de","pkg-src-sha256":"48434cc1e465b13cbc0133a90c3ec0d827c93b77ce95807fe0a38b65f4918cd1","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","containers-0.7-f244","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"}]} \ No newline at end of file diff --git a/dist-newstyle/cache/solver-plan b/dist-newstyle/cache/solver-plan new file mode 100644 index 0000000000000000000000000000000000000000..f6b5fd12a76919441ebc0614b6ee08f40392418d GIT binary patch literal 1418961 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¥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%0DkoYgq>AD+rM!IP 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%0AB1|7F4J;zd{+*WXBcIIy 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 A82|tP literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/source-hashes b/dist-newstyle/cache/source-hashes new file mode 100644 index 0000000000000000000000000000000000000000..8555ca1cfac91740e956e5e4cb90a93f25569704 GIT binary patch literal 91712 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf new file mode 100644 index 0000000000..fe2ba128f6 --- /dev/null +++ b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf @@ -0,0 +1,63 @@ +name: z-hasql-z-testing-kit +version: 1.9.1.2 +package-name: hasql +lib-name: testing-kit +id: hasql-1.9.1.2-inplace-testing-kit +key: hasql-1.9.1.2-inplace-testing-kit +license: MIT +copyright: (c) 2014, Nikita Volkov +maintainer: Nikita Volkov +author: Nikita Volkov +homepage: https://github.com/nikita-volkov/hasql +synopsis: Fast PostgreSQL driver with a flexible mapping API +description: + Root of the \"hasql\" ecosystem. + This library provides connection management, execution of queries and mapping of parameters and results. + Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. + For more details and tutorials see . + + The API comes free from all kinds of exceptions. + All error-reporting is explicit and is presented using the 'Either' type. + + \"hasql\" requires you to have the "\libpq\" C-library installed to compile. + Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. + \"libpq\" comes distributed with PostgreSQL, + so typically all you need is just to install the latest PostgreSQL distro. + + Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible + with a wide range of PostgreSQL servers with tests having been conducted starting from + version 8.3. + +category: Hasql, Database, PostgreSQL +abi: inplace +exposed-modules: + Hasql.TestingKit.Constants Hasql.TestingKit.Preludes.Base + Hasql.TestingKit.Statements.BrokenSyntax + Hasql.TestingKit.Statements.GenerateSeries + Hasql.TestingKit.Statements.WrongDecoder + Hasql.TestingKit.TestingDsl + +import-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit + +library-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit + +library-dirs-static: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit + +dynamic-library-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit + +data-dir: /home/deepak/code/haskell/hasql/. +hs-libraries: HShasql-1.9.1.2-inplace-testing-kit +depends: + base-4.21.0.0-2257 bytestring-0.12.2.0-e6fd hasql-1.9.1.2-inplace + transformers-0.6.1.2-c8d5 + uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906 + +haddock-interfaces: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/doc/html/hasql/testing-kit.haddock + +haddock-html: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/doc/html/hasql diff --git a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf new file mode 100644 index 0000000000..d4d08db692 --- /dev/null +++ b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf @@ -0,0 +1,93 @@ +name: hasql +version: 1.9.1.2 +visibility: public +id: hasql-1.9.1.2-inplace +key: hasql-1.9.1.2-inplace +license: MIT +copyright: (c) 2014, Nikita Volkov +maintainer: Nikita Volkov +author: Nikita Volkov +homepage: https://github.com/nikita-volkov/hasql +synopsis: Fast PostgreSQL driver with a flexible mapping API +description: + Root of the \"hasql\" ecosystem. + This library provides connection management, execution of queries and mapping of parameters and results. + Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. + For more details and tutorials see . + + The API comes free from all kinds of exceptions. + All error-reporting is explicit and is presented using the 'Either' type. + + \"hasql\" requires you to have the "\libpq\" C-library installed to compile. + Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. + \"libpq\" comes distributed with PostgreSQL, + so typically all you need is just to install the latest PostgreSQL distro. + + Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible + with a wide range of PostgreSQL servers with tests having been conducted starting from + version 8.3. + +category: Hasql, Database, PostgreSQL +abi: inplace +exposed: True +exposed-modules: + Hasql.Connection Hasql.Connection.Setting + Hasql.Connection.Setting.Connection + Hasql.Connection.Setting.Connection.Param Hasql.Decoders + Hasql.Encoders Hasql.Pipeline Hasql.Session Hasql.Statement + +hidden-modules: + Hasql.Commands Hasql.Connection.Config + Hasql.Connection.Config.ConnectionString + Hasql.Connection.Config.ConnectionString.Params + Hasql.Connection.Core Hasql.Decoders.All Hasql.Decoders.Array + Hasql.Decoders.Composite Hasql.Decoders.Result + Hasql.Decoders.Results Hasql.Decoders.Row Hasql.Decoders.Value + Hasql.Encoders.All Hasql.Encoders.Array Hasql.Encoders.Params + Hasql.Encoders.Value Hasql.Errors Hasql.IO Hasql.LibPq14 + Hasql.LibPq14.Ffi Hasql.LibPq14.Mappings Hasql.Pipeline.Core + Hasql.PostgresTypeInfo Hasql.Prelude + Hasql.PreparedStatementRegistry Hasql.Session.Core + +import-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build + +library-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build + +library-dirs-static: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build + +dynamic-library-dirs: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build + +data-dir: /home/deepak/code/haskell/hasql/. +hs-libraries: HShasql-1.9.1.2-inplace +depends: + aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456 + attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917 + base-4.21.0.0-2257 bytestring-0.12.2.0-e6fd + bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671 + containers-0.7-f244 + contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1 + dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21 + hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42 + hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711 + iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf + mtl-2.3.1-8dcd + postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e + postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74 + profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd + scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a + text-2.1.2-3aff + text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4 + time-1.14-17e0 transformers-0.6.1.2-c8d5 + uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906 + vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c + witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee + +haddock-interfaces: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/doc/html/hasql/hasql.haddock + +haddock-html: + /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/doc/html/hasql diff --git a/dist-newstyle/packagedb/ghc-9.12.2/package.cache b/dist-newstyle/packagedb/ghc-9.12.2/package.cache new file mode 100644 index 0000000000000000000000000000000000000000..5f060a59eb26b1f2df645d13acab5e3aa82576fe GIT binary patch literal 12878 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 Date: Sun, 22 Jun 2025 13:34:08 -0400 Subject: [PATCH 1166/1204] Accidentally added dist-newstyle folder. Removed --- .../hasql-1.9.1.2/build/Hasql/Commands.dyn_hi | Bin 8749 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Commands.dyn_o | Bin 16000 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Commands.hi | Bin 8746 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Commands.o | Bin 16000 -> 0 bytes .../build/Hasql/Connection.dyn_hi | Bin 6574 -> 0 bytes .../build/Hasql/Connection.dyn_o | Bin 1936 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Connection.hi | Bin 6571 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Connection.o | Bin 1936 -> 0 bytes .../build/Hasql/Connection/Config.dyn_hi | Bin 7897 -> 0 bytes .../build/Hasql/Connection/Config.dyn_o | Bin 16520 -> 0 bytes .../build/Hasql/Connection/Config.hi | Bin 7894 -> 0 bytes .../build/Hasql/Connection/Config.o | Bin 16520 -> 0 bytes .../Connection/Config/ConnectionString.dyn_hi | Bin 6858 -> 0 bytes .../Connection/Config/ConnectionString.dyn_o | Bin 10096 -> 0 bytes .../Connection/Config/ConnectionString.hi | Bin 6855 -> 0 bytes .../Connection/Config/ConnectionString.o | Bin 10096 -> 0 bytes .../Config/ConnectionString/Params.dyn_hi | Bin 6838 -> 0 bytes .../Config/ConnectionString/Params.dyn_o | Bin 10672 -> 0 bytes .../Config/ConnectionString/Params.hi | Bin 6835 -> 0 bytes .../Config/ConnectionString/Params.o | Bin 10672 -> 0 bytes .../build/Hasql/Connection/Core.dyn_hi | Bin 12524 -> 0 bytes .../build/Hasql/Connection/Core.dyn_o | Bin 38344 -> 0 bytes .../build/Hasql/Connection/Core.hi | Bin 12521 -> 0 bytes .../build/Hasql/Connection/Core.o | Bin 38344 -> 0 bytes .../build/Hasql/Connection/Setting.dyn_hi | Bin 7122 -> 0 bytes .../build/Hasql/Connection/Setting.dyn_o | Bin 7248 -> 0 bytes .../build/Hasql/Connection/Setting.hi | Bin 7119 -> 0 bytes .../build/Hasql/Connection/Setting.o | Bin 7248 -> 0 bytes .../Connection/Setting/Connection.dyn_hi | Bin 7186 -> 0 bytes .../Hasql/Connection/Setting/Connection.dyn_o | Bin 8544 -> 0 bytes .../Hasql/Connection/Setting/Connection.hi | Bin 7183 -> 0 bytes .../Hasql/Connection/Setting/Connection.o | Bin 8544 -> 0 bytes .../Setting/Connection/Param.dyn_hi | Bin 9660 -> 0 bytes .../Connection/Setting/Connection/Param.dyn_o | Bin 20232 -> 0 bytes .../Connection/Setting/Connection/Param.hi | Bin 9657 -> 0 bytes .../Connection/Setting/Connection/Param.o | Bin 20232 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi | Bin 8257 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.dyn_o | Bin 1920 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.hi | Bin 8254 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders.o | Bin 1920 -> 0 bytes .../build/Hasql/Decoders/All.dyn_hi | Bin 104016 -> 0 bytes .../build/Hasql/Decoders/All.dyn_o | Bin 392720 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/All.hi | Bin 104013 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/All.o | Bin 392720 -> 0 bytes .../build/Hasql/Decoders/Array.dyn_hi | Bin 14756 -> 0 bytes .../build/Hasql/Decoders/Array.dyn_o | Bin 24104 -> 0 bytes .../build/Hasql/Decoders/Array.hi | Bin 14753 -> 0 bytes .../build/Hasql/Decoders/Array.o | Bin 24104 -> 0 bytes .../build/Hasql/Decoders/Composite.dyn_hi | Bin 19022 -> 0 bytes .../build/Hasql/Decoders/Composite.dyn_o | Bin 30472 -> 0 bytes .../build/Hasql/Decoders/Composite.hi | Bin 19019 -> 0 bytes .../build/Hasql/Decoders/Composite.o | Bin 30472 -> 0 bytes .../build/Hasql/Decoders/Result.dyn_hi | Bin 73359 -> 0 bytes .../build/Hasql/Decoders/Result.dyn_o | Bin 326352 -> 0 bytes .../build/Hasql/Decoders/Result.hi | Bin 73356 -> 0 bytes .../build/Hasql/Decoders/Result.o | Bin 326352 -> 0 bytes .../build/Hasql/Decoders/Results.dyn_hi | Bin 28484 -> 0 bytes .../build/Hasql/Decoders/Results.dyn_o | Bin 83016 -> 0 bytes .../build/Hasql/Decoders/Results.hi | Bin 28481 -> 0 bytes .../build/Hasql/Decoders/Results.o | Bin 83016 -> 0 bytes .../build/Hasql/Decoders/Row.dyn_hi | Bin 19936 -> 0 bytes .../build/Hasql/Decoders/Row.dyn_o | Bin 34112 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/Row.hi | Bin 19933 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Decoders/Row.o | Bin 34112 -> 0 bytes .../build/Hasql/Decoders/Value.dyn_hi | Bin 12582 -> 0 bytes .../build/Hasql/Decoders/Value.dyn_o | Bin 18664 -> 0 bytes .../build/Hasql/Decoders/Value.hi | Bin 12579 -> 0 bytes .../build/Hasql/Decoders/Value.o | Bin 18664 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi | Bin 7872 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.dyn_o | Bin 1920 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.hi | Bin 7869 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders.o | Bin 1920 -> 0 bytes .../build/Hasql/Encoders/All.dyn_hi | Bin 119637 -> 0 bytes .../build/Hasql/Encoders/All.dyn_o | Bin 383528 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders/All.hi | Bin 119634 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Encoders/All.o | Bin 383528 -> 0 bytes .../build/Hasql/Encoders/Array.dyn_hi | Bin 22550 -> 0 bytes .../build/Hasql/Encoders/Array.dyn_o | Bin 45496 -> 0 bytes .../build/Hasql/Encoders/Array.hi | Bin 22547 -> 0 bytes .../build/Hasql/Encoders/Array.o | Bin 45496 -> 0 bytes .../build/Hasql/Encoders/Params.dyn_hi | Bin 18527 -> 0 bytes .../build/Hasql/Encoders/Params.dyn_o | Bin 75288 -> 0 bytes .../build/Hasql/Encoders/Params.hi | Bin 18524 -> 0 bytes .../build/Hasql/Encoders/Params.o | Bin 75288 -> 0 bytes .../build/Hasql/Encoders/Value.dyn_hi | Bin 12540 -> 0 bytes .../build/Hasql/Encoders/Value.dyn_o | Bin 22520 -> 0 bytes .../build/Hasql/Encoders/Value.hi | Bin 12537 -> 0 bytes .../build/Hasql/Encoders/Value.o | Bin 22520 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Errors.dyn_hi | Bin 20230 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Errors.dyn_o | Bin 121304 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Errors.hi | Bin 20227 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Errors.o | Bin 121304 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/IO.dyn_hi | Bin 52488 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/IO.dyn_o | Bin 294832 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/IO.hi | Bin 52485 -> 0 bytes .../ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o | Bin 294832 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi | Bin 17139 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o | Bin 25576 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.hi | Bin 17136 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14.o | Bin 25576 -> 0 bytes .../build/Hasql/LibPq14/Ffi.dyn_hi | Bin 7328 -> 0 bytes .../build/Hasql/LibPq14/Ffi.dyn_o | Bin 11472 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.hi | Bin 7325 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.o | Bin 11472 -> 0 bytes .../build/Hasql/LibPq14/Mappings.dyn_hi | Bin 17344 -> 0 bytes .../build/Hasql/LibPq14/Mappings.dyn_o | Bin 41792 -> 0 bytes .../build/Hasql/LibPq14/Mappings.hi | Bin 17341 -> 0 bytes .../build/Hasql/LibPq14/Mappings.hs | 99 ----- .../build/Hasql/LibPq14/Mappings.o | Bin 41792 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi | Bin 6430 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o | Bin 1920 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.hi | Bin 6427 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline.o | Bin 1920 -> 0 bytes .../build/Hasql/Pipeline/Core.dyn_hi | Bin 15674 -> 0 bytes .../build/Hasql/Pipeline/Core.dyn_o | Bin 226080 -> 0 bytes .../build/Hasql/Pipeline/Core.hi | Bin 15671 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Pipeline/Core.o | Bin 226080 -> 0 bytes .../build/Hasql/PostgresTypeInfo.dyn_hi | Bin 28070 -> 0 bytes .../build/Hasql/PostgresTypeInfo.dyn_o | Bin 65256 -> 0 bytes .../build/Hasql/PostgresTypeInfo.hi | Bin 28067 -> 0 bytes .../build/Hasql/PostgresTypeInfo.o | Bin 65256 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi | Bin 46486 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.dyn_o | Bin 8544 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.hi | Bin 46483 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Prelude.o | Bin 8544 -> 0 bytes .../Hasql/PreparedStatementRegistry.dyn_hi | Bin 24339 -> 0 bytes .../Hasql/PreparedStatementRegistry.dyn_o | Bin 48968 -> 0 bytes .../build/Hasql/PreparedStatementRegistry.hi | Bin 24336 -> 0 bytes .../build/Hasql/PreparedStatementRegistry.o | Bin 48968 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session.dyn_hi | Bin 7203 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session.dyn_o | Bin 1912 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session.hi | Bin 7200 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session.o | Bin 1912 -> 0 bytes .../build/Hasql/Session/Core.dyn_hi | Bin 23741 -> 0 bytes .../build/Hasql/Session/Core.dyn_o | Bin 258952 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session/Core.hi | Bin 23738 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Session/Core.o | Bin 258952 -> 0 bytes .../build/Hasql/Statement.dyn_hi | Bin 13901 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Statement.dyn_o | Bin 31864 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Statement.hi | Bin 13898 -> 0 bytes .../hasql-1.9.1.2/build/Hasql/Statement.o | Bin 31864 -> 0 bytes .../build/autogen/PackageInfo_hasql.hs | 25 -- .../build/autogen/Paths_hasql.hs | 77 ---- .../build/autogen/cabal_macros.h | 373 ------------------ .../libHShasql-1.9.1.2-inplace-ghc9.12.2.so | Bin 2055760 -> 0 bytes .../build/libHShasql-1.9.1.2-inplace.a | Bin 2883884 -> 0 bytes .../ghc-9.12.2/hasql-1.9.1.2/cache/build | Bin 29019 -> 0 bytes .../ghc-9.12.2/hasql-1.9.1.2/cache/config | Bin 18048 -> 0 bytes .../hasql-1.9.1.2/cache/registration | Bin 4915 -> 0 bytes .../Hasql/TestingKit/Constants.dyn_hi | Bin 7744 -> 0 bytes .../Hasql/TestingKit/Constants.dyn_o | Bin 14032 -> 0 bytes .../testing-kit/Hasql/TestingKit/Constants.hi | Bin 7741 -> 0 bytes .../testing-kit/Hasql/TestingKit/Constants.o | Bin 14032 -> 0 bytes .../Hasql/TestingKit/Preludes/Base.dyn_hi | Bin 8666 -> 0 bytes .../Hasql/TestingKit/Preludes/Base.dyn_o | Bin 2104 -> 0 bytes .../Hasql/TestingKit/Preludes/Base.hi | Bin 8663 -> 0 bytes .../Hasql/TestingKit/Preludes/Base.o | Bin 2104 -> 0 bytes .../TestingKit/Statements/BrokenSyntax.dyn_hi | Bin 12649 -> 0 bytes .../TestingKit/Statements/BrokenSyntax.dyn_o | Bin 25864 -> 0 bytes .../TestingKit/Statements/BrokenSyntax.hi | Bin 12646 -> 0 bytes .../TestingKit/Statements/BrokenSyntax.o | Bin 25864 -> 0 bytes .../Statements/GenerateSeries.dyn_hi | Bin 12677 -> 0 bytes .../Statements/GenerateSeries.dyn_o | Bin 25984 -> 0 bytes .../TestingKit/Statements/GenerateSeries.hi | Bin 12674 -> 0 bytes .../TestingKit/Statements/GenerateSeries.o | Bin 25984 -> 0 bytes .../TestingKit/Statements/WrongDecoder.dyn_hi | Bin 12881 -> 0 bytes .../TestingKit/Statements/WrongDecoder.dyn_o | Bin 25928 -> 0 bytes .../TestingKit/Statements/WrongDecoder.hi | Bin 12878 -> 0 bytes .../TestingKit/Statements/WrongDecoder.o | Bin 25928 -> 0 bytes .../Hasql/TestingKit/TestingDsl.dyn_hi | Bin 13506 -> 0 bytes .../Hasql/TestingKit/TestingDsl.dyn_o | Bin 29520 -> 0 bytes .../Hasql/TestingKit/TestingDsl.hi | Bin 13503 -> 0 bytes .../testing-kit/Hasql/TestingKit/TestingDsl.o | Bin 29520 -> 0 bytes .../testing-kit/autogen/PackageInfo_hasql.hs | 25 -- .../build/testing-kit/autogen/Paths_hasql.hs | 77 ---- .../build/testing-kit/autogen/cabal_macros.h | 193 --------- ...l-1.9.1.2-inplace-testing-kit-ghc9.12.2.so | Bin 189672 -> 0 bytes .../libHShasql-1.9.1.2-inplace-testing-kit.a | Bin 149402 -> 0 bytes .../hasql-1.9.1.2/l/testing-kit/cache/build | Bin 7251 -> 0 bytes .../hasql-1.9.1.2/l/testing-kit/cache/config | Bin 13062 -> 0 bytes .../l/testing-kit/cache/registration | Bin 2918 -> 0 bytes .../package.conf.inplace/package.cache | Bin 40 -> 0 bytes .../package.conf.inplace/package.cache.lock | 0 .../hasql-1.9.1.2/l/testing-kit/setup-config | Bin 602424 -> 0 bytes .../package.conf.inplace/package.cache | Bin 40 -> 0 bytes .../package.conf.inplace/package.cache.lock | 0 .../ghc-9.12.2/hasql-1.9.1.2/setup-config | Bin 600884 -> 0 bytes dist-newstyle/cache/compiler | Bin 16883 -> 0 bytes dist-newstyle/cache/config | Bin 14886 -> 0 bytes dist-newstyle/cache/elaborated-plan | Bin 2063192 -> 0 bytes dist-newstyle/cache/improved-plan | Bin 4096244 -> 0 bytes dist-newstyle/cache/plan.json | 1 - dist-newstyle/cache/solver-plan | Bin 1418961 -> 0 bytes dist-newstyle/cache/source-hashes | Bin 91712 -> 0 bytes dist-newstyle/cache/up-to-date | Bin 6445 -> 0 bytes .../hasql-1.9.1.2-inplace-testing-kit.conf | 63 --- .../ghc-9.12.2/hasql-1.9.1.2-inplace.conf | 93 ----- .../packagedb/ghc-9.12.2/package.cache | Bin 12878 -> 0 bytes .../packagedb/ghc-9.12.2/package.cache.lock | 0 199 files changed, 1026 deletions(-) delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hs delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/PackageInfo_hasql.hs delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/Paths_hasql.hs delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h delete mode 100755 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace.a delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.dyn_hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.dyn_o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.o delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h delete mode 100755 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/build delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/registration delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/package.conf.inplace/package.cache delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/package.conf.inplace/package.cache.lock delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/setup-config delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache.lock delete mode 100644 dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/setup-config delete mode 100644 dist-newstyle/cache/compiler delete mode 100644 dist-newstyle/cache/config delete mode 100644 dist-newstyle/cache/elaborated-plan delete mode 100644 dist-newstyle/cache/improved-plan delete mode 100644 dist-newstyle/cache/plan.json delete mode 100644 dist-newstyle/cache/solver-plan delete mode 100644 dist-newstyle/cache/source-hashes delete mode 100644 dist-newstyle/cache/up-to-date delete mode 100644 dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf delete mode 100644 dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf delete mode 100644 dist-newstyle/packagedb/ghc-9.12.2/package.cache delete mode 100644 dist-newstyle/packagedb/ghc-9.12.2/package.cache.lock diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_hi deleted file mode 100644 index 7ba0f982f821ce431c0a8bf356b5407cf35e00b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8749 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 Ag#Z8m diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.dyn_o deleted file mode 100644 index 57c77db1d8fc7a1f87c06176d74e89d134a84c36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16000 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Commands.o deleted file mode 100644 index 57c77db1d8fc7a1f87c06176d74e89d134a84c36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16000 zcmdU$e{7WX9ml`D1FVQhJBG|5)QyZLO6`>*MVuZjKdKh&N)d+4>-Fwwd-HmC++DTY zbaX{CGM%;^af~=q4T%kLf@FwGmT1hf5a-kqhd50{;SU_!WW+#g%-HAiJfF|q=RVv4 zJ(zCa(0iWe^}L_Y_w)IDe?8AV$EKwX%Unf8hD(vzXEH}jjp5!g)Sm`iP%iFd5|!+Ow`u7~p%Q29Fm@nH@JE-;6CTOmF>Kc&a(AwPCbA%?e3 zdPgFc^)ywu%t9wu-q9DJeLNFP|BGOI7v}3$%vWhTU+Fx#v-5OL|Ho&y|Cs%MP5AH5 z_Wz$nC4ZU=edEKTE04bpu|Z$#`xM%ISMRmZ-ZMv_ZR~!$2l~LC?Phon#8(CSJrLiE z5Z_Dd%rN$a0qTG0_$FlHJ1a+E+s+Z#-vxGGeA)~{j)zY}zmmB+-?-R3Av-S@H7;Px z?u9sb9F#+!DS_BME~hQA@4qxNJJ!9BSJoFpUWd;bH`m(nVa}X9ntsgNo@X(S&^N9* z&scJ0a#$+z$^Cqa8aII)^Ul=}!)a)n)6gdm=9z!;jnferBk$5!#d(T#JZ^cOItjXd zi0L+%`;I`H?0q(qmvT5x=MmcbtX%Xux#0ZZnB0eX{+2UOQiz7pM<%1E97Q?#>z1G z(Bvw4v;=&{cwPssW8cvoARXtgf1(*hp9dy`pS3W5tGU0Hl9l!a>Xg@xLj2pn2aE%+ z2l-T;-;?g?JO2gk`6*~|JVfkyZ}RaiFgK*he*)W~)oFj(@7P!FcLUH?xZZA-^E+IhukU2V z)|-h9$8IJzn2%gAcY_^!%-?JG#dMopNNl=~Oolb_LSn`F&dou>mg5|SHo>vz^mC`( z&XpIKOVjJs7BMHtvDY-&nTz&8u3x&@40E3>rFBWiaIX5m)v0*?|Ji?$_W!wE*(Y*2 z_uoFBt4?Ga{xQGf(3ubay7{?Ni%$JwhL?3;l|K__eX{8NM^^_nx&w*#w!b%Yq5iP$ ztKP0!+FTY0hpb4_XGH?hU?|dF_T92MtDBeA%t7D8`OZ+p*J&jZ{&p)-)_hmln#D~k zZ(q6GiC|7$w6oJ62_`5Yb!h7Si4Eb34DG<L=+Z;VDLc-cOd%wu=eG{KzeLVx( zvc5%e)^Amu^*a=2eVKBJ^)-sK-m5t48x?0g%=KA?^@EDD{*dCVKc+bA;n^pvu)alc z)^Ags^+SrYzC|@9>$??a{qu^m{`ZQrzS|L`V_^Lj#aX{!an>JJob@LZXMM5i>Z}hc z&ibU{tRJU_0PCkJ&iX#ZSwE;a>;IrQ>)%nF_0um)r_$bGeYxVS?@*leJ&Ln_P;u7p zR-E;pDbD(F#o2zczEN@3cPP&K9>rO|O>x$rP@MI}{6z@4#ri3Vv%Xw$)_WCa{aVFY zzguzE?^hh%avPOQ^3`orP{2`Hl4IV!gLoNiW!Vk~sIQk0_TMMIR`F{f0MvIVzJ_?W z;#+O5CIQfV09?=gcqx7nm5cv04=(}Jx%Auf@ZSJ0h4rxoD}(Z?{b|gJJo) zCmnB=K!fF~cNK8dSF(_{+w$oDoQHo-c3PC3g)krGs@De`>y0V>)5Loe{~(W@BA8!t z*}pLleGhGWn+M}Lm;ImR;lIkmKLw8dA6EWcKQXucoAdBT^YHC?_}_tJT)b|s zr~8FDSLCj@ClCJ}aP+@S-EW-EqhC5HxBX3d_|Nn3Pk^KUyso`Xz3aLwbK4ICM?byF z&*y-n9bS+4%bHVp?9{>+256^I+1Uyl?eIF)O#U1p{aU4;4-fKo{-OP`z_ehO&A`#V zzTbO?^t?{7pVOcdqP|1fzXv$l=XHwx`8DZdO8+tGd7WZ^X2X|TXun(O&Fr9=-EHj0 znpCGJ60HU4-69^(qImkK5WsSWI5fd=^Us}5r5bRkEp58?R1n1)%p{buWnsk`f^_&8u5i9ZBY{p zhZ0G|ALx%R+Y!M#Gmx1LQ5LZX1ac#KNhnh!L+MiMwO{xCRdI-U8!Io z0bvLH$^QjUk|Fq-BJD^b+3xF#1$}LCf2ZX%%os)~1iK;{iH3sQD?E+~wCa!fV!k$i zA~}{Zo5LXYGql+r@O4FENnhM^QAX3zUr^t5BFuE$^IsIobh$AllgIbGYzJfUP^UAn znm5Lv?V95&p|MtFJSwOXPr8zVE>B-=r$f8w%u^W;bBgW^MS@LMta)QyG_p7r%c$+C zJ{gB;I@MVTD@7G96(N`=tee_`G}LQhIauXrLbY9?Fsu|};Nx6P^xTfFTd{8Cc@%XS z$G)5iBpI+LjSSpyx%zI<>B(vORdTY*# zs4Fe&iex-0xUQ;n;02o~#DYJ8eL6u?=*5qL+OD=XE8gUfv|E{^@XUO_Gc{kTT9$Q% z!wu9J_oXOEKY>%0I_h`$aaVyjwX-vj_%R+DuhdZ3D!h+$e zFE+W5AE)u`8^#L_qA~0b+0mqLHR;wN0)e(C%vim;kSue=W60MOF zbRJ^DPOT%cKa;|atXJ|HVMoT>L0rchCa&X6632RbMZMj`v0lla68eXQ zeo*Ko=l6CP?`EOrUHmUt^?U$ZN}EA`I~>z;nSQ5@{0`u-vCDMYBEJ*%nU@PL?=vd} zZ=!wN@O>%TSq{f+$BQSSAYX-B`zYfxa_J|piOBK3(M9?e+9F>~`?%>4e3{_97HB<> zP2@|3zDL+uEBF?{@m(uiW|uzNqMf^8pZTER-=}@t3<6bz&_V|LU6SI8XdDh=acXAkuPB_Y^RVxw{)T4y!D-(LTo|X%Kzp&5GQ*4JP0T z{3n9*a~ay%EI9vu0{J6?n~KE7&ZNH;w#m4&?clw*74}yot?s0$uy=#-M%+}iCK7NQ z#RI&?R79dlt77@e)pHX`f8ah-5rAK&!|&T=C57*o!KL7`q1&;vAusK{LF*BpDCQm7 zeiOFX*SvJhoBHdWy&Cu(5*9Rr_3-t)-k=P*8~$XOLf7?BJMcNao{zr+JGtubneQkD zX`;aTu@1hT>-P}T_4iG3uGgRFt1LIc0kSFyVV|#mTyd_S?bO0~-j~vu@cX1(MQd^G zMOLZAe7z2Xua{euV%t(B)jvcAusIgPAN$Yw(rZ8W=ks{20X!bJGG zru&?#Q+4XR{&ST-9O6SgqU%F=f8qTn4j$k1+cmovJows=Ki<6Y-&frPFn$fd&{Ozq z#D@bY0Pk+vu>9ry4{ctr-1F|nx3=#+``|HU%d1=Vz4X){ez;NDao@AY)|^;&a)a{0 zN3Z|-+iJp0T4y?w*oA01Sl-*;fou4U_1?^5n~?xk<8-udXglK}rIuPJbWe8FSEkfAW_ zLTDKdnGuj_g^?G*#iQVoOJQ^yj2R1;T@K^M!?-J8+?CLN6|_%)_N$@&8fd>3+CK&D z*FpP4`1EJs`p?4kH@pwRVyG;v>bht#^nV@tzX9$41nsv$`#(ebzd-vE1=^S5vkaf* z_}q>U>c0a2ti)#`+@X9^!QoChtdhfOIou_OyXCM(4r}GGP7dqkut5&@$YG-#{#6c} z$l*u6`u$3*@n+U_}l>3Ka8FQTNLF2_}-F- zw{KnZ){{N!pWe3Vr+fczRll-+&yU_a@#OPMydUm7``m_8o1c6~88+k*W%b5wyVo69 z{o)hKuRc7n{5NNRvFkl$$fL^L4;(nY;_#ijo>yKy^^>jpKU}sA_t>sHd;g)MdsePJ zu|wJa>r-pjZ@cfux54+6r+4f)vg^&0J2PvRuKH-j%5S}LT7ezPs|SC7^26QVeKY^w ze{VW|_LX0}uup+uctCVOWeENssti5-@V&=>xABQ37d^i6(Lb&^d*bbx(lMb$>H#=; z*kh|t?|I;z*B&YS$C>>Y3T4FEf*|Zy5!yA=+Q$)!LVVi7q+&v z4qtKCnZ3XJ$?GS-@$}jQr}yoBW2+6ram`gssjj(Wz?#-f>xe&o`0axq?SJFmL(1lz z%YL@|u5};0qreDUGLc39$UY5yYlg# zx0i2wZ0`pPq2-hIYW=T6EB^Dvz1x3vTsi!+qgx()@vXyeD$t5cZa8PJvAuGyEKxm` zsCqUml=74boS6O_1_%D<_ix{R;*kf!?>}?q_=@M2|6oFm_j!D|XxP!EOWu@vCm%l_ z__1tB${8{eFd1ye+eVK`#vO7*uaM)TI4ZDHfsv0Xuq*laelk9ulAcIDo=nCcD7%%x z4}9L0jXn1c@j4@M6lfe5OEfAAmeo{Zs%F-;IP)D(3oOetbYJ6+VG>H1FI-Lx;n=#T z*;LbAt~1RNgbK|Im@RZp9nB-oHIr#f)sDJcby9yUa&Z(EdeqKd8o6zLSfEiq?&sny z8(E)my)9WZDPgELih_tjHqOU|XgOt5kM#CrG8$ZA6Tk}+fv)0 zuI>@)xUOTkoKm4P8gSRJiSHuUws5o^TeDnYQDplr(Otsqz_5K&zdAWG+8_~I(-6;B zj%k63^6L;5xL7QBHjd~*5tWnO!x~%akKU-ct{G^q>2lBJS`Zk%V+MXeOyc|8v;#^t zTX%i#dk&>0nj|n>+ZBc(aH`PU)HG8o1r`@0bzT_vcFA2E$9NeEB3@LC=4TDOZ3h(( zblWmeie?eUh(Z0pvjR$p9r&yM{`#+;oh9FfA|~LR_Kin(kSe&;>J?OD$73O_yrI6M|S&*BrxV z7A3Z@3?Fs#=;&O3ITn5DoJ6Ra6M|n-j{CAY+D^)6mg8QE$s>-6d38pyK)IUho-ryG zi({N4@716|kV!1mjl_%VZ|ZdV_5J~$x!&TUi{r3Q`UNqw#1UG1IvHtdC(Vljr;&PN zBzlTbNDHY~cPGp|>aTWpbY0t6Ftr%<(O9kisr$mX^JaAAW}yYhW#=(w%g9Zwn(R^) zm5>`&{Y+!s^dh7AWNJM$>ZDJec5AU9xLkP@VtE6s*jJ))k|^D*gT@dZ(>3NY&vB{n zY(kmtXc{`Fry6@BrhJJ#I;) zs#7avtRw2AN`dD^YNje@Zow~N93BEH%EbaYh>lLAWj$T@86oJXgnAw~1qOz0GS78A z4Hfr@X=9cYoVd&kIJ3Df9D%oD*dB(aWv3c;NSW#vMgI(1O3#y0y8BC_j0Q_n*M#Jx z12Slhp(gW2` z)g2fA`&K}NO{IrevdY+=&=?O)hS|$E@jalHS1SfpvFfBS2-36RTQzxg=8KC8 z=Mrx!&KFS{C5@R?Jw_*bG{~sQ*mFqT6ahvd4W|J`t6E*^=D8|e)+j$s<~ffmb4Yz{ zYT5z9F{MN@E2frjW0oPj=5pI9g6lAKyCdC9>BPD}41Cl*u$ zR+;+h)ENgZt!BSSh{M3KerJPlF`mFcJm3(Daip8NtN<28muEV`bYvSG9UPtB3<55w zt^1aVW~X{!+O9`D)3whMc>W3uI-GfdG2In;z3^ko)611 zuV`5&ERP7x8k7>OKelOVm~sj61Ir5>*GEWVV(R9Bp_#(LyF#DBhLFoDZ3vyDrkFe( z<*Acr77J7QN^!#!sh6eP+WlYF1QDc}W<>}ru4p3HPTUbi#YI;)u~JoQE?UI${i#3A z@8Y5mhjIV7^QT~yDu#UG`HXtl)os~)w&VaZOQ?A8@#n9<1w9KB-<3@qtQsQhDdZwH zofdl9n|W1bZVgNF9>+E@t3a*XyiwOI1W`iQ8Fl8f9HN|xj#UPrM48*jBSnVhj ziZP7^SEp5adPRBmP2Yf(}j@1pTy2drl zH!Q?}rmnjt);ilWg^BF|wgS4anU7iBrR?%r%%t#30_|jjG>z3iRSYTGpW>eeQNAUN zv|=_GxjvfDC!EWgAz6(ZzS>R&NLkvW@nkQU~ z=x8(7)X<4M#H1Pxkg9vO#i_xFLxo9ngc)gNk=9|cIt4+sh^h%TCC#AyzG$L!qY2KT zRIn-^gqZg9U=NUVMp@H9xR1^nVA7>5FdghK3{7JUvAsuZ7ePPeHnt(u;Xb!bO(R@m zSXhZ>VpjB8(`1l{JOT;aEz4?y;t6_+=h!5`sL);P<8%bgrcbzw-GoiJXD|#3Y-u#d z)tE&L4?&s}$efQLNY`y*@hVJ}uGU<{UIM%VL@0=?@pg5Gp=8HIIEJ{)ry4;>AorC= zHz=lUVR7G;9VOy7-9=2`qLy0V5hemg)7z~fmE`6|q>9N+u1jB=;CBs&Pe#}jmuybt?gMZ-q8IE2 z>T~9HcghI^0Qk8R3K)&p6eiF;+c;hwyEkOjRFT@BBXp42a>guqOP~Hkp>mpR0LEi? zS||tDx18^vWpBIJbq*9@)2U}ldOP#L$1b(_fijHf6htuUx6>*xeYt%VHx}`V< zl|oShCCpuHAcDp22^%*9vx@Ms9J?aWEZyb;L8L`IhZDw$hQ(SK!l#~vjg>Gpn|Q8i zU>YJCqD{|E4aV2|Vpm_M zAY_eNC|ghoBheC}BVsGrwg_w1^w6Jub7Nv=VjRuD{x2^w62T>X=Y=U@M4e?cUP()L PG?Vs;T!W-HUQPIam;i1V diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.dyn_o deleted file mode 100644 index 7fb01f3ba3dd392313c7ab9f9761dbca2042dd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1936 zcmbtV&2G~`5T4Zh7X-Z_aS0Ma2$2;rTzWvV6hV8Sy->JXj zSFT9BKwpEmV8)q=R~rY3bR}nIzMXGoc4v3<<>l*FJG~yr=)q5DEkOa!FSUBmr~&N4 zjTZb*&13(=sQR3$QIY35Hc637m?`0dq1snNU@g+}@Zhp#E!E{7ZNfLjzp@sG01vLN;Z(_9N8SugpgS%{~rPEO`CU44lD{vut#Y_Z zv*j+W_?=}gce1T=)iJu#H&+(GHP#8YZ>{vy^_TNS_;o8z-->hF!XH`qF6u~Y##5FQ z=N9UMgR174iN+{Rxs+4Uj6O4panb9nWj(bm;EEm-8-TN9Q2zcA`pjT;@jEHKjXiacMYrkaru7%QD53c diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.hi deleted file mode 100644 index 730cf233870917c4d51e390b7a4e06669a82cf60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6571 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 MM6N;78?Pq(KN@Rn$^ZZW diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection.o deleted file mode 100644 index 7fb01f3ba3dd392313c7ab9f9761dbca2042dd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1936 zcmbtV&2G~`5T4Zh7X-Z_aS0Ma2$2;rTzWvV6hV8Sy->JXj zSFT9BKwpEmV8)q=R~rY3bR}nIzMXGoc4v3<<>l*FJG~yr=)q5DEkOa!FSUBmr~&N4 zjTZb*&13(=sQR3$QIY35Hc637m?`0dq1snNU@g+}@Zhp#E!E{7ZNfLjzp@sG01vLN;Z(_9N8SugpgS%{~rPEO`CU44lD{vut#Y_Z zv*j+W_?=}gce1T=)iJu#H&+(GHP#8YZ>{vy^_TNS_;o8z-->hF!XH`qF6u~Y##5FQ z=N9UMgR174iN+{Rxs+4Uj6O4panb9nWj(bm;EEm-8-TN9Q2zcA`pjT;@jEHKjXiacMYrkaru7%QD53c diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config.dyn_hi deleted file mode 100644 index d5df641c2b42b9f29d64f5cc332bfc9e605220c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7897 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 GZuln^-QXDj diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.dyn_o deleted file mode 100644 index 30c88b1bd387acffaf285ea0ee2dce5f192b0245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10096 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString.hi deleted file mode 100644 index 1bcb4a225a15a7b149f1a3599f15bb83ba2dcfb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6855 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_hi deleted file mode 100644 index 163e7a678fe2a0beeec357be0804afe9aa98c54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6838 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 LG6!SByM%uL+@piI diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.dyn_o deleted file mode 100644 index 6ccbf5d59e8e73c23a839b77275b36cc2aacf030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10672 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.hi deleted file mode 100644 index c72bfd369e19396ec68ea246da6e5fcc1b7b9947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6835 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 J7#rRt`~wD$f@%N& diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Config/ConnectionString/Params.o deleted file mode 100644 index 6ccbf5d59e8e73c23a839b77275b36cc2aacf030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10672 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.dyn_hi deleted file mode 100644 index 89544424d2547a40077463c4b67a9b6405d76e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12524 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 oEQ4DWaw|rO_gCOeUFu%xPYxGZPyk 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 E1NDRzD*ylh diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Core.hi deleted file mode 100644 index dcc4e154a848f005ddcb3129d9294d5d1bd27ec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12521 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 E1NDRzD*ylh diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_hi deleted file mode 100644 index e2b6619aeedb15ccbb80f0bace0cd95074ac2cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7122 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 P3dWDh(!03jLl)p4BH;)n diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting.dyn_o deleted file mode 100644 index a7492b99427854050cbae4c367a569343701ca47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7248 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.dyn_o deleted file mode 100644 index 9fb11465c88d1eea363f4b4581efd45fa33cb6f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8544 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection.o deleted file mode 100644 index 9fb11465c88d1eea363f4b4581efd45fa33cb6f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8544 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 w-_48H4cwJ3kkFVOj=TN)S$mX%$K`o|>s0*ArGP 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 CxO^J` diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.hi deleted file mode 100644 index 8d0ad377647a34781ef2f707af70c064ca7bb069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9657 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Connection/Setting/Connection/Param.o deleted file mode 100644 index 492ba3eab3f4810a8eb9b7d15417b74ceb15fa86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20232 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 CxO^J` diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_hi deleted file mode 100644 index 25e7046ee7d23c07d3e2c5910c02ab4a35e63829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8257 zcmaJ_34B!5xj)Awz<@#(wP2&-QmwVQz5DXEHh?G=g%Z^F`j)!f$OlIQDM2N3_ z1;W0B)gY@NBw)gpAUg>p>=3pHS=a&sDhk0^Hc60v=iW>fNS*oJ|C~AB+0VE9zl(1l zvf~Xw6yxlS;8*KE-d!~I)2t71-Jx&K9525;xeG!)dLYzMLa0LpJh=#AglaR7@6E0) z-1PL#y!tUC?$+L|#xsideepp~{`TJ#UBB9JX~K=Gk?-m+e06rpwTgGnkKKRq;+1dD z|7G*ErSqy6H|@kx~U6iR#=CH6px&!EI-QQ~tb@p<&~7to8pKrg;@6`^0gjDGnm z6qkg!Un7o3oPanHaT4NW#3@MCkg6lqKx*9h9qRW6>h~t{^+&z|$oG5X8;E=<$TtZ2-a@{&k?$Sk`*-B~ z59Ip;^8F|B{TK56H|qR9=#T%4{z#B%A)6v+Fmi?<|DTY5DDnr8KNUS1WSe_5gwozc zX&gO4zJaS=R=;rSSzCGaeT=Oy%F4yaZ9Sd1S)hfbgPaO3EPc~!VDd+y3bHB&d{ zV0`iLsG2V?ZaDKw>4nP$aiG?i@#g2WcjA;s|)k-)dOp`-x<66n_tH*!)2%Q z#^zV$ezF%|S$OTl-G zvkH$tec0>+sB?>1AK<++X?Ui`VnE=6|=d`YuN6@sV%7IktIbN!8D@ZsmRd`PPP6 zFQW~3$&$^V=hjzlJBLe)CVriLXYaJXqK&w4XVuQEb!EGUUcFhfJM-4TnjvTto;UI4 z*;(})3MS%B6UN@2HF@XBAli%z3bIGWYiXE?ln8`x2wA_-O68{T~H0KE7n!^tE%33v*Fy7@uxA`h9^~Dy)tRau7WCjB`;^>s=_(r;dHj+ z1Ecq@{HMb67?tArrIWtT zy0)OA&#kQL)BEzWXM;iPz|)T`K2|WlerM$5vQXXUgJImNhip$ht2)q+^L4|ir02QNAZoi)p=FZrp_8#efaLaC1r;%fZr&`%X4-w*l@BW z^A`T1;q1jR=RVxn5q*Y7&B*@jgZ#Y>WYNsU$7{cseFR+2F?_vb-^9AnBkPKB!Rafd zUtKTG%E#z9USFGAUASdm7XG1jN6xvdg)3kU75HzH^S7OxKYMcAMKg;|&;9 z;<3{{-}Tj{in+&dbWCo3Ac!#tf((KvgCNWx zh%*QR4Md|S5X2euBzg)xje4MG(6i_{1Q7;7h(W(VFQH$em+`OQn*?7DzQ2Yq4_^Tb zb(v$fTq$3(wsZZMb)^@t->kh3o)A9my`Kb>@KIjv?z}5IZaqK!PW|TGg_D=O?yjg_(`)?tf{M8g3n$0^xOK0BNkDlL62uGIF0!B@!kYJ-1#*Uc{jlI zrdG(N;YeN8p_2JiwoO`tw=VnYVAhtki;|H1V-x9P>voRcvn1!}`}ONDjJ!0yKIivH zhYl~@GtXl~*gQ!BXK(^1Ci#PD0b)^T=zS8EjqoIK27;?z0Vn+c_-lr%Tm;_$t>_0Dlj-)x{zgi(TC2;&vBHTr72Qhl@L1+~wkK7x%ch*TsD&cBQ73wvE0SaTs-FDaThCG1fxa|KsaT%%*Ev{e&Ql{4X6k60>h}n z=)r1?PPl(gx_HW~0yhhCupq!1d=|HTefKEOBdv9bOAZ9e5s5}aX(Sw>Ruaz%GAAeL zifx&i!8?i~OQOl!nj{NEuuQ7kf8uTX(d-f%3HiZ;=BL(qEkCQ-sA zH;v2n%!tyIXxJYd%=H>V!g^QJA0*)nm`?|Flafr!7Q4Egdb$GcRT`vWztzozjuE#b zTbsy<9G^s0$Ns6;xOv!~>HYwi$Ag21SfIL58V-`c!>_*9i|gC?hwDiq^pRFIeF7m8 z?ZA4Zh5e}yGT8tqaIXxH9z|dcLx>rmU=Rw&!?Z+|h%Ooe(R5vtbej+=TEww+Nfk^T zq^bg_YAUbjR3RWXbwShxOLZjGl*OmrCBp@{!^U<9>x)E5(4vtG$RD)naB3$-!{j}% zba!@tOw9HVX36Wi?C`p*+lFfMjw6|x?3j)q3#MtyszV5`in?i=hDL}CSK>&zs#8g# z(3JAJcQt*|gH|*Y=HBr~hxBE$HZS7{3exDXP15Ls7kRZ~dUH@yM5l#n%)Mqw%^bP$C}&<>@- z=}MfCWXqc52o~>1njq*@6nW85cq&p$vUH-zqAcr#rv{~hLPTDZOiLkxN)^e3y&2?@ zl#ED}rg8(_LAex4?Vm)VsYxQ-9UI?LH2vXTpgF|6I z33^&R$Q1@)|J|ZJXE}vX6X}X># zy>89nr`7e`CuKgQsjqjnEd~dd5@ue}yZNpbxGCa?@D~Ba*TDPAvbRZS0Xoyvu&FY| z^{I^^&s|u{X5Lw((09`*M46`Eo-(%V+UWhllpaPl#P1}>KO9yd0Uyu=0(K{ptM==~tH-VDK;JR%` z;$^DAS%FT$%Qc%tX^D!0cNM++!FXKnH$%Z!Qq!W%SK(=yCykx|^4rhfFK9Bmrn_vtHg^Hc zOK`C8?)Ue98#D_X-_Ke}AZk$m;9yGF>PLcu6I;s~H}eO78av0wS_vD8TBP+veftB6 zvS?ZqChFR%ecuQhqxF%oDbvYd3cQO3+1etlFJaJYTuKHQ#c=PwnkZDS0Et8nBYzq= zp(qQ;8Yd`8qNxHEl_kyAAh1}L#0v`4QJpz#o`^OPL5YD+NDeU|oKVwNcu*vwL0i#u zJSW+A0GDjr;fLJQgg?M62Ge6r+$cTlhq$0};DW(A9Lcr`be07f7@{Ui4$wf!gb1f9 zqT$%K09=jm8gq)8D2PCdEC>{;V%kJkJH`0XTLb$(8j2(}@?8jcVE!!RJk`i<`bQc$ zbWB&hV9+%!Ory~Z*gqpvDiBqfKF3%LuvsPmP8*DJ$-!VKN}|-}UP~W5ghmFu-u=Ed zF-bYR?ewSmSqK3S!16(eezK)0qRdDq5e>tkHbggw>b%YKrlbG|ltodOA=aseOl3$1 zAQcd)YMJ2Gbz=QAW-}iBVno}Wz;k0we>pHIlHu{6=1Nv_1zyB#7Nn$-K){te-kJi& zj_9816m|qodf*^pr)))GdkXMFT~lRU28L-lI^;Zp1T2>~sICYi+?g)(phO06Ql2Zd=N#+;K7gs zxS3IsECJmIWp%*m63dY_$S)+Gw=CfHhM?*|`iZSV8bUPNv{jks1)H}ZunN2kUeV~} zIRkgdqsXPZ5f*J=cmXuU&{V+zs}Oa_<3u3MvMJa)WD}}j8Aa-~k^v-5 zbC}Nu5+sVMpxBKxm8n|mAXbLp2!Npgvxd_ZH48@8WT0cf%S^%xKnd8qZ0QmKw@nq> z)LBLe{7uw>6X>u@-Z2D=Iu`LxH^x-llk4bhj7{>KS8PSUV?4Y!(1zY5BjTltF6oVl zI9A_+XE)V@eny8p(Z-;^PbXoBvTcp^4y8j|uES;eF%<;o#gY>?dkdZp>;ctwgAmH~l2!b_2Qs`3mq~_%{arfr2Vq0Omzh}@kTC*1Y*(v?}M+ariSOU-;veRJ1 zfxN|ID5{%2S-Pz}8ME*f3>30%Yv?c%wjT&8b`y{8?Mw2ELQR^%{`U=8#Or*xOV8sH11|ZLV}6C5$+<)iZ?#APH%6P}f7b zbM|PnCv#w&H*1^y-wFFcN!f;;ZmWNznCL>LxP{PEUJQMBk-m`B9aJi10Yp} zgi+=d8y4Xh7I;fuH7u2f^v!`c5gH_IlA!Yt;h>A>Cf<6hZ*MQ+Hkq1d&us`Gt#sc< zc@EgiE4@(~bIeBG^Z>9$VY>@upH$%~O18F2Z5RDrc8kX=j38d2m!Xj_H843jw*lRZuZ^5g&c2+2m zo*MMATt5_nQQBGQk!UD2-UdDN+29mh#?~Gb8j8_)8ca`3aQrl2w{zI*HQD>oeNHG~ z2Vk;@TMDyMyCE=An8ri069tHh3}gm+2LKv=j|AfX1nIJm0i)uP1XeOTy69H;SgPP| zv_mlDZK+c*6pU@PL$Gnr?O|Q)jbghnbzr{s;m|NfL_5H*>lu7d@Q(FCC`FPT2MmO40Y*v2yhNc&2=v-g93uc<29oH2emn(E;jX gMA%K=+j$ion?zD`QD{FX{3c1IDa}=4b5TZr2jHW3t^fc4 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders.dyn_o deleted file mode 100644 index 44c6ed35c17bae13679bcf50211cfd5f656a2219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/All.dyn_o deleted file mode 100644 index 63845f70912be9655e78ac664251f03c0659b67b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392720 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 AZU6uP diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.dyn_o deleted file mode 100644 index c4efabed03489f6ef97871ce2048bc8042719ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24104 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.hi deleted file mode 100644 index ba78be33a4673efcd71138b156988512accec13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14753 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Array.o deleted file mode 100644 index c4efabed03489f6ef97871ce2048bc8042719ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24104 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.dyn_hi deleted file mode 100644 index f228faf3effec8b335ec3af2a7f8d574298f6d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19022 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Composite.o deleted file mode 100644 index 92262162d2109e95fb6f2af26b706228f6e572f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30472 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

        Nkmuny0Dlt+Hf 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Result.o deleted file mode 100644 index 37b02fa31a44dda5e22d5dbf77422eaeeed81ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326352 zcmeFa4O|`9dG0$1$;P%UBTQnF$TqRnl%}!_60%ULI9nffa3b3nla#n>_}my81PD-q z6}csfPD^jp7znj-s@oFBy`?&ejddg&w`xLU-IO+}jj-x+65SK*s5hKSu|Dd?kSOta z-x5+&(8M$-yVddB%zT0(G3B*XQ~_ zBJQ_{GvB$wXYVrKIuANWO6Dv&QE`b=^z+Yu>u-Oa>~xGKU%mU~OVk`*q{j$lqR{<8*YDJ4fW0^kLCO=3M_0PIjI7 zayB_*_nG8tcApa4`?otCbx*9B_|}{SCkE#@MGM5n^GT73C&b>9a*n6u9DCeqnvo{@Lq~{kkP}d#3HnKPEwa)N73X|7z1PJGXoNzz?O} zpe^dP;bCcy-f!)*uNxnh{`n>8oAo-;CC6wxTw`qbZF_sHZTHHxpi}zuBaM;q7tXF3 zKb4gB-RI9n#{Z>p&G_D=v@Z?I|LtqVQ*uu21D?dSVr}eNf%cRp*8%ha8FFsDGUA$f znenAl@=E))SbDs?99|n4|A}0;G;NQ_dGwm0d3x4~^;vT`J+H*4XIRp*Q2MK!IZnq@ zbFLllkoV-&Zv~QYM_9WMjiGAIVd{@0IdF`MSPJ`KqsfpXMBSucYz5hSwpqvDd{9DQCByElh45-YnPrpCqU4Mp@4jZ*iPD?zfX0%y>q|zrGLR=TBsuD&x*c zZNp8p{0HY&-*TMR;gUHEPrU3nMX2L1X}!B4)^_*55^F4 zZDOYVh+htp?|R)DmNAF+S;I2^=#(v-oSQWmBTPFEJ+m*c)C$2=;wy2YQ@rCeN_ zm%BDPv>s1cCI@44-Fbr(uaxP&#=$ijnCIfpKsbo+B|QJgEBhb;vGP_=EDB$@+!c56gJqlU6$mye^k}_4tQxk$+3y=KfvsHuvv;{UWyh_;xJc zr{CuOefe$fU)9^(zgwsCPp*MF?*C=at99I_{}0!TCXYEVcEL5?o*U}=SGZm@{d!Td zsb6}1*Lrrjevwb7soy&1i(Rv2o$CfE2N{oTetOMBj?9^IWvug*T#xI&xn|KJ{Upb1wYuSy?mH^ewy9nNYuUU8FO? zTvX=GAKbq-wuX~0_0gMO%9^E&TV-zX?9(z%x7Rk-cv(ezEf3E6{fmL@z4o}xI)DPx)Ba(j1g9T6fcdZZlk@Xb!slq3)J^E=-H~_XnTYE^9C{Zb!Y*xs|Rfb$KmI#}%Ako!iZN&XuV50rO(Zar(QVH-F6 zGEBIxrRzRYww;)#$=XBV9R2M~yd-N{JilVQc3+pDqJ7;OSsQOH)b+C^@>~9X1mo+M z=v-_|&$ZdCy*(#$Os%(Aryi6wp5bAvyZd!_(!BT{9B-}NY5ImaeNxWq>q|19)3j>6 z<+P$qP?qj}4Ds=1ImbulTy^4QSs&Fk09ili$U7GsC)(@z-hGeAxWE1)_Y0nqda3h$ z%_m(S)Ox9NeeE0e+VxYuzfa2J^RoW^`Kz4{dp-U=!dJ=K{HjZx4sT5@GLdoV+>U3y z>9xQ8kHy+Yo8;vYDa#jRebV#8>3BlUulHJ>l=JF2pON~e>9|DFfw{VrPdeXkMV_Et zcdj+{^s>qIRPu8|+GXb{lV7q9S2XN?Pdm{gZFVodOFnkuyUdds@m=(V=6j}Ho^no< zXW`igI}4?33lEm`7ye=7#m!0H+U+{AgLgS#FzD6l+>+g6epy;TpJC6TkzPKxp6iUPTl`3_ zEBv=fen~o~^efHtYk1Doex0@YNIqw$oJ0Nj-_!W>vgVWIe~0A%Lz0Fs%W+pq9(+T_ z7~h!Zbo?y&N?DItC~LN9vSzzL)@-lZ-6ic&ia9+fucq>8|0}URa7^liy#{6XDSM^d z^&VuJ_94=z=o+uKZTI&@>Qgwsw2aVSS4dm6`)j=>2ldySZ{Lu0&3%&JcApv8hfDqq zb0040(*9fhm?{tXoOW6Lxt`m)ZyC17usu#ym%{dFV!gulI1yeS6WlisuaEAS?pO8t zi1jW_B;T(~UWR#q%pqm`G1It2fNIT9~(vz%|K%q`wXT5w{`Z#qS~*3$J# z%*Uzn(4XI4<#g!!ir&AUDo_2glKl6Nl{s^_`1*((Zy!6)OkyXMvwf_@ymd>SJtD{3 z$6jJ8|D1;^ytg!@P~v+p8{a z-o7UHy0AWjb!K~RrhWIT?t0LI6W^Bpt3&7B(k^~{=D|*P?)~kO{%<@Od2zn1$$Tqm z{)r#Te0hoazE;L0ejj1CRf+HN=I9Ic`IvNj-K<*HrO==0+*;?<-fwUH@u}_35xvIf z`m46PL*hU5vRLQF2X!4Z^L~k8M9lJJKb($L;>WP8(Tz(VjBA0$Ok{A`qcjepr%8w}$}y^)O{zawJ? zy?-6XkxqWT&Tq4F-4EkPl5=p6BzRa?RF$=dFs%3*!c_^J8dr z{G``Q`<~ITna6rpi`cv$ahGA-;Oz1*j2oO?{=L)U29u>BVeGE|hVfOuTJcq39EKOe z@SHW*()CDON3gD7GsGo?aTsA72CsQ@tV4L;H@xqQwZHJbZ)`jsx6T#b_jRW$nkQjg zl-~ah;}re-&vKu@z3&{xDTZ;1W^IGV7@e|~mnfz*C{8gj4&$J=u63it6~xw$-<&v% zlqEBW!;pJu8i%26LE|qv^!}NQ)1~7~=VvE;|3$;&vxHi)$?+G-X5x!`_VzXF+aI9# zi|yY1x~Y!&!g<6_u%Gt1zaaPhHEsfP6ZhVboWIl54?fn<4@sjRYoPHFavzjq9N7QB zV>LcP>Kw;7%$?(2#{Afmz+*K&LSrj5#zD(a(xGKI&s1vUwSTN=e4jNwLSri=wgK@G z^XQy*d_=Frm%xth({Z8k5$5Mi#?vzKJ~1%m)TUY0%1Ia zlOD!HII^#2{C*MP{rcFr&AwkB#zXva<9Wh(h%g=^e9u^H52$c|2=6_J8c*ZR7@bM) z4Gi~(2=|9LpLalq@epA=L>Lbd#zSbI5qMoGe{1*u2;(7UcRxRjhnQXdh4B!-+V9`d zakM`6B=_jtPp8Dv>wZVi`R`E*das1M(_Q*SSzGkppCr%sgzr@fj%UBx*LJEOKYyg{Y5%*HnLZ&z*Qxcgl!Jh5gY?E@t5=Mi~2+t+s{bx41z`Ks?D(e&3nq3@bmaH6`v zDMC7tZhx#U{eiddk-P(GySK;C6(%#0PCEuE|Mz3%>hBpM=hb*o^}(I5%DmBiCy>rn zB_I8{tfbw4Cy>mqJ7k{yr0lu$s=Pbo)Mb&*n z__EZ=nT?J3ylYO9|BhZQ+vn#wN3^Z|DW%OWU(RpV+I@7AdCy;mq%BA6 z=ltRagLeJb_si+~lBTm6cm65X4*!Y#-hVJwCi%aGa`pP;rzQXOT~trVwYO8&3AK(C zNwfB5Af$M}6$g7^J#e;s&ig7^JhW)@L#oeexT!TbI$r+w)HkG0?T7pB)AUj^pX zuTc4-FULK!H0wR$`0nR{jQ{lAZ5aFE@6yGjpOrqKQ2H`|oFR2c_s8UZ>`$)uIwaI% zyKj8Ij2ZNLtk=NJ?zMj5iTq^m9iN3a*!I15*XcFlY3X;g&+atylu5_SHKI_~mp#9% za(WDewTaNCDuFT@QzpMqjlXH*MIxIiJxEMpVuc$zi%Cm*RiagU*8d^ z?;O>8E%x=n?_+3uG!sp@ADmbB{Q0MhtMqa3;PlYf#^lwWvpBOdh@;FML0q zt~2Vsoc{Pi<}$eE=z5G^kL-Ks!)8omx?z7zi}%lk`@zjF|HAm^+2vmt|2(_=3*(=| z_-DN)JWSUFb1ewtpRbO%YYL-Q&`GQg65TXSC5& z)8?^`QE?gWEyUuVW$Zn1kBq?cTe<4Uoz}|Pdm{w&neoA@AAHhPJEZO%|?6| zeWCfDX{{w`EH%dQh4K!ILK)K+9xT!OcQ0<1_g3gVyLDp6p9fg_i_Pva=X)-Je?jL% zpQz6-A_hd(D&0@#E8eRo=8NDiH^s1E6t5QavE0pfO6#tnRLjnM3{ao)yg* z(YVhmZ;w5%oF(@@C7!?ic^Rkcb8AnEA5V!Nd&Q5ZKP}IA$QZ8Eq=o$n-(T(BTSGt4 zA$g~BCY@`T7^1lOMi{Rw*IB8vIuDin>G*dU|0C}(b_w@u4)<#g_iJ`K(0`myJo?kW zh{e#o9rwEq)h_ecZK^kH@_(Bg-33lbJdsX zpGcahmpIl_AJ#GU!tb6XF1$w+051aHF{aw z44)r}#WUmirAg0O$U5*DxnJ=kSp(+3+4tGP=Lf>)2i~mb2XtP9eUY_U`} z#VKEAIv13Ky}xo+Nvu3C)?UU5_g9wqw@z~(bxNPCnD~q3lkTrP&*G79k99nNZh<>ZggZhz&re5;Pia}DRSzcQ!MZu@N?vdT&C zGfO+s`}8Qg&MD%Q`5NmVBgeb@E9-q(^E}d7s~<~voSff_U5HFbf9CFotT9sP)1(_n z=d}3elw+sbr#YzJ=vcvvSx!5#ds!?Wri)q5r@dQsA6s{PCUsF`mVYdE5d*tZVj%X+ zarWUJh3<*GMDA06_soMY?o7JkOZxYhljraL@r};JtJh21azI?{kKZTpu(JPx9Up7k z_%n&S#s0oGN#4so?1lRG9PuUR?1L|U_vasdF=x&dU+PF&_$B%KsxuN>dq!ew&q!?T z88`lU;faV9|BTq@zmxX%r_|T^`5n-wvo@}uzQEXLwi$Q+DPo`hiTt)>pR0cxWvy|( z*UJ9Z*NtCD?DJB|U)?VovCq60_T<=S-3wb{pQW62AC0)!XDQz^a<5^=vClV5j(xsM z%8Tpfez_jvI-h?d(rxx%cH^B*?6dB>JV)BU#zP171Hzs;7`*@TRBdv)SYU3Ke)-Dz z{9_aBzkI0~5aBu;cx;0Gms6+>2OgVX|K%{fj<-jMT}BCFz2AxD%ke|@p33;{*Ow{w zUtT7C!%X&H{$q3V1ohbNH@_yabavl0D0`ABq0@{X)2#iJ?eRgrJYzGQXs>4bczciPORc?`ExUf6g>lYB z`^#f{Tn$PY%l-NG94QNp_v@5$l6`C3eU+qYw4ajqFlY?rUcaoh-1OPjg}e94Jh5}T zyxVm9ra z4fomAnW#4}4fkdKb}#NF{8~Nl@HW_&S?i!5=X}tcr>~QDb9!S;-4BHJeV2C}%39vU z5!nae1-VD`lB}&ir0?04wVMuIvk@D*)_2yrH-=aNtOfexSH0gd#r=+T>YRLV-2TU6 z>;BcUW(Xhm%DHt8q3eTB>spiert5<4nxX86E`NJ=?_(UwkWq;b(c<`->?;gADog3f1=A*NZ@6Nx~ik+3YZd@FN#P2*K?;Y1z3Z3t2nO?@R zgA!|pIb^=X;i5b*R$TLJza{mVO@pLxv0waOY@r}PJUe_hXowVg>m2IMPiHQ)VtOJ;lw-`Mqu_kn&={MNO( zr{+-Hp7^MKyYD`fJnl5HM4ZodKKk*qze2H@VS2;ZTfdG|?5(s}_k;E-&-fj|-juk0 z56axwJKkFZ*SN~qZy6gDTJ7v$tevHqbzlG7@7DDO>%B21{?-4xv{n7PIFz1d$G}?O z?e%5*IIrD09jmU8cN|IV?YOLK*zts&5X|GOi8dU<=JPUfQbrLBHnr z6*5i;_xqLoadmuH?u`%UNlxil4EH7d`S>edefs(W^#9to$KFkH-p^div5&}Da#-Gj zsqy;5=Gkj~4qN+YjrkTg(w}onE_PqmE<4rYU7CnZ4EOszzx|=Z{eGPeeWvtfnO8|w zbDu{D<6ynLF$15kkbXj+ulS)nbAvdVH#7gjIM~_6afWfQv&+9Q4mON~ofN00_u{2r zl)1@-?t7afaap;truWnhPDlMW*G!z5=Xm^9c|Vx2I$`>5hf_%lzMC`Ws_*LFxo1A? zOxXSDLU{)DWtnT*&$#37Zrq|g>pm*;P<;m&u3K?`m*?T#zsqy-_kTG#e0#a~ z)!AQe#kc9Rx-zC*=srv8bm$tQyJje3(M~g$;Qd?GjM|f9+)w9r@A??-4;}9Jn`pmZ zttfimQ$L*tz4{Wy!Fu^2^E>y0b`-|JV!j=V1J>(|Jm21VO4chsGUuujJrb8Y?0!!> z(Ifky?#1`H632w^GG1@QchMJ`@0r#bn$Ee0O+Qz7_QB3V`CfRiME4PTadVOvL$*%r zV6JWJFE$I~V8b}rFU$Qz?922Gc{gbocNfOpg>iRYOu}#&cNfOpnXwY?Yjn!EAW_UR z$KB~Vzkd92=quhhv|_5~jzb`p5ai8oj=igty)al3&o*_Kr(zzYad^0#^N$&w~mhr1T z(@-H}S&g$oe8M~RIT3A#i0RUH>ECxVaj-x980G=qeYdw_pW}RqB|ReRBYLk6u@73- zTF&_WkgSDiJgCNvXiTWCm34^5zQ>p_21)E_*`BqY=S-*-o9DC7@yn8bx_=kqK;+q( z4$0<(adr~R>czfD-9ijsuf%L3ok+J|zt1xcc1-rO#j$UfIM}h}`p}+P+`nSkGJ`d&Elo*eO{f*F9m!!kAfiZCmpy=LXr^_!mDIjP+$< z%vz9?T$SR^#vYZ@2a*mHSHG zJ*CLRQ!+ld z$Mk+z+}^YSzTIc-ce^&$m#10#IQV%Z=lANzJ16#5$J+XNm-ml0?2=*RXAZ1o3^~tmCbbMKCW4~N`e6DdnIv3IVn)*?lf(;fZ`HYp;E4-{6+eN^r}Z8qOC<=)dh_%8RD{60*^r08$$y=&yTq5Wtl^3H|M9Lc{N zx%ZSK_nzwI-jm+vN|tj?XJ`1bn4Rgg%NERBn>K&u+Oy~3!|Zh}xciy!4$H5`X-Umv{z){PD+DvJTcQ?~}k< z#p{>Lb1Xq|($~e}r2k14*Yq>lt~2qvl&$sB$qsDJUpNFsN>YY`_Tuz^`9Ru z#kzrxmoIQ%rUZWTTv69cux8mS?;b>79J_xZ>tkXIzaJ8RygiBJ-Ip?#?a(=_tXoNv z(!c1AI%8u7I}bVk5^BXJ-+P{GoW`6+ZDCxid%?urdzLa(U#2?d3$iYx*J*DoEb9O= z2h;r-bsjdIpZ2+5zR@Yt`8($G?mam=ahW)kJa}Mnz`S@*0J*v%^gMKAFKCqWUlsz%q1R{`GTHv z9;MTM=Ww;;5q$9P#f#s1ZP#~`+Iv2`?{}2?<>}4({hXxO-ZBTnytVUoEF;WYxBmSy z>aF!G{>7}f=qs?cjQdQQ4z!a_X>X58+Zdi=e-)jJ>AekIL)QE9?t7)BO@CS1){oCT z*!c~)zwwQ4m-K(*!N`mAW$p7@N%K!s$hz?o^L=gHI;hpY-F;YeJmKxbV(($4_q5=n zJ2sc~9-Sk{wb#e2J!-bc+H0EGTL$;g&WPXNlJ#!g5616@?S6**n29FQ9xyi7`!C^o z(Yts5NY>YQ9B5zL-2IHh^`aAF;rw*Meb&yNQ(WZnu(n6sOOUUz_{@XecsMyV*6-+; z^Cz+nuHzjZtLd@&2^wz&jp03Yklq?A={{GoZm(jjM0<|exC*~jWw592lKyz@-spX9UM2kTf*`hZ6y7X4v~ zkC0@h^BB<{kL1fe0r)@ZnyK&ZmU{%9k`CQN(0#YZ9J+QS80$^CW?K7xX@73A(Bb!7 zNZuNMV)tKl?=Q?(u!fgtKDJ-R^8Vb&x25kVmpEMZeS7S>*NHi#*#nLJPjo)bUrkS< zzuR-Q6yG0jocxTGo4z;MKeyTQjnA$2<=&TrzF(`Zthu?L&T_B4eO<;0C`Y}Itot~< zp8Ot(IZoT%E$Mz#>X+Q3apxOow?XxY+b3)7>&+MBKDOBO=T7c?NX9bC#JTiD=?I!f z@0VjxZuxdTiSPa5`?Hc)nxuIjPng? zL>}Au_BF}3hc%zJ$MUXI>bO5%l6!-Ck5AX6-FFb^y}q@P2Yy0Gu zrJMtG(e=;z{i{;{P%heD_2b9ySanXp9 zPO<8j^gUjCe6N&ehFpuT8-G;J@l`p8)B(3m!mpW>BWvw)TqFItU9Y~V&dFycc3ErN zO_KE&+pb;Dw5|@zyys!bE4?o*r<>IF?e$81f0XJ`-=C8E20Ay=`v&fHM%Nl7f4p;e zedXSR);(#f-K1IXhSz=){goW+eo($Q29&Q`wsKxB+nMyYH`?XuXojuMvbV^-N(eqjEo^=VSM zqMiBucx=27%ZKxSFPL5Dxli0LzTq0xX4R*?(vCIH_L}RtotGG|*lPw;)~~hR_34Y& zxJ>(_*!5id59v2Vr}@HlVE^`*kMVPV8NaEIa_rOUXL95#vucvQ= z@rRDL|4sWLy|$JI*U?G!$mDlW|A77jn(ps>hUxU--#N$Pf6q35;;l{oHJyDN@ujcc`$GGR5ByH+Uw>ic zJ>3h>f=_q+Z2yk)+}v~Yz3;j|>xO4;jr`5?@A-=pi2t3=K90Z8e`jm|e2<5|x~yq) z?M*pLS1rw1y6mQ!x`x`ail`(aU-{DY(Te)YXk*jT!f4Z$+GgSS@|)(%hcdksFU`EI zr6F3;TvK;{W_?{Wv%V^`xjLFzRbN|M|2cusiN%^tWwn_NWsOa$ttzXj-O?DvpPkHG zJ%jr9=-qX-4}2)IW>Z6bQ&UZOZ8S65*jV5Aem&#To7a~$m)*Rkxw+nzR@}Vyf#&GF z&5dI8<~!<|qm6ZCwM(m;JntMw)k|aQr7`tVs9kB9Z}6tgk-Z|CQx?r$RaJ3IbXjHD z%IsA+D?JZf&*kfFn;M!Q$SfCMJ=gB4w|>aqKT#KT^D$bP+34nZW>a%n^Oh#fppWLS z%an3jwse_iGtqyO{hf5<70Gcsti=A79QUM+&CTYKF=Q+!;%F_g1H5O%lKkfo@fS~- zrKf+Fi_r?DM>|_y#eg|>ryNE+SLL7Q|W+3hZeKy4t zLmwdyeJ^q7`-wx(MGt){WfAl(#G!8^4t+0i==+I7pY93#ynuc&apz;Kap+U8h|f3ZBgCOEAP)UFap+U#2ivbE4t)!8 z*dHMd{TOlRcgTxA?GN-_#GxM`4*d{u=+6;{em)*#H7AF@fH?G}#G&sa4*dXe=;z~s zTytLN7ZHbk199j#5{JH>IP^Wlq1P9B*&paruwjAuBlHEtp|2(m{Qz<3M~Fk8Di6!r zALuiQLtj7~`cmT1_YjA^k2v(li9`Pyap<$;p-lS&eI9Y>+lfQpLmc|k#G!Ytw$F-p zI3zjM#G!8?4*TuIq3KXK@Xh(kY09Qu5`0K_B% z`eNeHHxP%ul{oZc#GxN24t=UTplW}h&m<0g8*%8ni9_E<9Qpy`&}Zp}2-XMsJmSz7 z5Qn~$IP`<{$$#G&6o9QrQe z&^z+NO#1_U265<%h(ljV9Qr}x(2o*_K6R1pO>BIgNgVnj;;>&y9QtnJ(DxFDzMnYs zgT$d9ArAc*apEL!+sBO=m&{IKSCV(3~X>=+=4!fIP?v~p>HJ){Q=_8 zA0`g{#_NOgr&6;8-n!_;?VCQj`SWN4*ei;=tqb{zxu{t ze>M<@zL+@d%U-2%ALxgOLqAF!`r5^DX8if}Hsa8y|3&Y%h{K;!;?NHehkl4S z^s7G*?9T?`&=(Vj{c7USA0`g{G2+mV5r=-9IP|5z8SH-pap=zxhyD3k@phnpoH+FR zh(kY09QxD5p)dHY`13+vN*wyb#GyY%9QrZh(2o;`e&Yv&{i!7meG75eZzB%Tv0L*GIi z_S=X<|2T2z_YsGFggEqL#G%hv8ti`-ap)_F!+tYy=noKw{xEUq$B9Fqa&x?&(B~3| zem!yM8;C>SN*wxL;?VaKhdv`a-cRVWh(ljQ9QsP)(6he&k=_{Ygw@WdBmYFB@X)y#G!A<4YuD(9Qromu-{D_ z`uQt@?Jpt@eS|pd7ZZoRjX3n(#G#Me66{X_ap?Pq!~Otq=rdOa+s`Hr{bAy;e~dWv zDS5&6Gl)aKo;d6m5r@8;IP|^5p&us>ed?-sKcUYj4t+6k=-Y@x-%T9)5#rE~5r=-! zhvNN&ehG2tONm3@Kpgr(;?R!}hd%3fg8j)O4t)=C*zY3_{UCAZM~FioSsm<80deT7 ziNk&iap*^hLw}k$^eG<>_9ufl^sU5UznwVry~LsKCk}n)t-=0e6Nf&ZIP4b_hkk%K z^h3mDlx&}R{c{RnaB8`cEdZzT@>KH{){ zh&c4)#Gy}F8-HHt^Vh|5=!=O%-%lL+LE_Not`D}qo;dUc#9_abIP`~zLw}Sw^rOU~ zKTRC^;@g7#uO<%tYs6uH?(Ok*px;Ft`aQ&ELL*GLj`a$B*j}V7`^*zD< zZy*kR3vt+QBM$vO;?N%=4*hB3&^v|kenOu`9Qr)s(C;D+{T|}bj}V7`j5ze^_s07P z{bJ(K7Z8WOlsNQl#G&sd4t?t+h0N)`U2vxUrikPZsO4Q z5{JIvcZ2;YB@X=nao8Us4t;iUu>A;e=#LSH{gcF@&-hfZ{Vd|p7ZHd3O5)J>5{JH@ zIP@v^1^bgp9QtD7uwP9a`flRT_Y#MGj5ze;#GzmEd%^y%CJucAaoBGq4*dvm=*Ngd zpSLmCpM2ub_YsHv0pie)5Qlz@IP?X-AM8&lap+r!!+sla=uZ=e-uZO=d7;lB4t*AJ z=-Y`y-$NYwe&Wy%5{Ev!B;HTxBgCOECJucyap;GLLqAF!`f=jWrtlZ{c+;ZpC%5yQx)$g^wq?nZy^r--23D0 zK%Y(=`aQ&S{!F|b=r<6DzJ)mSZN#A;BM$vIap)^+gZ*hH4t*heQyPN(&mazcE^*jjPaOJc;?TDchrW+E^aI49KS><= zbHt&~+8mtTJmSz-5{La};?VaHhrW+E^drQfA0rO^hQ?t3Hxh@wjX3Og6Nml~ap;c{ zhu&!l_9vA%^m)W#Kc6`Cdx%4SfH?GH#GxN24*lZhVE=Q8Ltjc9_8W*p-%T9)UgFTV ze>T{k9^%mV5{LbM;?OVoT(JGs#Gx-G4*M;{q3CyZ&{qh5<#9_aMIP|^5 zq3AP)Tyap=d0 zLqAR&`qDoP_NRe3^lijpzneJp&L0KaPbCh07IE0mBMyBJap?PqLqA9y`Vr#LM_PmZ zFCY$mHF4N)ArAd0ap+GIhd$*CPTU9j4C2tY5{JH>IP|^5q3b%`aQ(q&jI4lpC%4{${)v{ z7y5kS&=(VjzWYz&?Lgm49QtF#p+89+`pmXq`+3BnZy^r*ZN#A;BM$vIap*JuG}xbP z;?Q>!hy7mS(2o*_{xosuv%eJVPlP!1J;Y(Zk2v&;b_UyDLLB-$;;^4j9Qr-Pp+7(z z`a$B*j}V7G@@K*R7Z8X37;)G?NgVneUk>nTw z{UCAZM~Fkex;@yR4aA`@CJy`6#GxM|4*e)`=xaNI{n&sIP}MfL+?Bi>`y9j=$8|^m&g4+s`KseH(Gu?y!qlsNRKi9_%FMf`c8&msZ?Hev#G$Vy4*M;{q3F5r=-9 zIQ03u&z9QyXYVEaA9p+8C-_Ky>XKI5ri`&q=HuihK1Zy^r- z9^&xl0CDI~6Nf(Kf5e{``h4Qh7ZZoRdtbaA=zEDne~dWvCy7I!xj)!`9&zYfh{Jvx zap=d0LqAR&`pl<;{mCW{eK&E~?HP+{Wx*xQ~oa4pDyCiKTaI>SO0yy9q2a@hrWe4^likUA0rO^ zIC1DJ4+Q(uOdR@F;;`RN9QxOYLqGQ);?E0xDskvDi9_E;9QtnJ&@cXG{CT0zB@X>z z;?N%>4t>hEg6(GzhrWe4?6(nz{x#yz&mD+AFZ8Lzq0b}^{SM;LcM*rahdA_o#G%jl zwiEY(K8rZ?`-nq-h&c2c55}4I=a03-q3<=bHt&~dM?trb{cFUb&o~t9e-?4*n~B5z4&um$UWuO$wD zwh@QEmpJtO#GyY<9QxOYL!Ws#*#B(e&~GFT`?bWO?XBf7vWP=pOdR&Bi9??{9Be<6IP|T=VZWU?^rwkK@4Og)Ug&obhkg%n z=tqb{KSmt-^rP|Tg?=${=&OlC-$ESvLE_Ml5{EwHUxWS0A`X2qaoDdW4t+0i==+I7 zf08)#=ZHg}{Zg?15#rEy6Nmj?;?R#1hd$-s;?E0x199kEi9_E_9Qt13(5H^XpBMT} z;?U<2hd!S;^nJvkA0Q6>2yy7gh(llSKZE@*B@TTHaoBGo4*hB3&^zCYKQHtd#G%h3 z4t+au=zEAm-%lL+LE_M7e?Q(&=p)3TFD4FsHF4;Nh(kY09QtwM(5D`Y_Y?Za{}<1p zFCY&64&u;v5r=+|IP@dLq0jh1us>PEq2EXx_G^hl-$NYwe&W!N6Nf%!G~Q3>^IwkV z&=(VjekXD0cM*qvh&c3P#G%i6CD@-l;?Q>!hy7mS&<_!Zev~-$`9BQyr_>=0-%A|&e&W!t|530% zMZ}>$NgVdi5r;l&EZBY?ap=2=!+tMu=+pmqu>Hlvq0c4``w`;MKTaI_eZ-+3AP)Ty zap?2@BiR3Z;?N%@4*SQ6L%;1ru>GCHq3&52;?OVpuVDX|5QjeHC&Bs*;?U<3hd=9yL*GUm`flRT4-kibh&c59uLt`-NF4el zAECB&gGCJy`6#G&sZ4*lcAp&ud+ z{U~wh=l?X=|3$>1&nFK1#l)fCK^*!n;?NHehkl4S^tC?=_J133=(Bzvtj{A3eS|pt zDIgC0A>z;Kap+Tj5$`AT5#rDn5Ql!8IP@uR1lzAB4t)!8*dHMd{TOlRchEc9 zq3F z6Nf%!Ui^8X&m<0gHgV{?i9_E@9Qpy`&<_!ZKJOCm8<$r;ap+5l!+ryC=tqb{KSmsS z=h9$*Qi(&~LLBznh(q5)9Qr=u&}XCs`;$c+`Ur8@FCY$mKXK>>i9N3lsQ59Qu~DV0{~L=*Nh|pK;>QS6&@#znM7nt;Au!ojCNb5r=+m zdi;5zPbCh0CUNN7h(q5^9QwuYia#&(xx}GAOdR@S#Gy}lcd-2o;?TDchy6C<(7#3; z`nlJ{pBMU6;?QRjhkgff=(~tR-$NYwKH|`4WO(1Wzse#G{XXKbe~38r8{ZRbzm_=k z-Na$PmpJq(?+vz}K^*!W#9_aSIP^Wlq3&Z4#9_aHIP|r| zq2ERv`X1uY_YsHw9C7I9U+*cHD&{UCAZM~Fke z=l#L{93T$;2yxgSBMyD!hG6>z#Gx-G4*Lznq3h5n#GyY%9Qu>Qq0e0EedG3*;?Soo z3-%|2IP|T=VZWU?^u5HP?!4A0!Ta%F1AWGKfRJfjI1MBo2K$ap-%ALqA3w`f=jW=dJR- zaeK)p4*fRbu)mWy^aI49A0ZBX#)pFa$s!JYD{zue6uO<%tQR2`aCk}n;nqd2x#G!8`4*TuIp+83) z`uS_)&kKD9ap<#%L%)+a^t*^d-%A|&e&Wz)uJgWef0a!f`UAva|1fdrE7u3xZzc|X z4{_MHM*{SM;L_Y#M`pE&e$KjwX7|I>*>-%T9$dx=9o|Kq{-7ZHcPl{oCT6Ni3?IP{~$ zq2IS5*q=khp&um<`=^ORpMGbs{l&zg?;;NSj}wRfFmdRQ5r;nSu3&%ii9=sW9QK=u zLw}4o^e2f!pK*7vKUu_~FCq^6mBgWMCk}lNap(^dhyECG=u-;3Z`@uoh(o`gIP4b@ zhrX3K^zFo!4PcI7AFD4FsHF4N)ArAcjap*^gL!a`=V1F`*L%)GI>~ACveLHdJdx%5dQylD1 zA93hMiNpSB;?R#1hd$*~@#lp;l{oa7#G%h34t*YR=p)3TFCY$mF>&ati9_E&9Qsz` z(6WfO<~0CCtqOdR^kl3@GI#G&sY4*Pw?p-(Lhwx3BH`klmK ze;0A+dx=BePaOJ1Wx@U|Ar5^WaoEo%4t*bS=m&^Hzo9(XpN+(!e~mco&#j2J1AR7e z=p)3T?;#F-A93gxRmPte`X$7n&m#_fK5^*x5QqK%ap(t$Lq9?s`bgCK#_g+sIP}Me z!~RL)(C?@Uw%*;?OUu@xCEl&@UkleKB$9tBFJ3 zP8|9k;?U3igJ6Hsi9^4dIP7mA4t)!8=-Y@xzmGWdhloRek~s9|h(llc8SfkCe* Qp&qp+8I<`Vr#Lj}eEypuzjb^`VqF^e2hK{yE~%cWn-~|2T2zhls=e7;)$` z8iVa;5r;mXIP4b_hrXRS^gYC(KTI6@W5l6PY4W~t{$~(}em!y6FCq^8Hsa9lBo2LQ zbFe>|#Gx-B4*S)_p&uX){RnaBM~Oo}P8|Bk7VjJ9XEAZ;cM^yFUBsd9Cl37}ap+S% z8|+Ueap)U}!+sla=noKw{xEUqPZNjU`CPo8&=(VjzM44nJBUNyMI8D8;?R!}hkkyG z_l?VU5pn4Ah{Jw9ap>EKL*Gpt`XS=bj}eDH^8xQ0`=3o5`VGWkeIM)3vuZCh{OIMap=zxhkpL&z=F5r;nGkGyYOURlKT@5#=kkj4F*?4-o~)*q@|=v*?1Z!kQA{?cK1 zHu0AX&m(@VxSdK&e=bhIKa_xLH4C!yKN9e7C*X7E1lzef0ly&u&q=_aNx=U(0Ut@g zZ%hvMb9VxMi&UVX{CPG3Kazm|X99lHykPrl67cN__;U&PZ~~qrRWm4EHznYACE#5N z_|pmas|ol@X)rI3HX0Yz+X(j z-+y_q{kjDF?-THpD}wEOA_0Fa0snpiel7w3)A_;Y?M}e|CIMf5Ww4#+67Y=+g7sfZ zz+X+=%uF9_FsPQA`+rL-1 z+R3bsx6>tD?Z_YFJ|hY2EO=kA{U;LeyA}oOzm$M~Rk-?z_oR18zo4Iy1p2WA{EYuD$xpz4SGeX+hSV4P)15&7ym0j&?=5OK{?EV8)GNtX`*Wx8p!)NIaJ7T|IR}lM z1=k1buT8)|oPd8S0pB8A)0-{lw?EG$(0?xhzcbVGAJ3nmdbTYKb6AOe(!I1zwzI{PGDzW0-k(B@Of7X*Yn~&SEXr>eegEk#IMku&m#Q?J{YY3SOUI9xcb>fcD|WF|0ARCCH>96?bRQwuWm4j_>Ax% z|Nkrj{|n)6zLEX!8T(j|%}er5@G%*$sQxtR|3SFhuFZNT>hn!Enfxbxk8ssv{SeDQ zX-hr5Bk8t3eDOc%|IPYOpV9w~@SyyB zM!4F^AUl~k!TL?Y-SnFE8Tj+B!qrYD*@-Okcoy-U!h`%dX!QA{Pg@?W-ymGi+eZ3_ z6X>1AmCoW8r@E|ZbM4kmIa_O1ZLN|2F59}Prmms3tRh;H@BXP~eYB#!GTPX*wWcuI zw57JWWNT$}d0ACe$@;S9vaK~m`j?t}tLr}}ne@3W zbq!?|pILWrb7M{2{cD;kYHGGt&&ePdI}C+eat4bh6`Xr(DYHYkoZmo(+Ti>*$ zG3xqA<)PV9)=-jNQdQQ}?6@`3&2rC8DJS_~_SQ|&TdFF}+15&}^@?Sye>N$-2O6R! zYwwNa_nV$#&xfXx_4Repx4?~{Y>`Z@sr|U0{cn1fl-QNPZGKwZUehY6XmShMtDpB* zOT}zxtl3oZ(foDD$vdRU`PJQ3)Szv-D%3S;wawC4aoD|$6&va+Vn^yZ@3^aI!yO;L z&CiONTPxVoRK2dOw$?pG%;?Mw+_tHq`2ov<)fTjYF1IouQSziOD2Zx+Ff;#SayQQd z^Y*@Vv9wHo8QD-%Ua(m^jXTR48l*#PDp^;*X;Yar@z2D@`Do%h`puSk?ex8rS+ z-giSyQ}fm>TemFpkGl~6qzm6#S)ult3L2voGsxsg4&=dK~9EIZ?t`+iS%u|osW3!W6LoY+598_k-+!jj*;yKw!z zUhbWbwfZe`5j_9Hj1#eHo2a&Um+aeWnyckB8=_U#g?7en>IL3U@A)0&I(T8#l50iI zj7LzD8{yVUww8S{t*yG4#_}$vv6+uuXOL+aH(r$TjBDgGs=b9Z_g7ohmwJbyEe*BN zlKZlY{F?fvUB&GY#k%UU#=MfsXhqGYvf7+j52M|LUd8gfwvL~<-p{w*)m47BHPnl9 zjZt^PR9jQtu-O}7%B)Go!!p9WWmR5I_R6xd+!Z;?S7ujbFUu|~UzVG*JZEK2)ym~7 zSKYFzta8eLG(UrOG=(N17DY~_$z&q8w_iWf& zqxJ8el8Q~0Zb3H1t|@P+KhobzR>*wNon_o!6RnN){4;I_GP;vazM!TdT3b^Wl}TkZ zRxf65#Ph?uM8+=pO=W+DMrl@6I=FMi-Mk7nPM3&sKeA$dgqTYq+?%GNn#*{QPM%`r8uc@u| zn#7cs^7w;YmnzC?%bKGy9;$3=sIPrs>z4cL&6I9ROKYVfmTYa<+Avi^l%)f^g(3@t zmMt$|wmffTdCv06s^wM7%cJEhvsbLDTzSiiyj4}XRjYC{D zj@dbR(d_c7@`{z&UR&5&v&Nbi+MUVTEmc)=*_MA|V^G_XH)Vo~*@6sYrH5^nDVrIX zziFP>SrXU3uJQ`4T$g7qd@>x>d552>DQnA}We=1`OYW*~u9mUAe@Nm+hSepv_h^#Q z7KNz)+p1AHBzZ{oyI$> zUI{-FjW(>Qt@&(pYxN9P+58U6pJPccEmvIWS7Vb1&-nBn8e>6Sw3{h!<<)0v&24pC zHpxOsP1*f-Mw^<-?vED8%)hKLR$Jdn_jEEe>Eify%(V5>Q`&7#+zzDZ5p=wavWQVREOu5Hr9`U!k19ka*3vza>Iw%O_l zk>gWd+1ycBv^KiwJUdQnr3(YxdmpHiMMX16xPa=?UilPC>HLM%-`HgL0`ttwC@=VEIQ>}}w$?X#%OT5g!)@iVs%5ew za?6T}s;a6LRncfgURn97+zMF)S+%mNET=qg<+7E_tD-p-Wh?TQ-xAHvE0^hE-g3E# zxN6n1N_%Z$|6Xg-S>6K+1)&P{sk9%I}RfyEk~eZoR~>aJuwe zP*iwt$@)7Ai#|2ei-*-rypGX$iFBem`_^wSy!*b}?y^tv%P)))uS{Ys_yTgjNpe?8 z^FsT5b2zePdIwAcj@=Ajv#EYdUGv>l(xjVWDbf6ud+b~4%3Ji7`1E!s71$Cx0xv~m6PseU2suVR7Wd5V~x5lG;7!nGHLo;nN&ti zyw)&F8#8ysR6|+sh}Fbd4uQ5%e1}=wyMQE3wlwpEP0C|7cER;$lA&2RC9OejkJi>y zlr_tuikI;ho?pS%X6N3W^>t+?P-j+-#o3vaOU)GskBW^q+^&P~)E710B|%d6#yZmr zsDct)W z#uo7|&?)pkvGNE!r)j{qZ;>@QOwVR{Mn5Aiz)qw1;f{6KS?_-QGO48SQpb5ZiM-%B zq@HV5o&4m>qI<)TuW)YT(!W$}t(9`U(4icg)%(aZIp3R{#OAH{zo|*o^S!xAtgWeP zUSr~YFQAHFKslN-zPZWN%K9dkrFX{JB~yAbU03mjsc0WQjBAVLp5cX+p>NV|hd!k9 z%q~gRuoMY0$U4paTkqd$mIlx>&SHH{D(QKg70GiuZNxKpA;q#{?1trUt?{BPOzdEM zBk-WxMOJN+K7AHlq+bHl6w8}>9^}tOsA+y*H)USCaVYEVTW4}3cG0{r4<=3j&d&?$ z@Y#A|Rm$`8!96f`cJIL^d0fl=yicC%`mamP5BUfCudEdQ6N|4l5`7NL=J|$SEnNQR zY%{+%n1A0zyvWk)GnMUnkbLkwrs{28>i*Sn-Yfid%b#w;)z5K@?=oEdwE1g>!_Oh} zd))jBKfzPwc>U;kCoKEx4d;9-Fr4$P$Z*cLQp4d-m-&tDYvB(#wtZB+=1;59V>?3R z8#tbi<9zEg$8o;xGo15nzIomjevTPks^RbxJj-y-x7CKvljHTPJYMd8HX6?PS#3Dy zXRYC!pDl*N&wlfJoB0=hg72{O`Zd#Y$7!?lHXk%x{rRa?9}XL?{@8rnaLtFGS^D|O z-ieS88_ju_7|!{SXE^7>YQs4n@(o8mw3*)<%)iJ7@FGiZr?=SB+kA)N@P9S(jqF4W z-${1Bj~dSD9W|WOd)#nN?`gx4-o@HD6TvWNsk^ZpA1WH^J2r*AG^J5G+h0$d7I(fj&>Q2d^qNv);VA}=fj}k zoDYW$=X@A39QlxOiFblyh9e)qk6U^>yB{6Ap)hdn*7>IV#8Wb}Gon->|b z>3YNJXNnEiblJSpaHLE3wbD^}IGeXW6m) z!^OsD_=Ei*vJ8hm;4P%jH+Hv?9=zRf^>dEpXP4pXr_B!=&h_oM;V7>~a-4o%GaUZs znscD-!+-E>^LMth-f-B-Fn03|haK>ZhHJW#&3E;u)O^=;*}TPYP1jsYzs-Et^J=}) zDs9W$>)&a+#ZJvSO4wtPIQzfBaQ460aFp*(^LwND7v&3HY3a4AZg9Pj zc53Nu-e9=;Z;z9E4Oc%=C)Ly*!_`ll&%N9`5&RrAx)j6VCph+b((~HmnqHgtS@yNuG5_6X z*|+&|OE0FJOxeFvKVz2O=BF*aTdzF1^O~i%`66Qv`EbD0H=GCgP-=9G&A-TJ@C}A@ zebaqN^#l7@7r=3_-)D4{WFNf6aMip18$Y*MdYkVt9Op$n-)Gs;e0$CO?zimNeAIBR z=cf&4`{RZqU3q4o%yVQPe6jgE+b=Sl+flLM+>UB3z1?0KEWOS58IJrMHTl_ZxR$Tx zC-`AYuldtseh*oCn~xdJ?e3i6$hXC2y#Cng*L}k^AMA09?lY?&%?F$38IJsK zF~3)ve^GD2*IRnG{uqDqExpZ~4Tt~7Oup?RzSGz_U^u61&~Q%IVZ%9HBZebg8R=g7 zj~R}1fgiW@>VLKIXUx*uJl)vibgd@-nz6Ida86gX;he5o!#Q0oh9h15=Jz)9FVY3R z!_uq&L&l#rOKk7w>DB)pldeHa zZ}Zm-=X5PH`{{x&G3!OE4d-;_8_wz4U^u6%*l?t)+x*^W{zbaLD=oeHpJM!}w)8gd zG93P+-#9=V>vYEq=X8x3&gnX7IHzmeaHK0w_NCU(Im3}I@VVyis#pITOuAAGSG~=1 z4d--iB!14=*=9JW>;KU8K48(d>3P>=cRrV-}r7g8oQBhG*v7(})qK--x6?N26M@1bgDk>@}Dk|!zsHn7}qN1WsTU7ir z*Zcg=Z_n@A%pBkG-pBoW&bhAhx}JOP`SU){_a4G?T}SX-*9ly8-7`OBR9)g7(}(|i z{B%w4d;rgNy(g~U{br`4tG~qi7d+QB2hVjaz}0{KzPAWh|HT_g--seck7m+~FT>+~ z*?;#tfQL{2zHV^x{|W@aeywU&F(v^LKdmS>gZZt#zf})oXD1-(Wt=DF5Q? zW8&?UCz7ksLOv>@4>Zh_51rdT@H|M+|{KVba$ zd@*k`M&JB*i5@)S#7D_Sm>fOMEspcP#qr!x?U30J-EcshmW{k#hg|36^Ne?1<X@0+i1tvB(RFBI{m zuadV4mtK56>CcH@PkQlY((C$(R?>^FCcUn2SW9~Gt)zeE``UKWiytNZ1)r;rlV1ER z>6g)Wl3x54uJd?6KOf+Eztz7J@-^qt@_yau6g9r1I8U!|tvB&Sj_159@W}f^ww_nv zk=OY;T{1)lxC!n6N3xcqN^XVJHJxcrOHa9sK& z=2b@N#ar;~e`5?kgopnhw*DW%!@u($JocY2nf@FupO4J@jPfb|0M9<(;o-;k`BJUu zQ}}T{3s>Gf=5vh7D_%GKr$!<5`FX+g&KvOXR; z36K6STK{+9>gNi_&Mf|qn7(82o!?n}e_wcnN1vlVtHgSON1vS!O+PwRs(rCIe{ZID zUgvmThYRq$4wvBh^TQfkebD~4W%2#}XxrjD--Byi-7(*1)VdPCh3C9a@Tkl8v1fSH z<@^<{yqmwK=-Uvkyy6v(OTWZ?no)Z37CifmfA1$AneV}~|9yD&e+ZW!{d+@4aQPAM zCH({Q^Q0HQhi9L|F?{;h7Io!yH3QG3tu2F}?FQ zc;4S8s9XKi{x%N}KfaIE;o;x;Iy~q>kLp7ZX&qb}dacHvQ% z^L@DTzA-;wR9^8;(mycQzh@=A_&vw7&*2z8`Rj}RWdHj2ow9%Zdrk7MfB$HPIPxRD z2$z0~c_Zn?H{sd;!5H3!=XKSC=XG@p&->dQTs}*`q3Fv1uDZnE;o0X5&kH}kk5%E} z$9W5`yr;~U7?oFi#q_?9t(xBXIz0UNKDGf5KhC#I@B7%c>7DPI-uJOR(>p(e=l$&j zu6}BNyR!Jck6l}Q=dTvuKfjgcit`zL_I<1jk3KuEn0|Dq)MP$wdgm+fybf34c^z)S z^Zs@KS09GItnl52Yn|LMKVj555x*W2N5>WC4c%>uBR(7xXX-b8wV%<4M}AMQz~x80 zn)GYTYe_HOf=7RT^F)y={#=FU{^)tC>k!>~iZ6aJCXS9PP9NP-iX$HX4qrUNXTyA+ zkBNT+k9G20roV;9I&nU*_&;j;rxahm8^6Kj|DNA}-{Cqh;)>{LvI6KUn zjEW<^Jtoev#fjIKdepW!&TmqjK7MX3&ZtGDiSI6a-&q{z_weZRm#uFP@aVJiAw16G zS4>|fkNP7&%CG)3(M>X{KjIa5_-R`FX?XZ?J`c}+8u08#dE{pwU5inE#FydW=f}*? z3OxKc--2g9d+_W>dF1B;-2tQgh#$ej&ySm*V|e&+-hpR7eYpJSevliu{M>z^SU

          Nkmuny0Dlt+Hf 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

          DLnIl%*s4m#u7GWLA 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 YeI2qEo=Ej>SoI+^`17CD2vS1-7YizS;{X5v diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.o deleted file mode 100644 index 57adbb509cbcf6fa74552336886594daff21e1ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226080 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_hi deleted file mode 100644 index a3295e24320614a449c65a8326398fb9566430e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28070 zcma)F1z?=VvEDs_WnYqpTQ^)ch1X|AcPH$lhT1sj)K2o6*Vp!RcXHIoCr6SKJAG}% z%*@Qp%*@Qp%*=YTdjc!<{XI4Q{{8>m*?(qtc4ij-E8cAs%4>1BTsh%=aaifP$$U?F z!%xdQEA8!FQ&#^6q1%=S-S`Qp$ZY@F>p_L{_^UiHA_vgyC;-~%dS8G0M%?~QF z2ywOd!q#T>fi`jN75}xmH$FY=u-^IEm}Tw6#KQ8}Uvr(q{dz+7OC#}8V5|G^N~Y}) zwkgS69?A&mcf%`%ormVG4tou_rnD*}!PMC<0b3Q)99IJ(KFvi&-?&g{vo>j9J>5Gy8HsV{35#i z61w~{dgVvG2wnLxy7DTz@)LCBr|8Ph(3PK~EB}Ii@vrC?SJ5w&(Jx*@zfeKH;2=dV zQsf~;Rivnf)HRU0CQ{cz>c2$l|Ay569sS3DqW}68QhFUJy@8b8L`rWVrMHpNuaVMk zkkUIy=^9dc7b(4ml-@^5A0VXNX8-aZ(d9p(%Y1ZM8(kKl%R+Qngf8n)A#S0|Ul37r|BQ6MM7nxN_cqcM zBVB!@dk5)$g>(&&t|8JjLb`X6?$=278>D*=>E1`W-y+?=p#S?T`oF)SzZ+xpcN2_W zF@=9-(5+}g2|;_>)fmssMg(vE+$*oAx;8b_xD{>;dy}Y=4 ziV!JT;IgoVsEvTd#T!AEnURSL6@gAP!xHxoX1lIVXIF@750Z1db39FgFv2Xf?^?Td z(B58tD{#AXX0>yxj~V_J&`q+F}k;c5$H3~XclOdJOX_}pit-{0);}LQ3zBDfleV%Dp0s* z(6i|K2$Tx_5Iu*UM=zik(Mt&Q3H=CNK|e;XqMx9jqMxCkBhV!DujndLMz0|i#6eud zL#hZg2x%Zqq=kNo{tbclAW$FlEA%>g1HFmfLT{sAqu=0n6yCY^?tAa!59B}i@T2QZ zC9?zjyB*byc+=gpBXP1OxQ+;f&;`jw0VT6+Qre25!?#BpaY0l<{d~-3`A^WtP~_JF zgyiLwsX9k49(p>e3gBJee$tp?$r&f?PuZXK_ZRi9#m5#;;@ob#{Kww=TBIos+*LL%FD+U8&M?$evX;61%S^TmG zM!$#B@BOnb^^QCk7~LG~>ZgLv$Mqk@x<Gw6@9@bB3bAA4Bn<+DxsPuj_D%r8BdZzlZz=>h(Oe9P@<#V%9rIpa2zMd`)7F3-C_~{#}$q z_`rxF-4<$9S zpr%XkkIh2(I>H~ZFlI@}?ds=jomO(=K6Z);FRWER*zd`?kb}%f%#Vj?Bnv@4_ZmK54ppFOKiR27Ke{zig zoW49*ql)x^@~47J$CTGj-lV|3eNpiuI=Uc1wm36uy>+bI)7}_wR9DxJMpiDaWAtZ6 z;z9*NT&Tbnrzh3b`K|8-+!#JgUd~S|-sgd@Lg?WV>a*{d*CbbT1{Y@?;K35h4GXI& zr%a6Q$RgucNgI8s=@o0ea~_Vi<9D2s>&$=ha8n^SSAUla#KI~Q)OI)f)QU}Up|_CyKvgtbN3RNazi>eF5e zR_+z$&Y{oIIP~E?VZ^@cTv!h>_Tv5_<#jMq5JW zmbHCsAI>)qcA1}^m{|fh55x}_^BeX(v*h(`i?s5Yw}UoIj~ZLzz1J|hCySK#clTx; zvS-Z0HTw%40~|&sOEJ37$mTR1QqvdM;{5{a*7V|v;8)99lIHezM!Lf>`i8z#+HicF zG|%H~@xa7pO3!}M3d^)PVRgCOb@>~J`J{>WE&DI4WkyC#=|TU`!KTsy)) zK;JTw_Q?|g`{dbT+scwg54#5Q|1|X&HXn5!F#iL@w9+K}EBkNz(a|x{Z8jc(*rXvP z(Kd56*c+q2$s*$4`;#jC?Gih4zVUHf@!2~_cYgx?osr8;D&Qsv7+ju`U~e;&?Ss>n z61KNpeWKOTUm0m#sljjsgV8;l@0h)w>GpX~Yf)AE$j(k1hM*mx7awZ&jWOEjMiYub}!_td_8>?}2*Itp0e_HX&2&PL+{WwF# zoB=VtTmm9&CtBi^D%@HU3cRfMVZs4n7I8V!H1!G6kx#J2&Ozl#vqLRIxp*UEY8H(+PT=jwD=M-mq|1Z4|r z!3L&yCVpa=+X2Zx?MiEG+2Ux@y0upM z%HX_tdVo*C_t~Q9p_MM<3q-~j*ka4k zF}K3{xQv%FvMQVGD;v{UFu9c0k2aWXi}%8|EaaFs<6eHKNqr0_Sav&CJzj&&*+%LQ9j=9AyR~CsUv*!^IF9WNs-D}6jC~I| zkQe?_K^<{re8S{r!NA}!UJtG~D)4V=+r-F`ncF7HZ4+=?6A+$KzB;`3OmUKFW5BTA z*!#$ynYNMAHUh1QRf3gkVrf(_-Y?8EwelNjbjGk$AWc#y%y!0oey*cl9!=>#4Yq11 zU#fOU4#fzlWRTPaCelT_-VqkF7T7sqd?L1TZ?gs?7iMmkE)wNiy2utAo496}Z3#%b?ZAQ8q8lxs?3~bQ0&qPXK>nMa~6Vu%ryFLTipTLrcG)Y}C+YJx( zEwp51E_A$@m0=MSwB)e{-Qp&br0&?iw%f$Y)zY*MTLg?wMP$rb{tI$v7Br9w8VG{! zRQvRoMwkv+VaowaN1tW4xm(DUnK+lalw5ErUgj%X`*S{_KktnlXx*CIZ{5PM@*_=9 z56t$&b^WXUL2gOzmUz-*c+)0&xH}FbPnjh3!am+bMe9MX8GCr8uW4$t*`}oxBQIud zYhEOMTJs`X9OGFQSX);e{vY9O8SVjx2TMg5!Ri2$ORA>C)j&KM7acI~=WiN@SE4)? zhVs&zSO`46465jZ-FwDTEDM^Py>MtxNPVGaLc9Wk(3I)L2h@TdfCU{d8>w^do12Zp z0j1$Poj(1M;G2Azsq^Wm%ZE|t;*jZG>N#eTi-R4)gGYNC^De;3oU|VD#cXe!kYG7$ zx*4^8fXyo_?YH`NdcTMKWRlb$N4D6n92SRpTyXHVkMgv!9r_;fXJ++~3VH~F)~-dj z<<_^4-C2zf@7Tq=U^0SQ1yo|#~u~k6DL`{NkM>0mRFe`%+ z1mouTrOt)?O7EN2uG=0CO>HeOoegFdFaLR>y7|wu#W|4`E%Q-HPJb&r@b7P)E3zBI zD3F;rmlEd!ajZ{cjrYM)Yat$WT3lcBGe7LWurMo4)DX-L#bXiOwUuLbF@w0k-Xv&q zq<9LVMX8JLd1lQtb27Bc~L zFIigV_tnhzrGaOQl!-P9SGxCC=4Q_aXX3K`sF)nv!x%7XQOsO#Q^nr~#V<{Zi=8cO zU6yk^7zuT7JR1BNiYBzuW2C2vz)wTu5qo5vp1D{ujN>a-_CsyzoF9kvc4-|OgW2J@ zzhbYgC#10DwHWJC^Ph~V3Y3Y;F0+Uv+~HnteD}r-y#rChDMFY zQDgf7k&~6n>_C4v|5aD(6m0~N6_epxq|LGj%~BRu-{iA6x2iK`me<`CWMLMAQ7m)2 zJWJZ;S(xZnJNh-p_V`BQ?A+C(g}k}t*H8rWdl%??7vQ}W7TFUv%eDQ#wreZ(b1ezo zc?I?_q_t@RW+&n-tGZNwx0-{0DO$6QYYsU&`T+Jjq){Ycb}~+1j7e#)p01zARw~!4b5fV1N(6H`+x5D-!&0X@+e}U3v5-$T6ZYMTGhMJfvu6gf7$JA^$e~4fWoN1hN z(LU*dKFK=>uUW0iEd467EN^~!!>|8El*UZkNohNQHf+2iyF0b|U;$6YkK`8G)fFnD z1VSv`_I#go=l9v-rrx5dW=}hBE8Nu3rWirLNq3b9k50_<( zXOH!opL>2KsJtvx168OHA}mmu$^sIV3!yF3d&}dGmJ*LVG!kRht7`qk0%Vg z(c0VTWi_8a3=wB0GjS*-4h7=8nG6r>oWPAeT$nU%n&H3G{~_#SO4EfL%+AFrrRyb0 z+0AKxtnBulwOFaN02h`klbm@tzAmJyKDB(z(AsI)$}=fEz7HeNb|z)0!lYBGFk8G* zJYhB#w&i(*Hx2^=c8g+${vE*(Wg=dM4Wo-_6|u$Up+RN2>lMC#n@Nd|=<@V97{Rbz zD^1XR%r3y&gEl*{J3Gsvc&Vs%yYR@N0?bK)Op+Gj@s%>mzKYBlOB^3sm{4=D9Q7tD zWM+1VE)NXB`oQ8!Mqi^tg{u`#8{S;Cn$AwD$0(nfx|dS-0(DH>;qv-!MAkC)jr5t{ z^)9M_72D^f%36fk#dy0eVrFJ$G{h8d=egRrIC>^Q991lntR=X^F}ZCkC}H`h^Zv#m z?!K$m%BX~y*$uijxdCgFH36=Jtxb*TFS-`(uI+}d+Jm)+xeHULu2bT5Al|f^H%rP@7EGR*nBAq8dKWCUOS_}jTtmgy+gm03>xGlEwy;M53*1b^Jyg;j zkTl0E(`&$Xq4wXxJ6mEs%B$Re0>=!bX>SE)SK_SFso>(n=H);24u#DH$453o(^SeN zXcb;`GTROhcG>uQXJ_(QQf))lUtj<-a_UTjTxYU(6X{*pRUSB(hTFqehSn-F7T!P= z%)|vW$Sr^%cWR{|CB(Vg^`)bXqt?B!v6y$@ECoVhIV5>UDLfMwDPf{U@^i7*}KLh!tTG%n1Wy zaP)zFo2(PTe@?h`WYb|h!z{cWkC-2JZH(tQ!ZiA2;9>hg9%%Y8SX`EH0*4YXl6#O7 zl2(+HBioW>=L$H266ZK_CLEC`E?Dpwu;v1+v9Jf(UxYhn?D`N!*}CVMRbYD_??+;~ zO^Mw=EE!1^PWLhuVKv5G@-`1Fc>%}_|2bi+rFqwl*}T3?g_O8vXrgpfovB$Ha%EWaSPSg+u_@_&Fb=YRMGkY&1B6=}S{yRC&BWd7^3(rWbM!CUBAQ%t&{DP3?OKmc^K8Jt?gx&{kTmx40%)1Uz9= zT5^=<61n>t9N&>9XFX;&;6tCqyqy3)54m~kp^n}j?{S!qHOM4pBTj6$uFiCx8ULcu zrqg1$J2Hih8ksqrqh@3d%!uW7;zmhe+kQNDiy58ni5hBx1#)l?OmWRq#0x$Je#I%g zV0~fRbQq7-ZVv7btk(Sr&L~L}vk9}Cv2RUvualQgaU$L`ADOEy>Mr;X)GU*jEjYQf z{K(sSrTvY5>(-LYE!&huj9QrGY@(4#6GSFQu{Q2);r=Ui*gdQ`D`~B`>JDmRCJuj; z$Qk}9TO4f`u^JTV=lx_|i2cHDL~r+pa1u+JoUNGMhQlnzeX`mHytHZ}RvW!sQ@vpk z3zh|B(AswFUbMUtv=Nn;f)|dmO6z;N`kzAW%&eBtFtrTA)X@9}r>N0`&etluw>=Yk zl6${Eu<*yEwWXA{6lnKH!V>xyJa+I(y+^2xd+Xxw;kcPJF*`8369?OwJNZ@R1uBnw zHceZ^CHTC7I%Sfw3%68nM*ElBt`6YRo$8wE+U_)%<8(2zYEIpPIk*My(9QWG-}nSp zchh|5WMYAh9D)dgNojvbI`fC12$cg)k@kfqfABppjv0wru~kR!0^$4A2450f#ONJ_ zuEBYecNOF>z)=XW>2REc?8Flz48|AEw-Gz*3CA|TvU*Y%a81q&dt>NhAKY$co?|r; zl(>)QoQHDrx|V#w;=BiM&^~^H(&-!ClbHJl-a#FYB00Ol{GLY?*xeWwRoR!waTkDF z$lWVzq{O3p`Pu4#y6wca16!EcybrJa^!T-KmhV`w_rLpE`c@>vYw26P@aEcf<=p<1 zRWbH1A9f2$9uIWKa4b=pru1NTFV6Q%U(aeb8)h}NRD{JjSx>x!dS%j-KD-p$S0}O|l z0K21^_>yX^B>(JD2NLC#KgA&pm(3hJ68EW=$cpaGeL9K@OJ z`yqWMExkA0rYtR6+m}F_!2>XfxJO0Y0}5M zSSB$?@S(#{vAgBS!6@FfEjrq;-Wb$GBh0MsP&s!%&Pd;2pD~Z{u`3BZ)9s1=bLmGI z4KWjUQ#rdqPN&r%&+@UBuy6PK+6D(g-Qkq!&!vhvirHguTzJu@CMDnh`DE+4sf2+e zCm2y`j1>zoiVfc?h@ z8!XZa>cF&&GE?_cN&7+4{;k}jto(_(ALVt$r#JLkAqK-R^sP!hio0mxo2t0If2=exV<1_t)sbQ z>Z!2_&(gwH6Mt|>lQQ+%6t-So&P()*8dVt?b@gfQsXF>!G{xNNOLQl533f7LR?B_T z%$+MNak9IAWP8Pd(=X8kGjR4=03gokFmLXtjk3wZv);ZjK|A&x z%NUO9OY77{%wEFwYg;)fjmxkdz8bh-?l8J!yoM1hx5yATF5{K(7O(N(Lu*%DGr3pk zP&BXzi?{GjCU(8(GLIK5^Oz0vueQXOj9l3XF0H8^o@={;Aiidz^`x|(Ke0rqSd*=T@D~=UD?^4`a*n{Hza~}CbkHlNuW-}ko3f^TUmR=50jYeO)C zHAf~<{V25`Q1^~c4j+0zxjxMn$TqTbR9#n;WBilO4AYUiF^tO36Ji zwTEyX?1~Jc?qH8H+eXVQ4}0yjw63J_bk8D3jCPoL4WYb-0Ixf%Zeu%P)3$GJSOqSO zZ6_88&=xbTKc)2t+8JvbSlqNM`(=23L6eE!boh1nmPVTD?qc>H_6iRy^_g~Fg_X+i z63;Gcry~d`_hgcDA8$C%`?Qsr_2gk^JCC+q$D_D!(LOV;%QOI5CX@BU)PzK*NNR92s!5tZX;SEC_`8Z<*EPqIuj~@WqfcIS(-V5PKc1 z9wvqsCfDMI@cjDP$;CZ?jKF-#(4R+mvUhOKvVPa;(onaysqe7Dd7M3~41ZH6We2K}FwK*O$>|rtKK7}jI@|~BRGB#dE zri51d5>puEH4J#o40q|bUO4={clJzlVal-OUyv~~X&@yH1k$wfB?>1qNrIb-mkELRju!`$t@pQ@iR%t|LoAD}8_PG8vnf z*P3ETh?UQa(YwsROl*RvmR;4j;+qH!pK%8 zIc-?gTiylpUOu(|wQq7%QarFyDL^)a^k-7f44;0bV8_ai8nGKM%v^sdx!G)VJln!l z8$LLc)+P2Vwgby%EY7*zI6r_lT49pvyj!28j~ry;)R7h6S(3RO61JFvTeCK5XVce{ zykTXX5KA9ltF%j2p-bXjA_kjF%{;%_ikt2593B{X6xkD6>0R<1>5}Kz;`+?KW{)gi z`)1sklWpxiRI;xHA5}_|(uu`(X4N!h`MJbRhW>lzv`2MculYI;Im;xa3(LyKW}>pH z+~&UnqGL^b28_21kqfhoL3Cj=2o^SLZEV(Da!s;Y@p_%#+_>@n7R)-Fn5pyV=*)xB z8G0}p*in+_@MoLM@bqoR@z4+8%TZ}!y0X}AtUdRHK@XqUMa7H(yO1`U`h{1Jn@nQ5 zvldJohYJ>3dpdAIlYe+|&sgpyyko43;dkgGq-56h!l)UyXd><=KP7fB_lNHd=+Z&n`nVXJ7{bnpzI@4w@ zB2SqF^z68uDUhHH7wO2=wQuo!3Eqt*=KGjeb9*r;@ijo)8xMF;f>)Cs+(lup#Ftz1n7BRBYvxmSAb)Xs&FAd4Nu zI#@0!JgN_jE5&Q>k!kH=MSrdon6DJb$DXZI=eBpBpE{E z|CB0g2#X!cvWuF@a5mW+2lefW?_cg}Z-QxSs7$hkv7&2c3$yFov)!@z+<=`!vAON5 zD2$og3c5U80qesS#n$cxu}N;fNi2-4D9y{au*4{YnYf%1mjkhVu4O>vux-Il*2}6w z+bu$mUWL!}rFCjJiygsoUl>VoYsw8B#_4q)Yqd_^P9SK6OoB$T{1%M&^V;enACLA= zI5121ZN7janOUu(tX2W5L%y+-enG2oFBjJOq^8anZmXhjX4*Fo#-zYdY+o_blk7MOj7G~OW(>>D}QWTxdOXS;Zp;|>q6+_>G0WD7W%%1j+dsRMz!KgHWS ztfMk|06U~q)~tme*4{&}OBFPh#g1bI&UHHZmhbgGKJL7H5V#W;%SCZA$r;ZIYi!$X z&amlp!qxS2k3uZ)ctc%ZsdarWEDXOPRn!C)JCQXTb1;^>*x})W`?}JG+!J?KV9`HO zCSj9URF)Smdzd5d$UF?=xw-}Zb02`?Z z%*2+I*b<0`6640q(r1%?=26sS*&Ar>sSH1%A#IE%v)C!DY#-~?xRk0zU7y1#XZOlI zci5j!kx9%{R%K&LKv=|v!{=KAR!J6XbE$B`CY700Kl)j%AADBZ-|xKIx!%87iMum$ zl8VzD4q=X#%uMY|seOUEeJ^P?$J2G89NU^jj7+&jO~LBRTT(?$W3kg&!47#IGvU>{ zQ`n(+t;BR}tq}q;`0`AKS#t)I3au z>V3!E`W1Qtr$dKR2E1SuB#oKajk;ntaK*EI&GlJz_JcR){o*SU+$yVJU*>IK`qhVi z+L_5ZI}?-F5E)|LRlQ=48|&(=%}S%P?BHZ1^Lr=he0>t;>rpka`I}nE|iEu6zLU+hT94_sb(D`qOq zE!V+sJrbiFW@guD3$H;7_dB+iM0oD!>h09EI}X_tG`)qg2(9#a6Sae221iZfO($c` zW=nCgnNy$HhGo~M=r>Zu%w@6jSgAuh##P4K#?^Q&a%VNBdTmk><;f&vKFey#EO5GG zy83O47E6=%1=o5-l+P@r6FvV4pUjEZo%2$1E7Rahgv^PRy21G7Dma~;%S`P^sU3kD zWRmKTxdo z!JOm=Z-&T^;gH2JQnmS6&LxEc!aMw3QYbu5T~vTAfAaUZLbjxKa%chmE-JtlAo+V# zVf3uN2TH-GPeo7(M5*v92$CrVP=uihPl6~0Q-pyJPeLh%Q4FUDa}Rh9iU$})F`6Q@ zGdzJ=24Eb;c#1HN;YlJza?W0I&L1o&O_MY1FwiNcQ_P^4NfCxInPS!gq0@9ZKO!f z7GZj{NpeUD(_=W2LqM1w=fU*E3Z@5UBqv`m>ZVk%oD8(R6u~n?x}V|z#X*W>-y73y zcT6|XCHuozj%-k4Oi_LelO1OaS6C9D*GY1fBYT<{QDG&6UjfsN4ap7#rYrE0^?%7qzGSJIu9TCCAhL&w z4k#W{B zphyBcN!TI@n&2xG`h@s*NqixR6eMm?;)NytRN|oE!vR{7_zsB|kQh2REKi>hlL<%B zDH78GN2VzjQ!JraO0kS$ImHT!l@zNeR#U8@SWB^vVm-wMij5STC^l1Uq1Z~Xjbb~+ z4vL)=yC`;3?4j68v5#Uu#Q}eBzeIKeY8q(jp91R4T_r-wiG)MKPLU48>TAaTMbzCQwYI zm_#v|VhY7nifI(nDP~a2q?ko9n_>>dT#9)V^C=ckETmXOv6x~B#Zro86w4`AP^_d_ zMX{P<4aHiDbrkCj=LuDGa$cXs+@bcXjoIB7;Y6eIbBf^fD3| zi1~U?{N|lEm9HJ&D8Ios6g_$F$*=YF`9?~F;*Npt?MF!7bx0_`eb1-`!Hz-s2 z`Qg{fR5UeJbyPG}HHBL0LKPhyp0j=D&Vrwwn_ z;y-!gzM+xmw(@UjrOG!%BH`nPMz^nWp;bx!0yPcIC*IT-8yV>9DSx0Z<_nc?-2C8s zMxuL0P=-j%=1$?2FmWB==)Kr5D-6`S-_-dfGpbpwX4RuYPwh9#B@&uPD zf1lD?m4AKLP*-0J14}H_6FsR7qvxusGM7Wg0+*|%@zhDLy?*D8p00pzr2Dn#d$fYr z4Gj4AmEVBD`3Sv#Q~&lIJ<+|V>CK7ik%#(*qVo^08|Vw~3XC2ek_>Yyc{ltOKh4#)(k#}$JK%z($SId2C3uG@}{2tH{$O;d{_TVk%2@Z z&PpE3@g$Yw>@i64%y%B$`JtmiQ03WN4hyzW7~Q z7%2uur`b;lVD#~I!QL8zCTU#Nfgvps65jCv|ITT_(}y=iXVg#7${#EyX^R`8ukMP# ztesLz3O-1BJg5ysqNjx-(H%q4SJc*mhF#UvRM+_4iGIBWnNVFV66)z18bKMAs{)al z7DuF^p~~lTRMa@?s;Vk5-Z>m?9W^Z-4NYxYc=JSD zj-RhA*thhlaW{6<=+y4!xf1M zZ-(bP;pRKaH|~RS-jnp#sqcJKk8f!Bw7%ihWtYp7^(Md|`=ut%DF!S_$JOyUnoOhR8E8Gxs^%GAzEoYdJvlA;+BV}6!# z<2GMUkLEmk-Y1_l(RUu-AWfiiSFZsX@o(LNu!II{S5vXsg52b}Zib7(K4FCIqlnMm~IgD=z57kqg-ia^Imh(ccRfCmR- z|6rLQ~PMJN4>k?>pg_i1?jKA5xl>_=q&ctBjSBVk9)U z4AG<5PzNF!i9uJVL6ksKsP@8%T0P*fAu1Mp`3>JdXn6S~SE6(`NiE8+3j}v>|KMRc zyP^E%^&1bZlH?I*_o6gHVg>{c=k&KC zKC$l)qr4%~gCOXkmC|8B-}&-GDaoi&mb~?$^q(2%!t8_y^wPuVkF$wPuQ23GULXl3 z&iNd^*hpd~PM-c&MATB$kM4@~i9dsZEO^l2!<l&ksfdXHOq= z`z`41U0s;ufTJ=b&K%6JKp;}r<_P&PU*Pe1T$mH^L?mEURZ$ZH6FOP~FdZuDS^{+y zk&vSU^AQc6x)zV4sRCvdNF=u4lTWU_rA+*v;ptG5jOT}BoXi&`)<_cZN@_WdevjQ7 zoi)C2&XJw;%A3&9Fq61{ewGPJ^__X=XVC1u2x49OgKvcI z$$tZLY1X|fil8V4qC4^sj;Jc}Nl*_zeXc+ z$GyPUHZ%f*bb&9>19iXssARtXiTFz~gwS%@x<>Na`uciu+WPktweJYN;2S8AnLb~h zB;^FULV5USpeWEa5a@|62n^{QUtS0;evts!rduLK9Ws4am0UD0-ZClun}UAPUNPAD`` zxcw!O|Mr*g3+f8D!PMTD7xO_zXk@Zhp#)c2n;f*)Mfi98<~w|&FBIKiD*oK!$!8hCUI8eK>C)}xRTg5`ps2o_2%kV)$ukpcVo z%7T~$k!BM(X?r7RT#|E<04zP+zQaCE8GWlr z(njAx=5dQ$FfxQd9yl;Eq{3Y^GBo;D(r70Q{;1JCUEv=M#r!*lU+5djlhLjCHQxX_ z`2t)>kIH`y%^?S++wQSFWPu)t640;GHEoXG!i^QdQx@Uw))3{7#%L ziNTeRCA;w9FW>y+n%GF`co6YU5}cC+S5dM|rgS{KpoC#w)HLwUlAN<7 zS7ItSlFRWOPjaUwxu{Dn8kbJ33GXb)IZJXCh>_t@d4RS9rVYHMaNlQtRTw>#>W#gTuIHxHt zwRAj+9Ew~;YWsMS3rBL{DiBl1qsXBMPrxq16F_(Z$W=NvlDv}y=On?E|BT1IqDT!U zPjcZ%E?fm-KY0{66uHER5@X6cNpMaQ+>0mnm3NxroTj+MN%0792yia}NbE1~EXg@b zautYK=27HOk_%Vq*ktog5}cC+7fdX%;=JQ4=lIIKbZXXlXGzXkl1q&| zvG%;v6z4QW$d6qBAwNzM^5Z1;F-V?y2HyEw&iPv|@hrq~@JJ4tX(5+sZIRgy&$B#S1X+7qV>Y@Z~d z+LI&~yz;TOpQbpcDehzE95nCzE$93#SAqC%9z_mCF7e{TUmRaK$5*b>v3KX4BseDt kt^#rR9C`5gJOVVul?Ue!x3~4+_O>2Z?jwj3BtZcBe+R$#f&c&j diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.dyn_o deleted file mode 100644 index 66220aaf1616af4e3c0bf28645bd30d174eed71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65256 zcmds=3w+#FnfL!~v4+A*s9eIu5B@tAzq2d?nY!G+gCBTULx|*tm|rEl{c@8uW@zPC@K+LoO)xQXa48ReET$q(Vn=z zpZEXi$;^Du@BGg5Jpb!V{>{Aowdb9^bjgy$FH4e7C#6@OCdu5dOV6`~r`hDd$K;<`cKAIb+mFfLCjF1D$nJb9 zNj~-H((LZ+(qkU;^R99prE$sbr6c9$FXspe!y&wXd?{=(9gPs}YT z&A&_L-zgruWc~-1Cc7UvJ$Xdpkhs$M50f|_lQ?^}Z_aBxE0+yE+VkZlyCs}M4woOx zTwMB4%(FSo^Ty|w=GnP@Rhp;F_kPV)G&W{mvxRbfv?n`J$aO{XpdELniy=5}h16)} z-s2uJ<5;82(o*bNqX#7Bohz~r?pm5WxO1gEE>9jT)Jp35`_$@~>Sf=0p3LXhr%qk0 z*KujRHet@4GM{c2w@IJP*M*(`w{=0z8bqujhL%SyTaA@hDpwiCZiP02R(=(;l| z4wmg@t!z90An|Lh9#|#Y({seOa%pLM`X7t)sq7y$&V62wPsOdreV(_>_EYY7cH>^h zv#NXUko7Oek-fHEzy14dm&dc`+Q-ju8@(ULeYFDnjonv^`>AZJzwdtPk3$k$VcEIe z9nbdj`-vP+mL8M8U2-hNzbY^L>F&o~AboPIyG_Q}{nqBr9Q2s1`KS9&vg04be}^2G z{eHAi9z9F$b5x!Q1jk#`+E4=%W-h`BXXX4Wit5a zYnC4L#IX{)k9&ulL!Mc-@*d57<^HAf82cY-&dRZE!DQ>J|5l9c6}syM9-VMzAcab+}Rx7&bFIvSkJq~y2v^F5y`Jm7dcnyG1G28d+h@c zm5#q-+y{QoxYJy+yDwgz>?p>M{bc3x(y@8vfu-l=jtBq0T;IsLS@8Pisby6!|M{}R zU;bX%SDsyR^b^bExF9tdesW2&94-x z(eM5CCB8p)zH;OJJofSS6JP%yzkKt${`*h+`aiw!ng3Jo`^)+LvHN`-_VK_oF0TB? zZ++;px1aN+`*OSA<9DAujwN;sUw>Xsg4#myKPw&DLj57`=Lq%hF9!r|q5c)pr!CYU z;^pS8S}yyLw9xn?q)%I@Kg7$;TPXrg-hqh3Eh?kpp zrK~$`q4Cd1hqh3Eh?kpJ&!hHS>c{BgkHlD8$UnrrN2p(}ZxU^x{vS(+woreFmz(!R zBG48Z{|o8R7U~c2a`WCI+myD@_;*R4woreFmz($N;;Ah({u|P#Ez}?4<>vi zjek)&w$S*WNr$#je~6cxS3e)IpON@6`uL<6YYX{@ zxc3P4XJy~i7V1Ak`m}}mL%iI)hloI1XnbBew1xUZyxhERlw7oh#$P6V+Cu#yUT)sI zWFOHM8vilr(-!Iv@pAL_h(KFt{8yw;Tc|(8Wk_KO^?zHAMcP9B-<3XXq5cprH*cRD zo3(|;Z<9W4q5cprH}9LoQ(I{KucSj;s6WKZ&HHK@s4Xc@@pnj{woreFmz(!N z@zfR?{~77i7U~c2a`S#rYN#zVepLFjh5AFh+`JzWPi>*`AC*3Bq5cprH*b{)w1vjc zONX{le~6cx_XCoPw$S)HrB7R^Kg7$;`w{Wf78?IC>C+bK5AkyIenF0r+JfWdIGOwr z&VxsYt+vp-KbH<|q5cprm+w&`&=wm1lyqnd^@n)5c~6xZY733OQ~I=p`a`_jyqAlo zw$S)1q)%I@Kg7$;J1U;qLgPOwecD3(Azp6Yr^HiRX#6wMr!CYU;^pR@lzm8BX#5hH zQ(LG%#LLZljGSwH`m}}mL%iI)XUR3Ww$S+3N}sk+e~6cx_iXXh78-w!^l1zA zhj_VpS4j=Eg~p#MecD3(Azp6Y4;&!pBWa=WeJM=lQdmO$C)8hht_s{ka>9k@o~5td zLsHk&d(GB0_1(RFTYB1hFTF0;c5c^I-AU4}{1t20oV;f3nsu+}=*n$vYH5>k3-VJI zc3I;m{X@qUf;*>fQ?<;#Zp}K4_qmp3d)#4NQZ5Trb6N53rjk~lElXraF-v;?W{9V~ z93s1fEK3US9mrGVlB9T}kn8mND=98GC|Hu*WVqMgW_aqq_g3KNoilpxV@v1twds@M zD6g+G-0O3Od;Or{UO#5I*H0Mk^;L2%;NtZ)hI@UZ;a;CJ-0O!8_jZ*X+Oyw8Zy`+3I= zm$w|UEKi2qc>myiCXL?v%owiYmL+DTJF{hpDZX(1o%+EGoHws<+>ZFL<9ZJsm+#37 z_0iAVxEwDDD6b}z=k1Qy8vggfSITzoeWqRiPYU`aiLcv%j<1&E^}&*{UAlzZ7*%tF zaP`-Jx*Xyj^AS=>p zwM&oJ>f`I+*P44 z`WmAjblk4TuLxf#ub(=7o$=Wqo2>db7(O6;A)h+~{9gjRRaW3aJ~sz=l^hoq(w{F} zJx93CJLI-kKh1j_x7TC;>bSigtCIJy3;CZM;9bIX z-dfoYxa@Mg&hYCs)f&!Rl|XC$~D@Z+z}`eAw_O9Jkk#tL5fj z^|#lPosQ2NpZgrIFxPcIb39}C8o4<_{p$?xa=hK}`y3xM{HKnO8eSteZK=P#{_J&p z*61H_Ja2g3aeG~Qirn<4{lZibUb7DcE{@sf5`Dh!5&j@KK0klZ|?{yD=haeUbDI~*T3{NEg(GJKW%l1lyO4BzZ{ zg`9u5j5?k%{CkdP4L?>sgj4@U!?!p-X!zedK5F>Wj!zg~D>vh-|BT@Sj_di8%V!<0 zlJg#y-#Kot+p}^Ljr!Lc{dUK5hCl51u;I&(Nqxo)uXB9L@LL_9GyI#5SIGI3%aPTo zf3@M89nTs*>Ug8!-*bG>@Z*k6{YMOMc6`F{yBwb}{NEkV8-Cnzseh%vpia`I+3^~~ zKkj(F;q#8?4BvQs>OW-o4UUf){yE2|4F9d;bB4eA#i@TH*9BZ|aJ<^^FFBqyeE*lE zK8=Q7=y<>3w>dsy__rLNF#NEWrv5XAU*`C{;deM*Dc31nzT|A^srj!zhVi{sOV|Fh%sh97uh>R&0>UtG?2yvFcb9j`O|>yEb@e$eXFf5`B9 z$Hxrc;rOKCk2pSS_@S>z{pH}g$MPn}s}29Kko$Glu`z@jAoT)TI9HhW9u=WcUM)j~c$)@kzr^Uz_^R z8h)eWg`0zsz?9=vay`rCz;&rlt>Nc6-eCB<9q%{%YmN^ae!%+Ff86kk9G^D)4#(#W z|BmAoa=pyuxDBa)#_$%$>kPl!@pi-i!|_4GU-GKdf7I|Tj!zo?amQy3f5LIS-siIV zq}0FaP|_sHIbLh{CmnAvJnwkU@KZOY{=b+8x4Q69M2p6fa6v2zJ$wf9IrL} z%u`eUdc)u0c+T)g93M9PsMAuPal_jjpECSD$L9=x%JGUSMxP`ny*l;J7(U>5*6`0c z-e~yqPEUOX4L{%UQN#b*@d?8pcYMb1>erkZ$KP5pC* z-{APL;a_%q%aIUzhsN8-BIpmGb_W%l(em82+^5^@eXeH}!8fe8BM`!zUddGkp2$QlBZq&vSg% z@Ewj9|Dc{r;#-bauVPkmukhUg{12VIc*3>ki@<70-u-|AHBuTI1)rNoG@mj+x>QkQv!|R1t?rB|k^*yKWH~N=dl==)Co^yQM@Xt6tZTNl{ zr#^FrpYM3ZvB@6Gt&V35|AymrhF4ya`ZpS0@A#nM?{j?A@W&jVH2jE5Q~w#muW&qX z_??bd9k)kX$@d+vHT;A(r2h4Wzs2#K;h%7P*zhMDA2Up6hF|UYyy2g4yyEyh z@9+u z2U`1D2Ck7?{MK)7zOJvWH@!9R5BCs@*T@Znkx__4TogU$ceifa+O{Yr8)E8l znG|$$hu*}w4=Yv2wsd#x^Z0?*!t^a$yL-3wv?X#^>E= zDc9F=Mo&-Eburtu+Ya{fTf7h#F}mnIsLvf-*B7^t!uFZ#>F7+iO}%fuck`t^7c_OY zT@txb`pMQ7C)=mp%G(rO77RH(X_O*fQ1tqauGWj&a+hAWsk`fpT&|?fx!d-y**eg< zwWB$A%|K_3oWAA!Ee|yVohO}KyS8RyQ`3f5tzEyd=Bk=?HBHUyHmqI0cH`QsHm=`z z@<}H*wVwQ{4I8d%S^uh<=8bK&>o+!^RI`5F#^&ahnzoG_HlNkh*VNq9+g3dNUvklT z10CmeG}m7=(DB-?ZJoV^%K&#!^BdoSNnC#Z$!ajD0ivG27r=+;u&R2Ez(SNF8#23iODp4-W7erIok-M;M-a=o}1xffj4 z6@!k6rD(EXeJ)h$}&VWCi*o3(y~#e}7c^xt8{(p12AWEaHk#u!yTe!6K>@@~LK1TqV>Yt`O=F zR|j>7DMR%3paxMzP=lx%s6kW-I$EQ)gO-lgxB_&v#^sMUy8Cc`m+<3`2x<^pfXFRC zB8b}pdRn&PI(DC`s1}iBP>aY-K`o+6A-^}0w*_%KMCuV&jMO8p8mUK2Ia-_g;YV>(IslzD7wUyrK77YZZA=TsA8x=R2|eH zt^|Ei+opVS7rONN^J`!u|+AE#MY!>5>t}5^mcbeogdX8suXGvRR%SPEkSd14Vt5i&>UTb z=9n^Ul`FNVDyTtJ5!4{625Jyhg5I{c&u+GgL0k#MAg%;r5L1HArk1AG$d5FgM^qu4 zM^r7GM^rhwyV|ac+ABKMA+8ka5LXCwh$%yt+{+PF1vQ8&f*M5CKnyYtLg^=-4HIVU<=`X_P z6cR-05?hMYCAJ{(A5!F+`r4y53pI!;h8jfGK@DQIj9j<8XNs$VI>Z%09pb8>4sm7J zdfk@DcU!scf=6U23LcTgD0sw_qo=J!|07DgMN~1;D57eSTEyjXRm--X-pJp6^t3sb z$bvYR$eK8pxUy_%+1k|G8@Y|7CXq!+O(JWOn#7i*yX&fsxVNc2ZCm7SX>o}zO2H+% zDg~Fwvb1)z^mTOW-OI6?OUWs=JSC^t5|x}H%ha7~i~Aj`Y&+@^TN?Fo_qCSgJ7WG+-(x^{ld2&77aqoDgH0lvs7WIfNiFzzTIoev~KX1n#Vl4`WBepQ=5nB`Wh%3j|J^zQ#KHM4E(^l|^EJwj3vK$4Em~!;B z^~b#nRD-BOs6kW})F7$^kslHDMSesiqKi?8CAuO7m$)6nm8EZBU~wuVMvGG%F~+NPe^KQob9M3o`6h$=*C5m}1p z|6VRpME?(S=Mh_t*#BpKZS3tWY7nzN6)d9nNZ$1hxxenszc{zuR%u%b!>-E@SSQ`jdanan--6s7@09cb!#F{sX5uQuyW2A1JSN@p0C<*Ol(k z=jFM7^!h=kJJ0An_m5uhzxVYfqxXEuan<`8YJ6XVo;(lzn^owR-#|}Zxil5nI-KUX zk2B|9XWgT(gXe?LZ}yYQ<4w?$e-e5P&41tQ1oY(k{m!~<6xftLO@A&+A8HLh+HsA) z8Tx9+HGc99j@vq12_G4f47=Bj@FBn3aU18D<2KHR9oINp5$6>A$sc#z#<|~q>0rOU z{P)3DIPTY%=XKCug?Z0|p8R^~HDCXIu!GQ(PeR`g|A(O`{{{5wv-)}Ipgi>CzTfBD z>hv}4(dX-VpW~|M{?ZRUx&OXc)!&Ht?}nay!g0G^9(P=~hnwKzzh73j2lAgdz0WJN zJRLNTd1XlA`Dw1-=9P6^>%hGF9k+4b4IlNNb+5FSN%^V=Nv`e|3M5u^9~UdMI4+?RJ$Z$zpX%R%cn)-2>qEX8dg)5q-Rm0Y$@`&aoYzB7ejD_Ra|C+wF~_x@ zLx}%g$F-j1(~jHi@bLiO&wcNLU%#ih*Z%u){r2OzfAso3r_Z`aulM{W_%p8|=*jPe zepCzXmT~CGA9md4`wRG}jsN~z|Gl|BPS3L|(up)LuCKEkS3P+@^mif7>!Bz2-d zt*NB&vmScAq`l7dH5mRf_qrXNJ~?ppdB5}NH{8Du83L!zFu3|W=zK;D-|AkEfpdM0 zgUeSN6_*KcuCGaOuCFO@t&Mw`OoR6ecbA1p9{g>^S>=f)Ba7BwpZa=MfOCCSfpfiA zgI}+HYAQc@p7Jg>I{|dYgoagI$@LNRh!cN-3sn3B^KLpO}SpWW2 z^L>~2`@BY>Z$O-5;O~Tf9Q@sga}u0!PJuJdS#av-z^V5I*Z7&2f1j)Ty@<2Qtsv#h zs~Y@P=riEM$jiTPRv*Thg`ROXfK%THPJKT(^BM$yAL1MaXI>-VJE0#1*U#AecIDs4 z+q@>AXPndE%xeam`gw5Xl?T5AaaOn!v0Y!4;I~6x1wMkjGT@A}2Apx$fm2@(PJKH# z^U8sL5OEHIbA1hge*pSn@DCv`|G9)+Ut`cS&Pj0QH3d%nEI9L;1HTh-=E0d)vRp)} zll|o*`dE0CBo*MJ!u)nv1QIQ9N>51p6#2Iy~gvFJl1_{Ze6k243(y!yfK zf_@PEZs9(!VQ|Jd0?s(c!Kt4Br+ymzW|`M7GvI$G(C0M=&b;Qq{}%c@xV{(gc~v|= zoyl&8mEeps1J1l^z^ShTzd4<%@Y8?(qw{`3h|jALdgj#*eh>6H@Oy>(yavG;=MXsK z90jL-44nE&aOO1yem~-z0cT#b;P*j42R@Fx^5Bd!sSuGYc7Le?r@k7TdDVh5uPpfg z(s>HAB}qLv^J)O!1$`s=v-{ossq7@YbMaO%gwnb!pPrxE8AIP;nYe*pR! z@CoEK2hKR>!5OFj9Bi-s(S5#T*KY=#dDVdbBjWU*o2d`;s)PPB(AR^17I`&-Gp}}V z<~0aT{SY|yqu|VI4Ezg-a{`=sO@ep`QSsLY!0JjB^_N7U<`|shf6Do9|Y(68Up_Y;v4~IUZdb&hkguv8hK5CGtNnH#yJB{ z{VX{3d2r^H94JA^qU-Tr^|A0uKCcF6URB_aLSGI3P2qlh)qpe3T5!f$4^DjpIQ2Pj z=G71WzY*sUIP)3?e+>E&@EPPa2F^Ig!5QZiIQ7%u)X#x4uX*r)L!8N<$qRigE0B3r zfPY*23o2Q^;ExOQ>#G`^ac007XBM3LI&kV6!I@V(_;(R!KRELm1pmL#4}s4juMu#@ zISS4=C%~zn1gCxmoO#WHe;;wqgEOx@_`gG+yg**)YgvImkVn71D#00N6*%Lp0jIte zocelj=G6fHLyb#=lcgP;dF8V64?ZW{=QRY*IETR*=NLHkZ#=)7_1o%?uC&Bd|3!m3CIOCiF zXPook)aSveuUwg~2wlI-s|x)2h%*DuylTLgLthJCfxPO#8D~8><7@|~J_k?{Kd#?7@TpAfHTfvIi1gAa&&b(^CPeq(r@CKKwKGcDq0)0LBX~?S)oN=~; zGtNP9>W9Fo9|dP#W8kkroD<*;$ZHb(bm*tRv&d@(oN>;AGtN9X^~n)w5c+f6Do9|UJ!L*N%8&Jl3tH41(K^kd-l$ZGsM3181aVe^ zGp{P}i=nRuzZ7}ZfHTfoaK>2=PJIJ7^*M0n)en9d;v52JUc=yTgnk6P0eOvqGtO~v z#yJH}{WLiBbKuNt9{dW#nH*hOkIbtA{Br0k!LLMK)#Ny?X22O|7W_)+>%ggR1ZQ6D z;F}R=KRELm1pjmBhrk<=*9iEPh;tO2aZZ3!KM79#3^?3*u}CXI?q*tDx@(Z%1B3;EZz^oNuQ~9yKtB(z|F_1Uzmip@^~g9Yz!_&XIQ1ED>a*a?s}8&yaW;T6 zuSW1L=-a__$g3ZmaSnnr&Jl3xN5QF|0B2s4;Jt`*8k~8}fcHQ@3*Lvk=D`_f9-MJj z9<%WJtpcaM2Ap}-g1;4U)`2sxdhlzZZvgK{UhUw_D+kUvhrp>H2B&@uoOz9dzYTFt zf-|ov@B!$j!LLVNv*3(#4xDi&)eEn$3UKPH!I@VE{OyRd7Myuy!T$pKI`Bc^{M`@Hhtj59f|v>q8}6*%?P;MCWG zGp{W8PQ+Oc&b%7HcR=3={yyZD181E5;EZz^ob!%=|25_v1s{@9NmpSR2j{#K;GB0F zocbAX>gT~(&ph}D;;cA6jcbW8=2Z!P2lQ3o?-#z*<&^n%?U=`OPdm@_F=+_e@ zYYI}>1m^E1aiR?Bb= zce%02y4OEgv1f<-ZxKbPZ-e!}7-owkeKK`_`snYQ-(OzpJbrvt+MS%}_%ip}KV;l} z!sD*4p8N6s^-JZ+Li5i(m?}okNFQ~6ox_j!^RIQx&Ofsz9cO=X)oR~K(v+>!7g+pw z7e=wi&+mQClpg=QD3T{TUddOb=T>{MbSbMTNea*Wcz2s_vDc61qu*zXB6%|E=C3;; xrMekhB+bX~>*wp5s!BiS-k3iBE_XITeqOIUSf1G0Yv0hXQ^ghOL-D5_|KF-3N{9de diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PostgresTypeInfo.hi deleted file mode 100644 index 9181ddfc74fc280d1ceaa4c0506a8471b7c2886c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28067 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 z 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_hi deleted file mode 100644 index cde803eeb04bbf1dfadde29268417cd3fa40cdb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46486 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 DerlZu diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.dyn_o deleted file mode 100644 index 8cf1ee98ca6f07c31c6d0af9cf6269476f2a27ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8544 zcmd6sVQgDh6~}MvG-Rb}>MXPoWJxq4RG>9+R_HnkeNEae6l`E#k4766-mfN(jfplIbGAQVl?#Ek((}`8rFS-3!3N zz(%Cb6z2k_{CcY?-VQdNM=gY-DHNDmIPu4tGBWl#Kz_p9+)@B7#^bY9;&C1PLwg`z zG4BlkaNa@JiZS(67hd-4{jiSXi?MsCgmEc4R_QNGR_V{q{?hH>w)6QwYw0lup0 z4D?;tXcd->xyW;^CA+-57XvkU$Bk#>&2tdX1+W=1Q~fr?_a}aQO@3~=rIc^9%5yOG zJd6YLg|#;Mc^K~!#H;`@oQIgbP$$-Wqbbi1nqpxy)E_|IXmIX%aG}YW_SU?yermyi zm?8sTiqB(wUiLJ&AGW~_jtRQH89$&Dz^)r-*c0pv?y1|s=JPMW{9gp0WQ#! zbAg9S-d;2LS0I*i5X(HoZVr5(gZa;a?_M8dZ6(N+BE}W>;-!~N5$2Tt-tzJ`+$&f< z&Uv`F{L6*K87m9=_%6w?D`{gtgRp_@^bxMOfSCU~PX2 z>+0tt*wFiN11+S#AJ@poJmduK!5`~<+iGycKl9do zkaWtn1{aZ zxe4<@UoSld{&mCIPS2!OJ_aji3i|bND||-x#xf@o;XWsxm>7I!$=!$gAqTgOUqaK)3MaxZA`X}Y=uP2DQ!tyeY9v#NCS^t{Ry z?mbs){PURauzr96)vQk|&iXBC2-deN&ibQ@vp%gj>n|(L`fG}_J}r|1d}jS=#aVw@ zan@f`ob~W7x1z9qR&mzfP@MH8#aTb=3H&iwe@=1Mzpps!ONz6;Pi;BY4=B!hy%kyC zthOTS`xIyWfa0uwUvbu#6lZ<=C;ZU34c2!mjyHp54d`-yTDm6O4^)QqWP$Y%=l2&^ z3?I+HpJsUPOcj2m3V){x|5p`W2Z2~?+^#A-T7?f*;U}u_UsT~2s_@?eZ-n#E&pWur zatG=VtW2|a>3{Bqd|PW?N#JOQ_uEzKaiNMH^BL`1zGbfwfP6zcysw_6`+I?}HSTwS zqn$ow=V!!^D*kR2JO3g5sM7C+jf?gt6+a1lEq_eMu<4le9#gqwBsaDvHwK?wxg2^>og2u@wIlY}_(;keA05JhvvFrU zmayR=nHxJqSGlo+;}c03egtcv5ql_+%1k(MgGMIO!}f?1OU6Azh+=6wEzG8!v7~1* zI+0Gq?PHx$-@;wT?T%&Qb{Ym++t|r;JYyfqjoL%0aW(izER%J;Lsz6P)u!kUmCNRi zR}38=vM0vVS=))QrB2(m>%Ljs(~^y(oF}8HW5?o7DmUR-UT~KQPHtxp${BS!Zl0+mjm4++`;m>#1ynb(y|@zbYyDh#wbs zfy9<~cWKl)0vYnudK|2bQOUb|pI)W+-5vA}mWqGIw9q-W8_xHg;!JC&_M?h-3Vm4U zcL}}Zdxic>LT?GZ2i{BA;i%wW z7IsDj|BB$Ji0k>z5NH4Sd%`Sn_MiFNRqVi{-z_*Vxld||>;2P29LIfB_}NSx$CZ2s zag2kUZ>O*WxBPdFUBZs!2b4aIH=)399&X|JG9MlD{VOE8-^fl3ydP&y8Ee^?YmTdm`_D{@z$moc9Csr-^GjQ_4<>;(JQjVLq$$ z{C)W6O3(Z?;`-cpgSb97{z_b*8#e@(c~lZyo*PZ{y;aY*gSa0zy53H;A2+&wnrdw) zOPuY@Qrsq$9p?guP4s&VctRbvhnZ}N4~W)lZ_31*Mx^s$z*&yO9Otys-1kL?d)5#sCA0=3E$v- zz}KIF1|G2%1FB!;e<(lT0jw}4+@JRi?hWLW{?PKuRT_7e0oB}}@#mni=J+k1qK_5= z$Hy_aKaY>k9AtX@0T#kNS^RY+h&hW)zN_Lb?vMV-!e-gdioGI)KVqR^*yMhU`-yR0 zG3Wl97*NgqWlgVkE0nV|KA*=M;V$L}yT$S2xUT377h4)U@)A9N`96=!*CA-=*t_@W NA3EP=A=SG7e*spLDB1u3 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.hi deleted file mode 100644 index a8bacccdde76416b4291ce406511f6b8432f4ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46483 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 Axc~qF diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Prelude.o deleted file mode 100644 index 8cf1ee98ca6f07c31c6d0af9cf6269476f2a27ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8544 zcmd6sVQgDh6~}MvG-Rb}>MXPoWJxq4RG>9+R_HnkeNEae6l`E#k4766-mfN(jfplIbGAQVl?#Ek((}`8rFS-3!3N zz(%Cb6z2k_{CcY?-VQdNM=gY-DHNDmIPu4tGBWl#Kz_p9+)@B7#^bY9;&C1PLwg`z zG4BlkaNa@JiZS(67hd-4{jiSXi?MsCgmEc4R_QNGR_V{q{?hH>w)6QwYw0lup0 z4D?;tXcd->xyW;^CA+-57XvkU$Bk#>&2tdX1+W=1Q~fr?_a}aQO@3~=rIc^9%5yOG zJd6YLg|#;Mc^K~!#H;`@oQIgbP$$-Wqbbi1nqpxy)E_|IXmIX%aG}YW_SU?yermyi zm?8sTiqB(wUiLJ&AGW~_jtRQH89$&Dz^)r-*c0pv?y1|s=JPMW{9gp0WQ#! zbAg9S-d;2LS0I*i5X(HoZVr5(gZa;a?_M8dZ6(N+BE}W>;-!~N5$2Tt-tzJ`+$&f< z&Uv`F{L6*K87m9=_%6w?D`{gtgRp_@^bxMOfSCU~PX2 z>+0tt*wFiN11+S#AJ@poJmduK!5`~<+iGycKl9do zkaWtn1{aZ zxe4<@UoSld{&mCIPS2!OJ_aji3i|bND||-x#xf@o;XWsxm>7I!$=!$gAqTgOUqaK)3MaxZA`X}Y=uP2DQ!tyeY9v#NCS^t{Ry z?mbs){PURauzr96)vQk|&iXBC2-deN&ibQ@vp%gj>n|(L`fG}_J}r|1d}jS=#aVw@ zan@f`ob~W7x1z9qR&mzfP@MH8#aTb=3H&iwe@=1Mzpps!ONz6;Pi;BY4=B!hy%kyC zthOTS`xIyWfa0uwUvbu#6lZ<=C;ZU34c2!mjyHp54d`-yTDm6O4^)QqWP$Y%=l2&^ z3?I+HpJsUPOcj2m3V){x|5p`W2Z2~?+^#A-T7?f*;U}u_UsT~2s_@?eZ-n#E&pWur zatG=VtW2|a>3{Bqd|PW?N#JOQ_uEzKaiNMH^BL`1zGbfwfP6zcysw_6`+I?}HSTwS zqn$ow=V!!^D*kR2JO3g5sM7C+jf?gt6+a1lEq_eMu<4le9#gqwBsaDvHwK?wxg2^>og2u@wIlY}_(;keA05JhvvFrU zmayR=nHxJqSGlo+;}c03egtcv5ql_+%1k(MgGMIO!}f?1OU6Azh+=6wEzG8!v7~1* zI+0Gq?PHx$-@;wT?T%&Qb{Ym++t|r;JYyfqjoL%0aW(izER%J;Lsz6P)u!kUmCNRi zR}38=vM0vVS=))QrB2(m>%Ljs(~^y(oF}8HW5?o7DmUR-UT~KQPHtxp${BS!Zl0+mjm4++`;m>#1ynb(y|@zbYyDh#wbs zfy9<~cWKl)0vYnudK|2bQOUb|pI)W+-5vA}mWqGIw9q-W8_xHg;!JC&_M?h-3Vm4U zcL}}Zdxic>LT?GZ2i{BA;i%wW z7IsDj|BB$Ji0k>z5NH4Sd%`Sn_MiFNRqVi{-z_*Vxld||>;2P29LIfB_}NSx$CZ2s zag2kUZ>O*WxBPdFUBZs!2b4aIH=)399&X|JG9MlD{VOE8-^fl3ydP&y8Ee^?YmTdm`_D{@z$moc9Csr-^GjQ_4<>;(JQjVLq$$ z{C)W6O3(Z?;`-cpgSb97{z_b*8#e@(c~lZyo*PZ{y;aY*gSa0zy53H;A2+&wnrdw) zOPuY@Qrsq$9p?guP4s&VctRbvhnZ}N4~W)lZ_31*Mx^s$z*&yO9Otys-1kL?d)5#sCA0=3E$v- zz}KIF1|G2%1FB!;e<(lT0jw}4+@JRi?hWLW{?PKuRT_7e0oB}}@#mni=J+k1qK_5= z$Hy_aKaY>k9AtX@0T#kNS^RY+h&hW)zN_Lb?vMV-!e-gdioGI)KVqR^*yMhU`-yR0 zG3Wl97*NgqWlgVkE0nV|KA*=M;V$L}yT$S2xUT377h4)U@)A9N`96=!*CA-=*t_@W NA3EP=A=SG7e*spLDB1u3 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_hi deleted file mode 100644 index c00bee456bbe825a6b63f561fada23cb8b7142e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24339 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 VmT^@yi-}cFQJ4ItN`6!JzX3R(esKT* diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.dyn_o deleted file mode 100644 index ff0e20417d0f6b217b29c0649fe41a13fe21b8f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48968 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

          2dubqSbM$+-KP4_@| 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 Yj)!5#^gW$x|93~?YtBdLfAjkP24pZQ6aWAK diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/PreparedStatementRegistry.hi deleted file mode 100644 index eb5e0b45609bf57a098ee5dad8d309ac3efc57ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24336 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

          2dubqSbM$+-KP4_@| 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 Yj)!5#^gW$x|93~?YtBdLfAjkP24pZQ6aWAK diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.dyn_hi deleted file mode 100644 index b66cf7ebeb1d2d47f1e95c99d0a4d260dbb5fb83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7203 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session.hi deleted file mode 100644 index b1cb1c812b115b94f9390d197d61f2afffde502d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7200 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 QcMqwhu{M_2_9~%!w1uFQDJYMe#06f_0WqV*P z&hqf!vSoE@w>O*cP4Ta+#Ua3ht7|w_veT0{Wc-f9_}=2{dH*2p`V#do{&sL5+`0R> zFv5p8Z;ua%yT0xG!%5exCik0kw@L9oXmV~?)V8%rxvx<(G1WmiImvVojps(!=i)xU z0QXsxWMzF)Y4|)%ntWEJd4z|mNss3eI4(~hSsDgG_g1qW5n za}$qInyQmi(Tx6PKvg=6)g(4CsBvARU6MiWpo-FHwRiY#RGT>Y0xBu2ZV0+u56?ehzPw{X3t15@5Pa&%l`+M!_t5N diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Session/Core.dyn_hi deleted file mode 100644 index d986ba41bd568541d079973adad6c7489267db67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23741 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 Y8Ou+!Fv%X77*2%q7 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 Y8O_^MFjyB92Ic?h^V8hX_#+zzTJY1%D7&{ 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 Hf06$I{1UYq diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Statement.o deleted file mode 100644 index cbc872f3e788651ffdde3c456c9e26afa259c953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31864 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 dJZHr3C>Q(uxXZ?#e=FMRDL&_Y_= 810 -{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-} -#endif -{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} -{-# OPTIONS_GHC -w #-} -module Paths_hasql ( - version, - getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, - getDataFileName, getSysconfDir - ) where - - -import qualified Control.Exception as Exception -import qualified Data.List as List -import Data.Version (Version(..)) -import System.Environment (getEnv) -import Prelude - - -#if defined(VERSION_base) - -#if MIN_VERSION_base(4,0,0) -catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a -#else -catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a -#endif - -#else -catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a -#endif -catchIO = Exception.catch - -version :: Version -version = Version [1,9,1,2] [] - -getDataFileName :: FilePath -> IO FilePath -getDataFileName name = do - dir <- getDataDir - return (dir `joinFileName` name) - -getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath - - - - -bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath -bindir = "/home/deepak/.cabal/bin" -libdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2-inplace" -dynlibdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a" -datadir = "/home/deepak/.cabal/share/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" -libexecdir = "/home/deepak/.cabal/libexec/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" -sysconfdir = "/home/deepak/.cabal/etc" - -getBinDir = catchIO (getEnv "hasql_bindir") (\_ -> return bindir) -getLibDir = catchIO (getEnv "hasql_libdir") (\_ -> return libdir) -getDynLibDir = catchIO (getEnv "hasql_dynlibdir") (\_ -> return dynlibdir) -getDataDir = catchIO (getEnv "hasql_datadir") (\_ -> return datadir) -getLibexecDir = catchIO (getEnv "hasql_libexecdir") (\_ -> return libexecdir) -getSysconfDir = catchIO (getEnv "hasql_sysconfdir") (\_ -> return sysconfdir) - - - -joinFileName :: String -> String -> FilePath -joinFileName "" fname = fname -joinFileName "." fname = fname -joinFileName dir "" = dir -joinFileName dir fname - | isPathSeparator (List.last dir) = dir ++ fname - | otherwise = dir ++ pathSeparator : fname - -pathSeparator :: Char -pathSeparator = '/' - -isPathSeparator :: Char -> Bool -isPathSeparator c = c == '/' diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h deleted file mode 100644 index 88e2250d88..0000000000 --- a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/autogen/cabal_macros.h +++ /dev/null @@ -1,373 +0,0 @@ -/* DO NOT EDIT: This file is automatically generated by Cabal */ - -/* package hasql-1.9.1.2 */ -#ifndef VERSION_hasql -#define VERSION_hasql "1.9.1.2" -#endif /* VERSION_hasql */ -#ifndef MIN_VERSION_hasql -#define MIN_VERSION_hasql(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 9 || \ - (major1) == 1 && (major2) == 9 && (minor) <= 1) -#endif /* MIN_VERSION_hasql */ -/* package aeson-2.2.3.0 */ -#ifndef VERSION_aeson -#define VERSION_aeson "2.2.3.0" -#endif /* VERSION_aeson */ -#ifndef MIN_VERSION_aeson -#define MIN_VERSION_aeson(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 2 || \ - (major1) == 2 && (major2) == 2 && (minor) <= 3) -#endif /* MIN_VERSION_aeson */ -/* package attoparsec-0.14.4 */ -#ifndef VERSION_attoparsec -#define VERSION_attoparsec "0.14.4" -#endif /* VERSION_attoparsec */ -#ifndef MIN_VERSION_attoparsec -#define MIN_VERSION_attoparsec(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 14 || \ - (major1) == 0 && (major2) == 14 && (minor) <= 4) -#endif /* MIN_VERSION_attoparsec */ -/* package base-4.21.0.0 */ -#ifndef VERSION_base -#define VERSION_base "4.21.0.0" -#endif /* VERSION_base */ -#ifndef MIN_VERSION_base -#define MIN_VERSION_base(major1,major2,minor) (\ - (major1) < 4 || \ - (major1) == 4 && (major2) < 21 || \ - (major1) == 4 && (major2) == 21 && (minor) <= 0) -#endif /* MIN_VERSION_base */ -/* package bytestring-0.12.2.0 */ -#ifndef VERSION_bytestring -#define VERSION_bytestring "0.12.2.0" -#endif /* VERSION_bytestring */ -#ifndef MIN_VERSION_bytestring -#define MIN_VERSION_bytestring(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 12 || \ - (major1) == 0 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_VERSION_bytestring */ -/* package bytestring-strict-builder-0.4.5.8 */ -#ifndef VERSION_bytestring_strict_builder -#define VERSION_bytestring_strict_builder "0.4.5.8" -#endif /* VERSION_bytestring_strict_builder */ -#ifndef MIN_VERSION_bytestring_strict_builder -#define MIN_VERSION_bytestring_strict_builder(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 4 || \ - (major1) == 0 && (major2) == 4 && (minor) <= 5) -#endif /* MIN_VERSION_bytestring_strict_builder */ -/* package containers-0.7 */ -#ifndef VERSION_containers -#define VERSION_containers "0.7" -#endif /* VERSION_containers */ -#ifndef MIN_VERSION_containers -#define MIN_VERSION_containers(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 7 || \ - (major1) == 0 && (major2) == 7 && (minor) <= 0) -#endif /* MIN_VERSION_containers */ -/* package contravariant-1.5.5 */ -#ifndef VERSION_contravariant -#define VERSION_contravariant "1.5.5" -#endif /* VERSION_contravariant */ -#ifndef MIN_VERSION_contravariant -#define MIN_VERSION_contravariant(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 5 || \ - (major1) == 1 && (major2) == 5 && (minor) <= 5) -#endif /* MIN_VERSION_contravariant */ -/* package dlist-1.0 */ -#ifndef VERSION_dlist -#define VERSION_dlist "1.0" -#endif /* VERSION_dlist */ -#ifndef MIN_VERSION_dlist -#define MIN_VERSION_dlist(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 0 || \ - (major1) == 1 && (major2) == 0 && (minor) <= 0) -#endif /* MIN_VERSION_dlist */ -/* package hashable-1.5.0.0 */ -#ifndef VERSION_hashable -#define VERSION_hashable "1.5.0.0" -#endif /* VERSION_hashable */ -#ifndef MIN_VERSION_hashable -#define MIN_VERSION_hashable(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 5 || \ - (major1) == 1 && (major2) == 5 && (minor) <= 0) -#endif /* MIN_VERSION_hashable */ -/* package hashtables-1.4.2 */ -#ifndef VERSION_hashtables -#define VERSION_hashtables "1.4.2" -#endif /* VERSION_hashtables */ -#ifndef MIN_VERSION_hashtables -#define MIN_VERSION_hashtables(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 4 || \ - (major1) == 1 && (major2) == 4 && (minor) <= 2) -#endif /* MIN_VERSION_hashtables */ -/* package iproute-1.7.15 */ -#ifndef VERSION_iproute -#define VERSION_iproute "1.7.15" -#endif /* VERSION_iproute */ -#ifndef MIN_VERSION_iproute -#define MIN_VERSION_iproute(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 7 || \ - (major1) == 1 && (major2) == 7 && (minor) <= 15) -#endif /* MIN_VERSION_iproute */ -/* package mtl-2.3.1 */ -#ifndef VERSION_mtl -#define VERSION_mtl "2.3.1" -#endif /* VERSION_mtl */ -#ifndef MIN_VERSION_mtl -#define MIN_VERSION_mtl(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 3 || \ - (major1) == 2 && (major2) == 3 && (minor) <= 1) -#endif /* MIN_VERSION_mtl */ -/* package postgresql-binary-0.14.0.1 */ -#ifndef VERSION_postgresql_binary -#define VERSION_postgresql_binary "0.14.0.1" -#endif /* VERSION_postgresql_binary */ -#ifndef MIN_VERSION_postgresql_binary -#define MIN_VERSION_postgresql_binary(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 14 || \ - (major1) == 0 && (major2) == 14 && (minor) <= 0) -#endif /* MIN_VERSION_postgresql_binary */ -/* package postgresql-libpq-0.11.0.0 */ -#ifndef VERSION_postgresql_libpq -#define VERSION_postgresql_libpq "0.11.0.0" -#endif /* VERSION_postgresql_libpq */ -#ifndef MIN_VERSION_postgresql_libpq -#define MIN_VERSION_postgresql_libpq(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 11 || \ - (major1) == 0 && (major2) == 11 && (minor) <= 0) -#endif /* MIN_VERSION_postgresql_libpq */ -/* package profunctors-5.6.3 */ -#ifndef VERSION_profunctors -#define VERSION_profunctors "5.6.3" -#endif /* VERSION_profunctors */ -#ifndef MIN_VERSION_profunctors -#define MIN_VERSION_profunctors(major1,major2,minor) (\ - (major1) < 5 || \ - (major1) == 5 && (major2) < 6 || \ - (major1) == 5 && (major2) == 6 && (minor) <= 3) -#endif /* MIN_VERSION_profunctors */ -/* package scientific-0.3.8.0 */ -#ifndef VERSION_scientific -#define VERSION_scientific "0.3.8.0" -#endif /* VERSION_scientific */ -#ifndef MIN_VERSION_scientific -#define MIN_VERSION_scientific(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 3 || \ - (major1) == 0 && (major2) == 3 && (minor) <= 8) -#endif /* MIN_VERSION_scientific */ -/* package text-2.1.2 */ -#ifndef VERSION_text -#define VERSION_text "2.1.2" -#endif /* VERSION_text */ -#ifndef MIN_VERSION_text -#define MIN_VERSION_text(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 1 || \ - (major1) == 2 && (major2) == 1 && (minor) <= 2) -#endif /* MIN_VERSION_text */ -/* package text-builder-1.0.0.4 */ -#ifndef VERSION_text_builder -#define VERSION_text_builder "1.0.0.4" -#endif /* VERSION_text_builder */ -#ifndef MIN_VERSION_text_builder -#define MIN_VERSION_text_builder(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 0 || \ - (major1) == 1 && (major2) == 0 && (minor) <= 0) -#endif /* MIN_VERSION_text_builder */ -/* package time-1.14 */ -#ifndef VERSION_time -#define VERSION_time "1.14" -#endif /* VERSION_time */ -#ifndef MIN_VERSION_time -#define MIN_VERSION_time(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 14 || \ - (major1) == 1 && (major2) == 14 && (minor) <= 0) -#endif /* MIN_VERSION_time */ -/* package transformers-0.6.1.2 */ -#ifndef VERSION_transformers -#define VERSION_transformers "0.6.1.2" -#endif /* VERSION_transformers */ -#ifndef MIN_VERSION_transformers -#define MIN_VERSION_transformers(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 6 || \ - (major1) == 0 && (major2) == 6 && (minor) <= 1) -#endif /* MIN_VERSION_transformers */ -/* package uuid-1.3.16 */ -#ifndef VERSION_uuid -#define VERSION_uuid "1.3.16" -#endif /* VERSION_uuid */ -#ifndef MIN_VERSION_uuid -#define MIN_VERSION_uuid(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 3 || \ - (major1) == 1 && (major2) == 3 && (minor) <= 16) -#endif /* MIN_VERSION_uuid */ -/* package vector-0.13.2.0 */ -#ifndef VERSION_vector -#define VERSION_vector "0.13.2.0" -#endif /* VERSION_vector */ -#ifndef MIN_VERSION_vector -#define MIN_VERSION_vector(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 13 || \ - (major1) == 0 && (major2) == 13 && (minor) <= 2) -#endif /* MIN_VERSION_vector */ -/* package witherable-0.5 */ -#ifndef VERSION_witherable -#define VERSION_witherable "0.5" -#endif /* VERSION_witherable */ -#ifndef MIN_VERSION_witherable -#define MIN_VERSION_witherable(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 5 || \ - (major1) == 0 && (major2) == 5 && (minor) <= 0) -#endif /* MIN_VERSION_witherable */ - -/* tool alex-3.5.2.0 */ -#ifndef TOOL_VERSION_alex -#define TOOL_VERSION_alex "3.5.2.0" -#endif /* TOOL_VERSION_alex */ -#ifndef MIN_TOOL_VERSION_alex -#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\ - (major1) < 3 || \ - (major1) == 3 && (major2) < 5 || \ - (major1) == 3 && (major2) == 5 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_alex */ -/* tool doctest-0.23.0 */ -#ifndef TOOL_VERSION_doctest -#define TOOL_VERSION_doctest "0.23.0" -#endif /* TOOL_VERSION_doctest */ -#ifndef MIN_TOOL_VERSION_doctest -#define MIN_TOOL_VERSION_doctest(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 23 || \ - (major1) == 0 && (major2) == 23 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_doctest */ -/* tool gcc-12 */ -#ifndef TOOL_VERSION_gcc -#define TOOL_VERSION_gcc "12" -#endif /* TOOL_VERSION_gcc */ -#ifndef MIN_TOOL_VERSION_gcc -#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ - (major1) < 12 || \ - (major1) == 12 && (major2) < 0 || \ - (major1) == 12 && (major2) == 0 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_gcc */ -/* tool ghc-9.12.2 */ -#ifndef TOOL_VERSION_ghc -#define TOOL_VERSION_ghc "9.12.2" -#endif /* TOOL_VERSION_ghc */ -#ifndef MIN_TOOL_VERSION_ghc -#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_ghc */ -/* tool ghc-pkg-9.12.2 */ -#ifndef TOOL_VERSION_ghc_pkg -#define TOOL_VERSION_ghc_pkg "9.12.2" -#endif /* TOOL_VERSION_ghc_pkg */ -#ifndef MIN_TOOL_VERSION_ghc_pkg -#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_ghc_pkg */ -/* tool haddock-2.30.0 */ -#ifndef TOOL_VERSION_haddock -#define TOOL_VERSION_haddock "2.30.0" -#endif /* TOOL_VERSION_haddock */ -#ifndef MIN_TOOL_VERSION_haddock -#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 30 || \ - (major1) == 2 && (major2) == 30 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_haddock */ -/* tool happy-2.1.4 */ -#ifndef TOOL_VERSION_happy -#define TOOL_VERSION_happy "2.1.4" -#endif /* TOOL_VERSION_happy */ -#ifndef MIN_TOOL_VERSION_happy -#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 1 || \ - (major1) == 2 && (major2) == 1 && (minor) <= 4) -#endif /* MIN_TOOL_VERSION_happy */ -/* tool hpc-0.69 */ -#ifndef TOOL_VERSION_hpc -#define TOOL_VERSION_hpc "0.69" -#endif /* TOOL_VERSION_hpc */ -#ifndef MIN_TOOL_VERSION_hpc -#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 69 || \ - (major1) == 0 && (major2) == 69 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_hpc */ -/* tool hsc2hs-0.68.10 */ -#ifndef TOOL_VERSION_hsc2hs -#define TOOL_VERSION_hsc2hs "0.68.10" -#endif /* TOOL_VERSION_hsc2hs */ -#ifndef MIN_TOOL_VERSION_hsc2hs -#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 68 || \ - (major1) == 0 && (major2) == 68 && (minor) <= 10) -#endif /* MIN_TOOL_VERSION_hsc2hs */ -/* tool pkg-config-1.8.1 */ -#ifndef TOOL_VERSION_pkg_config -#define TOOL_VERSION_pkg_config "1.8.1" -#endif /* TOOL_VERSION_pkg_config */ -#ifndef MIN_TOOL_VERSION_pkg_config -#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 8 || \ - (major1) == 1 && (major2) == 8 && (minor) <= 1) -#endif /* MIN_TOOL_VERSION_pkg_config */ -/* tool runghc-9.12.2 */ -#ifndef TOOL_VERSION_runghc -#define TOOL_VERSION_runghc "9.12.2" -#endif /* TOOL_VERSION_runghc */ -#ifndef MIN_TOOL_VERSION_runghc -#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_runghc */ -/* tool strip-2.40 */ -#ifndef TOOL_VERSION_strip -#define TOOL_VERSION_strip "2.40" -#endif /* TOOL_VERSION_strip */ -#ifndef MIN_TOOL_VERSION_strip -#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 40 || \ - (major1) == 2 && (major2) == 40 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_strip */ - -#ifndef CURRENT_PACKAGE_KEY -#define CURRENT_PACKAGE_KEY "hasql-1.9.1.2-inplace" -#endif /* CURRENT_packageKey */ -#ifndef CURRENT_COMPONENT_ID -#define CURRENT_COMPONENT_ID "hasql-1.9.1.2-inplace" -#endif /* CURRENT_COMPONENT_ID */ -#ifndef CURRENT_PACKAGE_VERSION -#define CURRENT_PACKAGE_VERSION "1.9.1.2" -#endif /* CURRENT_PACKAGE_VERSION */ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/libHShasql-1.9.1.2-inplace-ghc9.12.2.so deleted file mode 100755 index 77223cd47e891bb695e7a6832229182a6297ec24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2055760 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 == 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

          TC441)D!9JB)Nt+7!sADq^$gDH&PQKIhH&jO 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

          h(XDKxQ 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

          >aW*$*lvpC<>wNo4^Zb2@B?4XDjU`$L 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

          GH&@{o#D;E9o$C1^M{-xnIKv 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 -qyiyGwTc;YJm-NOGd==-}_-wXY&8?(Mg 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Μ*$`&#Pg7RK~KBrq+`~?lMRUrPBKSXxT5%URN%M; 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ⅅ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

          xIr%dHy1 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 Xx)P>D!qed)=9;Jb(j}R7DB%A;=n22z diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/package.conf.inplace/package.cache deleted file mode 100644 index b3cae5cf028ad4728b344193a7c6fe4e76e36af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40 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 F|9?WQr!fEk diff --git a/dist-newstyle/cache/compiler b/dist-newstyle/cache/compiler deleted file mode 100644 index 284be339ef0c4a2b298588f25fc8528ca811f781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16883 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 z zyBAk)-?(+}!i_uE*VgZ?UcR{cfj&{iO3nI}sWPGw4pphowDFwh;Qa7qSko^dUht=^ zg7u2^-4L=r3o*~z2X0{x!%y)$*6O(Jfyd08<9y7H)280JeaF?7xvA3CvB-*81Ru%V zV7GmT7NCre^@h>Dh)M_ok6OH$64Bfei&Yw=sl4bH0FN-NKcT;Q1Wq3Fq#eGB9~SE+ zYe{xf2B!_2k!2CCL7yc>Ax(}#5qgwdY9NZh=C;$@3c~*6>%`|SP-a$sfwC*@jV|v= z>pt@uULS_Jihw$|oDTCoKQjz*tK022TMrdA2>@4pI3CmhpB~1r@?d>)byXpFZ8-n( zZbN5(b~s!3Yu_B`i(5h~*5TU(Co#U-B@lVL2frfDh9V-Nvo7JNd4*1!w-n49!<1Zy zCdN&_M<-4?rYgYiiU5*|yf`=Bbl{xicF*Sp6>XUYd%x%G@Y?xQ6cah0S9KVFhUSNn z_c$Jzp5qOgfWxY{nx>JvorXB12d3EAl@7Y*$mS#V2eSqyfZd1!K=}34Fd9I57Z`&; zZY!e!G|Jcm6ZpK^mxSd;=0*-+(V(5jt|4qg_6Z5t$vzTKUg);qN^7U>;EJGHev+14 z5Y;?L%d~4eVkOe zFGq5tN3du~M8ob2U{&%2o%bP|G2GFqoS{{C9H)ve;B@gK&KIxYbn$5gc-ViAstO|q zhtGwvMR19yh~Sx^wb60tzRnjYEMuCs^gEI1Z{qvvX$JA3oi=#p4f!bHGsh8haQM>; z+&G;GS3)>&jBqJ*l6V3c71UKM_{4ao;kjh=rl7PTM*~dScFdruqp=J{N*xF4M~w?d zgPz2Pz7r6)05RVM7^yyShw@)b@u5cJ2?s+y#dbnEuP%1NfDe?5oiILMX7~OmJ0V}Q z7CWJ}*a_tn-SbZPoH`SFUAK=j)6hovtjY+Ulw;x0QXM)34M9BN34FX4$BWV5z+-A8 zB|qW?YBUZYDeE&v^Ys@sTu)PRJoY^8UR2W#B2Bu^%L{hw6HEc~=6KdE(Rv9WwGu5* zoroS4zhhS-$uFtbtO!_$lkMG>qaZ(*kd?gwNlWiix2s_EpShXKm}cS^Ilv#<0h~XY z6K4D#C-J0%@TXy5N#&2TVQ0Q{3F9n@?QaHbLoGdxzx3@EH~?EJLs+cpA3{h~14{T^0R;1{jdCSEf(dw5Rq(2;5i& zyt|%sh5w+o>2&hMt&1yb*Di)$DCPdV9M!3@jxcF2B{-~B)g2{0h|@eZn1(S07$mjK zPyAO;biU}HM@*+;9zmZfxk?Q|p?t^9m;G|S->Jdm$gedjaChCT=8MI0sfwsf zeg%PyN(fAZI8qAp`MmGc8zLT0p@Qg1ZawcbfT-aWD<$7uxT2gdSCr~QK&wxhZ}IH1 z-~A^?e)lK;&j0yuZU4?c`?cz~f2Uh|?d;8afAuf?!>|57Kk?~*`#b;f7kMTn|2=pY zk52-|a63D{KVJ;W34PXU@OE$^g2?T9KI?x>?MzXP(1N%<_ncY`Z+fdv!)a&kg4u`T z6{2dxh1gPBgbB%zKQI|*dtE4yEu|@(xEXm{UMZH+VR2jh*yeM|(7HKo=a*GIP72cZ)=8{kjl|3N;omwX|vFIL@G!x42O>1*0 zz1rQ`?X@;G`>Nk2s=^M}NsUfua;O_SvPi6{6H5#=PM26pFQqScxBVSwL(iLuN|rR^ zH!`>Uoo=rmi1tq`qLez(Z1Gm?L zz9QCP*iqT=@sU+JLsaBVbKkn1AsU0YaoV1V1tPkf&^w%{|2Y|p)`Og^5gH=fgKB74 z$Y^+^9a$DYChK|*DT_{lQA;h8QEELItv(v!d}KY+5Y;4w(hzcF*C<85sZ~r9QSM*q zG!fl_sG-u9L(*a2%X|d>fmponUtYD(p0#V_Czxv1@9^Rod54G5$a^JQj=aM|VB|fY z%T|p9;fOf$UdYxW@1@v#C4#U{zEG(F7av0KmjS~vL*L#&??C#SjB6g@rJug{af0B> z@x706t#=1K*B4*s5S_k!#&4&LN&_U`PKnY$;>Eh{1}&%>@7kM?NmF_94JEhXjaHu$ z+Fe(u5}mdu?&qXuPep=3!)uApKOb(E(wExK2KFa1npqV_GX!XE*Y?E@Ss2>VummL zgASG0k6@W3+ZKLgdDM_)3;(C~1E<%)xCPVo0uHkx-k4Hy5Bz?>80;pdOaN{DfD8?A z%BA%W`v-En-GdE;RPHCDY~cr9z%Qj0CMqllB0ApRbTc=^sQ_mOol1U03G7|M@gBj& zA)B3UhT6kA4H5?B4ELk7KfPza{dSmk21$8^FNP7mVLt*+SaM(?VESZeM6qdLgwbL2 zKWV8X<`62uS&Gj@L|vp&Yra?&nX8CoG7u*dl+7h4dnL{yv?==ng|mGt9gAP|U(UEEGN*pc!H@(4i{?xumQo zRxw)8Ni=HV97qr(yDTj9{>s{I1M&kXJg#e9nh@+7Lae!H?52@~{hTh3)3)apqUBMJg435_$>Pf>!Ko;l&K3184jY-({tup*CR7A zz40s0(07H+h1Q>!ru?!b^>h@5@sa=Htul;nP6+Yw#3pm$G%*(a+$aAdZ@HnW}$J z!G}BBn*kVMLxhKWQ2<;UvG>LbuxEUL=d;oaH6AMAxNFpsKBa_Dv;d=|MVx}EMD%NR zLmWMYS8VYyGtXG+BjoPvWXQ;nz5#Z!35x6veAxsJ^C&eI$DQlzE0-=RGnOch=+R~@ zmMhn9U%YjF<*I>4u(>|+aTdTC3*Ua>+uNoyGESE*@Vanv>p$q)_i5|K$1`i+=-}*# z(7b(VWC@K+frD=8PDi-3=ZpdsmR`Yu8K+y=9ybO!YPiG`6DEVL&V8rd!hsm)6Ikg& zr0Lr|+S>K`LLAre`6k;u8kC7&sjj5?>|G%c7OqEgBlId98yu88|j zY!1eq#}l5&4-V%I{Y^RdMo-a%;(A#mSZ@a0zEwSAuy$YqfZKjasw)w8U;;gNh zkR`Y{3F*Ac(xA!O6fXXpB$P3}SVP71#-EU*bhRZ$t*I?nI9MWd9n0WYH+-@rT(+HX zwmKzo$$a`(oj>0nI6W^I%Dt9!pc{hXvm~D~hXBHZ-%u7EkVfr zjbL@|rrx0ynvpw{+R4S56}u7k=+P(oQ(|)qj2)#9`pm;Wg#&5zNydY(gV*YkvwrGR zVz_6ni2XrzuF|xi%!FO%M$Xnc=wnG1U%vSuxiE=jr6op9p0?k%soz3oGWyO?8YDzx z_FrBC?NN6xd^c`Tlz4GzmExLUutWDbd9jkpR3ai1*Gd-N#CX`Iy3IQ#-6t#R11i3Q zbXPfTYt91dTESIrdk1%Ce9(FW*yKySNEnQF>}>~}40^!*85h%>s1!Ue`MI;(t=RwsH>#)eN6MHA21^=x5Gb43?q5aL9f*{HMRPaNLFW5(%- z3pBl);=aK1xwAM-$uA@hQ-UWbLG*`9ee{ygbElMV1S%t|NLufqqLmoO(JP*^r=6=K zrXs8H5vt+oOexS=q0EW%Res~P)%}%Ph&_>X97QAI3=f`-@lvXcsV_+7hkprxT6>U6 zOdjJH&ghVb;~4`J=jjp0b#r)Q#iH0FXAtb$WCY10fipJi*U7mAf$b81MCcK{LaBRXFp;Ttt{cdG_{w(x#|1Mf}@XTIN~9aRgIZSvEVGLgEcG29F$Y^pPCP9jA&K!Lea3r z{QOZie-wRtPUaIv4-U$BW8kIw^YcU9a@4KM&&&yBNpY%vZk}i}!c@%{UE2;j9{Htt z>n}4%)m#%dFZLtI_bSu?d9kvv1quD6c z9KDZ6-8E6&WcKn@Sod9ZP6~vem}1C4kt(0b`Nc{zpRdE zZn05x-D;)kR1rO#)=)JEeM|oaYY+cl9(uoW{lTVSLsM`-7Q9@s)by}Q zYPFn$Kt@&A5&4xuB@fG^T&$bxudICWSZs4N6>JFdci6kXBw_{eFUK)ozqbJjpFng3 z@H=}Ns;2hxclhK_O_qJpGZ=|T42WWW9#b4G$k}E z>JW1-dOAwdIA@rLy#tP>B|6PD!{7AkdH8)h1yNHvEj@hNrzT7;H$L_sQt%G7#t*qx zKI{&ih3SyI&if9Zm=_^KL_Cv4$Pk_wi;y9UkRh?iB&^h!Y_d6I1v(VjL~A}KBhZXF zA(Mt3)golbB4kJylQ<~?$s%M3jKM;0tI^1sk)R{IcC{Id+UFM`L-YqvK7?L@V;NG} z1Br`}A@QD>>YY_$79m4eu0;;hl$WF<^fbXWxAd>J2pJ-0+a!+p1U7H;Yl;ozwAae;&FHpGK9BRYY{R;PQOLSkk~Th8FEzY z;VP3u*err4X_MSox0%XkGV7BNJZTX!gqOo2WQdyZdp;vBLWab*iYM-!kM|SqAB&J7 z2Q#v~=PW{opg$uA_(jMNHN$v{>^+tpmt2GlIhe&d2@Ci4B4h~l6nNp>A+qB__Ru0^ z$RcD&zT9w}nqR2qni^kwwT5 zJK-!kKHi7+93P%kO&rou{dg4Y%sv^zB4h}>nEE?`|8?nscM&oq7QAE;GNcs*a3Y_f zSaeQ*(38QdhF#+d^*LH(7Z4l8%Or%lS%eH(gbWd}OXLMRt2rNXYbKkHfUW-Y#!siJ zSk5A3h&*cEHp0U#LWYPw(Qyk8G0MpzWXPBp8jFx2VqPvnhQuP^EJB9(auW~#U4#r7 zA1;9}aMOlJkfwQ5Y7sKT-P#<;n96d#T^I_L!k*i>my^P&EJB7*?<_)wxJHmq3M2w$ z6QOVNNeUVA=MKi9{ES=>|I719oe@%GUMU<7F*5&@&Oe2}I;Zn7IV8znoL_2VAxi$$ zIi)lyWXYeOXIhOACi6{a7}De~&3k{EAx@qsV&`=~eF8$DurW*2cqQ~M7EMNpB%{7bFd>#fBgG{HlS$%`dIh^)mpn5urM)mbA$7?-&3{+1; zPsG`4Q>3Q&3;QTxEuL<-?{nK3 zpLKH337n?yZu;&Pe|~l5T+qTqj5%DS_{7PS$3k9QdDnf3N@l>@%Lz$$9`kzX6#@JL`70&!sQ+ zT3b*lv{w|Jx@TY;XTgi^vskGC+SbxTB1vze0(;1 zJYm7JuuMJ1H=49{)H=?oN30Y4m}1xy*0T(70@PryI%GZL24bm|cE-1OoYV#lB7a#li6ewN`V_Y;Q4Re|H)K7N_lfWAi_K=sZTX$P5$xV>c6+uwd)iK~ z=j`%Kc1J=7T^uDk8_`l(d!=s&-EH4ST=We;-R*DsA!6M=NWXUNhHpEb=X+Vz%%^F; z;U;4q@>In5$=~>c=5(KrgFJ?e+WO7U>?j!Xb2Zg&JjJnZ4`CtIp{RH4>Q;@TW&wo zZ24`E*Kr)#qrUSuMff%&=j%u1UWpx5?SrZYrp|h%(dvV8>DOJP3cv1Z3l`8CHr?1I zMc^Lx7wOntYykq^BwWLXL5N5av_jFyN;Cgo(%+TLmVGDmd)4EgjE9G(n60%$aEc1omv1PJ*gJY_!>wp8W>^cp2_fl>%g5^!+ zKVwt6g~)b$%Z}K!t{`(|23_ExlkMRB8I=?^72ljd5HF#$@07qJCgcihMNeB-q^!MxS zWv>e+lDTTqMPxo?W4mAQ}e4g?sdZTdmiJ)h0z(j7P* zk|`pY{uz>^r6VOJTrP_`vbl7-<@ykfm?$o+uN65RH>oyfUcIt<@%sA3v@_^$c6(-t zknKgPz4B(|1swZg)`fNJrzHMedK2889q@K^+iZIe zjIFfm^nC~`ca7r2_elr4o$gN13XJrTtfvU0D((4(KM_g$$dXert#tdthpG5j>4vab z?Zco>w_;tKjnirWVZY~Og6^Q_`eHtzq2}= zfQ+SZFRpD4iZF4f5mXyXLs(SX4*0GecXQk6Z4vhtSN;w7Y_t1an?c`k@_U$*VEJqz0Z{Fn(nw4KVmm1%Kx!{=gf)k?U&t!VD3D7i5VGuKiMpbL+SF>= zZ`d>)?04~Hr~GQR_MT`*thtaHY+yQwI!jDoop8j>uSDr&5#^Yytm0&i1JP;{?FDkWMN2ouCP9E5w>|LujMwU^W~dZ_r2}DByPZ)<3P3KU?50_d z`Q?-KxjQ?$d+f~G-HWTYZ``_f;l`coYwPz`FJD~!VBJJue(}a3xO07d<0#3{G~542* zev+&de{O%A64|3hFCMf4?k~<8U4~`i{LwaSlQ_>b&NFSlGI#SX*#hy=?E1n_-hr*# zWzZS3J$y6^=vmO1WOevxwp=r#(y%w2R|-Q*!+&k=R*e{G>O<4U@ChMv{`SWwz^*XV zp`d0coRI zDAfy9uiB_rVPsTA#H3;!;=xL>+Gs$SS}#}2u2=L54#!rq42=&uUM@j##HjVt;n5d6 zH3>yfwO?s!nRclDq=kqf&9^isM{o1>l3Oh!(vz2KI)!?@>3e?FFBOV8FPCc+%gu&c zDims^O1*)W`K6|d7*TZyo!v&W0Ru>v<&BTQ@R0S+tkI@%Ox?^ziz}EoE(|!sA>b+w z+{}&Q~i;s?q9zgA8^P*iH~b1X#BPY&V5WK3}MN z(E7+XJSU&`b55nuK-@O3SoX1WeZP)9rdDm#oJP&9RSXq<=Lh;g)NqU6JK>V0x^siEs!np+(+z2NNk zJ+N4FxzI}D6r^aud06y8QUFbSp9~64*%$nd{k{Y7PRl+6rrP-ckNpfjKm9>K`X}cU zzGv6E9ecg+KR~uhI(hLSq+hLVpwk9mqAh7yH>j~8`v|4Flt$Wt*+-lZQ$P@M97?-N z>FjuDVR0NZ=+vW34hj?!q|dBmFmk@B7Rx{Ny<=F0JL7@S^d%G#vy4Zh=Zg?N$W>30 zN-_WC#5XK7B-KY!At+gI7+^5E5RAQm7_gWb9*IRMQT7Li^*NQ^c7zbH)wg{oK=_}o zjp>A7HLY(jECh93+v#|S?9|=1p{}u&wLkLhL4X=I{q%+p1=N-c{E&n;9mq@pE^7%+ z!4L!{CT*^jSdC!yL(Ufrc6MMr0@IH)IgBIGD==`o2?A`)`z_dph*k@&cHg7<{t!t- z4aLAC7BRFsD4uF@1v%fUFk({&JKE$2&*@%dPT6q;ZDfSQKvk-Ir z;Ha|qkzv4|Dx4~wDxE5ys+_8xs-3EzLQ(tl=?Ln(g3?h4A(I93+$OxMn}g1l{pMG$ z-?9-$k=O+HAR-_HK7zL$EDoz@XO=LKk@74j=}`tnuv! zup1|FDaMUPSN0c4U=${VRo1?$lQb<(14X zrrVIW(nNH9gm!2{n}7o?k@uMb-87SxK}txL*F+Hw#rYG8hL~7<{=S-yT01}TW96X1$y|YN?p5h&H z^ei!WR-=KAsjx7kA)b{}UC94OLmkE}ANeumPG6XcEKEh*O0D6Q^5F88VPsRv)tb3V zspz?Gu39Zu;RXT@+t`%m2rs5eR5G$hQ;|^{c*r&3dhFlIe$N{x{`{%I-}%{N|6BUs z{2NPuqw_ak{`MP%*VA8qh?!q<>u~ z8%7OAY`d7vEv2sy+ly$65qU8PnXgOfyQayBt$vCnyJXxmPuu0C^!l(FgKdY5nvp!6 zrSzI%#vt71ho$z(-Vsdxt`Sr8My&Vs>oM06iEf1a`{4(`dC@ zebW-mHYE^C>D6IdF{zQhl)f-*YGvEf*ouak_$X{lMYBL#Q^AfQ@?Oef(>C&9AQgGX zK5x8B6RAi7Y@{OZFp`SA!%8ah4(Wa5Jz7DPY_N(30PG|p2&%Beh~}3FAq}>$I}t?< zm3%ux>dTahnSV`c_6t)AV!zuB$&H297TK(b{Q)D;4bXLL1wcikW&l#qKy?bFH>Eaz zV0V1z5eQL3x97p@6FAC33mXjIR=_-7QHLBnHgSUe%L0~SlrYv*Y~q&z2Uc-r z{Um9WKbqEOd?_5X0>q=~QqGJzL%V!lDa4l|#ygmQO6Q-#M~iziyZMOG_8wfxV>8D3@ z7WS;4PRa{(Y&-!Ef=@I1-?Cm(^EQWDV?A5UG+d8`5!Pc+*5)=&qpUrSbp8MxxaKV* zp7593FT0AJT$y6Fgh6jM>-hqV63Q?{DApR~X3?)Wj_lsxM~B-)ayQAt>WizU0hka zb}>twR3mw)-i7YaLU-sf=njoOJ?M3AZ@l#@NB&#q|N8sC^56f@D^IQe{?S{1@Pj}6 ze}D7u{=?sW>OXz+LH_Dr8Jf$HgeO78=iq6aPt_MSFbm@LtkI-Cc1M3T!Ii954bq3p zBww_^(*AiH$CFmf;FEmL`Wu?q|=y;suqm>m0fCk>X;~Hb<&I%vHrbYooeo!bl zd$yK^^qxFQsW-^>jWab?W>t)M(0Jmyb5=w`3tww!ZV`KD7fToL*d0IKWcGjmJv%qeM6$hzh-m3@cEGK2Z7- z)E)Q<1%tYHG@XVjO$w1NfXJN$y$K+^C{Lh~13Mur(xkIV@r$k#^oU=WuC4$w*+{3G zgGyBJt5u6N4#E#Y#iR&ywtN;+8Lw54y0%t8^H~>VyBb zQpPQNZWZCP+*-}aBMg^^;9h>kFZvMG77NW>-L2Kj1>Z-z^S)PyAh%L2=St-q!hv}R z>cvfD=DX}vNCCq7uB$`2=+rU}jlP49EjD}?KI!~osRD0wh&@(wotj6rIt8autu$Q3 z5Ub>T_?SSOFq28j$Y(So8U0Kr9#?YU+8m5{!e5?+qg7C5GxugT$6t69q+mQW$R(uVT(uKfW8 zbJ>J1EI0!zFKHSfAwz^@aYQ=9|mQjoB ztHO2+Tuu8nCYpUlGD-1%9w)3Vzugv22a||7;|K!JZ!v*cck^5lVG1xCY_%P))7=d< znFxG{)H84p2kNtJO}$Y-k^fFY&zGFEodG*b}Y zj&Ha`)QtTmIQy_+Z4Npv#Uz3&L&R@WeKA&Hikn~<^s8d2BJwy}KTNaKKVh0wsz09i zKm6e^+{LjT)lus;qj`GJk5fb-@}n(vlc1JFvE4BjW}}k}+} z^9({Gj|)|!g{skGP&JD0{d`E{MP&coKR#Cc;1B=O>g&tL{`jrG{G;#vPyU;~^X3bG z{D<4$|K%H>zwjUZP-GGhy&Sv_&y#?0p~|yoRUS2S=CkM2VtD3jaTi398_uxLA$5O? zx*LKY2sm|sLymX)bQIdaF$z8x20I>P$I{C#e?DxAVEu;n2%^<=NJB@bW-h5P*CSno zOnGP?_8hXe%L19yM}G-dndI9;V$s+=XWVrnq5R(N7jRkm$Y%yTseD8cy$PRkLL;@tA_=587D*u8u}A``k3|wl*(;I&eXmH0)FU%M zNR_N+mZ?Kwu@X&)yT^gU8)}Jkr4~9ulR9zig(viu5<1|yDB_*3%XsIsu>_(EXfVt} zEs;k*eW<0{BuinJ@+NxefV!Y^SfiZV=xU?_U{+o^nIA;xZToVNQIxGwyjLc|wxL}m zA*AP)wc#MlDy$@&?g%$Nl6v*;DG@l7t_h^G1ogX6t%|TFYspdNkK#~-Zs3F?7&H*P zmUi~orv#rI@zwbx=}i61BWV)Mh9~-HK{OATCPQOtzUTsbFm|+`SNi6au15d>mK38Jg?5$+!z`x?I;1z4EH(1(m#8r zBjQ+P*AUU@KFm-w*25uwI$AVQ@_~ibBO5$PT>TocK}al3vgtCU#=DSg*q869dfvG- z*lr;hnf*bl(+xITeaAl2M3Vo|_1nYZ+qZOi`%G*I&bI~X?4}mpo`kUtx;hfpP6%?- z@Nl7iByiP_+*l|n3P}%TkjPg3PQW{be$*IFgc!6R3v!{MF_73e{K5NEeJXnmXQJHnY2mNlM8!kA*b!av2nP*%iTgwIwTZtJdy%*At6*-PE_w|CmaTvYr# zMaUnlK=vQafsGa>w?e4mw}o-xHjve^9SCh(Ju=dAyME7wv^LFR+i29e06v(>1#2J! zmBBZw{Qx`_1cI~0TGFxOvg!0KzbReMzBz8my(t=sz|aFRD@al-!piv%9kjy_SYkY7 zWU(4XfCoW8>}j3NucTNzOfY7heAM%9DCZNBz)N>}Iq?g9wGPOvkd$9YUQA9k@B_9Z z)@O{a(K9CE_u@EddjNKyvSmj4OyG2&`he=95yno)^f`{vq(h?_T@^mg&7|Xwo@rn^ zc2dHznz&NgANuViBt8yICxuZerjO1LaQaQnv(W(Yuls1oa6pou^sWIE;&;-pBxcQp zg(^eCD^^OrTlVXI&23bw`D)#PW@fEgXjWhq(9AgtRffl)$`D@%w4&s(p4XE7Q~&z! zU%LJi?>zHIf9;DO{P=~x_gDVe@BOcXyWjWk{SW_q?H~W)OTV7FlDsT9^+`}YICvW8 zQzWm(WI^1XH7(R)c;@4{)0EhiY-z|}3S?sxwIYnsd)h|WjUW~~X@8fJrHCsPDcd`! z3yQ?{sJ9e}MMmSX59q>z-iyUkF>k#~LtbL`c>P=&^6(;6N7^z9jSexRRY%+eEr^8c z|I&~Pn5k~|OGAEPrsN+i4Y`V;Ya&JGX|=sfD2HW1cHAS3@I{eF2r<(g42`D_FcXuo z$K>lV34KKB4}rZYjHg&L(f0`IT2ypDqz({44V8nXB_Snp;QMzY##vv-Yr4`$tjcxL`W5RDU%dT z(QG+SlY`O>yNsc!DuTR_KN}UXM&ANuol$=>(Vj3GZeBBtWZB4}gbeepBtGI@cXx=@ zf&f@5Dv?lNga5_THgwm52WLxmKfphr_iPDj8Ti16Z_GkChpspP4J(OL8@LoP7#%j$STT0U)#)+ zT80Xa5D8qOwR8+?{^L;WP!hM}(A-cRa2yzP>QNHS((kwu2#CiN!{Y7p#950fVX$*s zF=?o<{(bjY;4zl@6nS)HCCVtDYdN*T`Wkk<1~Gq{62dh{-Ps?S>_$8BO zIelul)pPQf=@}ckWKL++oi|gNHus3us!)py3rp)&i4I}FefN$QLUVMKqggPaS_;gxNKSRm`MmGc;V!P=mf^uJ4=+J^r%{G?x`k9*^w4>) zQ1MGRqBJVSJp2XbOT}WNRxd)x51)m#hF8j0{YDu*SIX6zxk{<%xo)mnEmxbq>z4~0 zy6*_Dgi2Jg-F4ucXIY3SmUmPXb_ns@EoZ~eDg`9+zN3aK`XSeg-CqB92jBV!)qmjr z%Bx@hqa&-|dg^cg)9=lEbM1fm5C4;oe*G6$zbh~uVkk`JpMw_@KM5EY(&9Z!i`Ar= z&z@5&?AS_7luZZyxX3VeV2KO2#cd`oE)}6LV!}ivOJq=%p(+t-Tre6t{>BBMvFwC% zbX-8p2j{qGc38bZb>fhjzP8w{l2 zy(Yu*P?sMbumo^JgFb+`(`qNZj`u0O{aX*D?r;iP^vT_@WcZjgbj-=iZbP9Wt> zzMQXu?Fe>lQ^YiJO1=-CW3yan)SYV1FZ(6LBB_FP>w*zkDO4J;JSrfyRLkcOl|)f6 zBec4GOny2fpTw-pzb7~iLT=S$3w7}slb24YQr9gXMAULTCN_XbU*`hcj$?}7qtd_I z;EqU(`I0@P+pb{uXf*%gC_Eua)X_>HDj$WIR6ZUhA*Xy4B31b)#H8}^SqMc10NKjJ z?vGN*f*vOF^6_Z+s416c;OJ>K5XO7*}=p|{*oLp#XbC` z=}^U7nMX!YAb%B3G$G2A5k?^>@_QoMsH(WRLN3d@aM#?k?>oJg)9I6G`&Wr;0Z9L= z_Jd7w!SBLqz2|Rt@57|M?UVUAT$*=0dxNfMa90j5=invmTyu6C{wYBB#Zz#KTzH~( zRoj$?>3Q@4cY}TyGmW26`KfMVWD*?y3s2vO{PcL{BZRlwar!f&hdoeedFoLLt|e^9 zY1xH8-AgBlEtKi@cHka1kRHv&GR8VgMP#tLMB43k`mi0qM3(T+V68tT;JJFLN5kvL zTLk?S7Wi>11?Z#Apq|(YL-0?{s5r&W~VmT}vAUpIMR>kJ9u#&6IojNBM_km>>v6e z`|Mc=!QqfzJwlm;AE9x=kI?+!N9c!C@vLOM5@qDyvu7#3KwiR&$O8OW%GUT%5g2LrN3aOJG=&XH2z` zhzv!F1WXj`p#VfVi6{@h6QaiwK+U`KaJHnVz=$xzMj}eOVuuI`QGw!UOQj8{GL1x} z{4a!MBTs|~XhKB!(nw4RtOf&@z(jq`y^RQ)Mz;BwfGE61iD46HG$P=M>(&T#h*g2C zh%ygXBfKlX$AaWL0cu$12%wjxi$Zv1fm#qT36wL6aMehT0?NxZ$>`PJVgD0=)E*{G zVCFy|Kd~tyADIW#m@x}@|o=eHVClQxWE%2}@EN`q}yDGp!V(_zrVLR;WI-Pd7C)8OV6x zka?zUPWG`UOO=S_r~6PPipX(^Pn#yWBeQ9tYhvCtan`8A%R;H_l-yhmDn3o<`qXkx z4T?VXT&Y@U!0NCFji93M)e0r2+$_|ZUagqNW7RF^ol>dfIu&N+8p0&1Qbnrzzw98pQOg%v*zTCX&#a88lSyUkj;QgF)UO0DUFjz*>CmkRk>(Q~RzSbSERm7L@GF8ADc zp|zw*$dI{!mqe46a-)B7KhNZ9wNf)zE7iPu#mhBeb6PDSSW3Q>Z@|tJ@l%{!r2v!D zM!o7dB{-Lc;|vg5EcyV2Di~K55wQ_5$IwOE0M)WSW8U#mcSY3h);#vVVI@l62-6Yk z6|<|ql5~v#M%>4984Pu!={FiBx8^rw+NMeAb7W0FQqQAlG9qQrPKM9KO-PCK6YSoy2^n3GW5 z?cN~hKY)*=&0XswPJbrz@j5xSdYKcBWvp=^q>0%Iwr_z2 z4qEx$Lgr(Fx!Q$irwceP1}UBODIz7BX&vWsFJ?YogPraApb-qV zg>UAR&U=Xp#&WGPmqd-X{I&zF&70l!?k(R<=`2xWG}EeZIgBAfgZmgpZ%z95zBPbM zGo=B<7$$*ORmSl=D08+of*_@H(4OnvNS^f>F7Eyf{w^Lw59 z&br%c?etNr^)GN9#{Z@Ref75AUg`Cm-5{m2#P~-ut=G96b{W8T9|S3#l%@vAMC;QG zhq`YoH|uI2OzAu^Gh?~dLoSIG9LxJ~(1nC4r6I6_uXht+tUt?Gu=RZid;V6lg?ZLZ z>2#WVT_eZ35G@h3RBbw)OK^_$0+&D^Vq_3Pq1C7E+741WOY~th)A}5jL*MAEp5GpL zeoE(wzKP{p&v8lYe(O+R@I9Kccgact6EH~We6jl_Kv>T+2H?Nx^s#O_>sU!nf6zmD zoeTWeyF>ZbCYMJ3O1s^Cu(I7~Z4A1DKrS7fFX~T#uxg9}y{X*!-yTq;zLd@pvo(@u z{VL=XSpo;h?hU9cgVszSM#JNFMmfyAija^&O6Q5WAIr6TE{QpCeXzZTIgHe0>k56`2Nb;?I5L7@I|}c6=_zHp@5ZA)^}lZ@-U^71=cXb`d)@70&lhl!3UZW zoh5rHl4*UweUVnEZbC82eyfY#~O4>B}9-n8y1C#4fHfO73qvUP@GF@SvH#>XQ_ z=?pQ$%q*+NWw1I|cIX@F^x;bsUt*nu{=l)p%(H%qOM%*}uvT(0+%LIo3~e z34D2O`Ovt4Sr3&72UbIfQ$r$*^)_R{5DvR%N$G4H%C2{Z0j#=Fe%M7!N@t7m!vI#p zD8Dl3?PIEa;tMW^e(m4jLD$n{JE+uFcafOWYi_TTF#`3Lg zF0E-@>FkP2UrJ{gv~s4^;c{3IvKd!#XGrN}v7?0<*1yQ`m`5TR-$r~P@$K25@3PJg z=RpL(`XMfl`OoF=ww#ns7xUl9v0md6KuPljds4TvyUlAcNNE6ZUq}M6USu5Tf=g{^ zg<;NNFX}^cHAv}9vAe~ytxs`Tj0x zlO6$OJ;Ru=4_q6x`z>)Gr{)S|=zI+!_JKqgtI1fXv4eKo>Ft^*bha43VF2p{mq%yw zCDmz1&Sn}!oXwJftalg>#`{jE<#s*(*ytRwMk0CE5|=_xU8HE+;E=SOHZD8(+Y~!6 zI1?J`^R$_bgtNYzvEl1;&4JHpT;n!VI#qm6bh`BtLt}+q1Sevbz8pBK;h?6o#0raM zTCW)8=!<16YMmv@MKi5?Tn_zktK0ThI&e&lPYgb=DV-<2sFopVVx^x`%u2M#-))DhK}P=l|3Ivmq5_1^TjPH0mAw&#(+bs z*coxb{f6(U8w~FYDGl}o8sgD_mYskP_Umzc8Z3fu7|?o}@nLr0h&t#6@|&;I#r|dF zgpx^|EZ4foNoiT7I9ZA`YlZRBn014Gv-R)>*mh38+Y3@UQ;u0I+q%qUQMb5quKR*{ z6r^;HSWA&S>kCFHbt-*-AWr={N0f@>SzqQ-7~!k%l?48ZvEv3Qoi9c>0m6EgG2n}H z%js-gr}9BcCyOsmm|>-3@C6C4lQq1|uud{OD4?^W}UXO*?szA z^0!}Sij@`5w(f9Q@hJoM!R`4@AfyA}M9AGZrGdmf`+7GS%=!h!g&Cn(&$6FVI!DZi zNS>ABQs_T4%Tv7|Z^!C-reVbSVFZ+QjWJ=}T?NO$b5`MFA*GYWItnwas|LI{OMK+) zUTLOuvVadWERW$a_rT!C!Qv|7Hei1UQaVe_p=hS%ayiQMH{=B3k~&k2PdwZD5u@y7 z|KX)}*Xiq8b*3mA&$a?Ci@Cc7Mjfs1C<8@9h`E~xW9>2)P;c;coQ98f>r6pGJlk@( zEY2U|&>#jxr;783PPe|s(3mA^PgY0aAf@xfc_5Z+ZE;E35uF~Lm}pBf4k8*t?ubb+ zR-3V4d<8=%WE1HuF}~4Et80|Q#j@XWZ+5{RfG>-b&JyLKnO2|6A(P0}_h>o*=}ghH z@oeksTo$~1;@`Rblui=7e3@wNFdWu|Ork9yrIW=R4>PPk#qj874BT5%hbGIuPp2aNQW$*3TJbS-`3HQ=KWw#rHU(o>=ZNoHB+vSD zTnf~Rk4YO$Fy7l702nho0U>#&=G!zGoWGcP-T8<)g~J?She=(0V>#@$~m&(vc}{K22iu@Yy=8~ z|GZ-41NoM10u?h&m zg(oTZX0J;|%sk9t*%#k$cNeai~>~`CY%}~_}>t&UHe;cc81dPOiaNr~IpA|UzPH)3!ziHz)lB+(3 zq_csbX8g@p3{ zh4bYEn7qmx3&aRgyk$Mln82;<+gF(A=fgFhF;w_8ZFl9D%7!wHs`f}d&&W?QPHa`Y zmoGyIXk!!VwV;=P2PfF*K42qhn>ZXTeA)2vv)6aQ8|CktCU5xDh}}t5{o<|L>j-fSf z#3TL%4)s@*kk5o^$ChRAtO$9X?##q^pw3C$p`T0KZ{Jq3vVZ~&Hlap??Gc|>XbjUlFQ6=ySL7K5pJkBsYtTFtKO^@g&PCJc1C{A_ zyTeegG1QLIZn86(ZD)(gG4Q?4kUbwG3pNlO0&aIb(q}Etk~B~=a!J5oE@Bf&ns#X?eg=KY=_y){BhMV0)YnzUbI1tv+3@NR z=`Wf22#HBsxdJjsd*1DJ1Mw-r9)tNXgyu79>D;6J>K^q}?7R8m5P-sQ5{KRvwzKPZ zZ2eU-YJMHrntnQp<1T~s`T(MoAtGKjVW}Z)4E_+*XG|#K=CyrWE{h@1rEWq?j*3JD z`y7NM*e+v@eMY7#n4CN%*tCDr@gG--ZU^B_b+d%ksfWBq4;pWJb%rzbS%rZvDhlbd zD|lX^e=2Oa_E`nBi9=1cMI1`ogSr6je)kiG^m7I@bw0$ZbiaU);KZ%#6$3nMh$6-q zujdUoG>AV!2E>~N1pMFxL?BKP_WhP)2fN#iZkxBKumeu0GF{F(c4PgjaZP(w<@5GH zo{qz5I`&}3MWI6O*--kku_M7ZvT9jK0=z)dS-w_-}j7NYeD+30M{bf8)-(0!P zVx*_P8g0x2C)n<{wtb@FbTmr^pb=WR@R7aQ1r)_ga<-PUGHcLJWf5vTB&1 zCVbbgfqoJX@>Qp8kSyo)a#+qxK!A@2L7Og%r8|M@u!`{lk(NZ>_`7mF}Twc3%CAp3jeC>KT zs_!l*=W804zvgXa3V9g7mb3YMX0zMJO+a|9>kA&PdJ4(JuqK0q$6sop8f|({6de!5(l0s3Gc?nh(6A4HCE5 zLJusTl8QrjN`6URY6%X>@YJdh;GNPikD%I{4cbrvTx18b8HfJ#V*T`D;4x$dCP42Y zMK7?0P*kiB+VcR+Nx&g-(0H}J4`@>bB7NvXg8?WFOl%O3q3F|tIvrHEVON1_GSv0R zNiZxJ*xvvK4KAm_wPcm%WG0pt0C!6p0u!LIZiR(eJaDM3AX&E@5|_H^d8N9b#wn-) z2`hwPrH?df$pJ43K%*;AwJcCt4pk{~*@UE89#s`eF@>ZI&0ctkgmhyeH>_x8aM$2AEsSYnl;Z?5!oyuN9!;hfK3tGTIN4B9QF|6=5 yMJ;O~g*T9d4T~ci05S+NJPxY@5F0ZYUESV8D6?O?YL;z?CR@DIEv>kT< diff --git a/dist-newstyle/cache/improved-plan b/dist-newstyle/cache/improved-plan deleted file mode 100644 index d7805381f916d92cce83a7a56ddcd40480601280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096244 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 z 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

          W*2d^;it2sA! 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�#B$6GL~mH)kBI3 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 ZcU{nvkmHfAz$$is1WBa7-{`KwqV_1)3m!rZ zwHt_00VHm>175ww|_P-;*qNE8~;YoK8Il_wz5 z6go`;GJ!Ft1W_T!1kjvFW=l*a!0wdn(#GYoL>Rm~MTmFkI4Yas=omKv%%+G9!fgf- zgf$Q|3Sdn(@7bpy`^{RSKyJImJKYv8Goki2ve6dPb`>kZf{>#dfrS#Nfx zFxUwjl~yF#tAu;%-CloZ2v{Uy4pQ!sjVPob^T!c@z$5*9(iU<$O8-5U93-3F>Tknt z=caN7Pd$m>95ST|?SeVeX;Ib;u>MR};#6APo%kGFlOzmHHXOJ7&fq-q;F&EbdBj8! zlL(+6W5U&=`uCj+fQOg(nLOAkf0?ji#3yl!@SO_<1dZL~;2>vG(s)q#bTY;|NlGX0X{7qR9r8-Kmh*KApeiYso{n?Qu@Bo! zPL!(dno>AbP{c4xa0>Kl9{;I4i`paSIarx`G_vT3QKG~>p-`521$gHI%*ApkG=C`t z(&BhMk+z~jh;y_IyA=gqaLD#K0BnW72S_QsUAXGy9?$Wio4hfD3f7+BQ+N=-iqa!; zZp}uohyZ16K?dCo-1}^YiOgofl-0EohZi*=EHI^%j11VpcjpTpSNf(d-1-!pe)-1LV|w zG`;QLB=Q}E21#sDT0)YPlBp!(c){&+uM<2Jg$$II+CEUih>0Ai^DwkKJy>0X8Ub6F z!)$<70P`Ikyr88Yt#bTmFHbr^O>O<6)=Vw{Qwy_awZFHLEGWGy8q)>qL`4<~JoA^G zW;@wC(M0MGEfwVFSUKy3qK)RtvV3APr8Sja)QVPA^G9czv%vN!KSo;mSORnZ*goM? z2Y>7T;~zaI7Vvf%xS0gnE*DqJ#m!GH!T3oA&i>4Da25l~{_!Q?DhU|-Q_I4a1%zE5 zostfsz%rc0XBxOzSjCVEjF zilN8T$T#!lT+8#tj!(wAYNC_`q_K*d<#8kvyPa0|MQuBaABY~F$#DrCoC!`_3);0- zq0}zHU0$tSFO&+cQoGu2m)v@-R;l8>TyC>bu9O0=QmnLGw_Ix0i-nR~uD2W27WvyK7QCX{bW46v1BTMCG;4(- z{!kqIcRjydD8r3myHu#Ps^y^UwJI&YRIjqXLntn$UILW zA$^Lw8w(3SRbnJSnCNSvWC7KJTpo!kTuI07PnjXJCdT6D!y!zAg^m6N4*G?R^^_r= zJhBgdK+Bio;B(efV__MasV7xP`Y>uDAcXj5VM|G(9OA7O&Sgr;uY>}4X2{r8(hNgM zYhfRBUBoOFtXqUAi}_1rbt@Pg9;@@SVt7&y0uD_YBC}KxE~<<8B3uz-PwiX_1}&J9 zcka1e2+aG=oenm}-R!j6dd%D3;*%BWrWWhj}#?*+?E)J^rL>i zJIr^2QJeJ^wnp3C)j=Ca!cxh(b9LRJhj-3q$?*;@XgVHLG6l*Q9vLC zqhZ>pm)~i__!mx>4pq|8Tp9QD`_ZkKv7{f|s-|b}6QM()c@6(qLXt3$o<0Hfh%ZHh z7XBt5>Iew>pi333b3`oyorm!vUjbF5aI;Xg2vOS>cr#ovfRPmUFGg2;F6zB#Dop5O zQwhf*a8M1C;$!A<^&4h&t@OZmloomW#TFLe5e3$X)MHPBMyi1dzHQtD(2 zh|`IdPt{;zVx}{1?QPPDWOSwdozP8q7G@87o579#=8@ZlBkhFc(oV2OypeR98Snh) z%I|DkyU_pb|ML2O^6&qHzxIV+di$-Pc%!oW*T3)cr$&!z|55cv)24t5e-bnb4xY#5 zMB3|~I$};v$8#%C=+9sFd-klOpm41znhLl!nyIJ&EZtm!5g|)9<&ZtnWFXyz!_Z^^ zxKV!lkcmvyTbM2zag^h0MsXPjK>Z-Dmgbu;veO zBI#hoOJdg3?oOsg%B@AR(!#aSsRDAD&_qxE zH4|nuf-_UuKvfiN@HmPEtRck>o}gtAw;ibI!n-m(@;=5|2dFaaroTbTlxHy3FlnLJ zc$OO?sYA>B!7@A*D5n-sX8nfW1+soe$7&orrKg! z%vO3>Ztj+5U3;?BA0l_mPk{P^+(MHSeff=tA2wcp;tr0k#`kHgoFM*tfd0!sI&@6^ zG}Gbc;$&eq#7zkcLDZVuXP7ECbowC$i5n-2ze^u31nWJmpBC0V3+a{lIwRf(a=(B3 z0VGBJ0qH}Pp&V4mLAk2bY!qu%XazwTD+r*X(`r^c*Kd+?3%nK7OHk(tik@4A_ky4R zr}6b#queThpj7sBFD@!yGf1QYPpJwJV&OR~FB1H+CVYlvS@*b-Chek`ODObJi;w)( zG5HaNz^vzYgG1wLCJS$*@|eHb@40?QIyaM9bPLYS%IDL0-spVu@EUhMK9Z^h7l(nn zy%a5+$jZwJEgbQYu;{TcgMk-q{@x9G5F#JmIGs|s0?MkDC$IU+UxI;`L!0okICwpw zJV+pTwd(AkCp#Dl||F;k2GTq19WKC9b>W#- zdW3!9Y*K}6(O&%?#1qMYJ8jU&DOExIYw%Z{u=*a3m7LvOv=JVchG z_j|4WBjdnh@w@RUg-7-nnyDMW6PV z9B-e46+!-JN26snJv;6V-FA>1dEy~_2Wd*l4^G+C?~qCrS0@vvcVcKm^I{J3r?fd_ z9sX^?N8ahvuoU1mB^|n%rGUVnFO6Q(n}c>sTie1g@t z0mcLO`L5yKN}$<)E1?S3M9zC)x;me|J|g#EFibl3M&kjMG6bBg+wDJujqZH*2j8?l+Hd}0=MsH*pl3=# z!y&Qg4q6>pH684-{_c>njHJoyB^PP+lS!>u?K!URg1-krb`b0gf}v>uvWDuDykgSO= zZ{D$6&$I+J_;!B~WZRhd9UQhDcjWZ?&JKF4Kfto)1wiu+N0XJ*M@g`#pP&gZe8b$KXBWlv(9LY9_#=Ji1x(_vW-9R5yxGsvY^txV!XRq zi=GvSCU*z(!8MTHtDlt>%`*?O(8`#Je%U-b^9vyds9kjzUBX(QQp+XCx$+ z1S--*5+6z_BD+2vtve-hFflVHwr!sOoGOzue!`mPP%-To7ij?5`dJMSX+w#Rwqc|Z zG>LA6$QVpKIHVssBH2buOt?JI1=2h)Gr@$Z2MPa7?()4W>vwP6`S8-M_usp`@!|Tl zE9+l1JE~Z!MZXGHmN&wQBF&yQ9`hWGAHD=_`W5&K{#2%v`E=&HaLN7*u6e$E;2QQ& z{N&%MPS5L(eG%q7E!*rkZ~9&8_q1Lzw{*DP7G)wD!N+sA#BAT8IVh8Dy`{9zUJ1eA z$&4(f#I)2TBajBAD$nf#;uOXD)8?B;EUbtVX;=qtf*$nVYh)jvPvQ)n7t$? zGVJIqLW`0sEqD>w+I9!`hhcllapJR=C^E0UK>3T^&AzNj8-d6gUYn%30f#zw+@8oj zU!A15)9;VkokyCR1cDm@3=bNDS0;0~_;6!ueO+hp@?`wA-Ij@deKMNuwQr5h!7ZT{ z8?bGHotPZ$5}3R@fL#%HQ!|m!SXZ&tyiU8#JDTQ=NlxAa661C-pdBY|Q#IiiB7_8y z=Y8XC7sg5M4g#4_(V7{ucL(l{%$-j~b0XvOx(w^j#Q3n{K8i=-=jj#=z)9$>;VE^s zGZcsPARJq((m|ITS$ueXuuBjI#Ed8i*siCcF$BuGz?2NsvXV|Q9kA{`aYQTBT}@-vZiW;>~4Uy8&=w_wqf@P<8NVx96d z?e}pvW0|AVF%z@!Y3wRKkKM&5vA=j3yNg#e;bH$dsSAv396lTR7QrE&Jc8$joz0$0 z=XE(iVH(r0rQhk?Xbaz0-w22gZMPvKZ^A~2>^Y93fy1Af;MVShO$lMckz!KlS&|9l zv{P4}@QMCR!+lBmqM*@`=>)Tu9ouPYdM*>5Qm2syQRTvP(r59Z?+r;>0H5znM$ji| zQ2CqDa;Wrt!p=}nv6Ybat4Ay0P&SlDD`9-REbjerRzf*u9j%0!qm@t%(LJw(&*?p( z-}gq?Gfgan&*+HZld>(Gn5q+-pb3g6JV3VhyuC>O2AD5gYn~kz zVrP4=<7&#!CPd|L;ihG9wcpn?=FifMWehX^MKh` zLpDbv0G-KmPFjST#Z03;&kISJbs^M)KgF$WI{CyV#*&}Xvn(89(ItciVq5_Jg{%(aFhQ`G)Zoad0>?z~Bc*d*D+X?} z#r}9oHF!_*nnkyTj9PxVRtdZ#QxSkV~Vs=RsA`_dt3S#0)e|J{07ssQm{vc#@PAK9^ zmbQ5#{1@oNdxK!EFgR4TfckfCOlD%zJ%BV5((etmxsqM)@9Yjbn_DB@ZZn~0Mp9)=B-4<8>J(ivt&)-?Bx z?F_TAn45<7OiU2Lasqca6aP6o7lVVGjR*}h+XFN-Ok`C&Qjfe`Kqg~7C%~d}gIdnT5__+@tKj6vx z?zMI2!Ud;6c7my7^A0PXk#|@ajl9?L)yO+61V-MAg?!x#U_-=__fozQd9TFYYmp3_ zWDAulaODv${&Eml=IGlyG%Jw#CgYe#`O?pv`y_zna&qpIyf*sdffw-CIn2%+KI5lT z$;uEUo=%C=p~@HYwm<9uYP{=g;ZB;;lWi!q3~zQu6wvK^3?(}6%v{e2XHQ9nj&fbfF>*ArN5?5Suc1&}vm=&8iWkM8&3r^<7oGhoBQ zcLFHtj&>s~Uj?!|o#*RXQD{2X(w|_dhtJ;#D5hQ2K!?ig2hdDXbqhbT(rbuv*#4>W z&>i&9Z^QXo0h?L&H>N@E!(cR&9Go_W%n)e(At@SQmrL^>`VVAwdjK5>1@0%N9JT|` z^eb7N6D4Mbh>v%-yxc9`6=3gRLdlLOk)5GD&Jtamvfb8$hR zFNa}oBdDnJi{%L0upb~#XmVg8VEE*yN3m$2htXj4Kc%U}V+e&{FC}{-;x1CD%K^`d z+zog#8S_p}Z?)mD59bfZVR3v8ixT$#*bs#ah~r#Bn%nM(wA8qxD09bIzkOTPkX~5k zAJ9&W&M-7J!?-JtcodGHq42das=m_ng9qc%QDGSQmyMiCRgU6)8=I6AWf@--lhn=msL)avx`wqCnDv5=@ih9 zm`aewu-PCA%gMPIvb20;>uUNsIUhr&l?$d*r4^>pc2incD5e&piPB0@NWtmtqG-}` zm{z(hSIGZdEM6-FoKu=s`1%SpmX>Zer&HNEsvSulO9wT& z64G1_@a6XLX(0R>EJZt&e3Mr6xA9Qot)`l$`rmV~;V$}SAcorzws6l0AhqGOH(wiRKaA+Dy&m`g?b;+44eTi?Ph<$+jV@tNjHx=W#-p7 z(ret^(}1It<<>B#_vzS8v(SSJrKr?#TUBF)&p)v-7&jhI`9yv&IB(%M)!0iPq6x{( zv`C0kUK|o4Sa*W=zf@vLW**!&B$dsV*$KI*OYW^PK*p)D-xzni`+TlQBC#Nws_N`E zgDBNLD*A1=(c3DwyM(LI*ljz6klXgV{)!7)F(HbjI0@mh%2KDP(sW+(IY~%keX%Bz znT0;~hHB zse_dQQ?W-TDU~$5N${{uW!q;=I#1U02b8~qbXGa<7|8<4x`?CP_72X@_@E8O(8*W0 zNGOc=oNX7940^!%83)q>7Ydn|`rJ9)PVYYW3I;d@6w3q^iTQBp zk6!YA?wq!bKxtGFN%K7fT5&(7&v=TScdVuiMS<~AR+Gb-LV#JJ$eH6+edD(E`ITyj zHIXomT#2~ALq=mfl}=;h1u6aHFM-gY2PwtuK91!X?eefcV`RLaPT8*8-5X05%{{UQ z!MaUKkkS*_V++1cjU`;zu87|*Cxn)T=y%Rh`!%Wqd~JonvAU~o97V@nRY?-;Ri|kEPNNdN-)S^j^LHAF z*8QDEqO^afQLz5+GyRo%^D2UQ9{>lGP@85G+YzN|94RAp`q-`tfLybko#bh2&-wtg=KO&oIP8Eb9_; zwQ|W_)f;O8$Q+bW^q*V~ZY*zA%fiv5#{BYewtO7@%#w^J^d1b9$-*F0^-nGjcdJpe zETVt0W16*AtKwJ6L9q!YCam}-!R*{kT!}0xkHy1ha zLQ`1eh{fFedL(lO;E>$+W6MJFWByY&NBRl3Jmm%!WACogMf;qmEh91?C%a9|NA)!y=Bo8DOU7Ft`4 zde)3M9g(?f)L`^Ff8;X6eDKsmXcagXp}-ypJaQQlZ<)E?1rl@QGDPmR$Y7ebl60J& zW|-zy_SKGDhN#gtOJY7l%o{!JCW^lfKthrrObnrdde+P>v77Ud8?9NQa3NhXVa;SY z8CpRf>7(#-m_|PUK5g)k>IdT~ygJz+B z#f)mi;_#8n5LsR`M=nFu@H=uD5}SrHLQe7;t|P^T&5`pYqmmnIHXD4VqCO7Jla5@5 z$aFYz8KMXLp7)4HE<@r=#S`}~+xr>kk0X~M2h+2%<{Y^UL3>6v@JB8~^azt7vUgv0 zlJdx9$iYn3S-D7iAGr*nmVzu?8bmc*C>}a;8FJ(@q*!gaZX+nwi|vXBcP7Q4RP^-> zTdNk^g<`GPY8GmRVzE^%dA0w)y)TWCBgxLo8V-kKkv+%GvAeT}a%Xpr)v&7TKB(cC z&2DnYohFCNCWo`Dm1nXtqq=Lmx~iwLie#@P>#*dtj+L~MR$3pB1=%tr`G+k5k^n)l zWf(pr1BRquHXzG}ZNWBR*oNWt4;!%jy@+^`ky%;Q-Ry3%IOqn*s*3mG#f!*@$cT5= zkn^NoYZX1w#Am$_c(rD^R4NwB9z1=#LbKf{)csniU2B%uf#zIG)T`BMxn1__Ew31~ zM5);byhgEI42rEn)o%vnW)L(4Qi2p~ezO$>?P9f5^}U8)D2qyi`8iA(vLmnYD0zk+ zxWkko-unDu$`Fb;kQQYinlG$N-iKr>`lWN2GNc#Y$s-7I-W$Dsm@?!rWyoR5kU@LY zMXde)CL+-fVOkZ+VDxSq5v_#`u4d(gu)ZFq4Dqph=h@&a-PUu=Sd>HXxUMyn@gyX> zHXn^>a;Uu4mdqn?&X}5>Loj=P9iiIu?hAHAZykv91-BEr8+aE*qz+Stc;UL}cF(-K z@b23(iu$`ZMtI-|JdgLrVagDMoIOk#a+oq?JRiql%8G?iPZg<7VD{-04pW98imBKP#rrA(?_tW2 zMDmiulp&okL=gEL<)ZV3qk&3ZH69vQn$OW9JCEEbK`tfL&0)%r!;~R1cZs@S=Z)k; zZO!D<5wh2x+4$*Hm4F&qi8^FihDR-AFMTdAHN18|D&NNq4;z%SXE+g4UP^p*OMZeH4*Na6sRFn#( zX0;$n!Y}&`uUaWpkkX_ennDz-Ua3$oxBRMCtchy5)ez;Tr#W?w%EWrq++%3a^4(ch z8TX3$YQCH+7V4rM2>4@^tJOlaRjb!4ezRU^`L&?b7PU&D=?nO4v|4bj5amYG^Q&mL zQmB-IYNcK0){;SNd2}7;nhq?p-?`_gQ|fPWauCLF4rYj%{DF)p6F;!=;|3;t^6*X` z-2)lagBZ(wA3~npU(|Cu%Ghag78QI?6w9Sr4GXAQX#3TmQK({hHjBa&z9_=;39e2x z5mbV@S130MWv@^xR@#MjTa-%$c2zp~7R=-4PCYf&DcU_`mL`px)t}GV77P@kZO|F6 zZG?v6{bPPQC!bE|GrzDQ1|8q)UF>?C($jJ7AJe;F>thpoa7lQZ4`8@=z)s9UCYl=v zZyJih5T*$afbE^~6pOhU<9#^jKLEaW!p|g}D`K!JW{78-pHEJh)o+nIhu3`oTfg{73sec{a2>{D)e6!JAKbx>WgkxRYD1-jC)8u~&N@sA-9=<*AN1Yj{$}5O4F`tx;M|5-^>RHi2qdO{yvLcGnVIU# zDf-Adb9CubUr$C~PdJDytV)mZjV9|Hb&hlC5$6Pd%`ol>=OiPX09cRh3B)IUOyN?Q zDLul~0DE<9INS`+%+Iglq&8|1`}49(oFUvZr?`1VYV3cyA)A?ekMv%;&~A79j_3`o zWcO~nKXBFA)Aa@eZ;NNLKM_0Z<0#Qvjn~S%3qv>TZwME8(N{&bKU@DZJ4<+%*yJ;3$qTBoali5oIe^0i!#~Rt z>cly3p{TD+G`l(IZ_@2b(2z&*c?j#cGCf@j8Cg|*@c%PEPts_I^RX@vcl>aU#cu`K zYj$4=@lgu!Nnh;0`?i4WM(^i$p6OYc9CDFPfX6VTN7Ne&gLlMv%HoGd+u?wKN6o8^ zungFm{bPZjA|$`x8+siagu=;4+eV!nKN3zRX7xmVWmZmwosG?|P+5`ziO>C64_$sr z-V)|jA9NSFXOErl_M=0+>Ho~kYvwZ+?9Z^dPha?Ez>}66RpiaD?8Y5Gr<5s^r_jO9 zM?Oe0Pp1|yEnI!$!tz^h%D*XL#E#O*{S1?3N>eH@N@naJZ{`l~9p@l& zE+a*FsaB{p3Q+raNEj}v#Y)g@HHFtGw}oi5YLHB~>j>Lbt<;-dNz@uaqv9dOc&nh> zItSTyv*ndbezjB!ioV}0dMyxw?xeKty*nCLsn=(WPTWTY@Yny5SS|OdyoLk z`(6vty>!@&aDGk4&sbAoA@cnJ%eu!m-bm2T6V3gj-yE*4J+eCYBWtf#zvu7#=5Gu? z_PO$}ef@v@*`NN;U;mwRH-G%sd77nvJ`4fF_MgWie7|?j-J9hD$236kVhN&LbluS1ymz8iSsK{IT%ZnGT zu3X4^qv2YAVAqJmUS!&fvsrO>IPh{|e>CugoKNVeeLTr#=?W%-+#Lu9&%i$X zjZ2H}*|V-(1jX2I7<1Ua8~Kv`vz9O0KP&mV{j-#B*gp$)-3FGDjorvM@|6g?k+0>e z_RmTjinW@}lINUzzCY>(p}Y=-s1SQT7kXZ+E0Q5_Bv#uSb%$r%8-tP1gl+J-k+C+RJ&{HuuB<_`NV zO~90WGd5DLJwEoZsHX-$Jvjq{(Z(iRy>Ttfq9`#1mH-Up1CbaQcoDch;)uDyh$KGv zzOmWq%4f&b_1v%rpL8+lT^y08xohC@x_Su?#AZM2AT-yOyC%EL*z^ zv#ae5?~K;K8*G6<(z!hx_>y1APp<3rR!4Fhy` zB(hUAnwk&lQ>X2I%BAVxzJfP9!Rz_PXJtPU-G$a*71KesSz!j7L?h{bC2OavD5rq( zT9P#l#h6J2hfZn~084%=n_e#2W3{b zo6|)aK`o{Hn%$25=2PwYo112M+}zUJ7Zz{4b^YD*Z{57QwDRuar3;I1uGj?ZH{LV? zH?OWNT)dD%ApT04Mj{cCB%3ww1y>2flt2%IlibK`i5b9Z;}my0LyFD}?L*M%!=APP z5JF4ROMUWYM;n8D(2}NNSMCUON;u={{oeAHyMpQf8}?*AXzWtWHFL?aGZQ_Nhv>2raV03p?HIo12pJ6 zc%Uf{#olov#Q})9E@=(MpOyqg@4cpa*+lOb^*fS(tKX3f-hJII<@M{QlrPp4T&-98 zyZzA7=FTK3_>=c0DN!S8jpBYA;Qq|4@nv}?&K_^$K8dr;<1F*`&6%5b z=^luC^XrRVdHc3*=fP*f_i%3>&8q@hJsBnm951ty#cLvM-fBUa+N{>Aeozid9_LnaEQ=31 zUe3XA#A@{;(a{$>H7P~Vw5YX>PCGJxGD^gV=j%q2W48Hb#jjV9=_x3*y;8H;7J;aX zN~v533WZj=+HU!kQmIj?HCyPJsI-0Lh-yOV?6=x2I6(TWZ+rlbhirG|Om>Z9?hfo} zaRb{v7e+k5N5D<&yPF*o-sY2^$K=OxKx<~Z!9Tb$-}j;BwfdgEP_;TeNRT0Jg4hXa zh!E?xgzcu3D;7)509GHxR^SzjqTtm^E#z$r%2k1-D?}4}Orzdvc&&zCuVW9Y_{Dmm z4fo=9so|THaQCYnGj+IwAD+-b+O>{gr)6_P#{ZBl-aRiz#n8OpotVapVM={@T>sv_ zyVTJYuFbtpxLz>$jQ}FnLLu^!I1MdYcn%(Y&=kNDUywt=Y4^P7xo>z-?{wVPAXGaS z;_EPn*UxYilKsi+n%>E!e$QPQiaP-7qEi>{Li^R(06F6TCi{|wcY}U5BkI8=W1GJS>ib2UB{K*+GR;iuRd}3?|Mu-DCC9+&zVPgfkvVOJ5=p zbIaHpKc9y3L9KeyRLc3UCcfpNp}0PhiBQRV!$O18g%s?CB!I=t2uLkTg=#!FtrYC3cVNH3mcomEp+?VTE|~=xB4R&ifuUqMuVPI zx*+;?2sJQfjd1V4Z=BSncy9D`)p(HxRwCtH&DdvRtleDsQnB3pQY&hnI4hN!Un*4! zr@vIHR?bAAo68YTH=u8&iRcTYcId*Ihn^nKN0Pu2yEFliT1-w&n%VNL>-!H5uucP75;`we7gi7!(g^g~yXLst>M)@TKl zBBZ=kIN4MRjdr0{DF?n^sMo7?gn>Z7Hg=^s!i%XE*Np7aRbS7QHU+1!K+b$=r{?j7aIqRNz#;wj} zSH|5KTsIQbOqA)&WtS{B1{pp-s&$Xz9Z6-cA|6R(uVNlaWRIdANrS~b@`p->oi6sV z5cVMckyIwszpa7yBnFyBm_`h69EF{!Xcic6D)=$P zepm9?v@JLsq+-9Z&s)Ehi&U%tK2ovYaFUAshL=?AH?;S$-|+_O!Eu^qfxfqVG6&47Wrsf7d`8yjdrKvAAI8(R zNq?xAoz?yH;j&MU*(~hZKAnsg=-7Ay5dBSN{+ zstKxf2fZDT$oBscW#6W`l#q1a)TkK+=!M)r!D%M1hfa~y#U>n9J(b}`#| zM4lAu8)7(&42Lz~)P(@Xzk&NEK^a+p&e5l3lS`q}^(u(PH@BjmTd~khg!C*PnyyCH z!X~h~4i-$I*^fn~hC&t=z@{2G!|>l{Nno0Ype{SdA=J%U;2Qd~u;YqTEPL}Q;#xJf zW6kFw8L(J*;jO{u8jLW_Y?T7&m#vBXvc~@O_Lyv^AZOrdX&nhe?!gEa-mux^Rxz`9 za+xnXnzO(*6`9xr{$zfRAcW2&R?L!0B4nHwlSL2d@0jI|GIQj(*ld`lddB1B9D^Zm zzvl%otcmtf!Z8?T;{nPeSZQ!~)1$+m&ZFyMi((8gChou__CN9i5XW+a>I%x;`y) zq+ApBl$2v+jgT5c*BBwBMbUL#`&t4IwG&8DkLfvGg5Ac*f%m84Uy zQ92eZ-=IOs4k(MCuKNY;;|2#d8C{kvd&ol()^_yuJ+Av6TOj~SK5y^k+BpM@MR}Fs zOeySKZ{&43CapG;kQ_{lYsaDK5c3ydrDbG9X;E;|+knA~pg3yDV3sjYL32w4Vp46d zf{04HiX0nI$T86N6Eqz7lLiJ&`PB{@sx2vGxkRFH67)+V;fIa{8auEPu`*3Mmkht? zIzeCY7nSQPfGW1i>E@sdH9kdq<3MXX^j6qE(}>CVF!cF5TT$k$a^5z%wCa>*N$IP9|E97${fyk`DU)&Y6oqYxP>8+7ML_V1#=sHHv<%U9PoE{wyUfCu#W{ z#h{B?T&BY?Rv+TGRdRkc@assQq0#i)q7mSIRx2W|VAC(R z%D!K()xCPTCYrTYs}fYoqS!<-$*PB#rd8gD50<)F3f!5wSZC;ELt%69){%dV^|Xo; zB|DtILUO83WG!%iIG)Oa>6ZG!20jxyx1Dv*9ZJr2y^s5WyDY*re+?)6_0E=yw`L=U zTtcPnLKnu{Tke~b%w-L+un-KaR45eyEI~{S=z2)twNbF;t@m%ofW2TK?tpMtApA^k zy&nN}FMjKi%39`Wgbnf%|;daBo%6?7y5ca<2`#=loFQkw5HCUIe4OH{xK4 z{ODvh@jaMD>1UoWi!wnJkK!~X|6&0bPnenRIG;)}LDJ)_C4$VV{(NQI3R4W8Ufi~_ zwsYbon4HU!iKn7$d@xhOBw-t+HRZ4AZXpogX8#TX2#&h06fh$mpxU@7PZ+YdQA9Wh z^nV7TZI60BiWio0Mr^y_MwGGGig zUv{$8KVX(rdORNb4}Ni2;o{hi>ZtQ!t9$05AE%5!6h~XxCc!L;a=T+L9E@!eGkD5} z(cr4+_E)0>)+bo|7FdkNz8;zy9hw?F08^vn-p_|LUPSI6eCt^G%|H32#pmabee1>NZ;S$;f4?g0zn-RkmKbc9fekLj6%$X(PjYMv5Kxm&kc6ewWj~ueQ%L2L7$Ny5UGU>O6)T)Vl&a~@9O8wp4FA%gOk&k=3 zd)j!D)c2GgN0+yWRT4ejw#HcBOpWo#H{0F?C@9Nn?z$D@X4@+I?lB(eg|6~rwp-)T zwZ?81DPgqaOxpELBO2m+yK+!;5sI0CNGi7|qc_phL1>iKSge2y$6^I!I~FS-^RZX~ z8GFSFVDA+xQFde&3Yn5M>^e;tEY{)$$?!M`ctbr=q12*4Xv!vzqwqx0QlbDn7i7Nk z6_xLtHkMEh0X+=+P)qF5pE=Z0Yf7ZBMX+t7biiCt2dvS-ZA>%D05GqvoGcF_@~(R+ z%xTV+DBmkH;kvM{QWz?7%hGrfW}Q|NL3d;rAH}`?|FldTO4kIkS%UdpWL8B~)2-yF z@x25Tp&K~S2uCd>uce(m@hZV9N4|AFNH$YHwkJ!1gOQ2uEs5qn^JG~}%@$t}4@9%OevhCr_R(C`5P`y9Q?~E72l={NT>WLlRPF?+B5`&Ohnsn1u zXpOg^*>Er2)a|@{akSAvGBWqgPOl%Xb%vh%S{p^;t}nXd>f0AhefPD*BRJQUr1NV= zd3y@ZHW=zyT05!8%_72u{v(B}`O2Mzk)qV}5P(#+`tJmyQ<$%Y!ik82iDN+_Gz%sH^&BZf}olxa7oTJI4 zMze-0`Z_a{jtBZc6Wei+63*4cjjHi5zfM8pt}Mv+^#Jx^kR7Ion+9I#FcDrEM5w9W0bWb%F%nqMcR!p zkvr+$E+uoZP%28dw_g_&MQyLQ6h%d4<8k-t!h+FDnwxVs?4`oEwYqqD)7+ zDhrKCF=I?e{1hvQl~JvjJWYa`goZt#Ur%W0V_JVG>}_Q{<(i5Aj*)J}Rrh1&05Q@qIhace{z9DF z2Q&H|Q^il#S=(A`lL*6(@{$&WXqtqBROHHeKx+Oe%*&J@D{2iT!>FiI=)hy~RFVQW zrQ&y0b{Z3LB&sVzso+Uh@|Lz=J_@3Yjwdd8r0qw15~=OSzNVhBLRCAVG6z6zABh6l zEm8uhDU=IkN)>e}QylD|+iISsC#4w=8ADT5CV8QFHacUCxdo~=}dox`)fbrUQ(}e@zabHar_M5-7 zFfV&E4mc1Fttc@8L3Ch$%gGXSy(^{UAlgM{tD8 zu-MFTKAAi`=Wt?%DFcid8jT|7o|yGyB|Gc|i~IK7%by8v^U2S0vZ=<-I27$Y)aV%f)t~?U(AUcC#vq zFbpXpSdZUAOdLHH2SCz{GPC_Cu}ycA<5p0720p12&%l88JoMVaR6ju0CO4{DXXYNY z7~(Q@#{ym)$W{>X&TePt@v?D$abH;^iw_lzpvqBw7xJ-uBQNM+zg+CTmW=JoF8EI* zF!iV&r;N&0W)F>B! z2*|G)#>KBskYp`xgu%gW<)op?=I=98k*9d(Q|8f$jcBKQZsqg>+iSSZ2Ey>Jb`W8- zyXB60ogR|XbSM!p-Rz|sg09rsO`X%yH=lgZIz7bPP~KfV4mPoPf|kn;^OtNl%js3ay`GUz=4Wc^k{RLE4Bmn2w0T5~RfS$$SXjocN)8Ak z-t*`fB{XM8IhuzMs-x+RXZbjp9}c|RoiM+((bY&P*+C9-ffV%MoGS{iiEwcxzlsQU zMMMcIdaWv=(;aHHiOh{+Y#Z3+;dynv(so z|7zlgf#RXIc-PuuJ!xihGEwUi8I^UY zT7{Zaj3$o1Nd;&EoN|s%Dv0^uoKy`@J(4EVg-k`}iOElI&g=cKy4Cpb%=Z_*)*Lr2+3ob{Ny}r^dmZ)(XS|L8-7_jY@LS< zg{;Wtk_isjz*PFwWSWxgu2?!T3Eikc12WtwRfthupK&jG-B4s%vkkcC3=70`M8Y(3vp*eQ(X`rSZsnq*&V=V@=Hj>MUkMKnxeGZgO=Ty2!P3o4Bc72|{> zbE+B)m7@f%@SJWiREqb8O3OoalF~;Y$jl=7g4W&_i_}M%ql7!D`j?i}MHwj3```wg z5=aW6nNJMe^1{_OZZ5oW;oX!9$<~PFdcHKd(Ul?M8+u*DzmwG9K%^T*ESNsh-3)Se z-Wk>68=?n)4Bzd96f0)Ehx~d$2A7_+_m|&~UXO*uR*ry&YB{>V^?!mvGtM0^2pI>T;PbQI~ z)@9IJOv`(8`DZNYi1L`PxMQ~M8h4jY^G{8p6R|`Ctreo`t5lP!uSZGAslG~; zs`@I`r0VNQC`Ba#`O3rZk4njd9xn3g>(S_|p+G+PN~M~G`iH#*9p@#IEG7KoWk7)2 z@Qt@;2Qwf0Bt2k;NBG-!Mk*1?JoW@7@#hdk6RJ#=VHAoYF_76tb;Ioi3R&JqxaNU- z+Z%Me-jH0|-y^97FvWZBoiz%<@55_-AU689;nLm}D65RhEJbh#O)8n~YNN=_2 z4G)MPjzD4bsYfZfmh>T~Wf%RKQ94Cpphl_U_TPY$gr`WhS>n_1@OO#R+VZ-s)A%Q_|N>A zWv0?S?h~$>cd!j$n=rf~Ue-MZP_)U(=5#;=$erDKU zL{>L7V}AZ~U`pZMQw(_~`ed{h=A@$snv8q=AD6|44*$`kyti);WO1`aME3Kej=#RR zCj52qaRhk>q6NWI!PzECfVGH0!_>LiUO3#E41ZF> za}m+WsIkR587*~%PDbB0EP{0um`r86No9;tc;M3_B8(9^%;j(x0O0|cidZwAb_#Wl z;EC&AT3r4||55zfYrm5z|H`S?fA?R#{CnSV=U;x~`@Z+z{jDDr|Lf~N_J?D$I9Bj5 zn0M?ykF#m^pdZX3bGx=?(Tm~4%L$_n(jB_+2CifimLv)goz{|OBMJ^#O)M&cD#icB zq&b9wq+dys<_`+@{#;O#<|L}^on67%6vpJIkdX9^^nShoafDnhM&8OFz3y^;=z2v@DWm^OrM}D{O-eW*0{|jV*LjWR!kt$52 z6x}|@>5$O`_7XVO6q!KZ8bo_;=ZtNQo0-16`~MPSzs1KLINF(B3d;{ zqJa8pO)`1?IUaukm?px6jm#1Vz*D;-;Q;PaXQnLRiBBc!^hA_sy-h^nl{66{y2j&4 zV-CY`ZX#}UBaY_BL}Yo1o({FH*pm@0Y1l-hwADEgS*^eiq*>5Cs!gM*wx6oGdo=IZ zXJ#z(pc!Fk+(c;R7@IkU?$IJ=zvoiAxzN||%>?EEm`j)p-J>DQelwP4HuMv-F=oan zM#~*$imk|e=pMt=9LR%ACJvcp-ezPUd$>%ASbusCrbID4F3D-Lq<3U7Eo@EfyC%*W zO+;C!RK1E{Xu!m$4O^c^!E3_X|J>6nS} zN64xrV&IEuw=-N4^Oan!?)fDIpul*LqieI)t|K@_q3E|8)mq7`R%?y64?bG8hNzT^ zjdI}C+wl0TwQB`05I&FGbfvZ8N$QZfLXgIj(Q;#aaX-%$8jVW3(5N(mW-TbR;d5HA zAX!SWQf$G`6!}xULahXs(^j+Yc@+egM&JxES}qHq!W4`fi>cU%nPV6tm|FJf&n|q-DKdAFY*3USbwM%EmP(a_>Nqf~43L7=Fk< zQ$nVd@^3EpjwMOeh0aM++SKpX%*PE4jo+laLGsVWW~`GIRmO|A#hAwwkA|a&#{@=& z=@^WP^93$Do_j~ft9plv(A-8FjHR_L=N6YgmV0M~0$V-91xIu5EMB{oF~5)H z-nrUGN%X#dF89t`u!HS-o15@hyxc>y@}4ik$l&xNR3!~1dTE2kO;`&0oq%j`BO2zd zE@`BpIFB%=&*t8_-1Gae9Eas?M8d#7Ol+iJIJcR?M`K*9jF4Lly2&s^XAI8Ah>FFC zjpZD(C|&9I`Ws}4*$FqULj(^eO^T45F*uUa1T5$COzFwoJA|{`M`Wk-I4*`61NsoL z5(hfRx!zN`cb4F1yE1BpqYW9GIb&c?Q^f?-sd7!UcwKZoSZ!YGcekz!KVv|$#W>KZ zaXmakqy`swjKPwM?|pp)oo2=$$Y+>_;?$YO6X49-Fa*MkfuKKE`!SgFQLgoT?wyPM zf#|IEE{=L~lrQ&SP~Aof!HhxrI1!kH=DfnR(8Zg*Zl{gVSr;!}CgPjU?Fl ztW{SwJQ!iXF^@qYV}P=566}0C*TuSBT-fYT6;p=218Yr{I+qy}h1$(%L z9C#UnAjdfsrNcDjXnxMS?XCEO&gKxUI)9#Fc>dQs*sFI%cVRH_w!(}7$>$#jI?r=G z>@vXb-w89OC`%nsh0aG94{hJjVb=9Nm@zOpGZRqfF4x2gPQX4t>O;enF&J3ESNo|r z&JQycY<-`HKYyp)!943{OgYWHz6Ej4$7_Tg-I^)q8VqrsrXIyGV*r>gSNk@|dC{svBYDx==yW^a)Bt21 z8{~Y2>tF*gfUPC5Nqch7r`iSuTP79?6OJJ{Bc^jo(Yf3s#EdCMH&k5(aLnlhqa$DQ zeF#N@6}<6!t6|1K<>-vTo%gskJmmBYYof*Thyt;` zFj$otM8k{$$rj^4=PK6&@VaQ>fJXbS?wpV04Ur}nGswUs zw+X28om>+q1UjUtI;ND?L*JA;U$U@i*HYM~RAQTQ=ermiFK=4+1j(2}JV3Sfsn~gq zaq$58#Eq9nm@xo3!)%Z<;5t~H3!C(g^oEEfiZ`)=U_5Yauwl-Ra4m4V3~wcGK)i(+ zQ!dxK1#y0qYv9duUBKc3Zaq{ddawpVo*GhdoR^pi9^rU+mW%=8PbNu+1F?A3Fy}kCmgH6D6|&AR z2C8{Yz?}`QZFpViZOKbt#(*qd8R+!59u|b^#xm{<8B;8Gv&!6_0Bit za{sa*k!BJn%cVXb8KbL|Crer8EHGVqX8my3?%aI~VmoixAA}hLRL?8{b}n&Uv@Nfk zD?$p7!i<5)wG@LnpR{V}Q|TKcdFnS1St|x}UgcVN!pn%21o?`!2)xlfKGIH$QjJri^=dYA^Ho{0@}R=E~hy>M5_UFh-@B6c#y z$be<5;|R{{TpxSXH5FwUyg{%QW(-K~HF2QxmQ|0*LNEt0N5+6;y*SYMI@iNkFHr0U zh+D88mc6b1Xh>4ijKPp&or>f96jS;11S)c)L7YwODBX;~evy`bDn%RLxyIDd0ot;M z^v2|OzX8gXl>|FCxvqSbLHghigcnNf03;D=H_jL&dC$JuPe*fpnrUH1XwkD8r;LHf z84-gy1+InhL$?Aw3hH*OuV)5Fo*yP)Iainx*4;8B27$MT7z-IwEZ0#4aF#86d6u~4 zZC!3>OtHj|08YU8n0pZL<6yCjybahN!i)jQITQyvKG!3lSXC2wGBLUZI;dm}99%&!DPK1+4Ce=#0!~1SH&@;aGp0nIfMl8T zml+FtZ6tt*ABr;uN$$0i(44=*w6Io|aovN?QSBYL9T=EgD+#FcV_XxnT#7SS5CX}U zr!WJOvo#KMzQ*-1O3^}B+w@X@m@#lUN+}r5k23|_tdj7Xn*lbbj6spFqjV(aXP6GJ zn^rg+c=|wSfYG|Kz|K!vby>k__EQ6tb(3J{8(bIfH@Yy$)20;c8i;(q#bD0QaxHKx zUnX4$#c0Km$lU;Ci%GCHOt_^#A3xuR4h@m5u%K{K(4~(lXHJ7dNwnR~t~YEWo{lbk z*7FAbTCI{B^<>=P9C#Sr)xZxey5yq>0GYY&v{|4Cj>MQs^}}HdwmK`8V+%=(}X`}(G5qN z@}%cd-OUci!#nbY3mnkxnZ;LMo!psMU)4lE6hpH)n3t-59wJaY9d-SSE3lij7Q9@J3$@T>+;5%k)i zPfpDIn4`K+z0vKrysoPc&+gKBP4ryccL6?vqs@8zKaa@=TTvOil^h4HpE%IV94LOj z*UocOPisB$^s#-)#hG_@8L5EM7xuppiV9>VohM0BR`mA6H`7M!upIK z>66RLZ(nh{T|Y5HbuXM}H2n4kR@np`MFZ);C%{ii8bfceDmZT1^o?X$;F0uJk<^Ue z`I?<*hCPN0^HPTgySVFVr3pTJMSv@}-}*9MUCI6(>jrt+Xf*EAaa?<-AIUK%FUFC~ zs>QJdmudv?mtOyxqCKJBk}S9(j@QE>bzWCZSzXU!-4Va;8yz*|_@ESq^6!;$12*6= z_iqP5(5_Wm)q1PmDi(_f7TRbw3JuuNmztu*6X0nkhO;mt8ZL|5g7al%N}A>~DL6$9 zn~KB)GQ4Fy!IU7a9J-g8=_jH!pR-K(3~z6%HO-Skt}Z>%8g-KLx|aBBhNyvT_BMhw{&YKFv^cjb2c>VZT3)^918+k;9)=54^+W4w*$ZpiJDo&Ayg!(WF{hemvM+MDMIU3E8Sx5sbx2GC1k zDGVrRsct5k(Ak^Vy0GPv*_isXdh{^@c6w;f7w(l#?~PmNSHJ78LAgCf=?R5A<=y%e zFhVnm>%y!etI0WugSm)JByHMdz2q765pSS*IS!cpY%=d_z~caf=4`k;#`@DX94Rqr zE7wRCYft!tekflh*kdps#>jkBFP(R3zj~KOD)HWYY79ZsIE6!R2iw`zo342)SuH;g zu;HJM;<(FTz21Q;WsHeuY+UL{7Y~07>!UUnN%OkGRm)-wb*`V%lcTaw<30{03AW2b zXCG6g8mFL62`=rQbo|FvqTfS$Q`0T!bs7NH8o=Vstj=hrp41fRqN0hOT)_7Q`me^0 zYai2CYdF;8J0ziW1DFfo?sq%ok$&95roo3=mF^da5uCbpJ!_#y9ns8K&+7>b4;|u{ zkcIJrg@HIYAu)(kgnPT=x#8AEtKa4ADH?zix=x=#$KG05wytT?l^5Frdd`ZwkdxTGsE|3{Tr@v>hA~+Bi2`-X)gmtOnfq(N3Sj1U^UXC@5MWF z#|t-xoee=;oQZ>U0vc(Rix}B!ePB_(ByW8_uVCYKRGP@~a&V6O)Ofj%=h06q$DOLP zI=?#V+?|Jpj?Cy&uzH=lxlMJ|Q&1GlBP{kjeQH1mo~5OQ!We~vdEGI|P4wIR49z$B zMg25otE9_0GauEn3y|RBPS~Z(;+gpku2Slt z{Fj6ET&V~L*lNC5%&ql@xC!WCR*c-jjD->Pd?=5icm7RcreUzn}!(FZoQS2O9ml6qE|&9Ioi~-O&dK455$DpL4Vj2!wJA! z;wv|hQ<^&xZ+D#>Dqv(sEl;Sw8qTkV2t!t=pnKNi#R*{$&XdmrRuV+wB(I)dCZ~#M ze$4A(02q@^bu3mduUV&eTRKLZvgY2Nf^VF4gKXPH~=jdFB2r2`~yLcIHYEWUG?oq(h(8uwBC`N=q{y*F9d-xkM;ZBrIn zqFu9NO-3=BmxXc+T;?{{`LM)45BJ`~y*FilKiqrmx8331t9Es>k(yVpd!P2+?Zl7t z^3ofemTc>tm^bfge6LlTH~wd_xJ`fvDe*YJ0wTvuhY3ENk~ushfopGngOh-(0#HfC F{{PoaI5q$P diff --git a/dist-newstyle/cache/plan.json b/dist-newstyle/cache/plan.json deleted file mode 100644 index 46550c61d3..0000000000 --- a/dist-newstyle/cache/plan.json +++ /dev/null @@ -1 +0,0 @@ -{"cabal-version":"3.14.2.0","cabal-lib-version":"3.14.2.0","compiler-id":"ghc-9.12.2","os":"linux","arch":"aarch64","install-plan":[{"type":"pre-existing","id":"Cabal-3.14.1.0-e488","pkg-name":"Cabal","pkg-version":"3.14.1.0","depends":["Cabal-syntax-3.14.1.0-782e","array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","mtl-2.3.1-8dcd","parsec-3.1.18.0-eaa5","pretty-1.1.3.6-a64e","process-1.6.25.0-cc37","time-1.14-17e0","transformers-0.6.1.2-c8d5","unix-2.8.6.0-7c77"]},{"type":"pre-existing","id":"Cabal-syntax-3.14.1.0-782e","pkg-name":"Cabal-syntax","pkg-version":"3.14.1.0","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","mtl-2.3.1-8dcd","parsec-3.1.18.0-eaa5","pretty-1.1.3.6-a64e","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5"]},{"type":"configured","id":"Glob-0.10.2-ea89db4791357e6c50481cb552d3158e97172345f38f12cc0beb83193b0407a7","pkg-name":"Glob","pkg-version":"0.10.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd2ddbecae8f84e8f4cacb5b856901a19c25ceaa11f2525d3ee88d034acb0081","pkg-src-sha256":"6af672ac8427d35cbd42d64142dc288feab266f0be92dae3c696e8860d8173c0","depends":["base-4.21.0.0-2257","containers-0.7-f244","directory-1.3.9.0-6367","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","filepath-1.5.4.0-c1c3","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","pkg-name":"HUnit","pkg-version":"1.6.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a79174e8af616117ad39464cac9de205ca923da6582825e97c10786fda933a4","pkg-src-sha256":"b0b7538871ffc058486fc00740886d2f3172f8fa6869936bfe83a5e10bd744ab","depends":["base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","pkg-name":"OneTuple","pkg-version":"0.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd7266f983da2970e5662168add810dabadabb3a4bb9b137181eafc0ac7ea4d4","pkg-src-sha256":"174da8a0f4004d17b08182cb25b0e045fce5de1fdeae84e9d75fdea2867aab55","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Only-0.1-8d43c6c20012d33bb62db114853befd149d2df3e331b87965b6eda9750affe0d","pkg-name":"Only","pkg-version":"0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c6033d181e0f802e9e8543f683fa9c50aeb01cfdf6c83cd5bb72fb47aa863b07","pkg-src-sha256":"ab7aa193e8c257d3bda6b0b3c1cbcf74cdaa85ab08cb20c2dd62ba248c1ab265","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","pkg-name":"QuickCheck","pkg-version":"2.16.0.0","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f4210647167f873196b01050ac074a44821b6687e26f792ad3474b6388c5f8b7","pkg-src-sha256":"0b563fa6ea11653d76d57e96625f4a476e02b9fdaeba9c05d2ccc10d8da802c0","depends":["base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","pkg-name":"StateVar","pkg-version":"1.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3c022c00485fe165e3080d5da6b3ca9c9b02f62c5deebc584d1b3d1309ce673e","pkg-src-sha256":"5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825","depends":["base-4.21.0.0-2257","stm-2.5.3.1-c578","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"adjunctions-4.4.3-0232a035c7dc59f34f047cc05fee3fbd824f1ce43e7205e02ab69f9f467d123a","pkg-name":"adjunctions","pkg-version":"4.4.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"766e116f1c348b6518b96291961a7768e98fc467cfd29e51c230177eb997e676","pkg-src-sha256":"8beb121cee2bf913dac3188ed1e0e05cf1a0d0f12d4cb4a27c0da58450eb189a","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","pkg-name":"aeson","pkg-version":"2.2.3.0","flags":{"ordered-keymap":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7d48c2395ef168d2c2070fdb02c7998384be27d31a03bb35d1740af4a19a857b","pkg-src-sha256":"daa25cf428256ad05d21f2bfa44077c1b14d6c784b7930a202ee901f11cc6baa","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","character-ps-0.1-9500e493c7b470cbd752968889647a1c1ab958181b7e879d1114b1887e9331f0","containers-0.7-f244","data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","deepseq-1.5.1.0-8867","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","exceptions-0.10.9-1a86","generically-0.1.1-2547f373ebdac0e2fab3ab10db427d8ea8515724237ac8625ee8d5c01fd71e1d","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","network-uri-2.6.4.2-71f3ddac32414829743f6763bd076529fdd16d0a0750db7212d67caed65bda86","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","semialign-1.3.1-77d5698df52d8ce03ff13d57f75fab385202a6e06d02b6ac179b21710d7e9aac","strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","text-2.1.2-3aff","text-iso8601-0.1.1-d9c15410e246a269b2d8fbd5e93292ad79f9cb515efb67ce7e8cbe63adb5cc53","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","pkg-name":"ansi-terminal","pkg-version":"1.1.2","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8e669f090aa3b9a62ef78f687dda12a19231ee163d2084522464036980a322ea","pkg-src-sha256":"a8d04a3e0451e22a6499a92311f0df1196dc65b687df7d10e3f30d92420156b0","depends":["ansi-terminal-types-1.1-45ed522ced82418f637c53b7754e419b62ba4e7b4d276206e9735320fa1b69ea","base-4.21.0.0-2257","colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-types-1.1-45ed522ced82418f637c53b7754e419b62ba4e7b4d276206e9735320fa1b69ea","pkg-name":"ansi-terminal-types","pkg-version":"1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"135f6a381afa19d53d0a3fe40b6dd47e6666c538b09e4300fbb1438759df3248","pkg-src-sha256":"f2e5333eb78da5f4dd330fca0c81a59276cc150c625647cd20f57b7f297a5d25","depends":["base-4.21.0.0-2257","colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"appar-0.1.8-02b0baa029dc0d70860f700f6e3b71f64df5d8262a68877709c6815e9f755703","pkg-name":"appar","pkg-version":"0.1.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a5d529bacbb74d566e4c5f9479af0637eac5957705f6db4d2670517489795de8","pkg-src-sha256":"c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[]}}},{"type":"pre-existing","id":"array-0.5.8.0-8939","pkg-name":"array","pkg-version":"0.5.8.0","depends":["base-4.21.0.0-2257"]},{"type":"configured","id":"assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","pkg-name":"assoc","pkg-version":"1.1.1","flags":{"tagged":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0ab39b4d1feb4caca95ac6e314f48782b27a86a6b8d1f5e8dc4be9fbed11185f","pkg-src-sha256":"231149b7fef09f5dd95af51228615e3b296dbd0faadeca053e0644a4b13b0ff6","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"async-2.2.5-c572a47cf957798aad85828e666dfc22e97ddcfb87cf19f3cfbfddba4bc71c1d","pkg-name":"async","pkg-version":"2.2.5","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b","pkg-src-sha256":"1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7","depends":["base-4.21.0.0-2257","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","stm-2.5.3.1-c578"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","pkg-name":"attoparsec","pkg-version":"0.14.4","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35129d0ab1741f000f1a7d2fc839544919ee6fbb8f2d6e7f0a629c41f91035f3","pkg-src-sha256":"3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c","depends":["array-0.5.8.0-8939","attoparsec-0.14.4-l-attoparsec-internal-aa3b2387b13df3f3beb7059d76589f4f94dfe5511f4c02b64d73018e0bfbc704","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"attoparsec-0.14.4-l-attoparsec-internal-aa3b2387b13df3f3beb7059d76589f4f94dfe5511f4c02b64d73018e0bfbc704","pkg-name":"attoparsec","pkg-version":"0.14.4","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35129d0ab1741f000f1a7d2fc839544919ee6fbb8f2d6e7f0a629c41f91035f3","pkg-src-sha256":"3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib:attoparsec-internal"},{"type":"pre-existing","id":"base-4.21.0.0-2257","pkg-name":"base","pkg-version":"4.21.0.0","depends":["ghc-internal-9.1202.0-2045","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","pkg-name":"base-compat","pkg-version":"0.14.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d01078dff437dd547942a6f12389f1cc874328c1d61c0b795b9a6b822f133c96","pkg-src-sha256":"74e655541e645e8fc7aade1e6a1b6973561be0bca9369bc1623aa345019a35e9","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","unix-2.8.6.0-7c77"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","pkg-name":"base-compat-batteries","pkg-version":"0.14.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"da5b0de54d5eaa630890b63fae694243b3c2a624648bab1878a7e4b0114ed38f","pkg-src-sha256":"3d2bf42f04cd02c8f7ed346454e29e188e1c7865d075c4277ea25197e53828e1","depends":["base-4.21.0.0-2257","base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","pkg-name":"base-orphans","pkg-version":"0.9.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c95cd3490ef99998a496de26afe8879a1d7780fa181a4479a956c690d74f75f1","pkg-src-sha256":"17a35079c8719014560c028d9805ec1301b900972adf212e00af23fe3ebfabd8","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","pkg-name":"bifunctors","pkg-version":"5.6.2","flags":{"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"115a621c4eaaabb07834f9e4dd3371e21f39d034305062f4bd5cd72c2f8880d2","pkg-src-sha256":"1086a9285061eed0c2c5d3cb65aa223defd52fca6d0515bb69ddf2dbc3d9697a","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.3-bcd2","pkg-name":"binary","pkg-version":"0.8.9.3","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244"]},{"type":"configured","id":"binary-orphans-1.0.5-ad4a5374a69f5c657272e163dcf897c3231fac256e07496e701fe7896c7cb36a","pkg-name":"binary-orphans","pkg-version":"1.0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1217df567aae672d09979480c362d27559d226081b9b9bc4107d4af008da1f5f","pkg-src-sha256":"39fbae9e8c2a5193c07afeea34173e5022f82885d6cbb32062b5f1645c44408d","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"binary-parser-0.5.7.7-4a66f2ac489fe1ddc738e8a06199319f65019d3de3dd76f80ba80568510691de","pkg-name":"binary-parser","pkg-version":"0.5.7.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"167d6c5161f14b50b3e68fe529577148d196378aa010440a17af29fd7653ace4","pkg-src-sha256":"59d3007f0cc5db875de9468bcd05850a9ce893a229cfe50c4a2f4383ca72d27b","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","mtl-2.3.1-8dcd","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bitvec-1.1.5.0-8eebf4a69411301b81a7ebf24927d7b97a6e7f3c39cac637bb1f59575cd3d2a1","pkg-name":"bitvec","pkg-version":"1.1.5.0","flags":{"simd":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"434be6dc60e22858a52869c58038c35353f1a778b9679ebc06a2165bcc7f88b3","pkg-src-sha256":"83d27cee5be1d5342ddbf39999d0c8ea54cb433d0891eea5471fbfaa29f8dec5","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-bignum-1.3-775a","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"byteorder-1.0.4-9e649951bca62f92f7670a4972b9b8dbcab1ab62ae94819d9569073d4b734df9","pkg-name":"byteorder","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a952817dcbe20af0346fb55a28c13e95e2ddbf3e99f9b4fffdc063f150f13b20","pkg-src-sha256":"bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919","components":{"lib":{"depends":["base-4.21.0.0-2257"],"exe-depends":[]}}},{"type":"pre-existing","id":"bytestring-0.12.2.0-e6fd","pkg-name":"bytestring","pkg-version":"0.12.2.0","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","pkg-name":"bytestring-strict-builder","pkg-version":"0.4.5.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"98acf30443428047f94ef312376fa6952e7239efc81f7f37c868678b41a9321c","pkg-src-sha256":"3b9ae00a210638d7d3972247f7106e51735327081cda17f4d0c1283b1ca2dd0b","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","pkg-name":"call-stack","pkg-version":"0.4.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ac44d2c00931dc20b01750da8c92ec443eb63a7231e8550188cb2ac2385f7feb","pkg-src-sha256":"430bcf8a3404f7e55319573c0b807b1356946f0c8f289bb3d9afb279c636b87b","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"case-insensitive-1.2.1.0-e7a044c5f8bd9f6ecaeb790fdf08042a8dda0407af41c14bc8f42e8c8582e76c","pkg-name":"case-insensitive","pkg-version":"1.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9dfd3171fc7698cf8d931727d3af3a7b389135b583e46b5adac1f9d2026fff61","pkg-src-sha256":"296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cassava-0.5.4.0-547fe2a7f81de4ab8d0139fe4a2a91417a4a20a27c555830f966b79a6779a27c","pkg-name":"cassava","pkg-version":"0.5.4.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7d1cc4bcceca83f1220db147ccbd3a5e58ed1cb8513c26ec02fbadcb058cf5f0","pkg-src-sha256":"d9dea5652b7bd2175161c00acb5ca107e8b02662b88517e943e06933d6aeab6d","depends":["Only-0.1-8d43c6c20012d33bb62db114853befd149d2df3e331b87965b6eda9750affe0d","array-0.5.8.0-8939","attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"character-ps-0.1-9500e493c7b470cbd752968889647a1c1ab958181b7e879d1114b1887e9331f0","pkg-name":"character-ps","pkg-version":"0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b38ed1c07ae49e7461e44ca1d00c9ca24d1dcb008424ccd919916f92fd48d9fe","pkg-src-sha256":"22de71fde38b236d3e9168a832b5e1e75d1fb4f4028667bdf747b3b4c8c1529c","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"code-page-0.2.1-349260fc61af4c8990fe648f65291d3d79c683b9fd1a6722da7fca63041e3b8f","pkg-name":"code-page","pkg-version":"0.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fe596b0f421abd2894fdb7049b3d76230eb1de6e04e9f635e2695dd55ded856e","pkg-src-sha256":"b2f90e19c61ed8a6ff7295f7f123d4a9913c790d4cf2c6029bc299293fdb2aaa","depends":["base-4.21.0.0-2257"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"],"component-name":"lib"},{"type":"configured","id":"colour-2.3.6-9385169e3eb34fa80ce43c3c362c683f9bf48cfe4e510d9b21231e433e6aa98a","pkg-name":"colour","pkg-version":"2.3.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ebdcbf15023958838a527e381ab3c3b1e99ed12d1b25efeb7feaa4ad8c37664a","pkg-src-sha256":"2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","pkg-name":"comonad","pkg-version":"5.0.9","flags":{"containers":true,"distributive":true,"indexed-traversable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"75aded79bf583c908e4e4687c0ae067f256e2507536b75f58ffba7748767c353","pkg-src-sha256":"69fb0eb49a80055a9b76d31d0a5648777c4050ac8dbf56a9344b862ed878a789","depends":["base-4.21.0.0-2257","containers-0.7-f244","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.7-f244","pkg-name":"containers","pkg-version":"0.7","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","pkg-name":"contravariant","pkg-version":"1.5.5","flags":{"semigroups":true,"statevar":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"470ed0e040e879e2da4af1b2c8f94e199f6135852a8107858d5ae0a95365835f","pkg-src-sha256":"062fd66580d7aad0b5ba93e644ffa7feee69276ef50f20d4ed9f1deb7642dffa","depends":["StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"contravariant-extras-0.3.5.4-1c63134b79200f93c74249179665476ae914afe3f78944bdc141d07a93b885e3","pkg-name":"contravariant-extras","pkg-version":"0.3.5.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8c6d1c20c7944441a6337ebce2fd2901ea8fb6246bb2df9332303e89121fb7c3","pkg-src-sha256":"2f3a16d38cb6778704db7f142e54be169db4362e033b2d568c172d0c6e64298e","depends":["base-4.21.0.0-2257","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","template-haskell-2.23.0.0-8814","template-haskell-compat-v0208-0.1.9.5-52802155b035e1dae7165ba040f1dbedc25610fdd0620a27d81164e921a02ba2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","pkg-name":"criterion","pkg-version":"1.6.4.0","flags":{"embed-data-files":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ffef33fe1fe8b4511054102e6f8ca892c94be4884464aa2ed76767bcbf8c9f73","pkg-src-sha256":"062bf47a43278dfe8725391b5e550905f185801c79ea772a9cdaa672b2ea2f51","depends":["Glob-0.10.2-ea89db4791357e6c50481cb552d3158e97172345f38f12cc0beb83193b0407a7","aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","binary-0.8.9.3-bcd2","binary-orphans-1.0.5-ad4a5374a69f5c657272e163dcf897c3231fac256e07496e701fe7896c7cb36a","bytestring-0.12.2.0-e6fd","cassava-0.5.4.0-547fe2a7f81de4ab8d0139fe4a2a91417a4a20a27c555830f966b79a6779a27c","code-page-0.2.1-349260fc61af4c8990fe648f65291d3d79c683b9fd1a6722da7fca63041e3b8f","containers-0.7-f244","criterion-measurement-0.2.3.0-10cb8504dcf15b9990e1e58feb19387ffc16a5c7ae2ba1bbdfed2d6aec3860b7","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","exceptions-0.10.9-1a86","filepath-1.5.4.0-c1c3","js-chart-2.9.4.1-47775fc2722951431e2f51fd884a610c7a63daf6bab1577aedc4eb45e5853abe","microstache-1.0.3-67bc1d5a8eb165e954bf69c24601841a11a39a4d117cac7a0c753cdeec5a45f4","mtl-2.3.1-8dcd","mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","parsec-3.1.18.0-eaa5","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","statistics-0.16.3.0-085ed5c05d60a69cef5d842b5c943f4d9974ac0aeadad8b897ff978c5fd78092","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"criterion-1.6.4.0-e-criterion-report-69efa1c1c8d6dc0479fdd2da953554123af13ce8a09b7b2e26aebcbf101c0c02","pkg-name":"criterion","pkg-version":"1.6.4.0","flags":{"embed-data-files":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ffef33fe1fe8b4511054102e6f8ca892c94be4884464aa2ed76767bcbf8c9f73","pkg-src-sha256":"062bf47a43278dfe8725391b5e550905f185801c79ea772a9cdaa672b2ea2f51","depends":["base-4.21.0.0-2257","base-compat-batteries-0.14.1-481fda06de33035653d116c74dbcf7db3fcf2919a7837ab0b69703dcb89b6d08","criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3"],"exe-depends":[],"component-name":"exe:criterion-report","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/criterion-1.6.4.0-e-criterion-report-69efa1c1c8d6dc0479fdd2da953554123af13ce8a09b7b2e26aebcbf101c0c02/bin/criterion-report"},{"type":"configured","id":"criterion-measurement-0.2.3.0-10cb8504dcf15b9990e1e58feb19387ffc16a5c7ae2ba1bbdfed2d6aec3860b7","pkg-name":"criterion-measurement","pkg-version":"0.2.3.0","flags":{"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5d337a2d833839254636731cefa456c57f2c5f6d7ee0ff440459149ad1f9cb7c","pkg-src-sha256":"cc75dca35e8473d6e0c7419fd5a577c2cbb202b3ae0d8af237756c2aeb7cdfe2","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","base-compat-0.14.1-f426cab3086a5ea3bd8b9f509f7d4f93553f88a36ffdd27f97d503573eb1140b","binary-0.8.9.3-bcd2","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptohash-md5-0.11.101.0-6ef6b02f258f6f7020b2f5ff2a766450202d89f9af79fe0569cd2df472fe3243","pkg-name":"cryptohash-md5","pkg-version":"0.11.101.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2e42586d73bdb149bde829e37b6546d84e60d7fb49c93320633b71c25f4dee54","pkg-src-sha256":"3b08db0ae39df2b44e83053ad30d7546a4c6200a852c22a240a7e03ae1080f05","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptohash-sha1-0.11.101.0-342ec414baa3297102a37f85be3eb10c1a9a2de6a85d4960185dfc29075f9bb8","pkg-name":"cryptohash-sha1","pkg-version":"0.11.101.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2bdf29dbd896bca86bf198c882fa8df1cb31843b71f2907e059b7c10bce0adb3","pkg-src-sha256":"a4042c97ad02eb68e766577ca35c01970c33e96cfd74ccb4dd403e3476a23241","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-default-0.8.0.1-a44e3ad8fa565cefafc9fdd0bdf740d4c790fa80479578dbcc8fe6d251e0f7a5","pkg-name":"data-default","pkg-version":"0.8.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"536ff91641a39b8ad302eebceff767d86ec6b543b44b1db9104650a2b1bc63bd","pkg-src-sha256":"ce085de8ec2196f0c1d30af0ad8a517d5737c9edfd4ebfbb49e8687dfc40b6ca","depends":["base-4.21.0.0-2257","containers-0.7-f244"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","pkg-name":"data-default-class","pkg-version":"0.2.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"788dc5c0be3981ca83ad11206e300a77ae8a1c8b9bc4f9630f563d37f540ccbd","pkg-src-sha256":"0ae530c4fb0bd6c8a8ba399429ccd9c75f9c7696049117178f4ceeb2bd08d5b4","depends":["data-default-0.8.0.1-a44e3ad8fa565cefafc9fdd0bdf740d4c790fa80479578dbcc8fe6d251e0f7a5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","pkg-name":"data-fix","pkg-version":"0.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ee78be6168ca0878d670fede957195d3debf4a37a806d13d72182b274901261b","pkg-src-sha256":"8df052d18c047ab9e9200536a8799b5af3997ebecbbb091a7384b6be8416ab37","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.5.1.0-8867","pkg-name":"deepseq","pkg-version":"1.5.1.0","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"dense-linear-algebra-0.1.0.0-2ce7029718edb63fcc379f634a2dee741609ed83e118098f5ed83ddb7205faeb","pkg-name":"dense-linear-algebra","pkg-version":"0.1.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"918e5fa7e367a58446dcd2b2288a7d84113b0820b5b5e1cef5bd1bdc601b4368","pkg-src-sha256":"f7777a7931b40332ebbc716f64abb63697cbab0128e5c1228d47760c5597f2d4","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"directory-1.3.9.0-6367","pkg-name":"directory","pkg-version":"1.3.9.0","depends":["base-4.21.0.0-2257","file-io-0.1.5-0ca6","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","time-1.14-17e0","unix-2.8.6.0-7c77"]},{"type":"configured","id":"distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","pkg-name":"distributive","pkg-version":"0.6.2.1","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0f99f5541cca04acf89b64432b03422b6408e830a8dff30e6c4334ef1a48680c","pkg-src-sha256":"d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","pkg-name":"dlist","pkg-version":"1.0","flags":{"werror":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"854727594c5a816ab3d10f15b1bc4fedaf9e3f7d1ef517a2bb9011f29ba261d2","pkg-src-sha256":"173d637328bb173fcc365f30d29ff4a94292a1e0e5558aeb3dfc11de81510115","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"either-5.0.3-b26964fd7f3d0a4b0751d250d1db8516051a3d9b685db4b9f1efd694bde17443","pkg-name":"either","pkg-version":"5.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"de3daf61db662a48c10420dee21e70966c8ce590263c563c70d57ef5e7cc03e1","pkg-src-sha256":"6d66691e84955a90a2d169f71cf51c83d76c141635cb8da2a60ddffca4804801","depends":["base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"entropy-0.4.1.11-d3058573191edec3193a223459f31bf318011102d1c9c7265a2a8260f00ffc62","pkg-name":"entropy","pkg-version":"0.4.1.11","flags":{"donotgetentropy":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a40e0ff033e6b392d3d4aa29c4d2b89b4e915f69f10e3b240f681a18279dc64","pkg-src-sha256":"f5dd5a01278f8318d9793ed6071b742f13ce36c7456328baae4acc818e2d92ea","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","unix-2.8.6.0-7c77"],"exe-depends":[]},"setup":{"depends":["Cabal-3.14.1.0-e488","base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","process-1.6.25.0-cc37"],"exe-depends":[]}}},{"type":"pre-existing","id":"exceptions-0.10.9-1a86","pkg-name":"exceptions","pkg-version":"0.10.9","depends":["base-4.21.0.0-2257","mtl-2.3.1-8dcd","stm-2.5.3.1-c578","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"]},{"type":"pre-existing","id":"file-io-0.1.5-0ca6","pkg-name":"file-io","pkg-version":"0.1.5","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","unix-2.8.6.0-7c77"]},{"type":"pre-existing","id":"filepath-1.5.4.0-c1c3","pkg-name":"filepath","pkg-version":"1.5.4.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","exceptions-0.10.9-1a86","os-string-2.0.7-2bc1","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","pkg-name":"free","pkg-version":"5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7f3992a66987bbba5a6546420f6129fb9b66b80cdd005d34ec77a1e1c8ed8340","pkg-src-sha256":"72867f7c89173263765736e8d395e94291f1aaea626ecb1d673d72ce90b94f89","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","exceptions-0.10.9-1a86","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5","transformers-base-0.4.6-7a07e7f280ba7e8bbdb9a29dafa466fbee968bbcac629da131993691422c6440"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"generically-0.1.1-2547f373ebdac0e2fab3ab10db427d8ea8515724237ac8625ee8d5c01fd71e1d","pkg-name":"generically","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3f64278f5c582dd7c6963967b1290079bcd03b8348989f909ac9bd972ddc452e","pkg-src-sha256":"04c5a436bec4b041f71a733f56a1bd7f435f63dde8d3eb5c1f48d55b4dbc43cf","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3-775a","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.13.0-b38a"]},{"type":"pre-existing","id":"ghc-boot-th-9.12.2-573d","pkg-name":"ghc-boot-th","pkg-version":"9.12.2","depends":["base-4.21.0.0-2257","ghc-internal-9.1202.0-2045","ghc-prim-0.13.0-b38a","pretty-1.1.3.6-a64e"]},{"type":"pre-existing","id":"ghc-internal-9.1202.0-2045","pkg-name":"ghc-internal","pkg-version":"9.1202.0","depends":["ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a","rts-1.0.2"]},{"type":"pre-existing","id":"ghc-prim-0.13.0-b38a","pkg-name":"ghc-prim","pkg-version":"0.13.0","depends":["rts-1.0.2"]},{"type":"configured","id":"groups-0.5.3-ba0008e04cf3959eab1111ad5fc120b975e3f48273a0575b3a1d94ab9cde8c4f","pkg-name":"groups","pkg-version":"0.5.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b536d995c65281f5b891a694213fe4abce2fcee71ebda08bb9ec9e334cdcc741","pkg-src-sha256":"ce1e52a8be7effbd1f995eadf0ed34fa45c412656d372db8a38f9c955e43ac38","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","pkg-name":"hashable","pkg-version":"1.5.0.0","flags":{"arch-native":false,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef","pkg-src-sha256":"e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","filepath-1.5.4.0-c1c3","ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a","os-string-2.0.7-2bc1","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711","pkg-name":"hashtables","pkg-version":"1.4.2","flags":{"bounds-checking":false,"debug":false,"detailed-profiling":false,"portable":false,"sse42":false,"unsafe-tricks":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4940cab94a15d469845ccf5225f9cb3d354c15e8127ebb58425c8b681f7721d9","pkg-src-sha256":"ca0e299fee6c0c918f45ce0907afbff1c3891998bb792d1717e4d5f12350ef0d","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"haskell-lexer-1.2.1-70545e0737c01a894c215b16addeaedf6f26b2ca4f6a1ab3a6a4915427552e89","pkg-name":"haskell-lexer","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"393300e223f7b84c334d87780481bcede98392aa8bd82bc882d76b54b7d1c699","pkg-src-sha256":"9d76e1528106b1b32e6e465264e39381ca4b450b72a4b5331e7e5127640a1a41","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hasql-1.9.1.2-inplace","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build-info.json","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711","iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","mtl-2.3.1-8dcd","postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e","postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4","time-1.14-17e0","transformers-0.6.1.2-c8d5","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hasql-1.9.1.2-inplace-benchmarks","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks/build-info.json","depends":["criterion-1.6.4.0-a7bba1fb85c3e50f1245ae4a960a7b6d42241d54041bd61e9ce440ca031ef74b","hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"bench:benchmarks","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/b/benchmarks/build/benchmarks/benchmarks"},{"type":"configured","id":"hasql-1.9.1.2-inplace-hspec","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec/build-info.json","depends":["hasql-1.9.1.2-inplace-testing-kit","hspec-2.11.12-f2b47053dc574ad992919ebea9064b64551fed477c23d01859818db65a3bd372","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":["hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069"],"component-name":"test:hspec","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/hspec/build/hspec/hspec"},{"type":"configured","id":"hasql-1.9.1.2-inplace-profiling","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling/build-info.json","depends":["hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"test:profiling","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/profiling/build/profiling/profiling"},{"type":"configured","id":"hasql-1.9.1.2-inplace-tasty","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty/build-info.json","depends":["contravariant-extras-0.3.5.4-1c63134b79200f93c74249179665476ae914afe3f78944bdc141d07a93b885e3","hasql-1.9.1.2-inplace","hasql-1.9.1.2-inplace-testing-kit","quickcheck-instances-0.3.33-2034df2a61baaa8c3f393fb97bad47587f538b28853993d4fce558e2d5798068","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","tasty-hunit-0.10.2-5186b61e6bd8a2f8794e90bd53aaa761247ab1d99357ac0e261b95a0a7aea3c9","tasty-quickcheck-0.11.1-1d1979544859d8373b0d7b2e9925aae0869f9059ed12b72352541da8da8bca2d"],"exe-depends":[],"component-name":"test:tasty","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/tasty/build/tasty/tasty"},{"type":"configured","id":"hasql-1.9.1.2-inplace-testing-kit","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build-info.json","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","hasql-1.9.1.2-inplace","transformers-0.6.1.2-c8d5","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906"],"exe-depends":[],"component-name":"lib:testing-kit"},{"type":"configured","id":"hasql-1.9.1.2-inplace-threads-test","pkg-name":"hasql","pkg-version":"1.9.1.2","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/deepak/code/haskell/hasql/."},"dist-dir":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test","build-info":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test/build-info.json","depends":["hasql-1.9.1.2-inplace","rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7"],"exe-depends":[],"component-name":"test:threads-test","bin-file":"/home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/t/threads-test/build/threads-test/threads-test"},{"type":"configured","id":"hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25","pkg-name":"hsc2hs","pkg-version":"0.68.10","flags":{"in-ghc-tree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"725ef6da03d3d6e332db4de0a35bee45d72e4d31decc5ec7f153e6837af5f03e","pkg-src-sha256":"6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76","depends":["base-4.21.0.0-2257","containers-0.7-f244","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","process-1.6.25.0-cc37"],"exe-depends":[],"component-name":"exe:hsc2hs","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25/bin/hsc2hs"},{"type":"configured","id":"hspec-2.11.12-f2b47053dc574ad992919ebea9064b64551fed477c23d01859818db65a3bd372","pkg-name":"hspec","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d16b4a90470b415d56a1b561a1735566b2d8529bdbc5b26a965785768cd26ca1","pkg-src-sha256":"373a16d16f567b753f1bdb103d2515e1cf8d23768c63869d66f0b2f9809daffd","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","hspec-core-2.11.12-22d1595ab42c94dffa904863d898d8aa0405ffb4b3ab6c237eb207fba5cf9d8f","hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3","hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-core-2.11.12-22d1595ab42c94dffa904863d898d8aa0405ffb4b3ab6c237eb207fba5cf9d8f","pkg-name":"hspec-core","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9862660946d84cd40142ef48b42bcc6f6769cc44ca554f7eec6f3dc695b5097b","pkg-src-sha256":"cc5125618268d1f99e4169349c4f38bf48d3ad0df6c4b56396e59c923800040c","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","array-0.5.8.0-8939","base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","haskell-lexer-1.2.1-70545e0737c01a894c215b16addeaedf6f26b2ca4f6a1ab3a6a4915427552e89","hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825","process-1.6.25.0-cc37","quickcheck-io-0.2.0-f6e0d90e2f353ab1d727127bfc6e5b2b804dc18ed3f0f957a6d6417fda72b976","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","stm-2.5.3.1-c578","tf-random-0.5-6a38197ac754fec973cf4b2dda2d81b40a4abfcbf9fab2c4c29b9f63dfa2875e","time-1.14-17e0","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3","pkg-name":"hspec-discover","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb6b6048b6f0fa539176f4b8012241e4c518c9803eb7ef58097c42a68b15b1c3","pkg-src-sha256":"97faa38ee295ca0c958b8c30a6a264d79e51857d724cf11304c0b942bc7e9b10","depends":["base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069","pkg-name":"hspec-discover","pkg-version":"2.11.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb6b6048b6f0fa539176f4b8012241e4c518c9803eb7ef58097c42a68b15b1c3","pkg-src-sha256":"97faa38ee295ca0c958b8c30a6a264d79e51857d724cf11304c0b942bc7e9b10","depends":["base-4.21.0.0-2257","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","hspec-discover-2.11.12-36ff1022bd60ac7a5f8239e156c4f6207728dd5c4435e03e0c88f21bd62dbdf3"],"exe-depends":[],"component-name":"exe:hspec-discover","bin-file":"/home/deepak/.local/state/cabal/store/ghc-9.12.2-632a/hspec-discover-2.11.12-e-hspec-discover-2e7f37410455b0f4e85fe589ea2f582fc75f1bb14066a5a0ca643e4b38beb069/bin/hspec-discover"},{"type":"configured","id":"hspec-expectations-0.8.4-bda74b3afcc1aad442fadffb0277f5159d9048f637a8a483041fcb671a680825","pkg-name":"hspec-expectations","pkg-version":"0.8.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4237f094a7931202ff57ac6475542b0b314b50a7024550e2b6eb87cfb0d4ff93","pkg-src-sha256":"7b8dde7e230ecfda90c95fd80478b244a45e68602fb3dd4a76f4710619be21ff","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","pkg-name":"indexed-traversable","pkg-version":"0.1.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"42d9e84a65a0c17c248233cab98ada872ff6140dfa24d109d6eb285204d07e7d","pkg-src-sha256":"58be09afdf3ad5a25c2aa0d2a7df80d602df09f4e76d3abf2b7cdb0e75d03b22","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","containers-0.7-f244","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","pkg-name":"indexed-traversable-instances","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"68df0fc8070ae2c15f9e6febf1449fee364c131a6d1e93cac45e7895ba86dd89","pkg-src-sha256":"3c2bb62fba141d6696177070d63b88bc56b194bc60f6b73d2263b0244e2fc7c1","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","base-4.21.0.0-2257","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","pkg-name":"integer-conversion","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"941d4ae16e2124cbff5defe2abedb49efc8e03a594f817035bf231a317e6c1c9","pkg-src-sha256":"c18164a048073310f6353ebc64c9037b52a4b8299963ce05e027bcf60e22155a","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","pkg-name":"integer-logarithms","pkg-version":"1.0.4","flags":{"check-bounds":false,"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"caa8eaf9e69fe19f0d356b3f3185df628131407413c182b314ac5dfe2217e4d1","pkg-src-sha256":"6a93c76c2518cbe2d72ab17da6ae46d8cae93cbfb7c5a5ad5783f903c1448f45","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","ghc-bignum-1.3-775a","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","pkg-name":"invariant","pkg-version":"0.6.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4a9a609f4e93ffed158b3b4f5a80822c6da30aa71a5370307c0c00c2d658d1c6","pkg-src-sha256":"a9e2ab4ee3e0d4613beb7bda36a8ebc4f72318450514f4832d2fa43b74f0aeb3","depends":["StateVar-1.2.2-dfcd1500ba22168c6a16a36f89b608421ada6630bb9e2c25821c5c1f00f36abd","array-0.5.8.0-8939","base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","ghc-prim-0.13.0-b38a","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","pkg-name":"iproute","pkg-version":"1.7.15","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"81ed5d5915467825e2381a8b2fabd7ce9b83c4209f4825bd15270b433cf52862","pkg-src-sha256":"18a331a7e0e6f9dc89a2da95577b0d76bd2690b8f832b72b46d6cc9b667b4ba5","depends":["appar-0.1.8-02b0baa029dc0d70860f700f6e3b71f64df5d8262a68877709c6815e9f755703","base-4.21.0.0-2257","byteorder-1.0.4-9e649951bca62f92f7670a4972b9b8dbcab1ab62ae94819d9569073d4b734df9","bytestring-0.12.2.0-e6fd","containers-0.7-f244","network-3.2.7.0-f2653386051cc13abf95fa115707e79cafbceb178390f7b42970432a486d675a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-chart-2.9.4.1-47775fc2722951431e2f51fd884a610c7a63daf6bab1577aedc4eb45e5853abe","pkg-name":"js-chart","pkg-version":"2.9.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0f4bc23d19ac869ec0cbdbd7596a5074ba4be68e85fa5bb76a3bed559907b3bc","pkg-src-sha256":"0a08efdd35bd1b8f293f9163f59305f31835304b74c3e3a1a840fc94bbc9bd0e","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"kan-extensions-5.2.7-fd71101699e0be4ec0b2d0eacb39fb1ed64099e371380d28eaf7af86478c997c","pkg-name":"kan-extensions","pkg-version":"5.2.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b91397acc14202e8a9eb5717c9d5ca12b63c00b410e902cb11f76d38fcec7895","pkg-src-sha256":"c323acff95cdef6516f2f1a733a1f00f7e0caa1b7061f8831ed82e18fd37e158","depends":["adjunctions-4.4.3-0232a035c7dc59f34f047cc05fee3fbd824f1ce43e7205e02ab69f9f467d123a","array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"keys-3.12.4-c5dc715bc88a1e26df71e6e3ee6a32f09c8952ee4121ed9f2367504503fede5b","pkg-name":"keys","pkg-version":"3.12.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ce43085eb0506a2fff6020dc61351e1c0c61c29f90d3ea5030756f3ed50caa16","pkg-src-sha256":"9412a2135cbf7fb285e01016aeb311d022ba9962fd9699ddef620f6dabd68912","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","free-5.2-25c3042aa73e2b2b4e61fd026d7caad5b6a9a29ed2fcd9b6070ee0d5a142cbbd","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","pkg-name":"math-functions","pkg-version":"0.3.4.4","flags":{"system-erf":true,"system-expm1":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"859a4f623c5f238e345f241e38c551cc4776cadc59b1e511880bbf7968f7419f","pkg-src-sha256":"2441d8dd50eff445356048b2a0cdf88c4a7ba0f56614293d4975e1b081faf8fa","depends":["base-4.21.0.0-2257","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","deepseq-1.5.1.0-8867","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"microstache-1.0.3-67bc1d5a8eb165e954bf69c24601841a11a39a4d117cac7a0c753cdeec5a45f4","pkg-name":"microstache","pkg-version":"1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"86a55f331563ea2e4a16f62c13fe601e1a9d0377d479bf6d5f03ccb3bedc188e","pkg-src-sha256":"35f290e57bd40fbaf7695d85efe34a2836441efbbb9deb696c7982b898aa898f","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","parsec-3.1.18.0-eaa5","text-2.1.2-3aff","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1-8dcd","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"]},{"type":"configured","id":"mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","pkg-name":"mwc-random","pkg-version":"0.15.2.0","flags":{"benchpapi":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"89d49395d04df402d33550e4083438e7e26adb0db9130f8f985cc196dc19bb80","pkg-src-sha256":"5843ab06e7c9109326aa4eb5e26486400d6e3bce25944f6671ce989499174133","depends":["base-4.21.0.0-2257","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","time-1.14-17e0","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"network-3.2.7.0-f2653386051cc13abf95fa115707e79cafbceb178390f7b42970432a486d675a","pkg-name":"network","pkg-version":"3.2.7.0","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3a1ec8b8dd32f1d5a541679a67de60d6626487a95f20c6bc245268ae7142ab7","pkg-src-sha256":"68548e660632a3c09b230c33fe08cc880273372b485e65cbe7a717936de9728b","components":{"lib":{"depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","stm-2.5.3.1-c578"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"]}}},{"type":"configured","id":"network-info-0.2.1-2658d80a75488549cff839d72e297acdf0396af206b53e3cb4bd276adc06c77d","pkg-name":"network-info","pkg-version":"0.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2798c2e4cc2c32108bd4b05efa921ce6f054ebc381c5e465c9bd74c7d538af17","pkg-src-sha256":"9b2d88312fc8280351d5003200cc07decbb865f85d3aa7b1094b238bd6a8b404","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"network-uri-2.6.4.2-71f3ddac32414829743f6763bd076529fdd16d0a0750db7212d67caed65bda86","pkg-name":"network-uri","pkg-version":"2.6.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588","pkg-src-sha256":"9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","parsec-3.1.18.0-eaa5","template-haskell-2.23.0.0-8814","th-compat-0.1.6-3e060d292da30dc27581db286a416acde858d5375461cda8fa4fe024bbd817d1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-locale-1.0.0.7-abff9ded3ca3b185256c0c1653dde775890d50ac7090725f7fa2a98bc48b1a8c","pkg-name":"old-locale","pkg-version":"1.0.0.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fa998be2c7e00cd26a6e9075bea790caaf3932caa3e9497ad69bc20380dd6911","pkg-src-sha256":"dbaf8bf6b888fb98845705079296a23c3f40ee2f449df7312f7f7f1de18d7b50","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-time-1.1.0.4-b028ef2400e5e50da2d6cb6830429dacd1ed2866ac3354b1697daaf506b668de","pkg-name":"old-time","pkg-version":"1.1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e3dfb5b1d7cb24ed7ea9bbca1153485ae38fa0534b0581886dd42eeedf82447","pkg-src-sha256":"1e22eb7f7b924a676f52e317917b3b5eeceee11c74ef4bc609c0bcec624c166f","components":{"lib":{"depends":["base-4.21.0.0-2257","old-locale-1.0.0.7-abff9ded3ca3b185256c0c1653dde775890d50ac7090725f7fa2a98bc48b1a8c"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"]}}},{"type":"configured","id":"optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","pkg-name":"optparse-applicative","pkg-version":"0.19.0.0","flags":{"process":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0b47b3ff7eb4a855b5f7d401690365fc62a32057374927ce0d478b620996222d","pkg-src-sha256":"cf16aeefd821730c7738447fa7c6b7ada7ca1c9cc25400d64ef283294d345871","depends":["base-4.21.0.0-2257","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","process-1.6.25.0-cc37","text-2.1.2-3aff","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"os-string-2.0.7-2bc1","pkg-name":"os-string","pkg-version":"2.0.7","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","exceptions-0.10.9-1a86","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"parallel-3.2.2.0-7116e242336785fbdec97cb2fcf285015721d55b041430d22f749de68ee23475","pkg-name":"parallel","pkg-version":"3.2.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9d7b34ac537940f67732eca31d48a43bd78fb65a91baebddf63bee4fc3813d81","pkg-src-sha256":"170453a71a2a8b31cca63125533f7771d7debeb639700bdabdd779c34d8a6ef6","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","containers-0.7-f244","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.18.0-eaa5","pkg-name":"parsec","pkg-version":"3.1.18.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","mtl-2.3.1-8dcd","text-2.1.2-3aff"]},{"type":"configured","id":"pointed-5.0.5-63eafbf3bec6e7e3467bbfe38ca8de6a3a2ab76bcba360e69b40dec77df450ca","pkg-name":"pointed","pkg-version":"5.0.5","flags":{"comonad":true,"containers":true,"kan-extensions":true,"semigroupoids":true,"stm":true,"tagged":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d02fd1e73a62348377cb9b1697bf576af45a61a4b911732a116c8a4258962910","pkg-src-sha256":"f99d95cdfb50083f762fa816ba53eed481e28cf4c0e902e2cad35e7452bb6ef1","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","kan-extensions-5.2.7-fd71101699e0be4ec0b2d0eacb39fb1ed64099e371380d28eaf7af86478c997c","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e","pkg-name":"postgresql-binary","pkg-version":"0.14.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"06366fd82deda89f9237b885e9493eafe0b9903d05c19761288b048dcc9a99ee","pkg-src-sha256":"77a1c30557405c42ee9cdd0d67fef7f7a9fb3d56c2285f6e09d706b599a61724","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","base-4.21.0.0-2257","binary-parser-0.5.7.7-4a66f2ac489fe1ddc738e8a06199319f65019d3de3dd76f80ba80568510691de","bytestring-0.12.2.0-e6fd","bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671","containers-0.7-f244","iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","text-2.1.2-3aff","time-1.14-17e0","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74","pkg-name":"postgresql-libpq","pkg-version":"0.11.0.0","flags":{"use-pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ca7facdf755f7ad3950e75eee4a388f52179b027ca983be362c400ab0a37a4c4","pkg-src-sha256":"034ab1208fe6bb33009b3c7c75a06dfea5b306e289a013fff2e2e450d63ed2a3","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","postgresql-libpq-configure-0.11-7667dee933e334184e802dc210bc38df5950fa2939614dc1b530a26d3aa7bba9","unix-2.8.6.0-7c77"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-f9f73d0fa21fa6941adec93088e372d69343af0cf922e10b5324831a13007f25"],"component-name":"lib"},{"type":"configured","id":"postgresql-libpq-configure-0.11-7667dee933e334184e802dc210bc38df5950fa2939614dc1b530a26d3aa7bba9","pkg-name":"postgresql-libpq-configure","pkg-version":"0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"019c5d83da0b4dc0b4487e0e868f2eed5efa25e0688f5cfc2ba8191a80e527aa","pkg-src-sha256":"8d4fe34b5475dd0c8339b5c05506111a10214ea18a10cd366e5440eaac95b2d8","components":{"lib":{"depends":["base-4.21.0.0-2257"],"exe-depends":[]}}},{"type":"pre-existing","id":"pretty-1.1.3.6-a64e","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a"]},{"type":"configured","id":"prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","pkg-name":"prettyprinter","pkg-version":"1.7.1","flags":{"buildreadme":false,"text":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9c43c9d8c3cd9f445596e5a2379574bba87f935a4d1fa41b5407ee3cf4edc743","pkg-src-sha256":"5e6ea6903114fa118fcc359633dfb7ecddecb92c06c853d02a77b72b251f0b45","depends":["base-4.21.0.0-2257","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"prettyprinter-ansi-terminal-1.1.3-93b1cfe4956c862bf68141e75025eacbb6d4959a835d7e41a2ad36aa75775665","pkg-name":"prettyprinter-ansi-terminal","pkg-version":"1.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b00f727b964cf13adff7acf575a71fa7e405f5240aff50b07f10df76ab89f8d3","pkg-src-sha256":"813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3","depends":["ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","base-4.21.0.0-2257","prettyprinter-1.7.1-92a30f141193d5e9cdc3e8e659c6ae4063b7e3b1de71316165f1bd8c714af368","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","pkg-name":"primitive","pkg-version":"0.9.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfdd6572944c11e69208237dd32a2eb9d975b4f4e9064a7b8dc952cb0e256846","pkg-src-sha256":"44b4de41813c7bc5db8a57f87c3612a069b65086946268ba165097252ebd3d76","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.25.0-cc37","pkg-name":"process","pkg-version":"1.6.25.0","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","directory-1.3.9.0-6367","filepath-1.5.4.0-c1c3","unix-2.8.6.0-7c77"]},{"type":"configured","id":"profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","pkg-name":"profunctors","pkg-version":"5.6.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bfdb8c8b8cd4390e30219219edaff6ae7f428516f7338f0b7c39cb16b84bad2c","pkg-src-sha256":"b9c6f427368d2e811e4c48b59005218672458fd2f00a02cbefb8be9c751c0ef3","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"quickcheck-instances-0.3.33-2034df2a61baaa8c3f393fb97bad47587f538b28853993d4fce558e2d5798068","pkg-name":"quickcheck-instances","pkg-version":"0.3.33","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"709fb12799f1b5b00112150168dbb57368ce6c741ec01f23cf44f9e7743e6cf6","pkg-src-sha256":"6803cd547b027bcab7b029a69ad8428e28af842b7709113eb6a43ab2f2f08866","depends":["OneTuple-0.4.2-b003b0914d378e2a647a0aebbd56ecdf67a673e9ae2cd2f21d9466aea15ebc2d","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","array-0.5.8.0-8939","base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","case-insensitive-1.2.1.0-e7a044c5f8bd9f6ecaeb790fdf08042a8dda0407af41c14bc8f42e8c8582e76c","containers-0.7-f244","data-fix-0.3.4-71ad7624251cc5ac98c2186063dee541a4ffdea62b54dbea2f4689194b567ddc","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","old-time-1.1.0.4-b028ef2400e5e50da2d6cb6830429dacd1ed2866ac3354b1697daaf506b668de","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","text-2.1.2-3aff","text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"quickcheck-io-0.2.0-f6e0d90e2f353ab1d727127bfc6e5b2b804dc18ed3f0f957a6d6417fda72b976","pkg-name":"quickcheck-io","pkg-version":"0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7bf0b68fb90873825eb2e5e958c1b76126dcf984debb998e81673e6d837e0b2d","pkg-src-sha256":"fb779119d79fe08ff4d502fb6869a70c9a8d5fd8ae0959f605c3c937efd96422","depends":["HUnit-1.6.2.0-6f31675537c12001466862e96d686db9571bec74a5e7400bae305de11451f73c","QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","pkg-name":"random","pkg-version":"1.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0b4f649c3e78713b2ccad1535251ee34b148237fb2229d7058c2b1d9ccc324b8","pkg-src-sha256":"d840ac83f265b0cfa2a678f8ec78627eb50cf9be2f067c52c8a4239c29b71a35","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","mtl-2.3.1-8dcd","splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rebase-1.21.2-dbc3dc89c9855716e4e914949e74d3628aa90b0cafd9256d6d9dfb3f52c4072a","pkg-name":"rebase","pkg-version":"1.21.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"977dd7da0232b7469966f04efea26d46ff417c3be5893de2c091d40bd8bdf997","pkg-src-sha256":"6c19f5576c888078f0c7f172da05873611bfc070617d033f4f14fedd3e82fffb","depends":["base-4.21.0.0-2257","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","bytestring-0.12.2.0-e6fd","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","deepseq-1.5.1.0-8867","dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21","either-5.0.3-b26964fd7f3d0a4b0751d250d1db8516051a3d9b685db4b9f1efd694bde17443","groups-0.5.3-ba0008e04cf3959eab1111ad5fc120b975e3f48273a0575b3a1d94ab9cde8c4f","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","invariant-0.6.4-262b6f96dfa5d6c9d694e20d1e4bd26a5e19b372e52d960cf0cea11996629b42","mtl-2.3.1-8dcd","profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd","scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","selective-0.7.0.1-b88f9e87ce96c09fb5b13045513a47a15cbf30d46e56f133fdc36bc56bdfe019","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","stm-2.5.3.1-c578","text-2.1.2-3aff","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-instances-3.4.3-ff9124a65bf238b5f3e6aaeecc4532740d0219fd64d6fa37a91d2463c73b61d4","void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rerebase-1.21.2-1237a3d48a3f8d541b030f326eeaefaac97266ff57961cb4cbd6cab779ebb8e7","pkg-name":"rerebase","pkg-version":"1.21.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5971685d457bd378a4d6f873fdd6fd6f3808321fde36a153da53907ae5d73d72","pkg-src-sha256":"77cc0d707ee0886b49206065476e77d0600e4c305b37701a38ef55e736a7fc10","depends":["rebase-1.21.2-dbc3dc89c9855716e4e914949e74d3628aa90b0cafd9256d6d9dfb3f52c4072a"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts-1.0.2","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a","pkg-name":"scientific","pkg-version":"0.3.8.0","flags":{"integer-simple":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ba83a6701dd0110138443757aca4a42786afa94272b73045ef878fd860d1732e","pkg-src-sha256":"13b343bca8aa26d7718e52e622e5a118056653edafcbc7ccc5333be7217218cf","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","containers-0.7-f244","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","integer-logarithms-1.0.4-c8e75734efef9d790e2249f6ff033ac4ab3b13eb23f6098435fd7d247a0d7223","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"selective-0.7.0.1-b88f9e87ce96c09fb5b13045513a47a15cbf30d46e56f133fdc36bc56bdfe019","pkg-name":"selective","pkg-version":"0.7.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"542ab572491898552b42d62d43a7e8c70fb93d714c06c06a4de6f331fee87df2","pkg-src-sha256":"dbfb4be71c7956f54e099c34ffe538dfaa99ed3911208df5828563da22b6aee3","depends":["base-4.21.0.0-2257","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semialign-1.3.1-77d5698df52d8ce03ff13d57f75fab385202a6e06d02b6ac179b21710d7e9aac","pkg-name":"semialign","pkg-version":"1.3.1","flags":{"semigroupoids":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfe515a9e43230f5308564a649a04ea1538499ed98b944644b77bed5394b9deb","pkg-src-sha256":"66e87bc254ffec2ee908bf625c42d3b7363238d6ab1cfba8934bbee7590c9df7","depends":["base-4.21.0.0-2257","containers-0.7-f244","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","pkg-name":"semigroupoids","pkg-version":"6.0.1","flags":{"comonad":true,"containers":true,"contravariant":true,"distributive":true,"tagged":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bfee06a6d88038a88ddd10fc21c230bf5ee3a14d0584dc6ab7ad54a9252c2c21","pkg-src-sha256":"1d532030862414f5d4f2f6f001783f77aa14e5f05ee8e3c4a2d2129fca29cc1f","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","bifunctors-5.6.2-950dbef6e0bd47b1ae29a278787b5f1e6a8ae95cb7969e0cdf4c46fb4e0cfa59","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","containers-0.7-f244","contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1","distributive-0.6.2.1-54313cfc3334bba7faec9ed5e9b16df60a1428f966b4ee83f501e6f189d74290","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroups-0.20-5013ba4f6ec1320cad0e8e9349e329677a3b5f68e2c17d245b7ee5c3860d155d","pkg-name":"semigroups","pkg-version":"0.20","flags":{"binary":true,"bytestring":true,"bytestring-builder":false,"containers":true,"deepseq":true,"hashable":true,"tagged":true,"template-haskell":true,"text":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"925341e6f7eb104cb490bef06eab93bb7995c7c67c51ee938185a2ddefa7aaf2","pkg-src-sha256":"902d2e33c96b40a89de5957f2a9e097197afcc35e257e45b32ebe770993673e1","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.2-74153ba1beed40bab8b2bd3098cb27f7e49a20de23d76a45fdda49127b132ed1","pkg-name":"splitmix","pkg-version":"0.1.2","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"110fbfcb513b77caf17fa5e53e5ae50d1b4b178d0eab2a86db9814a8b476c6f0","pkg-src-sha256":"3e5342d41a80d925e9dd95b513ae1d076347f6802209a49a8f8829b7b577d4be","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"statistics-0.16.3.0-085ed5c05d60a69cef5d842b5c943f4d9974ac0aeadad8b897ff978c5fd78092","pkg-name":"statistics","pkg-version":"0.16.3.0","flags":{"benchpapi":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dfc4d4934eb7ae0c1fde7dbcfbbcbb59bf6c3d099a5b20e02778b4e4de28bc22","pkg-src-sha256":"03ec46e6641227cf7318b7a1f87acf005d38c8cfc4e13f40ff9014a9266ba1e7","depends":["aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456","async-2.2.5-c572a47cf957798aad85828e666dfc22e97ddcfb87cf19f3cfbfddba4bc71c1d","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","data-default-class-0.2.0.0-4b26d29e48dccc4b2e896139d243dfc282ef756429b93387e2c3e607f5e89aa9","deepseq-1.5.1.0-8867","dense-linear-algebra-0.1.0.0-2ce7029718edb63fcc379f634a2dee741609ed83e118098f5ed83ddb7205faeb","math-functions-0.3.4.4-fae7c549acd11853c831a2115bc86806bda237be967297b78a5b5a626e6eb968","mwc-random-0.15.2.0-2c71b5a2d467c9be1d6f4e49358bbb62f0a254dd59c5a10ddc7fac2cf0771c4b","parallel-3.2.2.0-7116e242336785fbdec97cb2fcf285015721d55b041430d22f749de68ee23475","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.3.1-c578","pkg-name":"stm","pkg-version":"2.5.3.1","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257"]},{"type":"configured","id":"strict-0.5.1-876484a0ecf8554133ab09e851250d84030190290af9e82965da3c17ae412e08","pkg-name":"strict","pkg-version":"0.5.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"58c373b7c7748cbb4a5a6c8c15073f99a1c10a9a9bb6894ac33f43a5cdb901f2","pkg-src-sha256":"77719280c2a86312e748227bfa732eeaae0e7df48d57acc3c2e5b7b07afe2f8b","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","text-2.1.2-3aff","these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","pkg-name":"tagged","pkg-version":"0.8.9","flags":{"deepseq":true,"transformers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6aad7d2fd594bd51834450d97850b9959305951993ea739fa2bbc18b55d8767d","pkg-src-sha256":"6daad88ebb414ba6a556d2898d2cbe7650e4276010e3a6eed939daf54b956784","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","pkg-name":"tasty","pkg-version":"1.5.3","flags":{"unix":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6b5dda3f16db1274a0b3e6c4073ac57172a1e96b1dca05666c5cbd1183639412","pkg-src-sha256":"54a0c7b644813af871a3726ac8771b5e17b5158c792a7acf8f9e2d3ae9360780","depends":["ansi-terminal-1.1.2-1a12d3c3248a33a1222a00220f2fe259cb7e3e093f27e933a7c2bfe220860aba","base-4.21.0.0-2257","containers-0.7-f244","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","stm-2.5.3.1-c578","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","transformers-0.6.1.2-c8d5","unix-2.8.6.0-7c77"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-hunit-0.10.2-5186b61e6bd8a2f8794e90bd53aaa761247ab1d99357ac0e261b95a0a7aea3c9","pkg-name":"tasty-hunit","pkg-version":"0.10.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"22bc1122e8256664d7cb1e44c6bcace95676c523179947bf2403db71af43dc6d","pkg-src-sha256":"5af01fa7c1ef98b324da062e36f79986a8b1b83ff0cf6fd53f95d976b41e03f6","depends":["base-4.21.0.0-2257","call-stack-0.4.0-3bbfa5f330185adcb3ec7b0e0a036e2116b84ab8d676c7be318a978f44e1a401","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tasty-quickcheck-0.11.1-1d1979544859d8373b0d7b2e9925aae0869f9059ed12b72352541da8da8bca2d","pkg-name":"tasty-quickcheck","pkg-version":"0.11.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fca860abe029f9d34cb5168d6a9ab438d7fc4c016c8c594bbf1655d58982fbf3","pkg-src-sha256":"e3d4de7455ed342f8874d84686def897b8a316ce198461da18106d8a1f63246a","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","optparse-applicative-0.19.0.0-d1908a8a808f7b6af38c2eef568a71c094afb3a96355ee475a1ad53ceb5dc3c3","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","tagged-0.8.9-43884c54f5acacf47667300ccaa491681bbad62caa7dbd64001d0ce95104afd9","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.23.0.0-8814","pkg-name":"template-haskell","pkg-version":"2.23.0.0","depends":["base-4.21.0.0-2257","ghc-boot-th-9.12.2-573d"]},{"type":"configured","id":"template-haskell-compat-v0208-0.1.9.5-52802155b035e1dae7165ba040f1dbedc25610fdd0620a27d81164e921a02ba2","pkg-name":"template-haskell-compat-v0208","pkg-version":"0.1.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d4f8983c055017c7dbe62e3e2c668ddb7d1bbca3087563477ff7eb2275d3c6f9","pkg-src-sha256":"51359f8dc8d51f30b59521d214837d13c4f6c9b5c4afd0eba813c26cc2449d1f","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"text-2.1.2-3aff","pkg-name":"text","pkg-version":"2.1.2","depends":["array-0.5.8.0-8939","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4","pkg-name":"text-builder","pkg-version":"1.0.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"19bc28b9ff0eed90b8154be50816bae255586e7c5533fddd2ce49b47c498d509","pkg-src-sha256":"9323f4a824e7b951cafbc5c180402658d4fc9f95afe4a4e2e5b317f75c619be8","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","text-2.1.2-3aff","text-builder-core-0.1.1.1-809ab74cb9940ddee34595551352e1bdf559835dfec083686c2cd4e930a2ab64","time-1.14-17e0","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-builder-core-0.1.1.1-809ab74cb9940ddee34595551352e1bdf559835dfec083686c2cd4e930a2ab64","pkg-name":"text-builder-core","pkg-version":"0.1.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"402fdf2f2695950643fea299719c3dccc81c797d94bbcaa7d1cbf182e9937afa","pkg-src-sha256":"a9a30930dc59f8bd2b243991df7c6a8dcf2f65353c0df1b0fed8c1ba1f2d7d86","depends":["QuickCheck-2.16.0.0-c71991ffad68c6cbe75f6075b53e721480c0e37f26530cfa1c83090033454b7b","base-4.21.0.0-2257","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-iso8601-0.1.1-d9c15410e246a269b2d8fbd5e93292ad79f9cb515efb67ce7e8cbe63adb5cc53","pkg-name":"text-iso8601","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e07a625eef969338992bf9bba8e5dc73f07ac65f991ba636b8f1175890d15849","pkg-src-sha256":"9dead2b7ceeae40fe0fc060bd54795c32e9926c9d1aebae8f9b9a621fba88202","depends":["base-4.21.0.0-2257","integer-conversion-0.1.1-058ede2c29f43a2580fdbaa65011489102e6e1482dfde95d11cc24fb0e22e9fe","text-2.1.2-3aff","time-1.14-17e0","time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"text-short-0.1.6-9761fef2282c02eed4b1d8bf161d93cbcb58a0780c513940b7f063dc1122615d","pkg-name":"text-short","pkg-version":"0.1.6","flags":{"asserts":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"41be94ccd3f6646ab69b0b05c5130ea3c7911a4598ab9b9192f21ad25a69163a","pkg-src-sha256":"8173ea138d7dc398747b636012bf6e79e17186560b8a7a7fc9e6456d78556eab","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","ghc-prim-0.13.0-b38a","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tf-random-0.5-6a38197ac754fec973cf4b2dda2d81b40a4abfcbf9fab2c4c29b9f63dfa2875e","pkg-name":"tf-random","pkg-version":"0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"14012837d0f0e18fdbbe3d56e67da8622ee5e20b180abce952dd50bd9f36b326","pkg-src-sha256":"2e30cec027b313c9e1794d326635d8fc5f79b6bf6e7580ab4b00186dadc88510","depends":["base-4.21.0.0-2257","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","time-1.14-17e0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-abstraction-0.7.1.0-c6a28ddf77fb8f66bcfe14716336cb828dfff5565168a92d094e877f4254ee81","pkg-name":"th-abstraction","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3011403d85b0070630e33d66b9370535ccd1e0e672ae58f847550b2b15bb4fd8","pkg-src-sha256":"f9b6184aba4c6b61dd0d96f7dad41a4c9db0a01d3cdbf993a7d860488f1c04c5","depends":["base-4.21.0.0-2257","containers-0.7-f244","ghc-prim-0.13.0-b38a","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-compat-0.1.6-3e060d292da30dc27581db286a416acde858d5375461cda8fa4fe024bbd817d1","pkg-name":"th-compat","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e83d97946f84fe492762ceb3b4753b4770c78b0b70e594078700baa91a5106c2","pkg-src-sha256":"b781a0c059872bc95406d00e98f6fa7d9e81e744730f75186583cb4dcea0a4eb","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"these-1.2.1-27cd4b7408ba58ba0147bfef2d62c3a7f2e5db86a027272879683000f91cefca","pkg-name":"these","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"35c57aede96c15ea1fed559ac287b1168eb2b2869d79e62ed8c845780b7ea136","pkg-src-sha256":"17d6d933365edabf801a16842c1403bdd37cc5300faa2fcca980decdab22e4de","depends":["assoc-1.1.1-b80fbea5b075791ecbc2f14f6e41ae9ea2994595501e09fa4aa1e37f0affc1db","base-4.21.0.0-2257","binary-0.8.9.3-bcd2","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.14-17e0","pkg-name":"time","pkg-version":"1.14","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","template-haskell-2.23.0.0-8814"]},{"type":"configured","id":"time-compat-1.9.8-7e53e9c20c8c978ae961ac2700f1490423cfd877486bc8c97d07bb9fc5c0b40b","pkg-name":"time-compat","pkg-version":"1.9.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"31af49b09fa7195071cd841aa142eb1c4601d4a336ee76cd63242eebff8f98a7","pkg-src-sha256":"502ef8694a5b131b47c0e5df2e9053d005a3b345b30f5225af04f081d3ef5cf0","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814","time-1.14-17e0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"transformers-0.6.1.2-c8d5","pkg-name":"transformers","pkg-version":"0.6.1.2","depends":["base-4.21.0.0-2257"]},{"type":"configured","id":"transformers-base-0.4.6-7a07e7f280ba7e8bbdb9a29dafa466fbee968bbcac629da131993691422c6440","pkg-name":"transformers-base","pkg-version":"0.4.6","flags":{"orphaninstances":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6f18f320e371c8954c4b6b211e2fdd5d15a6d6310bd605b9d640f47ede408961","pkg-src-sha256":"323bf8689eb691b122661cffa41a25e00fea7a768433fe2dde35d3da7d32cf90","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","stm-2.5.3.1-c578","transformers-0.6.1.2-c8d5","transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"transformers-compat-0.7.2-2665a1ac2c682e770c0ed980d533ba41cb7e08ea38019198ad57c7331cd9d0ae","pkg-name":"transformers-compat","pkg-version":"0.7.2","flags":{"five":false,"five-three":true,"four":false,"generic-deriving":true,"mtl":true,"three":false,"two":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"044fb9955f63ee138fcebedfdcbe54afe741f2d5892a2d0bdf3a8052bd342643","pkg-src-sha256":"b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a","transformers-0.6.1.2-c8d5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"unix-2.8.6.0-7c77","pkg-name":"unix","pkg-version":"2.8.6.0","depends":["base-4.21.0.0-2257","bytestring-0.12.2.0-e6fd","filepath-1.5.4.0-c1c3","os-string-2.0.7-2bc1","time-1.14-17e0"]},{"type":"configured","id":"unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","pkg-name":"unordered-containers","pkg-version":"0.2.20","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"233cbcdda6c2698932bb391ce0935fb44f80c115621ee815a21ed33ac8ede422","pkg-src-sha256":"d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","template-haskell-2.23.0.0-8814"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906","pkg-name":"uuid","pkg-version":"1.3.16","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d9b015a3498d4c0542501099491899c0f3df8ec1ff3709cd6e178127e99c7794","pkg-src-sha256":"1a4679cfb4ec5fcc8dd584bd4fc66f744bfd0433c775e400235058c13f720df6","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","cryptohash-md5-0.11.101.0-6ef6b02f258f6f7020b2f5ff2a766450202d89f9af79fe0569cd2df472fe3243","cryptohash-sha1-0.11.101.0-342ec414baa3297102a37f85be3eb10c1a9a2de6a85d4960185dfc29075f9bb8","entropy-0.4.1.11-d3058573191edec3193a223459f31bf318011102d1c9c7265a2a8260f00ffc62","network-info-0.2.1-2658d80a75488549cff839d72e297acdf0396af206b53e3cb4bd276adc06c77d","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","text-2.1.2-3aff","time-1.14-17e0","uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"uuid-types-1.0.6-cce6b1da39a3a32c573e97fa405d519f9c4af069c60ed1ff1c73693180e42a3a","pkg-name":"uuid-types","pkg-version":"1.0.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5ac2b681a8d7676f6a51ac1b113bfdcf18dd7fdbb313034850ed6493eef96da0","pkg-src-sha256":"7e0dd953483d6fd3ca49bcaed6b11f9e3c2787213479b2581e07747836b8357e","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","bytestring-0.12.2.0-e6fd","deepseq-1.5.1.0-8867","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","template-haskell-2.23.0.0-8814","text-2.1.2-3aff"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c","pkg-name":"vector","pkg-version":"0.13.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f","pkg-src-sha256":"28f203c786cbf8ac6dc3fea3378ec36f34173d505fb4a1dd60fc8418ad91c423","depends":["base-4.21.0.0-2257","deepseq-1.5.1.0-8867","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-stream-0.1.0.1-0e36f1198471089cfe8d058619da9c3b3cc767a736e96bb4d43e19cc95a49251"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.13.2.0-l-benchmarks-O2-cbae7d44aa6e8858e46d32d034fdd0f880ae087dc6e6261c1508f04327fc0033","pkg-name":"vector","pkg-version":"0.13.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f","pkg-src-sha256":"28f203c786cbf8ac6dc3fea3378ec36f34173d505fb4a1dd60fc8418ad91c423","depends":["base-4.21.0.0-2257","random-1.3.1-d473f1c0f37118e2202950e2ec3c8a542448a0e9ee15a2073bc5a16e53b8e39a","tasty-1.5.3-107efdec6635505b6774c970bc6d2fe6409ce52cbbd39e389ac515a4042d54f7","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib:benchmarks-O2"},{"type":"configured","id":"vector-algorithms-0.9.1.0-0cae1326609c90fc5d80539a91eaece1b1a13a6ed4d7a03803a0614f0ffe3208","pkg-name":"vector-algorithms","pkg-version":"0.9.1.0","flags":{"bench":true,"boundschecks":true,"internalchecks":false,"llvm":false,"unsafechecks":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ccb940a004509aa908a16fa6b9b9f4e409e8a660fb5dd4c88274c8df16b1ffbf","pkg-src-sha256":"d2b674676802670d8a682b357da6b6b5741b4a33b191f0ffe5f2b2bc40558eb2","depends":["base-4.21.0.0-2257","bitvec-1.1.5.0-8eebf4a69411301b81a7ebf24927d7b97a6e7f3c39cac637bb1f59575cd3d2a1","bytestring-0.12.2.0-e6fd","primitive-0.9.1.0-94c75246d0fa299fede7e4230d00b35fbc4228469b694e4fc67092e6cbfb48ac","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-binary-instances-0.2.5.2-1129dadc1bda11e0a62b322d35e0d0ee9c6387b8ab8c779274c170f635f28c1d","pkg-name":"vector-binary-instances","pkg-version":"0.2.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ba8f2c5a9527821ab47bbd991dd7b7533bcaa68662c84c4f16b871655117ceb","pkg-src-sha256":"b72e3b2109a02c75cb8f07ef0aabba0dba6ec0148e21321a0a2b2197c9a2f54d","depends":["base-4.21.0.0-2257","binary-0.8.9.3-bcd2","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-instances-3.4.3-ff9124a65bf238b5f3e6aaeecc4532740d0219fd64d6fa37a91d2463c73b61d4","pkg-name":"vector-instances","pkg-version":"3.4.3","flags":{"hashable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1b4d6bd6b2da3f2a853a5945551d1ad93c5c96efef2ff3ac19272a3caf759336","pkg-src-sha256":"67259803df61fad998e2e8410253ca0552d25d7dfb87d0ddc702c82277314caa","depends":["base-4.21.0.0-2257","comonad-5.0.9-fbfdfc74b8f733541594123e47e1899cafdfe2786972a136c67256a8a6f2ac33","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","keys-3.12.4-c5dc715bc88a1e26df71e6e3ee6a32f09c8952ee4121ed9f2367504503fede5b","pointed-5.0.5-63eafbf3bec6e7e3467bbfe38ca8de6a3a2ab76bcba360e69b40dec77df450ca","semigroupoids-6.0.1-5befdbdffa793b91f665c8e9d226fb165cd641ecf8f420d2276f2007601dc301","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-stream-0.1.0.1-0e36f1198471089cfe8d058619da9c3b3cc767a736e96bb4d43e19cc95a49251","pkg-name":"vector-stream","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5ac96695212a45ae7dc16d8031dbf5311da53e052c35f7ad4a8e2db7fafb651e","pkg-src-sha256":"d0f507334bdea5431a2f07f525a97f29e76522c32210f5de6d5a2b4f1d42bf7c","depends":["base-4.21.0.0-2257","ghc-prim-0.13.0-b38a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-th-unbox-0.2.2-7b3f9ff57ecd95ca863d2bd758c9906fa8f7145fbf7ab71e7b55219ace06651b","pkg-name":"vector-th-unbox","pkg-version":"0.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"50d26b8d489c9231f6ecf388233507bce39c41c80960275f20456358e821f6b7","pkg-src-sha256":"8aa4ca464e842706e5b5234b8242d1aafec9ee755659b0e3ff44ecde13a80149","depends":["base-4.21.0.0-2257","template-haskell-2.23.0.0-8814","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"void-0.7.3-6625d4abf7d2e5f4482f0b5cee4786e1a5bf4c31f0fc27bf95e106f3873cbde5","pkg-name":"void","pkg-version":"0.7.3","flags":{"safe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"13d30f62fcdf065e595d679d4ac8b4b0c1bb1a1b73db7b5b5a8f857cb5c8a546","pkg-src-sha256":"53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317","depends":["base-4.21.0.0-2257"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee","pkg-name":"witherable","pkg-version":"0.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"85bab588ebca37996fc3171b9d8b2e065eb0536c9f44224bcf037c0849a881de","pkg-src-sha256":"48434cc1e465b13cbc0133a90c3ec0d827c93b77ce95807fe0a38b65f4918cd1","depends":["base-4.21.0.0-2257","base-orphans-0.9.3-45a4c08662fbdc80a8ae790472b7fe3ff53ed824a5f28fd8314a57c51a444ca6","containers-0.7-f244","hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42","indexed-traversable-0.1.4-67ac24c34a5c91a96f75ce01cf8562a5568fc760b68e42183da7f4336f60adec","indexed-traversable-instances-0.1.2-0884f0848d96d0ff3b74fbf141bbd46faa0628bdb97aa46e2f3868e33ef3be08","transformers-0.6.1.2-c8d5","unordered-containers-0.2.20-738bfebb4c8ef0526dec985197d1cd1037de3eba9599de4061984316110ac996","vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c"],"exe-depends":[],"component-name":"lib"}]} \ No newline at end of file diff --git a/dist-newstyle/cache/solver-plan b/dist-newstyle/cache/solver-plan deleted file mode 100644 index f6b5fd12a76919441ebc0614b6ee08f40392418d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418961 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¥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%0DkoYgq>AD+rM!IP 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%0AB1|7F4J;zd{+*WXBcIIy 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 A82|tP diff --git a/dist-newstyle/cache/source-hashes b/dist-newstyle/cache/source-hashes deleted file mode 100644 index 8555ca1cfac91740e956e5e4cb90a93f25569704..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91712 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 diff --git a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf deleted file mode 100644 index fe2ba128f6..0000000000 --- a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace-testing-kit.conf +++ /dev/null @@ -1,63 +0,0 @@ -name: z-hasql-z-testing-kit -version: 1.9.1.2 -package-name: hasql -lib-name: testing-kit -id: hasql-1.9.1.2-inplace-testing-kit -key: hasql-1.9.1.2-inplace-testing-kit -license: MIT -copyright: (c) 2014, Nikita Volkov -maintainer: Nikita Volkov -author: Nikita Volkov -homepage: https://github.com/nikita-volkov/hasql -synopsis: Fast PostgreSQL driver with a flexible mapping API -description: - Root of the \"hasql\" ecosystem. - This library provides connection management, execution of queries and mapping of parameters and results. - Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. - For more details and tutorials see . - - The API comes free from all kinds of exceptions. - All error-reporting is explicit and is presented using the 'Either' type. - - \"hasql\" requires you to have the "\libpq\" C-library installed to compile. - Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. - \"libpq\" comes distributed with PostgreSQL, - so typically all you need is just to install the latest PostgreSQL distro. - - Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible - with a wide range of PostgreSQL servers with tests having been conducted starting from - version 8.3. - -category: Hasql, Database, PostgreSQL -abi: inplace -exposed-modules: - Hasql.TestingKit.Constants Hasql.TestingKit.Preludes.Base - Hasql.TestingKit.Statements.BrokenSyntax - Hasql.TestingKit.Statements.GenerateSeries - Hasql.TestingKit.Statements.WrongDecoder - Hasql.TestingKit.TestingDsl - -import-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit - -library-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit - -library-dirs-static: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit - -dynamic-library-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit - -data-dir: /home/deepak/code/haskell/hasql/. -hs-libraries: HShasql-1.9.1.2-inplace-testing-kit -depends: - base-4.21.0.0-2257 bytestring-0.12.2.0-e6fd hasql-1.9.1.2-inplace - transformers-0.6.1.2-c8d5 - uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906 - -haddock-interfaces: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/doc/html/hasql/testing-kit.haddock - -haddock-html: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/doc/html/hasql diff --git a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf b/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf deleted file mode 100644 index d4d08db692..0000000000 --- a/dist-newstyle/packagedb/ghc-9.12.2/hasql-1.9.1.2-inplace.conf +++ /dev/null @@ -1,93 +0,0 @@ -name: hasql -version: 1.9.1.2 -visibility: public -id: hasql-1.9.1.2-inplace -key: hasql-1.9.1.2-inplace -license: MIT -copyright: (c) 2014, Nikita Volkov -maintainer: Nikita Volkov -author: Nikita Volkov -homepage: https://github.com/nikita-volkov/hasql -synopsis: Fast PostgreSQL driver with a flexible mapping API -description: - Root of the \"hasql\" ecosystem. - This library provides connection management, execution of queries and mapping of parameters and results. - Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. - For more details and tutorials see . - - The API comes free from all kinds of exceptions. - All error-reporting is explicit and is presented using the 'Either' type. - - \"hasql\" requires you to have the "\libpq\" C-library installed to compile. - Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. - \"libpq\" comes distributed with PostgreSQL, - so typically all you need is just to install the latest PostgreSQL distro. - - Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible - with a wide range of PostgreSQL servers with tests having been conducted starting from - version 8.3. - -category: Hasql, Database, PostgreSQL -abi: inplace -exposed: True -exposed-modules: - Hasql.Connection Hasql.Connection.Setting - Hasql.Connection.Setting.Connection - Hasql.Connection.Setting.Connection.Param Hasql.Decoders - Hasql.Encoders Hasql.Pipeline Hasql.Session Hasql.Statement - -hidden-modules: - Hasql.Commands Hasql.Connection.Config - Hasql.Connection.Config.ConnectionString - Hasql.Connection.Config.ConnectionString.Params - Hasql.Connection.Core Hasql.Decoders.All Hasql.Decoders.Array - Hasql.Decoders.Composite Hasql.Decoders.Result - Hasql.Decoders.Results Hasql.Decoders.Row Hasql.Decoders.Value - Hasql.Encoders.All Hasql.Encoders.Array Hasql.Encoders.Params - Hasql.Encoders.Value Hasql.Errors Hasql.IO Hasql.LibPq14 - Hasql.LibPq14.Ffi Hasql.LibPq14.Mappings Hasql.Pipeline.Core - Hasql.PostgresTypeInfo Hasql.Prelude - Hasql.PreparedStatementRegistry Hasql.Session.Core - -import-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build - -library-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build - -library-dirs-static: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build - -dynamic-library-dirs: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build - -data-dir: /home/deepak/code/haskell/hasql/. -hs-libraries: HShasql-1.9.1.2-inplace -depends: - aeson-2.2.3.0-922bc113f11a99d4ef2624c988909c2914641aed18c4fdc6d2e7ee53369bd456 - attoparsec-0.14.4-85dcb790f55432b0d7341a1cbe8d13e762906a028d2c05e1ae09fc6e2da70917 - base-4.21.0.0-2257 bytestring-0.12.2.0-e6fd - bytestring-strict-builder-0.4.5.8-c4f22842c649bffba42a8f6a6f217da9321406b22232ed69f7446ee9b477f671 - containers-0.7-f244 - contravariant-1.5.5-acec6789bc0b0fa2369665abf668e2c698e33c8d9495f0805b5fde773fb0c0e1 - dlist-1.0-ce591e774aa1051644017e11bf59f78bcbe43afdf304e7f2495c122d1a783e21 - hashable-1.5.0.0-a63a8291a788738daae2cafd8361b8a63658a6676058e5aaaeb81281c6f36b42 - hashtables-1.4.2-4dd481e940663f565a49a32e9e94d2ddd3605d8088e3f05357159df866a89711 - iproute-1.7.15-2b6c6e437d70b4cc30152b6e84ef20a2da2cc548a3fa9298ebd50bcba7cc32bf - mtl-2.3.1-8dcd - postgresql-binary-0.14.0.1-6c2db3fe84861e9c57f971b6044854ebe38989c2fe6b5ae2b4cd6bd3d43d517e - postgresql-libpq-0.11.0.0-698107aa451370f020ab2413171f737969ad9544fc350b7e837b60327bbc0e74 - profunctors-5.6.3-bca76dfa25859b0f87c7dc9d0b6eee75b143a493a7d21e50c43ba699f98fa2fd - scientific-0.3.8.0-e4d1643449de607b31e7fdc5a701cb24ef207b3e97036d9761249c98dca75d4a - text-2.1.2-3aff - text-builder-1.0.0.4-3eff6efd7f55b671cf6506292e4a2ec10de1115adde17544a2a0382b6f72e3b4 - time-1.14-17e0 transformers-0.6.1.2-c8d5 - uuid-1.3.16-94a0da9f51c19f2ca8be03d0693749e049b17a735a85a8da01d93055735d2906 - vector-0.13.2.0-72f298165cfff5feec8ab94cad997fa1b87273fe1ca5836e08bd7683b0d9923c - witherable-0.5-151779aa9bfcafd8a4ee08ff52b9a70e5e4bc875bdcf06626bae725e448103ee - -haddock-interfaces: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/doc/html/hasql/hasql.haddock - -haddock-html: - /home/deepak/code/haskell/hasql/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/doc/html/hasql diff --git a/dist-newstyle/packagedb/ghc-9.12.2/package.cache b/dist-newstyle/packagedb/ghc-9.12.2/package.cache deleted file mode 100644 index 5f060a59eb26b1f2df645d13acab5e3aa82576fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12878 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 Date: Wed, 9 Jul 2025 16:34:38 +0300 Subject: [PATCH 1167/1204] Correct the docs --- src/library/other/Hasql/Pool/Config/Setting.hs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs index 317817b70d..3ce6a69e5d 100644 --- a/src/library/other/Hasql/Pool/Config/Setting.hs +++ b/src/library/other/Hasql/Pool/Config/Setting.hs @@ -51,8 +51,6 @@ idlenessTimeout x = -- | Connection string. -- --- You can use 'Hasql.Connection.settings' to construct it. --- -- By default it is: -- -- > "postgresql://postgres:postgres@localhost:5432/postgres" @@ -65,8 +63,6 @@ staticConnectionSettings x = -- Gets used each time a connection gets established by the pool. -- This may be useful for some authorization models. -- --- You can use 'Hasql.Connection.settings' to construct it. --- -- By default it is: -- -- > pure "postgresql://postgres:postgres@localhost:5432/postgres" From f1416333c8fb464da6efd9a1bc8fc3026b2427ae Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Wed, 9 Jul 2025 13:52:00 +0000 Subject: [PATCH 1168/1204] Set package version to 1.3.0.3 --- hasql-pool.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-pool.cabal b/hasql-pool.cabal index 98772cea9b..81e8c5a25b 100644 --- a/hasql-pool.cabal +++ b/hasql-pool.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool -version: 1.3.0.2 +version: 1.3.0.3 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool From 1097dbde3d16a30a23ef131ddca2baf41fa70d00 Mon Sep 17 00:00:00 2001 From: Laurence Isla Date: Thu, 10 Jul 2025 21:46:46 -0500 Subject: [PATCH 1169/1204] Add support for non-retryable transactions --- conflicts-test/Main.hs | 19 ++++++++++++++- library/Hasql/Transaction/Private/Sessions.hs | 23 ++++++++++--------- .../Hasql/Transaction/Private/Transaction.hs | 6 ++--- library/Hasql/Transaction/Sessions.hs | 11 ++++++++- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/conflicts-test/Main.hs b/conflicts-test/Main.hs index 88bbaaf281..55ba9c69ae 100644 --- a/conflicts-test/Main.hs +++ b/conflicts-test/Main.hs @@ -52,7 +52,7 @@ main = runTest test = test connection1 connection2 tests = - [readAndWriteTransactionsTest, transactionsTest, transactionAndQueryTest] + [readAndWriteTransactionsTest, transactionsTest, transactionsNoRetryTest, transactionAndQueryTest] session :: A.Connection -> B.Session a -> IO a session connection session = @@ -63,6 +63,10 @@ transaction :: A.Connection -> C.Transaction a -> IO a transaction connection transaction = session connection (G.transaction G.RepeatableRead G.Write transaction) +transactionNoRetry :: A.Connection -> C.Transaction a -> IO a +transactionNoRetry connection transaction = + session connection (G.transactionNoRetry G.RepeatableRead G.Write transaction) + type Test = A.Connection -> A.Connection -> IO Bool @@ -81,6 +85,19 @@ transactionsTest connection1 connection2 = traceShowM balance2 return (balance1 == Just 2000 && balance2 == Just (-2000)) +transactionsNoRetryTest :: Test +transactionsNoRetryTest connection1 connection2 = + do + id1 <- session connection1 (B.statement 0 D.createAccount) + id2 <- session connection1 (B.statement 0 D.createAccount) + async1 <- F.async (replicateM_ 1000 (transactionNoRetry connection1 (E.transfer id1 id2 1))) + async2 <- F.async (replicateM_ 1000 (transactionNoRetry connection2 (E.transfer id1 id2 1))) + result1 <- F.waitCatch async1 + result2 <- F.waitCatch async2 + let serialError = sequenceA [result1, result2] + traceShowM serialError + return $ either (("40001" `isInfixOf`) . show) (pure False) serialError + readAndWriteTransactionsTest :: Test readAndWriteTransactionsTest connection1 connection2 = do diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/library/Hasql/Transaction/Private/Sessions.hs index 5dd52db593..929b8a583e 100644 --- a/library/Hasql/Transaction/Private/Sessions.hs +++ b/library/Hasql/Transaction/Private/Sessions.hs @@ -10,25 +10,25 @@ We may want to do one transaction retry in case of the 23505 error, and fail if an identical error is seen. -} -inRetryingTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session a -inRetryingTransaction level mode session = +inRetryingTransaction :: IsolationLevel -> Mode -> Bool -> Session (a, Bool) -> Session a +inRetryingTransaction level mode retryOnError session = fix $ \retry -> do - attemptRes <- tryTransaction level mode session + attemptRes <- tryTransaction level mode retryOnError session case attemptRes of Just a -> return a Nothing -> retry -tryTransaction :: IsolationLevel -> Mode -> Session (a, Bool) -> Session (Maybe a) -tryTransaction level mode body = do +tryTransaction :: IsolationLevel -> Mode -> Bool -> Session (a, Bool) -> Session (Maybe a) +tryTransaction level mode retryOnError body = do statement () (Statements.beginTransaction level mode) bodyRes <- catchError (fmap Just body) $ \error -> do statement () Statements.abortTransaction - handleTransactionError error $ return Nothing + handleTransactionError error retryOnError $ return Nothing case bodyRes of Just (res, commit) -> catchError (commitOrAbort commit $> Just res) $ \error -> do - handleTransactionError error $ return Nothing + handleTransactionError error retryOnError $ return Nothing Nothing -> return Nothing commitOrAbort :: Bool -> Session () @@ -37,15 +37,16 @@ commitOrAbort commit = then statement () Statements.commitTransaction else statement () Statements.abortTransaction -handleTransactionError :: SessionError -> Session a -> Session a -handleTransactionError error onTransactionError = case error of +handleTransactionError :: SessionError -> Bool -> Session a -> Session a +handleTransactionError error retryOnError onTransactionError = case error of QueryError _ _ clientError -> onCommandError clientError PipelineError clientError -> onCommandError clientError where + retryOrThrow = if retryOnError then onTransactionError else throwError error onCommandError = \case ResultError (ServerError code _ _ _ _) -> case code of - "40001" -> onTransactionError - "40P01" -> onTransactionError + "40001" -> retryOrThrow + "40P01" -> retryOrThrow _ -> throwError error _ -> throwError error diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/library/Hasql/Transaction/Private/Transaction.hs index b3b10a6d2b..739abdbf85 100644 --- a/library/Hasql/Transaction/Private/Transaction.hs +++ b/library/Hasql/Transaction/Private/Transaction.hs @@ -25,9 +25,9 @@ instance (Monoid a) => Monoid (Transaction a) where -- | -- Execute the transaction using the provided isolation level and mode. {-# INLINE run #-} -run :: Transaction a -> IsolationLevel -> Mode -> B.Session a -run (Transaction session) isolation mode = - D.inRetryingTransaction isolation mode (runStateT session True) +run :: Transaction a -> IsolationLevel -> Mode -> Bool -> B.Session a +run (Transaction session) isolation mode retryOnError = + D.inRetryingTransaction isolation mode retryOnError (runStateT session True) -- | -- Possibly a multi-statement query, diff --git a/library/Hasql/Transaction/Sessions.hs b/library/Hasql/Transaction/Sessions.hs index 35383eb3f6..6333eb7ce8 100644 --- a/library/Hasql/Transaction/Sessions.hs +++ b/library/Hasql/Transaction/Sessions.hs @@ -1,5 +1,6 @@ module Hasql.Transaction.Sessions ( transaction, + transactionNoRetry, -- * Transaction settings C.Mode (..), @@ -9,6 +10,7 @@ where import Hasql.Session qualified as B import Hasql.Transaction.Config qualified as C +import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Transaction qualified as A -- | @@ -16,4 +18,11 @@ import Hasql.Transaction.Private.Transaction qualified as A {-# INLINE transaction #-} transaction :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a transaction isolation mode transaction = - A.run transaction isolation mode + A.run transaction isolation mode True + +-- | +-- Execute the transaction but do not retry it on errors. +{-# INLINE transactionNoRetry #-} +transactionNoRetry :: C.IsolationLevel -> C.Mode -> A.Transaction a -> B.Session a +transactionNoRetry isolation mode transaction = + A.run transaction isolation mode False From 93d7a3b7c7e0740be71cc76c89ad65ccb1fa14fc Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Fri, 18 Jul 2025 05:44:17 +0000 Subject: [PATCH 1170/1204] Set package version to 1.2.1 --- hasql-transaction.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-transaction.cabal b/hasql-transaction.cabal index 90b92aa3ec..9aa1bf3d3e 100644 --- a/hasql-transaction.cabal +++ b/hasql-transaction.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-transaction -version: 1.2.0.1 +version: 1.2.1 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql From ea6080c317f3dd2c5fe73f0c1210bf332c57d178 Mon Sep 17 00:00:00 2001 From: Kari Pahula Date: Sun, 27 Jul 2025 14:55:28 +0300 Subject: [PATCH 1171/1204] Add macaddr encoder and decoder --- library/Hasql/Decoders.hs | 1 + library/Hasql/Decoders/All.hs | 11 +++++++++++ library/Hasql/Encoders.hs | 1 + library/Hasql/Encoders/All.hs | 11 +++++++++++ 4 files changed, 24 insertions(+) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 6aa7a9c06f..0ab0a637dc 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -45,6 +45,7 @@ module Hasql.Decoders interval, uuid, inet, + macaddr, json, jsonBytes, jsonb, diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index 3217c7687d..e99a9a8641 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -258,6 +258,17 @@ uuid = Value (Value.decoder (const A.uuid)) inet :: Value Iproute.IPRange inet = Value (Value.decoder (const A.inet)) +-- | +-- Decoder of the @MACADDR@ values. +-- +-- Represented as a 6-tuple of Word8 values in big endian order. If +-- you use `ip` library consider using it with `fromOctets`. +-- +-- > (\(a,b,c,d,e,f) -> fromOctets a b c d e f) <$> macaddr +{-# INLINEABLE macaddr #-} +macaddr :: Value (Word8, Word8, Word8, Word8, Word8, Word8) +macaddr = Value (Value.decoder (const A.macaddr)) + -- | -- Decoder of the @JSON@ values into a JSON AST. {-# INLINEABLE json #-} diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 8e928c57a3..59c749dfa7 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -34,6 +34,7 @@ module Hasql.Encoders interval, uuid, inet, + macaddr, json, jsonBytes, jsonLazyBytes, diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 2f71aa71f2..2ed0b677dd 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -212,6 +212,17 @@ uuid = Value (Value.unsafePTIWithShow PTI.uuid (const A.uuid)) inet :: Value Iproute.IPRange inet = Value (Value.unsafePTIWithShow PTI.inet (const A.inet)) +-- | +-- Encoder of @MACADDR@ values. +-- +-- Represented as a 6-tuple of Word8 values in big endian order. If +-- you use `ip` library consider using it with `toOctets`. +-- +-- > toOctets >$< macaddr +{-# INLINEABLE macaddr #-} +macaddr :: Value (Word8, Word8, Word8, Word8, Word8, Word8) +macaddr = Value (Value.unsafePTIWithShow PTI.macaddr (const A.macaddr)) + -- | -- Encoder of @JSON@ values from JSON AST. {-# INLINEABLE json #-} From 011a3e1fd21315c8afd088bdf85aea00d89226d2 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 28 Jul 2025 08:42:35 +0300 Subject: [PATCH 1172/1204] Restrict postgresql-binary version to 0.14.1 or higher --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index f2e216a561..5a367890af 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -150,7 +150,7 @@ library hashtables >=1.1 && <2, iproute >=1.7 && <1.8, mtl >=2 && <3, - postgresql-binary >=0.14 && <0.15, + postgresql-binary >=0.14.1 && <0.15, postgresql-libpq >=0.10.1 && <0.12, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, From b49b09d5f08ed2626aaec0aa7dfca248bc4a344e Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Mon, 28 Jul 2025 06:11:18 +0000 Subject: [PATCH 1173/1204] Set package version to 1.9.2 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 5a367890af..c506c1f10a 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.9.1.2 +version: 1.9.2 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From 962ae984cd81cfedc667808c38e418f7be382548 Mon Sep 17 00:00:00 2001 From: Laurence Isla Date: Tue, 5 Aug 2025 19:16:02 -0500 Subject: [PATCH 1174/1204] Add support for hasql 1.9 --- app/Main.hs | 5 +++-- hasql-notifications.cabal | 4 ++-- src/Hasql/Notifications.hs | 8 ++++++-- test/Hasql/NotificationsSpec.hs | 4 +++- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index e97a2fcfed..c64e885e8c 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -4,6 +4,8 @@ import System.IO import System.Exit (die) import Hasql.Connection +import Hasql.Connection.Setting +import Hasql.Connection.Setting.Connection import Hasql.Notifications main :: IO () @@ -11,11 +13,10 @@ main = do hSetBuffering stdout NoBuffering hSetBuffering stderr NoBuffering - dbOrError <- acquire "postgres://localhost/db_name" + dbOrError <- acquire [ connection $ string "postgres://localhost/db_name" ] case dbOrError of Right db -> do let channelToListen = toPgIdentifier "sample-channel" listen db channelToListen waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db _ -> die "Could not open database connection" - diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index cce2912b44..afcef2ebe4 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -19,9 +19,9 @@ library build-depends: base >= 4.7 && < 5 , bytestring >= 0.10.8.2 && < 0.13 , text >= 2 && < 2.2 - , hasql-pool >= 1.2 && < 1.3 + , hasql-pool >= 1.3 && < 1.4 , postgresql-libpq >= 0.9 && < 1.0 - , hasql >= 0.19 && < 1.9 + , hasql >= 1.9 && < 1.10 default-language: Haskell2010 ghc-options: -Wall diff --git a/src/Hasql/Notifications.hs b/src/Hasql/Notifications.hs index 50720e6b36..5c3c0eaebd 100644 --- a/src/Hasql/Notifications.hs +++ b/src/Hasql/Notifications.hs @@ -99,11 +99,13 @@ notify con channel mesg = -- import System.Exit (die) -- -- import Hasql.Connection +-- import Hasql.Connection.Setting +-- import Hasql.Connection.Setting.Connection -- import Hasql.Notifications -- -- main :: IO () -- main = do --- dbOrError <- acquire "postgres://localhost/db_name" +-- dbOrError <- acquire [ connection $ string "postgres://localhost/db_name" ] -- case dbOrError of -- Right db -> do -- let channelToListen = toPgIdentifier "sample-channel" @@ -160,6 +162,8 @@ executeOrPanic cmd pqCon = do -- import System.Exit (die) -- -- import Hasql.Connection +-- import Hasql.Connection.Setting +-- import Hasql.Connection.Setting.Connection -- import Hasql.Notifications -- -- notificationHandler :: ByteString -> ByteString -> IO() @@ -169,7 +173,7 @@ executeOrPanic cmd pqCon = do -- -- main :: IO () -- main = do --- dbOrError <- acquire "postgres://localhost/db_name" +-- dbOrError <- acquire [ connection $ string "postgres://localhost/db_name" ] -- case dbOrError of -- Right db -> do -- let channelToListen = toPgIdentifier "sample-channel" diff --git a/test/Hasql/NotificationsSpec.hs b/test/Hasql/NotificationsSpec.hs index d944e6e94d..a03102ebdc 100644 --- a/test/Hasql/NotificationsSpec.hs +++ b/test/Hasql/NotificationsSpec.hs @@ -5,6 +5,8 @@ import Control.Concurrent.MVar import Control.Monad (void) import Data.ByteString import Hasql.Connection +import Hasql.Connection.Setting +import Hasql.Connection.Setting.Connection import Hasql.Notifications import System.Exit (die) import Test.Hspec @@ -20,7 +22,7 @@ spec = do describe "send and receive notification" $ describe "when I send a notification to channel my handler is listening to" $ it "should call our notification handler" $ do - dbOrError <- acquire "postgres://postgres:roottoor@localhost/hasql_notifications_test" + dbOrError <- acquire [ connection $ string "postgres://postgres:roottoor@localhost/hasql_notifications_test"] case dbOrError of Right db -> do let channelToListen = toPgIdentifier "test-channel" From 66aee30101ad05ed024b25083776f7450fb9f44e Mon Sep 17 00:00:00 2001 From: Shaun Sharples Date: Fri, 8 Aug 2025 13:01:43 +0200 Subject: [PATCH 1175/1204] support range and multirange --- flake.nix | 77 +++++++++++++++++++++++++++++++ library/Hasql/Decoders/All.hs | 73 +++++++++++++++++++++++++++++ library/Hasql/Encoders/All.hs | 69 +++++++++++++++++++++++++++ library/Hasql/PostgresTypeInfo.hs | 18 ++++++++ 4 files changed, 237 insertions(+) create mode 100644 flake.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000000..8312115d9d --- /dev/null +++ b/flake.nix @@ -0,0 +1,77 @@ +{ + description = "hasql"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + }; + + outputs = + { self, nixpkgs, ... }: + let + supportedSystems = [ + "x86_64-linux" + "aarch64-darwin" + ]; + forallSystems = + f: + nixpkgs.lib.genAttrs supportedSystems ( + system: + f (rec { + inherit system; + pkgs = nixpkgsFor system; + haskellPackages = hpkgsFor system pkgs; + }) + ); + nixpkgsFor = + system: + import nixpkgs { + inherit system; + config = { }; + }; + hpkgsFor = + system: pkgs: + with pkgs.haskell.lib; + pkgs.haskell.packages.ghc910.override { + overrides = self: super: { + rel8 = dontCheck super.rel8; # requires tmp-postgres + hlint_3_10 = super.hlint_3_10.override rec { + ghc-lib-parser = super.ghc-lib-parser_9_12_2_20250421; + ghc-lib-parser-ex = super.ghc-lib-parser-ex_9_12_0_0.override { + inherit ghc-lib-parser; + + }; + }; + }; + }; + in + { + packages = forallSystems ( + { + system, + pkgs, + haskellPackages, + }: + { + hasql = haskellPackages.callCabal2nix "hasql" ./. { }; + default = self.packages.${system}.hasql; + } + ); + devShells = forallSystems ( + { + system, + pkgs, + haskellPackages, + }: + { + hasql = haskellPackages.shellFor { + packages = p: [ self.packages.${system}.hasql ]; + buildInputs = with haskellPackages; [ + cabal-install + haskell-language-server + ]; + }; + default = self.devShells.${system}.hasql; + } + ); + }; +} diff --git a/library/Hasql/Decoders/All.hs b/library/Hasql/Decoders/All.hs index e99a9a8641..9a8624dedb 100644 --- a/library/Hasql/Decoders/All.hs +++ b/library/Hasql/Decoders/All.hs @@ -14,6 +14,7 @@ import Hasql.Decoders.Value qualified as Value import Hasql.Prelude hiding (bool, maybe) import Hasql.Prelude qualified as Prelude import PostgreSQL.Binary.Decoding qualified as A +import PostgreSQL.Binary.Range qualified as R -- * Result @@ -293,6 +294,78 @@ jsonb = Value (Value.decoder (const A.jsonb_ast)) jsonbBytes :: (ByteString -> Either Text a) -> Value a jsonbBytes fn = Value (Value.decoder (const (A.jsonb_bytes fn))) +-- | +-- Decoder of the @INT4RANGE@ values. +{-# INLINEABLE int4range #-} +int4range :: Value (R.Range Int32) +int4range = Value (Value.decoder (const A.int4range)) + +-- | +-- Decoder of the @INT8RANGE@ values. +{-# INLINEABLE int8range #-} +int8range :: Value (R.Range Int64) +int8range = Value (Value.decoder (const A.int8range)) + +-- | +-- Decoder of the @NUMRANGE@ values. +{-# INLINEABLE numrange #-} +numrange :: Value (R.Range Scientific) +numrange = Value (Value.decoder (const A.numrange)) + +-- | +-- Decoder of the @TSRANGE@ values. +{-# INLINEABLE tsrange #-} +tsrange :: Value (R.Range LocalTime) +tsrange = Value (Value.decoder (Prelude.bool A.tsrange_float A.tsrange_int)) + +-- | +-- Decoder of the @TSTZRANGE@ values. +{-# INLINEABLE tstzrange #-} +tstzrange :: Value (R.Range UTCTime) +tstzrange = Value (Value.decoder (Prelude.bool A.tstzrange_float A.tstzrange_int)) + +-- | +-- Decoder of the @DATERANGE@ values. +{-# INLINEABLE daterange #-} +daterange :: Value (R.Range Day) +daterange = Value (Value.decoder (const A.daterange)) + +-- | +-- Decoder of the @INT4MULTIRANGE@ values. +{-# INLINEABLE int4multirange #-} +int4multirange :: Value (R.Multirange Int32) +int4multirange = Value (Value.decoder (const A.int4multirange)) + +-- | +-- Decoder of the @INT8MULTIRANGE@ values. +{-# INLINEABLE int8multirange #-} +int8multirange :: Value (R.Multirange Int64) +int8multirange = Value (Value.decoder (const A.int8multirange)) + +-- | +-- Decoder of the @NUMMULTIRANGE@ values. +{-# INLINEABLE nummultirange #-} +nummultirange :: Value (R.Multirange Scientific) +nummultirange = Value (Value.decoder (const A.nummultirange)) + +-- | +-- Decoder of the @TSMULTIRANGE@ values. +{-# INLINEABLE tsmultirange #-} +tsmultirange :: Value (R.Multirange LocalTime) +tsmultirange = Value (Value.decoder (Prelude.bool A.tsmultirange_float A.tsmultirange_int)) + +-- | +-- Decoder of the @TSTZMULTIRANGE@ values. +{-# INLINEABLE tstzmultirange #-} +tstzmultirange :: Value (R.Multirange UTCTime) +tstzmultirange = Value (Value.decoder (Prelude.bool A.tstzmultirange_float A.tstzmultirange_int)) + +-- | +-- Decoder of the @DATEMULTIRANGE@ values. +{-# INLINEABLE datemultirange #-} +datemultirange :: Value (R.Multirange Day) +datemultirange = Value (Value.decoder (const A.datemultirange)) + -- | -- Lift a custom value decoder function to a 'Value' decoder. {-# INLINEABLE custom #-} diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 2ed0b677dd..72aee20206 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -12,6 +12,7 @@ import Hasql.PostgresTypeInfo qualified as PTI import Hasql.Prelude hiding (bool) import Hasql.Prelude qualified as Prelude import PostgreSQL.Binary.Encoding qualified as A +import PostgreSQL.Binary.Range qualified as R import TextBuilder qualified as C -- * Parameters Product Encoder @@ -271,6 +272,74 @@ oid = Value (Value.unsafePTIWithShow PTI.oid (const A.int4_int32)) name :: Value Text name = Value (Value.unsafePTIWithShow PTI.name (const A.text_strict)) +-- | +-- Encoder of @INT4RANGE@ values. +{-# INLINEABLE int4range #-} +int4range :: Value (R.Range Int32) +int4range = Value (Value.unsafePTIWithShow PTI.int4range (const A.int4range)) + +-- | +-- Encoder of @INT8RANGE@ values. +{-# INLINEABLE int8range #-} +int8range :: Value (R.Range Int64) +int8range = Value (Value.unsafePTIWithShow PTI.int8range (const A.int8range)) + +-- | +-- Encoder of @NUMRANGE@ values. +{-# INLINEABLE numrange #-} +numrange :: Value (R.Range Scientific) +numrange = Value (Value.unsafePTIWithShow PTI.numrange (const A.numrange)) + +-- | +-- Encoder of @TSRANGE@ values. +{-# INLINEABLE tsrange #-} +tsrange :: Value (R.Range LocalTime) +tsrange = Value (Value.unsafePTIWithShow PTI.tsrange (Prelude.bool A.tsrange_float A.tsrange_int)) + +-- | +-- Encoder of @TSTZRANGE@ values. +{-# INLINEABLE tstzrange #-} +tstzrange :: Value (R.Range UTCTime) +tstzrange = Value (Value.unsafePTIWithShow PTI.tstzrange (Prelude.bool A.tstzrange_float A.tstzrange_int)) + +-- | +-- Encoder of @DATERANGE@ values. +{-# INLINEABLE daterange #-} +daterange :: Value (R.Range Day) +daterange = Value (Value.unsafePTIWithShow PTI.daterange (const A.daterange)) + +-- | +-- Encoder of @INT4MULTIRANGE@ values. +{-# INLINEABLE int4multirange #-} +int4multirange :: Value (R.Multirange Int32) +int4multirange = Value (Value.unsafePTIWithShow PTI.int4multirange (const A.int4multirange)) + +-- Encoder of @INT8MULTIRANGE@ values. +{-# INLINEABLE int8multirange #-} +int8multirange :: Value (R.Multirange Int64) +int8multirange = Value (Value.unsafePTIWithShow PTI.int8multirange (const A.int8multirange)) + +-- Encoder of @NUMMULTIRANGE@ values. +{-# INLINEABLE nummultirange #-} +nummultirange :: Value (R.Multirange Scientific) +nummultirange = Value (Value.unsafePTIWithShow PTI.nummultirange (const A.nummultirange)) + +-- | +-- Encoder of @TSMULTIRANGE@ values. +{-# INLINEABLE tsmultirange #-} +tsmultirange :: Value (R.Multirange LocalTime) +tsmultirange = Value (Value.unsafePTIWithShow PTI.tsmultirange (Prelude.bool A.tsmultirange_float A.tsmultirange_int)) + +-- Encoder of @TSTZMULTIRANGE@ values. +{-# INLINEABLE tstzmultirange #-} +tstzmultirange :: Value (R.Multirange UTCTime) +tstzmultirange = Value (Value.unsafePTIWithShow PTI.tstzmultirange (Prelude.bool A.tstzmultirange_float A.tstzmultirange_int)) + +-- Encoder of @DATEMULTIRANGE@ values. +{-# INLINEABLE datemultirange #-} +datemultirange :: Value (R.Multirange Day) +datemultirange = Value (Value.unsafePTIWithShow PTI.datemultirange (const A.datemultirange)) + -- | -- Given a function, -- which maps a value into a textual enum label used on the DB side, diff --git a/library/Hasql/PostgresTypeInfo.hs b/library/Hasql/PostgresTypeInfo.hs index fb7cc27e95..7c46cc712e 100644 --- a/library/Hasql/PostgresTypeInfo.hs +++ b/library/Hasql/PostgresTypeInfo.hs @@ -61,6 +61,9 @@ date = mkPTI LibPQ.Binary 1082 (Just 1182) daterange :: PTI daterange = mkPTI LibPQ.Binary 3912 (Just 3913) +datemultirange :: PTI +datemultirange = mkPTI LibPQ.Binary 4535 (Just 6155) + float4 :: PTI float4 = mkPTI LibPQ.Binary 700 (Just 1021) @@ -85,12 +88,18 @@ int4 = mkPTI LibPQ.Binary 23 (Just 1007) int4range :: PTI int4range = mkPTI LibPQ.Binary 3904 (Just 3905) +int4multirange :: PTI +int4multirange = mkPTI LibPQ.Binary 4451 (Just 6150) + int8 :: PTI int8 = mkPTI LibPQ.Binary 20 (Just 1016) int8range :: PTI int8range = mkPTI LibPQ.Binary 3926 (Just 3927) +int8multirange :: PTI +int8multirange = mkPTI LibPQ.Binary 4536 (Just 6157) + interval :: PTI interval = mkPTI LibPQ.Binary 1186 (Just 1187) @@ -121,6 +130,9 @@ numeric = mkPTI LibPQ.Binary 1700 (Just 1231) numrange :: PTI numrange = mkPTI LibPQ.Binary 3906 (Just 3907) +nummultirange :: PTI +nummultirange = mkPTI LibPQ.Binary 4532 (Just 6151) + oid :: PTI oid = mkPTI LibPQ.Binary 26 (Just 1028) @@ -196,9 +208,15 @@ tsquery = mkPTI LibPQ.Binary 3615 (Just 3645) tsrange :: PTI tsrange = mkPTI LibPQ.Binary 3908 (Just 3909) +tsmultirange :: PTI +tsmultirange = mkPTI LibPQ.Binary 4533 (Just 6152) + tstzrange :: PTI tstzrange = mkPTI LibPQ.Binary 3910 (Just 3911) +tstzmultirange :: PTI +tstzmultirange = mkPTI LibPQ.Binary 4534 (Just 6153) + tsvector :: PTI tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) From 1addb1bd1cf9081a2584c57232bddb0b48698612 Mon Sep 17 00:00:00 2001 From: Shaun Sharples Date: Fri, 8 Aug 2025 13:06:31 +0200 Subject: [PATCH 1176/1204] remove accidentally committed flake.nix --- flake.nix | 77 ------------------------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 flake.nix diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 8312115d9d..0000000000 --- a/flake.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - description = "hasql"; - - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - }; - - outputs = - { self, nixpkgs, ... }: - let - supportedSystems = [ - "x86_64-linux" - "aarch64-darwin" - ]; - forallSystems = - f: - nixpkgs.lib.genAttrs supportedSystems ( - system: - f (rec { - inherit system; - pkgs = nixpkgsFor system; - haskellPackages = hpkgsFor system pkgs; - }) - ); - nixpkgsFor = - system: - import nixpkgs { - inherit system; - config = { }; - }; - hpkgsFor = - system: pkgs: - with pkgs.haskell.lib; - pkgs.haskell.packages.ghc910.override { - overrides = self: super: { - rel8 = dontCheck super.rel8; # requires tmp-postgres - hlint_3_10 = super.hlint_3_10.override rec { - ghc-lib-parser = super.ghc-lib-parser_9_12_2_20250421; - ghc-lib-parser-ex = super.ghc-lib-parser-ex_9_12_0_0.override { - inherit ghc-lib-parser; - - }; - }; - }; - }; - in - { - packages = forallSystems ( - { - system, - pkgs, - haskellPackages, - }: - { - hasql = haskellPackages.callCabal2nix "hasql" ./. { }; - default = self.packages.${system}.hasql; - } - ); - devShells = forallSystems ( - { - system, - pkgs, - haskellPackages, - }: - { - hasql = haskellPackages.shellFor { - packages = p: [ self.packages.${system}.hasql ]; - buildInputs = with haskellPackages; [ - cabal-install - haskell-language-server - ]; - }; - default = self.devShells.${system}.hasql; - } - ); - }; -} From 89f1f27ca15e3ad9011f213366f8e6fca287b88b Mon Sep 17 00:00:00 2001 From: Shaun Sharples Date: Fri, 8 Aug 2025 21:24:23 +0200 Subject: [PATCH 1177/1204] add missing pipe character at beginning of comments --- hasql.cabal | 2 +- library/Hasql/Encoders/All.hs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index c506c1f10a..d56347c59f 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -150,7 +150,7 @@ library hashtables >=1.1 && <2, iproute >=1.7 && <1.8, mtl >=2 && <3, - postgresql-binary >=0.14.1 && <0.15, + postgresql-binary >=0.14.2 && <0.15, postgresql-libpq >=0.10.1 && <0.12, profunctors >=5.1 && <6, scientific >=0.3 && <0.4, diff --git a/library/Hasql/Encoders/All.hs b/library/Hasql/Encoders/All.hs index 72aee20206..480a43ba4d 100644 --- a/library/Hasql/Encoders/All.hs +++ b/library/Hasql/Encoders/All.hs @@ -314,11 +314,13 @@ daterange = Value (Value.unsafePTIWithShow PTI.daterange (const A.daterange)) int4multirange :: Value (R.Multirange Int32) int4multirange = Value (Value.unsafePTIWithShow PTI.int4multirange (const A.int4multirange)) +-- | -- Encoder of @INT8MULTIRANGE@ values. {-# INLINEABLE int8multirange #-} int8multirange :: Value (R.Multirange Int64) int8multirange = Value (Value.unsafePTIWithShow PTI.int8multirange (const A.int8multirange)) +-- | -- Encoder of @NUMMULTIRANGE@ values. {-# INLINEABLE nummultirange #-} nummultirange :: Value (R.Multirange Scientific) @@ -330,11 +332,13 @@ nummultirange = Value (Value.unsafePTIWithShow PTI.nummultirange (const A.nummul tsmultirange :: Value (R.Multirange LocalTime) tsmultirange = Value (Value.unsafePTIWithShow PTI.tsmultirange (Prelude.bool A.tsmultirange_float A.tsmultirange_int)) +-- | -- Encoder of @TSTZMULTIRANGE@ values. {-# INLINEABLE tstzmultirange #-} tstzmultirange :: Value (R.Multirange UTCTime) tstzmultirange = Value (Value.unsafePTIWithShow PTI.tstzmultirange (Prelude.bool A.tstzmultirange_float A.tstzmultirange_int)) +-- | -- Encoder of @DATEMULTIRANGE@ values. {-# INLINEABLE datemultirange #-} datemultirange :: Value (R.Multirange Day) From 02ba0bc00124a0dc5a54900c529e454cf0891bbd Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 9 Aug 2025 07:41:37 +0300 Subject: [PATCH 1178/1204] Add missing exports --- library/Hasql/Decoders.hs | 12 ++++++++++++ library/Hasql/Encoders.hs | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/library/Hasql/Decoders.hs b/library/Hasql/Decoders.hs index 0ab0a637dc..37a6602f35 100644 --- a/library/Hasql/Decoders.hs +++ b/library/Hasql/Decoders.hs @@ -50,6 +50,18 @@ module Hasql.Decoders jsonBytes, jsonb, jsonbBytes, + int4range, + int8range, + numrange, + tsrange, + tstzrange, + daterange, + int4multirange, + int8multirange, + nummultirange, + tsmultirange, + tstzmultirange, + datemultirange, array, listArray, vectorArray, diff --git a/library/Hasql/Encoders.hs b/library/Hasql/Encoders.hs index 59c749dfa7..e5840378c7 100644 --- a/library/Hasql/Encoders.hs +++ b/library/Hasql/Encoders.hs @@ -41,6 +41,18 @@ module Hasql.Encoders jsonb, jsonbBytes, jsonbLazyBytes, + int4range, + int8range, + numrange, + tsrange, + tstzrange, + daterange, + int4multirange, + int8multirange, + nummultirange, + tsmultirange, + tstzmultirange, + datemultirange, name, oid, enum, From 58acc382127abac845624087f9be7fd5a12be468 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Sat, 9 Aug 2025 07:41:47 +0300 Subject: [PATCH 1179/1204] Ditch typeable --- hasql.cabal | 1 - library/Hasql/Errors.hs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/hasql.cabal b/hasql.cabal index d56347c59f..124d0e1f08 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -46,7 +46,6 @@ common base ConstraintKinds DataKinds DefaultSignatures - DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric diff --git a/library/Hasql/Errors.hs b/library/Hasql/Errors.hs index 8e36b1bedf..7f87dbe1e9 100644 --- a/library/Hasql/Errors.hs +++ b/library/Hasql/Errors.hs @@ -18,7 +18,7 @@ data SessionError PipelineError -- | Error details. CommandError - deriving (Show, Eq, Typeable) + deriving (Show, Eq) instance Exception SessionError where displayException = \case From 0d2a135f83421a21c529fe2a2c2ace6015047bd0 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Sat, 9 Aug 2025 05:02:32 +0000 Subject: [PATCH 1180/1204] Set package version to 1.9.3 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 124d0e1f08..04dd6663a8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql -version: 1.9.2 +version: 1.9.3 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description: From aafad9151f60df8376a78b86c98189eda4413f37 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 14 Aug 2025 14:18:06 -0400 Subject: [PATCH 1181/1204] Update to version v4 since v2 would fail the pipeline --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e66458423..c0c24e71b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: with: ghc-version: ${{ matrix.ghc }} - - uses: actions/cache@v2.1.3 + - uses: actions/cache@v4 name: Cache ~/dist-newstyle with: path: ~/dist-newstyle From 77206be984c373c0d63f1c5fdf71e483b9ee0996 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 14 Aug 2025 14:37:42 -0400 Subject: [PATCH 1182/1204] Bump minor version number (update hasql dependency) --- hasql-notifications.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql-notifications.cabal b/hasql-notifications.cabal index afcef2ebe4..1e305f92c2 100644 --- a/hasql-notifications.cabal +++ b/hasql-notifications.cabal @@ -1,5 +1,5 @@ name: hasql-notifications -version: 0.2.3.2 +version: 0.2.4.0 synopsis: LISTEN/NOTIFY support for Hasql description: Use PostgreSQL Asynchronous notification support with your Hasql Types. homepage: https://github.com/diogob/hasql-notifications From 070290d1d4bc96d306044fc26d6fc2309c1c6e00 Mon Sep 17 00:00:00 2001 From: pranaysashank Date: Wed, 3 Sep 2025 16:04:46 +0530 Subject: [PATCH 1183/1204] Handle the case when password is an empty string. I am totally not sure if an empty string should be passed in the connection string. Not passing the password key like with this change means the environment variable PGPASSWORD will be used instead. --- .../Hasql/Connection/Config/ConnectionString.hs | 2 +- tasty/Main.hs | 12 +++++++++++- tasty/Main/Connection.hs | 11 +++++++++++ testing-kit/Hasql/TestingKit/Constants.hs | 16 ++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs index bc5a0699d2..37801a3b4b 100644 --- a/library/Hasql/Connection/Config/ConnectionString.hs +++ b/library/Hasql/Connection/Config/ConnectionString.hs @@ -18,4 +18,4 @@ fromParams :: Params.Params -> ConnectionString fromParams = B.intercalate " " . fmap renderParam . Map.toList where - renderParam (k, v) = mconcat [k, "=", v] + renderParam (k, v) = if B.null v then mempty else mconcat [k, "=", v] diff --git a/tasty/Main.hs b/tasty/Main.hs index 361c85fb04..a437dcf398 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -469,5 +469,15 @@ tree = testCase "List decoding" $ let actualIO = Session.runSessionOnLocalDb $ Session.statement () $ Statements.selectList - in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO, + testCase "Connection works with empty password" + $ let statement = + Statement.Statement "select 1::bigint" Encoders.noParams decoder True + where + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + session = Session.statement () statement + in do + x <- Connection.withEmptyPassword (Session.run session) + assertEqual (show x) (Right (Right 1)) x ] diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index a2879da9d7..ca5ee5061b 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -14,3 +14,14 @@ with handler = lift $ handler connection release connection = lift $ HC.release connection + +withEmptyPassword :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) +withEmptyPassword handler = + runExceptT $ acquire >>= \connection -> use connection <* release connection + where + acquire = + ExceptT $ HC.acquire Constants.localConnectionSettingsEmptyPassword + use connection = + lift $ handler connection + release connection = + lift $ HC.release connection diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs index 8ff8ba9b2d..28772afc73 100644 --- a/testing-kit/Hasql/TestingKit/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -16,3 +16,19 @@ localConnectionSettings = ] ) ] + +localConnectionSettingsEmptyPassword :: [Setting.Setting] +localConnectionSettingsEmptyPassword = + [ Setting.connection + ( Setting.Connection.params + [ Setting.Connection.Component.host "localhost", + -- a different port and user are necessary otherwise + -- `password=`will swallow the next immediate field + -- which is port and then port gets ignored and defaults to 5432 + Setting.Connection.Component.port 5434, + Setting.Connection.Component.user "newuser", + Setting.Connection.Component.dbname "newuser", + Setting.Connection.Component.password "" + ] + ) + ] From 6262cef5b1bfcc53c302c5ffdb57d31127184c2a Mon Sep 17 00:00:00 2001 From: pranaysashank Date: Mon, 8 Sep 2025 13:01:41 +0530 Subject: [PATCH 1184/1204] Always quote values and escape existing single quotes and backslash. --- .github/workflows/check.yaml | 6 +++++ hasql.cabal | 1 + .../Connection/Config/ConnectionString.hs | 9 ++++++- tasty/Main.hs | 24 +++++++++++++++++-- tasty/Main/Connection.hs | 6 ++--- testing-kit/Hasql/TestingKit/Constants.hs | 14 +++++------ 6 files changed, 46 insertions(+), 14 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index e454bb4499..8152e4d260 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -37,6 +37,12 @@ jobs: steps: + - name: Setup newusers in postgres + run: | + psql -c 'create user "new user" with login password null;' + psql -c 'create user "new'\'' user" with login password null;' + psql -c 'create user "new\ user" with login password null;' + - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 with: ghc: ${{matrix.ghc}} diff --git a/hasql.cabal b/hasql.cabal index 04dd6663a8..061f7a2987 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -177,6 +177,7 @@ library testing-kit base, bytestring, hasql, + text, transformers, uuid, diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs index 37801a3b4b..879acda1f0 100644 --- a/library/Hasql/Connection/Config/ConnectionString.hs +++ b/library/Hasql/Connection/Config/ConnectionString.hs @@ -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,10 @@ fromParams :: Params.Params -> ConnectionString fromParams = B.intercalate " " . fmap renderParam . Map.toList where - renderParam (k, v) = if B.null v then mempty else mconcat [k, "=", v] + renderParam (k, v) = mconcat [k, "=", "'", escapeSingleQuote v, "'"] + + escapeSingleQuote = BC.concatMap (\w -> + case w of + '\'' -> BC.pack "\\'" + '\\' -> BC.pack "\\\\" + otherwise -> BC.singleton w) diff --git a/tasty/Main.hs b/tasty/Main.hs index a437dcf398..213e18c0ae 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -470,7 +470,7 @@ tree = $ let actualIO = Session.runSessionOnLocalDb $ Session.statement () $ Statements.selectList in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO, - testCase "Connection works with empty password" + testCase "Connection works with spaces in params" $ let statement = Statement.Statement "select 1::bigint" Encoders.noParams decoder True where @@ -478,6 +478,26 @@ tree = (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) session = Session.statement () statement in do - x <- Connection.withEmptyPassword (Session.run session) + x <- Connection.withEmptyPassword "new user" (Session.run session) + assertEqual (show x) (Right (Right 1)) x, + testCase "Connection params with single quotes in them are properly escaped" + $ let statement = + Statement.Statement "select 1::bigint" Encoders.noParams decoder True + where + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + session = Session.statement () statement + in do + x <- Connection.withEmptyPassword "new' user" (Session.run session) + assertEqual (show x) (Right (Right 1)) x, + testCase "Connection params with backslashes in them are properly escaped" + $ let statement = + Statement.Statement "select 1::bigint" Encoders.noParams decoder True + where + decoder = + (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + session = Session.statement () statement + in do + x <- Connection.withEmptyPassword "new\\ user" (Session.run session) assertEqual (show x) (Right (Right 1)) x ] diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index ca5ee5061b..66a0f84e62 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -15,12 +15,12 @@ with handler = release connection = lift $ HC.release connection -withEmptyPassword :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) -withEmptyPassword handler = +withEmptyPassword :: Text -> (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) +withEmptyPassword userName handler = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ HC.acquire Constants.localConnectionSettingsEmptyPassword + ExceptT $ HC.acquire (Constants.localConnectionSettingsEmptyPassword userName) use connection = lift $ handler connection release connection = diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs index 28772afc73..47d00f948b 100644 --- a/testing-kit/Hasql/TestingKit/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -1,5 +1,6 @@ module Hasql.TestingKit.Constants where +import Data.Text (Text) import Hasql.Connection.Setting qualified as Setting import Hasql.Connection.Setting.Connection qualified as Setting.Connection import Hasql.Connection.Setting.Connection.Param qualified as Setting.Connection.Component @@ -17,17 +18,14 @@ localConnectionSettings = ) ] -localConnectionSettingsEmptyPassword :: [Setting.Setting] -localConnectionSettingsEmptyPassword = +localConnectionSettingsEmptyPassword :: Text -> [Setting.Setting] +localConnectionSettingsEmptyPassword userName = [ Setting.connection ( Setting.Connection.params [ Setting.Connection.Component.host "localhost", - -- a different port and user are necessary otherwise - -- `password=`will swallow the next immediate field - -- which is port and then port gets ignored and defaults to 5432 - Setting.Connection.Component.port 5434, - Setting.Connection.Component.user "newuser", - Setting.Connection.Component.dbname "newuser", + Setting.Connection.Component.port 5432, + Setting.Connection.Component.user userName, + Setting.Connection.Component.dbname "postgres", Setting.Connection.Component.password "" ] ) From 34984d8b34b30892d00bf513f08c4bbacac00772 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 8 Sep 2025 15:48:44 +0300 Subject: [PATCH 1185/1204] Reproduce (#176) --- cabal.project | 2 ++ hasql.cabal | 3 ++ hspec/Hasql/ConnectionSpec.hs | 52 +++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 hspec/Hasql/ConnectionSpec.hs diff --git a/cabal.project b/cabal.project index e6fdbadb43..c95a202702 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,3 @@ packages: . +allow-newer: + , *:base diff --git a/hasql.cabal b/hasql.cabal index 04dd6663a8..70a1d75494 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -240,10 +240,13 @@ test-suite hspec 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, diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs new file mode 100644 index 0000000000..c8442a2a6b --- /dev/null +++ b/hspec/Hasql/ConnectionSpec.hs @@ -0,0 +1,52 @@ +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 + describe "with spaces in params" do + itConnects "new user" "new password" + + describe "with single quotes" do + itConnects "new' user" "new' password" + + describe "with backslashes" do + itConnects "new\\ user" "new\\ password" From f8fb9485e20911ec464cf3d4307d541930d5d5fb Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 8 Sep 2025 16:13:18 +0300 Subject: [PATCH 1186/1204] Format --- library/Hasql/Connection/Config/ConnectionString.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs index 879acda1f0..8bdae21334 100644 --- a/library/Hasql/Connection/Config/ConnectionString.hs +++ b/library/Hasql/Connection/Config/ConnectionString.hs @@ -21,8 +21,11 @@ fromParams = where renderParam (k, v) = mconcat [k, "=", "'", escapeSingleQuote v, "'"] - escapeSingleQuote = BC.concatMap (\w -> - case w of - '\'' -> BC.pack "\\'" - '\\' -> BC.pack "\\\\" - otherwise -> BC.singleton w) + escapeSingleQuote = + BC.concatMap + ( \w -> + case w of + '\'' -> BC.pack "\\'" + '\\' -> BC.pack "\\\\" + _ -> BC.singleton w + ) From f402ab0c1ff5a412e5ba27b20cca599ce1487010 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 8 Sep 2025 16:14:20 +0300 Subject: [PATCH 1187/1204] Revert tests --- .github/workflows/check.yaml | 6 ----- hasql.cabal | 1 - tasty/Main.hs | 32 +---------------------- tasty/Main/Connection.hs | 11 -------- testing-kit/Hasql/TestingKit/Constants.hs | 14 ---------- 5 files changed, 1 insertion(+), 63 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 8152e4d260..e454bb4499 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -37,12 +37,6 @@ jobs: steps: - - name: Setup newusers in postgres - run: | - psql -c 'create user "new user" with login password null;' - psql -c 'create user "new'\'' user" with login password null;' - psql -c 'create user "new\ user" with login password null;' - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 with: ghc: ${{matrix.ghc}} diff --git a/hasql.cabal b/hasql.cabal index 061f7a2987..04dd6663a8 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -177,7 +177,6 @@ library testing-kit base, bytestring, hasql, - text, transformers, uuid, diff --git a/tasty/Main.hs b/tasty/Main.hs index 213e18c0ae..361c85fb04 100644 --- a/tasty/Main.hs +++ b/tasty/Main.hs @@ -469,35 +469,5 @@ tree = testCase "List decoding" $ let actualIO = Session.runSessionOnLocalDb $ Session.statement () $ Statements.selectList - in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO, - testCase "Connection works with spaces in params" - $ let statement = - Statement.Statement "select 1::bigint" Encoders.noParams decoder True - where - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) - session = Session.statement () statement - in do - x <- Connection.withEmptyPassword "new user" (Session.run session) - assertEqual (show x) (Right (Right 1)) x, - testCase "Connection params with single quotes in them are properly escaped" - $ let statement = - Statement.Statement "select 1::bigint" Encoders.noParams decoder True - where - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) - session = Session.statement () statement - in do - x <- Connection.withEmptyPassword "new' user" (Session.run session) - assertEqual (show x) (Right (Right 1)) x, - testCase "Connection params with backslashes in them are properly escaped" - $ let statement = - Statement.Statement "select 1::bigint" Encoders.noParams decoder True - where - decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) - session = Session.statement () statement - in do - x <- Connection.withEmptyPassword "new\\ user" (Session.run session) - assertEqual (show x) (Right (Right 1)) x + in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/tasty/Main/Connection.hs b/tasty/Main/Connection.hs index 66a0f84e62..a2879da9d7 100644 --- a/tasty/Main/Connection.hs +++ b/tasty/Main/Connection.hs @@ -14,14 +14,3 @@ with handler = lift $ handler connection release connection = lift $ HC.release connection - -withEmptyPassword :: Text -> (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) -withEmptyPassword userName handler = - runExceptT $ acquire >>= \connection -> use connection <* release connection - where - acquire = - ExceptT $ HC.acquire (Constants.localConnectionSettingsEmptyPassword userName) - use connection = - lift $ handler connection - release connection = - lift $ HC.release connection diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/testing-kit/Hasql/TestingKit/Constants.hs index 47d00f948b..8ff8ba9b2d 100644 --- a/testing-kit/Hasql/TestingKit/Constants.hs +++ b/testing-kit/Hasql/TestingKit/Constants.hs @@ -1,6 +1,5 @@ module Hasql.TestingKit.Constants where -import Data.Text (Text) import Hasql.Connection.Setting qualified as Setting import Hasql.Connection.Setting.Connection qualified as Setting.Connection import Hasql.Connection.Setting.Connection.Param qualified as Setting.Connection.Component @@ -17,16 +16,3 @@ localConnectionSettings = ] ) ] - -localConnectionSettingsEmptyPassword :: Text -> [Setting.Setting] -localConnectionSettingsEmptyPassword userName = - [ Setting.connection - ( Setting.Connection.params - [ Setting.Connection.Component.host "localhost", - Setting.Connection.Component.port 5432, - Setting.Connection.Component.user userName, - Setting.Connection.Component.dbname "postgres", - Setting.Connection.Component.password "" - ] - ) - ] From bc530aff8e5f6c49813b970a160d2f10bcb72396 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 8 Sep 2025 16:42:21 +0300 Subject: [PATCH 1188/1204] Update the tests to avoid quotes and slashes Since they seem to be overall illegal in Postgres. --- hspec/Hasql/ConnectionSpec.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs index c8442a2a6b..9ee8a9aebe 100644 --- a/hspec/Hasql/ConnectionSpec.hs +++ b/hspec/Hasql/ConnectionSpec.hs @@ -45,8 +45,8 @@ spec = do describe "with spaces in params" do itConnects "new user" "new password" - describe "with single quotes" do - itConnects "new' user" "new' password" + describe "with special chars" do + itConnects "new@user" "new#password" - describe "with backslashes" do - itConnects "new\\ user" "new\\ password" + describe "with underscores and numbers" do + itConnects "new_user123" "new_password456" From b9041c5a8fcddd54e8083fbcf6f02c76bff9c748 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Mon, 8 Sep 2025 23:47:31 +0300 Subject: [PATCH 1189/1204] Update --- cabal.project | 5 +++++ hspec/Hasql/ConnectionSpec.hs | 13 ++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cabal.project b/cabal.project index c95a202702..81cb4bb617 100644 --- a/cabal.project +++ b/cabal.project @@ -1,3 +1,8 @@ packages: . allow-newer: , *:base + +source-repository-package + type: git + location: https://github.com/nikita-volkov/testcontainers-postgresql + tag: a00523de153a7607f4c67ee98aebd297a9cb7766 diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs index 9ee8a9aebe..c154dce791 100644 --- a/hspec/Hasql/ConnectionSpec.hs +++ b/hspec/Hasql/ConnectionSpec.hs @@ -18,7 +18,7 @@ spec = do it "connects" do TestcontainersPostgresql.run ( TestcontainersPostgresql.Config - { forwardLogs = False, + { forwardLogs = True, distro = TestcontainersPostgresql.Distro17, auth = TestcontainersPostgresql.CredentialsAuth username password } @@ -42,11 +42,6 @@ spec = do pure () ) in do - describe "with spaces in params" do - itConnects "new user" "new password" - - describe "with special chars" do - itConnects "new@user" "new#password" - - describe "with underscores and numbers" do - itConnects "new_user123" "new_password456" + itConnects "new user" "new password" + itConnects "new\\user" "new\\password" + itConnects "new'user" "new'password" From dbf97ff413b85a20b1d044864964e7837509c044 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Sep 2025 00:03:08 +0300 Subject: [PATCH 1190/1204] Simplify to just passwords --- cabal.project | 5 ----- hspec/Hasql/ConnectionSpec.hs | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/cabal.project b/cabal.project index 81cb4bb617..c95a202702 100644 --- a/cabal.project +++ b/cabal.project @@ -1,8 +1,3 @@ packages: . allow-newer: , *:base - -source-repository-package - type: git - location: https://github.com/nikita-volkov/testcontainers-postgresql - tag: a00523de153a7607f4c67ee98aebd297a9cb7766 diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs index c154dce791..e35ab7fe58 100644 --- a/hspec/Hasql/ConnectionSpec.hs +++ b/hspec/Hasql/ConnectionSpec.hs @@ -43,5 +43,5 @@ spec = do ) in do itConnects "new user" "new password" - itConnects "new\\user" "new\\password" - itConnects "new'user" "new'password" + itConnects "new user" "new\\password" + itConnects "new user" "new'password" From e83ae7bd8dc0f16ccb5ba74d969f7d38e3ff7981 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Sep 2025 00:09:18 +0300 Subject: [PATCH 1191/1204] Disable log forwarding --- hspec/Hasql/ConnectionSpec.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs index e35ab7fe58..01e6635ba8 100644 --- a/hspec/Hasql/ConnectionSpec.hs +++ b/hspec/Hasql/ConnectionSpec.hs @@ -18,7 +18,7 @@ spec = do it "connects" do TestcontainersPostgresql.run ( TestcontainersPostgresql.Config - { forwardLogs = True, + { forwardLogs = False, distro = TestcontainersPostgresql.Distro17, auth = TestcontainersPostgresql.CredentialsAuth username password } From 3aad81ebb633012dba471ee4af2148ea23d4bc87 Mon Sep 17 00:00:00 2001 From: Nikita Volkov Date: Tue, 9 Sep 2025 00:07:26 +0300 Subject: [PATCH 1192/1204] Reproduce --- cabal.project | 2 ++ hasql.cabal | 3 +++ hspec/Hasql/ConnectionSpec.hs | 48 +++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 hspec/Hasql/ConnectionSpec.hs diff --git a/cabal.project b/cabal.project index e6fdbadb43..c95a202702 100644 --- a/cabal.project +++ b/cabal.project @@ -1 +1,3 @@ packages: . +allow-newer: + , *:base diff --git a/hasql.cabal b/hasql.cabal index 04dd6663a8..70a1d75494 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -240,10 +240,13 @@ test-suite hspec 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, diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs new file mode 100644 index 0000000000..5063fa35d4 --- /dev/null +++ b/hspec/Hasql/ConnectionSpec.hs @@ -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" From d353314c3224c551109a18e7d7c591613b483b49 Mon Sep 17 00:00:00 2001 From: nikita-volkov <1560937+nikita-volkov@users.noreply.github.com> Date: Mon, 8 Sep 2025 22:01:53 +0000 Subject: [PATCH 1193/1204] Set package version to 1.9.3.1 --- hasql.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasql.cabal b/hasql.cabal index 70a1d75494..ab6c1dce56 100644 --- a/hasql.cabal +++ b/hasql.cabal @@ -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: From 9211a65ab0ff3f4ff1c8141e6ca99a9b4420d3d1 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 22:19:09 +0200 Subject: [PATCH 1194/1204] Move hasql to vendor/hasql This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- {.github => vendor/hasql/.github}/workflows/check.yaml | 0 {.github => vendor/hasql/.github}/workflows/format.yaml | 0 .../hasql/.github}/workflows/on-pull-request-to-master.yaml | 0 .../hasql/.github}/workflows/on-pull-request-to-release.yaml | 0 .../hasql/.github}/workflows/on-push-to-master.yaml | 0 .../hasql/.github}/workflows/on-push-to-release.yaml | 0 CHANGELOG.md => vendor/hasql/CHANGELOG.md | 0 LICENSE => vendor/hasql/LICENSE | 0 README.md => vendor/hasql/README.md | 0 {benchmarks => vendor/hasql/benchmarks}/Main.hs | 0 cabal.project => vendor/hasql/cabal.project | 0 hasql.cabal => vendor/hasql/hasql.cabal | 0 {hspec => vendor/hasql/hspec}/Hasql/ConnectionSpec.hs | 0 {hspec => vendor/hasql/hspec}/Hasql/PipelineSpec.hs | 0 {hspec => vendor/hasql/hspec}/Main.hs | 0 {library => vendor/hasql/library}/Hasql/Commands.hs | 0 {library => vendor/hasql/library}/Hasql/Connection.hs | 0 {library => vendor/hasql/library}/Hasql/Connection/Config.hs | 0 .../hasql/library}/Hasql/Connection/Config/ConnectionString.hs | 0 .../library}/Hasql/Connection/Config/ConnectionString/Params.hs | 0 {library => vendor/hasql/library}/Hasql/Connection/Core.hs | 0 {library => vendor/hasql/library}/Hasql/Connection/Setting.hs | 0 .../hasql/library}/Hasql/Connection/Setting/Connection.hs | 0 .../hasql/library}/Hasql/Connection/Setting/Connection/Param.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/All.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Array.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Composite.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Result.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Results.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Row.hs | 0 {library => vendor/hasql/library}/Hasql/Decoders/Value.hs | 0 {library => vendor/hasql/library}/Hasql/Encoders.hs | 0 {library => vendor/hasql/library}/Hasql/Encoders/All.hs | 0 {library => vendor/hasql/library}/Hasql/Encoders/Array.hs | 0 {library => vendor/hasql/library}/Hasql/Encoders/Params.hs | 0 {library => vendor/hasql/library}/Hasql/Encoders/Value.hs | 0 {library => vendor/hasql/library}/Hasql/Errors.hs | 0 {library => vendor/hasql/library}/Hasql/IO.hs | 0 {library => vendor/hasql/library}/Hasql/LibPq14.hs | 0 {library => vendor/hasql/library}/Hasql/LibPq14/Ffi.hs | 0 {library => vendor/hasql/library}/Hasql/LibPq14/Mappings.hsc | 0 {library => vendor/hasql/library}/Hasql/Pipeline.hs | 0 {library => vendor/hasql/library}/Hasql/Pipeline/Core.hs | 0 {library => vendor/hasql/library}/Hasql/PostgresTypeInfo.hs | 0 {library => vendor/hasql/library}/Hasql/Prelude.hs | 0 .../hasql/library}/Hasql/PreparedStatementRegistry.hs | 0 {library => vendor/hasql/library}/Hasql/Session.hs | 0 {library => vendor/hasql/library}/Hasql/Session/Core.hs | 0 {library => vendor/hasql/library}/Hasql/Statement.hs | 0 profile-events => vendor/hasql/profile-events | 0 {profiling => vendor/hasql/profiling}/Main.hs | 0 {tasty => vendor/hasql/tasty}/Main.hs | 0 {tasty => vendor/hasql/tasty}/Main/Connection.hs | 0 {tasty => vendor/hasql/tasty}/Main/Prelude.hs | 0 {tasty => vendor/hasql/tasty}/Main/Statements.hs | 0 .../hasql/testing-kit}/Hasql/TestingKit/Constants.hs | 0 .../hasql/testing-kit}/Hasql/TestingKit/Preludes/Base.hs | 0 .../testing-kit}/Hasql/TestingKit/Statements/BrokenSyntax.hs | 0 .../testing-kit}/Hasql/TestingKit/Statements/GenerateSeries.hs | 0 .../testing-kit}/Hasql/TestingKit/Statements/WrongDecoder.hs | 0 .../hasql/testing-kit}/Hasql/TestingKit/TestingDsl.hs | 0 {threads-test => vendor/hasql/threads-test}/Main.hs | 0 {threads-test => vendor/hasql/threads-test}/Main/Statements.hs | 0 64 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql/.github}/workflows/check.yaml (100%) rename {.github => vendor/hasql/.github}/workflows/format.yaml (100%) rename {.github => vendor/hasql/.github}/workflows/on-pull-request-to-master.yaml (100%) rename {.github => vendor/hasql/.github}/workflows/on-pull-request-to-release.yaml (100%) rename {.github => vendor/hasql/.github}/workflows/on-push-to-master.yaml (100%) rename {.github => vendor/hasql/.github}/workflows/on-push-to-release.yaml (100%) rename CHANGELOG.md => vendor/hasql/CHANGELOG.md (100%) rename LICENSE => vendor/hasql/LICENSE (100%) rename README.md => vendor/hasql/README.md (100%) rename {benchmarks => vendor/hasql/benchmarks}/Main.hs (100%) rename cabal.project => vendor/hasql/cabal.project (100%) rename hasql.cabal => vendor/hasql/hasql.cabal (100%) rename {hspec => vendor/hasql/hspec}/Hasql/ConnectionSpec.hs (100%) rename {hspec => vendor/hasql/hspec}/Hasql/PipelineSpec.hs (100%) rename {hspec => vendor/hasql/hspec}/Main.hs (100%) rename {library => vendor/hasql/library}/Hasql/Commands.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Config.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Config/ConnectionString.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Config/ConnectionString/Params.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Core.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Setting.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Setting/Connection.hs (100%) rename {library => vendor/hasql/library}/Hasql/Connection/Setting/Connection/Param.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/All.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Array.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Composite.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Result.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Results.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Row.hs (100%) rename {library => vendor/hasql/library}/Hasql/Decoders/Value.hs (100%) rename {library => vendor/hasql/library}/Hasql/Encoders.hs (100%) rename {library => vendor/hasql/library}/Hasql/Encoders/All.hs (100%) rename {library => vendor/hasql/library}/Hasql/Encoders/Array.hs (100%) rename {library => vendor/hasql/library}/Hasql/Encoders/Params.hs (100%) rename {library => vendor/hasql/library}/Hasql/Encoders/Value.hs (100%) rename {library => vendor/hasql/library}/Hasql/Errors.hs (100%) rename {library => vendor/hasql/library}/Hasql/IO.hs (100%) rename {library => vendor/hasql/library}/Hasql/LibPq14.hs (100%) rename {library => vendor/hasql/library}/Hasql/LibPq14/Ffi.hs (100%) rename {library => vendor/hasql/library}/Hasql/LibPq14/Mappings.hsc (100%) rename {library => vendor/hasql/library}/Hasql/Pipeline.hs (100%) rename {library => vendor/hasql/library}/Hasql/Pipeline/Core.hs (100%) rename {library => vendor/hasql/library}/Hasql/PostgresTypeInfo.hs (100%) rename {library => vendor/hasql/library}/Hasql/Prelude.hs (100%) rename {library => vendor/hasql/library}/Hasql/PreparedStatementRegistry.hs (100%) rename {library => vendor/hasql/library}/Hasql/Session.hs (100%) rename {library => vendor/hasql/library}/Hasql/Session/Core.hs (100%) rename {library => vendor/hasql/library}/Hasql/Statement.hs (100%) rename profile-events => vendor/hasql/profile-events (100%) rename {profiling => vendor/hasql/profiling}/Main.hs (100%) rename {tasty => vendor/hasql/tasty}/Main.hs (100%) rename {tasty => vendor/hasql/tasty}/Main/Connection.hs (100%) rename {tasty => vendor/hasql/tasty}/Main/Prelude.hs (100%) rename {tasty => vendor/hasql/tasty}/Main/Statements.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/Constants.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/Preludes/Base.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/Statements/BrokenSyntax.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/Statements/GenerateSeries.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/Statements/WrongDecoder.hs (100%) rename {testing-kit => vendor/hasql/testing-kit}/Hasql/TestingKit/TestingDsl.hs (100%) rename {threads-test => vendor/hasql/threads-test}/Main.hs (100%) rename {threads-test => vendor/hasql/threads-test}/Main/Statements.hs (100%) diff --git a/.github/workflows/check.yaml b/vendor/hasql/.github/workflows/check.yaml similarity index 100% rename from .github/workflows/check.yaml rename to vendor/hasql/.github/workflows/check.yaml diff --git a/.github/workflows/format.yaml b/vendor/hasql/.github/workflows/format.yaml similarity index 100% rename from .github/workflows/format.yaml rename to vendor/hasql/.github/workflows/format.yaml diff --git a/.github/workflows/on-pull-request-to-master.yaml b/vendor/hasql/.github/workflows/on-pull-request-to-master.yaml similarity index 100% rename from .github/workflows/on-pull-request-to-master.yaml rename to vendor/hasql/.github/workflows/on-pull-request-to-master.yaml diff --git a/.github/workflows/on-pull-request-to-release.yaml b/vendor/hasql/.github/workflows/on-pull-request-to-release.yaml similarity index 100% rename from .github/workflows/on-pull-request-to-release.yaml rename to vendor/hasql/.github/workflows/on-pull-request-to-release.yaml diff --git a/.github/workflows/on-push-to-master.yaml b/vendor/hasql/.github/workflows/on-push-to-master.yaml similarity index 100% rename from .github/workflows/on-push-to-master.yaml rename to vendor/hasql/.github/workflows/on-push-to-master.yaml diff --git a/.github/workflows/on-push-to-release.yaml b/vendor/hasql/.github/workflows/on-push-to-release.yaml similarity index 100% rename from .github/workflows/on-push-to-release.yaml rename to vendor/hasql/.github/workflows/on-push-to-release.yaml diff --git a/CHANGELOG.md b/vendor/hasql/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to vendor/hasql/CHANGELOG.md diff --git a/LICENSE b/vendor/hasql/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql/LICENSE diff --git a/README.md b/vendor/hasql/README.md similarity index 100% rename from README.md rename to vendor/hasql/README.md diff --git a/benchmarks/Main.hs b/vendor/hasql/benchmarks/Main.hs similarity index 100% rename from benchmarks/Main.hs rename to vendor/hasql/benchmarks/Main.hs diff --git a/cabal.project b/vendor/hasql/cabal.project similarity index 100% rename from cabal.project rename to vendor/hasql/cabal.project diff --git a/hasql.cabal b/vendor/hasql/hasql.cabal similarity index 100% rename from hasql.cabal rename to vendor/hasql/hasql.cabal diff --git a/hspec/Hasql/ConnectionSpec.hs b/vendor/hasql/hspec/Hasql/ConnectionSpec.hs similarity index 100% rename from hspec/Hasql/ConnectionSpec.hs rename to vendor/hasql/hspec/Hasql/ConnectionSpec.hs diff --git a/hspec/Hasql/PipelineSpec.hs b/vendor/hasql/hspec/Hasql/PipelineSpec.hs similarity index 100% rename from hspec/Hasql/PipelineSpec.hs rename to vendor/hasql/hspec/Hasql/PipelineSpec.hs diff --git a/hspec/Main.hs b/vendor/hasql/hspec/Main.hs similarity index 100% rename from hspec/Main.hs rename to vendor/hasql/hspec/Main.hs diff --git a/library/Hasql/Commands.hs b/vendor/hasql/library/Hasql/Commands.hs similarity index 100% rename from library/Hasql/Commands.hs rename to vendor/hasql/library/Hasql/Commands.hs diff --git a/library/Hasql/Connection.hs b/vendor/hasql/library/Hasql/Connection.hs similarity index 100% rename from library/Hasql/Connection.hs rename to vendor/hasql/library/Hasql/Connection.hs diff --git a/library/Hasql/Connection/Config.hs b/vendor/hasql/library/Hasql/Connection/Config.hs similarity index 100% rename from library/Hasql/Connection/Config.hs rename to vendor/hasql/library/Hasql/Connection/Config.hs diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/vendor/hasql/library/Hasql/Connection/Config/ConnectionString.hs similarity index 100% rename from library/Hasql/Connection/Config/ConnectionString.hs rename to vendor/hasql/library/Hasql/Connection/Config/ConnectionString.hs diff --git a/library/Hasql/Connection/Config/ConnectionString/Params.hs b/vendor/hasql/library/Hasql/Connection/Config/ConnectionString/Params.hs similarity index 100% rename from library/Hasql/Connection/Config/ConnectionString/Params.hs rename to vendor/hasql/library/Hasql/Connection/Config/ConnectionString/Params.hs diff --git a/library/Hasql/Connection/Core.hs b/vendor/hasql/library/Hasql/Connection/Core.hs similarity index 100% rename from library/Hasql/Connection/Core.hs rename to vendor/hasql/library/Hasql/Connection/Core.hs diff --git a/library/Hasql/Connection/Setting.hs b/vendor/hasql/library/Hasql/Connection/Setting.hs similarity index 100% rename from library/Hasql/Connection/Setting.hs rename to vendor/hasql/library/Hasql/Connection/Setting.hs diff --git a/library/Hasql/Connection/Setting/Connection.hs b/vendor/hasql/library/Hasql/Connection/Setting/Connection.hs similarity index 100% rename from library/Hasql/Connection/Setting/Connection.hs rename to vendor/hasql/library/Hasql/Connection/Setting/Connection.hs diff --git a/library/Hasql/Connection/Setting/Connection/Param.hs b/vendor/hasql/library/Hasql/Connection/Setting/Connection/Param.hs similarity index 100% rename from library/Hasql/Connection/Setting/Connection/Param.hs rename to vendor/hasql/library/Hasql/Connection/Setting/Connection/Param.hs diff --git a/library/Hasql/Decoders.hs b/vendor/hasql/library/Hasql/Decoders.hs similarity index 100% rename from library/Hasql/Decoders.hs rename to vendor/hasql/library/Hasql/Decoders.hs diff --git a/library/Hasql/Decoders/All.hs b/vendor/hasql/library/Hasql/Decoders/All.hs similarity index 100% rename from library/Hasql/Decoders/All.hs rename to vendor/hasql/library/Hasql/Decoders/All.hs diff --git a/library/Hasql/Decoders/Array.hs b/vendor/hasql/library/Hasql/Decoders/Array.hs similarity index 100% rename from library/Hasql/Decoders/Array.hs rename to vendor/hasql/library/Hasql/Decoders/Array.hs diff --git a/library/Hasql/Decoders/Composite.hs b/vendor/hasql/library/Hasql/Decoders/Composite.hs similarity index 100% rename from library/Hasql/Decoders/Composite.hs rename to vendor/hasql/library/Hasql/Decoders/Composite.hs diff --git a/library/Hasql/Decoders/Result.hs b/vendor/hasql/library/Hasql/Decoders/Result.hs similarity index 100% rename from library/Hasql/Decoders/Result.hs rename to vendor/hasql/library/Hasql/Decoders/Result.hs diff --git a/library/Hasql/Decoders/Results.hs b/vendor/hasql/library/Hasql/Decoders/Results.hs similarity index 100% rename from library/Hasql/Decoders/Results.hs rename to vendor/hasql/library/Hasql/Decoders/Results.hs diff --git a/library/Hasql/Decoders/Row.hs b/vendor/hasql/library/Hasql/Decoders/Row.hs similarity index 100% rename from library/Hasql/Decoders/Row.hs rename to vendor/hasql/library/Hasql/Decoders/Row.hs diff --git a/library/Hasql/Decoders/Value.hs b/vendor/hasql/library/Hasql/Decoders/Value.hs similarity index 100% rename from library/Hasql/Decoders/Value.hs rename to vendor/hasql/library/Hasql/Decoders/Value.hs diff --git a/library/Hasql/Encoders.hs b/vendor/hasql/library/Hasql/Encoders.hs similarity index 100% rename from library/Hasql/Encoders.hs rename to vendor/hasql/library/Hasql/Encoders.hs diff --git a/library/Hasql/Encoders/All.hs b/vendor/hasql/library/Hasql/Encoders/All.hs similarity index 100% rename from library/Hasql/Encoders/All.hs rename to vendor/hasql/library/Hasql/Encoders/All.hs diff --git a/library/Hasql/Encoders/Array.hs b/vendor/hasql/library/Hasql/Encoders/Array.hs similarity index 100% rename from library/Hasql/Encoders/Array.hs rename to vendor/hasql/library/Hasql/Encoders/Array.hs diff --git a/library/Hasql/Encoders/Params.hs b/vendor/hasql/library/Hasql/Encoders/Params.hs similarity index 100% rename from library/Hasql/Encoders/Params.hs rename to vendor/hasql/library/Hasql/Encoders/Params.hs diff --git a/library/Hasql/Encoders/Value.hs b/vendor/hasql/library/Hasql/Encoders/Value.hs similarity index 100% rename from library/Hasql/Encoders/Value.hs rename to vendor/hasql/library/Hasql/Encoders/Value.hs diff --git a/library/Hasql/Errors.hs b/vendor/hasql/library/Hasql/Errors.hs similarity index 100% rename from library/Hasql/Errors.hs rename to vendor/hasql/library/Hasql/Errors.hs diff --git a/library/Hasql/IO.hs b/vendor/hasql/library/Hasql/IO.hs similarity index 100% rename from library/Hasql/IO.hs rename to vendor/hasql/library/Hasql/IO.hs diff --git a/library/Hasql/LibPq14.hs b/vendor/hasql/library/Hasql/LibPq14.hs similarity index 100% rename from library/Hasql/LibPq14.hs rename to vendor/hasql/library/Hasql/LibPq14.hs diff --git a/library/Hasql/LibPq14/Ffi.hs b/vendor/hasql/library/Hasql/LibPq14/Ffi.hs similarity index 100% rename from library/Hasql/LibPq14/Ffi.hs rename to vendor/hasql/library/Hasql/LibPq14/Ffi.hs diff --git a/library/Hasql/LibPq14/Mappings.hsc b/vendor/hasql/library/Hasql/LibPq14/Mappings.hsc similarity index 100% rename from library/Hasql/LibPq14/Mappings.hsc rename to vendor/hasql/library/Hasql/LibPq14/Mappings.hsc diff --git a/library/Hasql/Pipeline.hs b/vendor/hasql/library/Hasql/Pipeline.hs similarity index 100% rename from library/Hasql/Pipeline.hs rename to vendor/hasql/library/Hasql/Pipeline.hs diff --git a/library/Hasql/Pipeline/Core.hs b/vendor/hasql/library/Hasql/Pipeline/Core.hs similarity index 100% rename from library/Hasql/Pipeline/Core.hs rename to vendor/hasql/library/Hasql/Pipeline/Core.hs diff --git a/library/Hasql/PostgresTypeInfo.hs b/vendor/hasql/library/Hasql/PostgresTypeInfo.hs similarity index 100% rename from library/Hasql/PostgresTypeInfo.hs rename to vendor/hasql/library/Hasql/PostgresTypeInfo.hs diff --git a/library/Hasql/Prelude.hs b/vendor/hasql/library/Hasql/Prelude.hs similarity index 100% rename from library/Hasql/Prelude.hs rename to vendor/hasql/library/Hasql/Prelude.hs diff --git a/library/Hasql/PreparedStatementRegistry.hs b/vendor/hasql/library/Hasql/PreparedStatementRegistry.hs similarity index 100% rename from library/Hasql/PreparedStatementRegistry.hs rename to vendor/hasql/library/Hasql/PreparedStatementRegistry.hs diff --git a/library/Hasql/Session.hs b/vendor/hasql/library/Hasql/Session.hs similarity index 100% rename from library/Hasql/Session.hs rename to vendor/hasql/library/Hasql/Session.hs diff --git a/library/Hasql/Session/Core.hs b/vendor/hasql/library/Hasql/Session/Core.hs similarity index 100% rename from library/Hasql/Session/Core.hs rename to vendor/hasql/library/Hasql/Session/Core.hs diff --git a/library/Hasql/Statement.hs b/vendor/hasql/library/Hasql/Statement.hs similarity index 100% rename from library/Hasql/Statement.hs rename to vendor/hasql/library/Hasql/Statement.hs diff --git a/profile-events b/vendor/hasql/profile-events similarity index 100% rename from profile-events rename to vendor/hasql/profile-events diff --git a/profiling/Main.hs b/vendor/hasql/profiling/Main.hs similarity index 100% rename from profiling/Main.hs rename to vendor/hasql/profiling/Main.hs diff --git a/tasty/Main.hs b/vendor/hasql/tasty/Main.hs similarity index 100% rename from tasty/Main.hs rename to vendor/hasql/tasty/Main.hs diff --git a/tasty/Main/Connection.hs b/vendor/hasql/tasty/Main/Connection.hs similarity index 100% rename from tasty/Main/Connection.hs rename to vendor/hasql/tasty/Main/Connection.hs diff --git a/tasty/Main/Prelude.hs b/vendor/hasql/tasty/Main/Prelude.hs similarity index 100% rename from tasty/Main/Prelude.hs rename to vendor/hasql/tasty/Main/Prelude.hs diff --git a/tasty/Main/Statements.hs b/vendor/hasql/tasty/Main/Statements.hs similarity index 100% rename from tasty/Main/Statements.hs rename to vendor/hasql/tasty/Main/Statements.hs diff --git a/testing-kit/Hasql/TestingKit/Constants.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/Constants.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs diff --git a/testing-kit/Hasql/TestingKit/Preludes/Base.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/Preludes/Base.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs diff --git a/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs diff --git a/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs diff --git a/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs diff --git a/testing-kit/Hasql/TestingKit/TestingDsl.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs similarity index 100% rename from testing-kit/Hasql/TestingKit/TestingDsl.hs rename to vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs diff --git a/threads-test/Main.hs b/vendor/hasql/threads-test/Main.hs similarity index 100% rename from threads-test/Main.hs rename to vendor/hasql/threads-test/Main.hs diff --git a/threads-test/Main/Statements.hs b/vendor/hasql/threads-test/Main/Statements.hs similarity index 100% rename from threads-test/Main/Statements.hs rename to vendor/hasql/threads-test/Main/Statements.hs From 3f75837d7d4c37fa6c17945cd1b3fa7176e069ac Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 22:23:48 +0200 Subject: [PATCH 1195/1204] Move hasql-dynamic-statements to vendor/hasql-dynamic-statements This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- .../hasql-dynamic-statements/.github}/workflows/check.yaml | 0 .../hasql-dynamic-statements/.github}/workflows/format.yaml | 0 .../.github}/workflows/on-push-to-master-or-pr.yaml | 0 .../.github}/workflows/on-push-to-release.yaml | 0 LICENSE => vendor/hasql-dynamic-statements/LICENSE | 0 cabal.project => vendor/hasql-dynamic-statements/cabal.project | 0 .../hasql-dynamic-statements/hasql-dynamic-statements.cabal | 0 .../library}/Hasql/DynamicStatements/Prelude.hs | 0 .../library}/Hasql/DynamicStatements/Session.hs | 0 .../library}/Hasql/DynamicStatements/Snippet.hs | 0 .../library}/Hasql/DynamicStatements/Snippet/Defs.hs | 0 .../library}/Hasql/DynamicStatements/Statement.hs | 0 {test => vendor/hasql-dynamic-statements/test}/Main.hs | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql-dynamic-statements/.github}/workflows/check.yaml (100%) rename {.github => vendor/hasql-dynamic-statements/.github}/workflows/format.yaml (100%) rename {.github => vendor/hasql-dynamic-statements/.github}/workflows/on-push-to-master-or-pr.yaml (100%) rename {.github => vendor/hasql-dynamic-statements/.github}/workflows/on-push-to-release.yaml (100%) rename LICENSE => vendor/hasql-dynamic-statements/LICENSE (100%) rename cabal.project => vendor/hasql-dynamic-statements/cabal.project (100%) rename hasql-dynamic-statements.cabal => vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal (100%) rename {library => vendor/hasql-dynamic-statements/library}/Hasql/DynamicStatements/Prelude.hs (100%) rename {library => vendor/hasql-dynamic-statements/library}/Hasql/DynamicStatements/Session.hs (100%) rename {library => vendor/hasql-dynamic-statements/library}/Hasql/DynamicStatements/Snippet.hs (100%) rename {library => vendor/hasql-dynamic-statements/library}/Hasql/DynamicStatements/Snippet/Defs.hs (100%) rename {library => vendor/hasql-dynamic-statements/library}/Hasql/DynamicStatements/Statement.hs (100%) rename {test => vendor/hasql-dynamic-statements/test}/Main.hs (100%) diff --git a/.github/workflows/check.yaml b/vendor/hasql-dynamic-statements/.github/workflows/check.yaml similarity index 100% rename from .github/workflows/check.yaml rename to vendor/hasql-dynamic-statements/.github/workflows/check.yaml diff --git a/.github/workflows/format.yaml b/vendor/hasql-dynamic-statements/.github/workflows/format.yaml similarity index 100% rename from .github/workflows/format.yaml rename to vendor/hasql-dynamic-statements/.github/workflows/format.yaml diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml similarity index 100% rename from .github/workflows/on-push-to-master-or-pr.yaml rename to vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml diff --git a/.github/workflows/on-push-to-release.yaml b/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml similarity index 100% rename from .github/workflows/on-push-to-release.yaml rename to vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml diff --git a/LICENSE b/vendor/hasql-dynamic-statements/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql-dynamic-statements/LICENSE diff --git a/cabal.project b/vendor/hasql-dynamic-statements/cabal.project similarity index 100% rename from cabal.project rename to vendor/hasql-dynamic-statements/cabal.project diff --git a/hasql-dynamic-statements.cabal b/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal similarity index 100% rename from hasql-dynamic-statements.cabal rename to vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal diff --git a/library/Hasql/DynamicStatements/Prelude.hs b/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Prelude.hs similarity index 100% rename from library/Hasql/DynamicStatements/Prelude.hs rename to vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Prelude.hs diff --git a/library/Hasql/DynamicStatements/Session.hs b/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Session.hs similarity index 100% rename from library/Hasql/DynamicStatements/Session.hs rename to vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Session.hs diff --git a/library/Hasql/DynamicStatements/Snippet.hs b/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet.hs similarity index 100% rename from library/Hasql/DynamicStatements/Snippet.hs rename to vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet.hs diff --git a/library/Hasql/DynamicStatements/Snippet/Defs.hs b/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet/Defs.hs similarity index 100% rename from library/Hasql/DynamicStatements/Snippet/Defs.hs rename to vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet/Defs.hs diff --git a/library/Hasql/DynamicStatements/Statement.hs b/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Statement.hs similarity index 100% rename from library/Hasql/DynamicStatements/Statement.hs rename to vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Statement.hs diff --git a/test/Main.hs b/vendor/hasql-dynamic-statements/test/Main.hs similarity index 100% rename from test/Main.hs rename to vendor/hasql-dynamic-statements/test/Main.hs From 4d3ce22556bd6fc2fb8f3b0431a9352492d4b792 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 22:30:54 +0200 Subject: [PATCH 1196/1204] Move hasql-transaction to vendor/hasql-transaction This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- .../hasql-transaction/.github}/workflows/check.yaml | 0 .../hasql-transaction/.github}/workflows/format.yaml | 0 .../.github}/workflows/on-push-to-master-or-pr.yaml | 0 .../hasql-transaction/.github}/workflows/on-push-to-release.yaml | 0 CHANGELOG.md => vendor/hasql-transaction/CHANGELOG.md | 0 LICENSE => vendor/hasql-transaction/LICENSE | 0 cabal.project => vendor/hasql-transaction/cabal.project | 0 .../hasql-transaction/conflicts-test}/Main.hs | 0 .../hasql-transaction/conflicts-test}/Main/Statements.hs | 0 .../hasql-transaction/conflicts-test}/Main/Transactions.hs | 0 .../hasql-transaction/hasql-transaction.cabal | 0 .../hasql-transaction/library}/Hasql/Transaction.hs | 0 .../hasql-transaction/library}/Hasql/Transaction/Config.hs | 0 .../library}/Hasql/Transaction/Private/Prelude.hs | 0 .../hasql-transaction/library}/Hasql/Transaction/Private/SQL.hs | 0 .../library}/Hasql/Transaction/Private/Sessions.hs | 0 .../library}/Hasql/Transaction/Private/Statements.hs | 0 .../library}/Hasql/Transaction/Private/Transaction.hs | 0 .../hasql-transaction/library}/Hasql/Transaction/Sessions.hs | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql-transaction/.github}/workflows/check.yaml (100%) rename {.github => vendor/hasql-transaction/.github}/workflows/format.yaml (100%) rename {.github => vendor/hasql-transaction/.github}/workflows/on-push-to-master-or-pr.yaml (100%) rename {.github => vendor/hasql-transaction/.github}/workflows/on-push-to-release.yaml (100%) rename CHANGELOG.md => vendor/hasql-transaction/CHANGELOG.md (100%) rename LICENSE => vendor/hasql-transaction/LICENSE (100%) rename cabal.project => vendor/hasql-transaction/cabal.project (100%) rename {conflicts-test => vendor/hasql-transaction/conflicts-test}/Main.hs (100%) rename {conflicts-test => vendor/hasql-transaction/conflicts-test}/Main/Statements.hs (100%) rename {conflicts-test => vendor/hasql-transaction/conflicts-test}/Main/Transactions.hs (100%) rename hasql-transaction.cabal => vendor/hasql-transaction/hasql-transaction.cabal (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Config.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Private/Prelude.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Private/SQL.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Private/Sessions.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Private/Statements.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Private/Transaction.hs (100%) rename {library => vendor/hasql-transaction/library}/Hasql/Transaction/Sessions.hs (100%) diff --git a/.github/workflows/check.yaml b/vendor/hasql-transaction/.github/workflows/check.yaml similarity index 100% rename from .github/workflows/check.yaml rename to vendor/hasql-transaction/.github/workflows/check.yaml diff --git a/.github/workflows/format.yaml b/vendor/hasql-transaction/.github/workflows/format.yaml similarity index 100% rename from .github/workflows/format.yaml rename to vendor/hasql-transaction/.github/workflows/format.yaml diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml similarity index 100% rename from .github/workflows/on-push-to-master-or-pr.yaml rename to vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml diff --git a/.github/workflows/on-push-to-release.yaml b/vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml similarity index 100% rename from .github/workflows/on-push-to-release.yaml rename to vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml diff --git a/CHANGELOG.md b/vendor/hasql-transaction/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to vendor/hasql-transaction/CHANGELOG.md diff --git a/LICENSE b/vendor/hasql-transaction/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql-transaction/LICENSE diff --git a/cabal.project b/vendor/hasql-transaction/cabal.project similarity index 100% rename from cabal.project rename to vendor/hasql-transaction/cabal.project diff --git a/conflicts-test/Main.hs b/vendor/hasql-transaction/conflicts-test/Main.hs similarity index 100% rename from conflicts-test/Main.hs rename to vendor/hasql-transaction/conflicts-test/Main.hs diff --git a/conflicts-test/Main/Statements.hs b/vendor/hasql-transaction/conflicts-test/Main/Statements.hs similarity index 100% rename from conflicts-test/Main/Statements.hs rename to vendor/hasql-transaction/conflicts-test/Main/Statements.hs diff --git a/conflicts-test/Main/Transactions.hs b/vendor/hasql-transaction/conflicts-test/Main/Transactions.hs similarity index 100% rename from conflicts-test/Main/Transactions.hs rename to vendor/hasql-transaction/conflicts-test/Main/Transactions.hs diff --git a/hasql-transaction.cabal b/vendor/hasql-transaction/hasql-transaction.cabal similarity index 100% rename from hasql-transaction.cabal rename to vendor/hasql-transaction/hasql-transaction.cabal diff --git a/library/Hasql/Transaction.hs b/vendor/hasql-transaction/library/Hasql/Transaction.hs similarity index 100% rename from library/Hasql/Transaction.hs rename to vendor/hasql-transaction/library/Hasql/Transaction.hs diff --git a/library/Hasql/Transaction/Config.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Config.hs similarity index 100% rename from library/Hasql/Transaction/Config.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Config.hs diff --git a/library/Hasql/Transaction/Private/Prelude.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Private/Prelude.hs similarity index 100% rename from library/Hasql/Transaction/Private/Prelude.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Private/Prelude.hs diff --git a/library/Hasql/Transaction/Private/SQL.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Private/SQL.hs similarity index 100% rename from library/Hasql/Transaction/Private/SQL.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Private/SQL.hs diff --git a/library/Hasql/Transaction/Private/Sessions.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Private/Sessions.hs similarity index 100% rename from library/Hasql/Transaction/Private/Sessions.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Private/Sessions.hs diff --git a/library/Hasql/Transaction/Private/Statements.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Private/Statements.hs similarity index 100% rename from library/Hasql/Transaction/Private/Statements.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Private/Statements.hs diff --git a/library/Hasql/Transaction/Private/Transaction.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Private/Transaction.hs similarity index 100% rename from library/Hasql/Transaction/Private/Transaction.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Private/Transaction.hs diff --git a/library/Hasql/Transaction/Sessions.hs b/vendor/hasql-transaction/library/Hasql/Transaction/Sessions.hs similarity index 100% rename from library/Hasql/Transaction/Sessions.hs rename to vendor/hasql-transaction/library/Hasql/Transaction/Sessions.hs From d2c93f4236444f4494f393ebe7c8e106d9aa72a1 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 23:38:57 +0200 Subject: [PATCH 1197/1204] Move hasql-implicits to vendor/hasql-implicits This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- {.github => vendor/hasql-implicits/.github}/workflows/check.yaml | 0 {.github => vendor/hasql-implicits/.github}/workflows/format.yaml | 0 .../.github}/workflows/on-push-to-master-or-pr.yaml | 0 .../hasql-implicits/.github}/workflows/on-push-to-release.yaml | 0 LICENSE => vendor/hasql-implicits/LICENSE | 0 cabal.project => vendor/hasql-implicits/cabal.project | 0 .../hasql-implicits/hasql-implicits.cabal | 0 .../hasql-implicits/library}/Hasql/Implicits/Encoders.hs | 0 .../hasql-implicits/library}/Hasql/Implicits/Prelude.hs | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql-implicits/.github}/workflows/check.yaml (100%) rename {.github => vendor/hasql-implicits/.github}/workflows/format.yaml (100%) rename {.github => vendor/hasql-implicits/.github}/workflows/on-push-to-master-or-pr.yaml (100%) rename {.github => vendor/hasql-implicits/.github}/workflows/on-push-to-release.yaml (100%) rename LICENSE => vendor/hasql-implicits/LICENSE (100%) rename cabal.project => vendor/hasql-implicits/cabal.project (100%) rename hasql-implicits.cabal => vendor/hasql-implicits/hasql-implicits.cabal (100%) rename {library => vendor/hasql-implicits/library}/Hasql/Implicits/Encoders.hs (100%) rename {library => vendor/hasql-implicits/library}/Hasql/Implicits/Prelude.hs (100%) diff --git a/.github/workflows/check.yaml b/vendor/hasql-implicits/.github/workflows/check.yaml similarity index 100% rename from .github/workflows/check.yaml rename to vendor/hasql-implicits/.github/workflows/check.yaml diff --git a/.github/workflows/format.yaml b/vendor/hasql-implicits/.github/workflows/format.yaml similarity index 100% rename from .github/workflows/format.yaml rename to vendor/hasql-implicits/.github/workflows/format.yaml diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml similarity index 100% rename from .github/workflows/on-push-to-master-or-pr.yaml rename to vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml diff --git a/.github/workflows/on-push-to-release.yaml b/vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml similarity index 100% rename from .github/workflows/on-push-to-release.yaml rename to vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml diff --git a/LICENSE b/vendor/hasql-implicits/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql-implicits/LICENSE diff --git a/cabal.project b/vendor/hasql-implicits/cabal.project similarity index 100% rename from cabal.project rename to vendor/hasql-implicits/cabal.project diff --git a/hasql-implicits.cabal b/vendor/hasql-implicits/hasql-implicits.cabal similarity index 100% rename from hasql-implicits.cabal rename to vendor/hasql-implicits/hasql-implicits.cabal diff --git a/library/Hasql/Implicits/Encoders.hs b/vendor/hasql-implicits/library/Hasql/Implicits/Encoders.hs similarity index 100% rename from library/Hasql/Implicits/Encoders.hs rename to vendor/hasql-implicits/library/Hasql/Implicits/Encoders.hs diff --git a/library/Hasql/Implicits/Prelude.hs b/vendor/hasql-implicits/library/Hasql/Implicits/Prelude.hs similarity index 100% rename from library/Hasql/Implicits/Prelude.hs rename to vendor/hasql-implicits/library/Hasql/Implicits/Prelude.hs From 47b23d7485aacd3d05bdfb6aa264834ed08240a3 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Wed, 8 Jul 2026 23:27:58 +0200 Subject: [PATCH 1198/1204] Move hasql-notifications to vendor/hasql-hasql-notifications This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- {.github => vendor/hasql-notifications/.github}/workflows/ci.yml | 0 .gitignore => vendor/hasql-notifications/.gitignore | 0 LICENSE => vendor/hasql-notifications/LICENSE | 0 README.md => vendor/hasql-notifications/README.md | 0 Setup.hs => vendor/hasql-notifications/Setup.hs | 0 {app => vendor/hasql-notifications/app}/Main.hs | 0 .../hasql-notifications/hasql-notifications.cabal | 0 {src => vendor/hasql-notifications/src}/Hasql/Notifications.hs | 0 .../hasql-notifications/test}/Hasql/NotificationsSpec.hs | 0 {test => vendor/hasql-notifications/test}/Spec.hs | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql-notifications/.github}/workflows/ci.yml (100%) rename .gitignore => vendor/hasql-notifications/.gitignore (100%) rename LICENSE => vendor/hasql-notifications/LICENSE (100%) rename README.md => vendor/hasql-notifications/README.md (100%) rename Setup.hs => vendor/hasql-notifications/Setup.hs (100%) rename {app => vendor/hasql-notifications/app}/Main.hs (100%) rename hasql-notifications.cabal => vendor/hasql-notifications/hasql-notifications.cabal (100%) rename {src => vendor/hasql-notifications/src}/Hasql/Notifications.hs (100%) rename {test => vendor/hasql-notifications/test}/Hasql/NotificationsSpec.hs (100%) rename {test => vendor/hasql-notifications/test}/Spec.hs (100%) diff --git a/.github/workflows/ci.yml b/vendor/hasql-notifications/.github/workflows/ci.yml similarity index 100% rename from .github/workflows/ci.yml rename to vendor/hasql-notifications/.github/workflows/ci.yml diff --git a/.gitignore b/vendor/hasql-notifications/.gitignore similarity index 100% rename from .gitignore rename to vendor/hasql-notifications/.gitignore diff --git a/LICENSE b/vendor/hasql-notifications/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql-notifications/LICENSE diff --git a/README.md b/vendor/hasql-notifications/README.md similarity index 100% rename from README.md rename to vendor/hasql-notifications/README.md diff --git a/Setup.hs b/vendor/hasql-notifications/Setup.hs similarity index 100% rename from Setup.hs rename to vendor/hasql-notifications/Setup.hs diff --git a/app/Main.hs b/vendor/hasql-notifications/app/Main.hs similarity index 100% rename from app/Main.hs rename to vendor/hasql-notifications/app/Main.hs diff --git a/hasql-notifications.cabal b/vendor/hasql-notifications/hasql-notifications.cabal similarity index 100% rename from hasql-notifications.cabal rename to vendor/hasql-notifications/hasql-notifications.cabal diff --git a/src/Hasql/Notifications.hs b/vendor/hasql-notifications/src/Hasql/Notifications.hs similarity index 100% rename from src/Hasql/Notifications.hs rename to vendor/hasql-notifications/src/Hasql/Notifications.hs diff --git a/test/Hasql/NotificationsSpec.hs b/vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs similarity index 100% rename from test/Hasql/NotificationsSpec.hs rename to vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs diff --git a/test/Spec.hs b/vendor/hasql-notifications/test/Spec.hs similarity index 100% rename from test/Spec.hs rename to vendor/hasql-notifications/test/Spec.hs From a937e831bf3e359b1e7b5f19c2646f4878d87cdb Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sun, 12 Jul 2026 11:56:37 +0200 Subject: [PATCH 1199/1204] Move hasql-pool to vendor/hasql-pool This prepares the merge into the postgrest main repo. To avoid merge conflicts and give a clear history wrt renames, all the files are moved to a vendor/ subdirectory first, before they are moved to their final location. --- .../hasql-pool/.github}/workflows/check.yaml | 0 .../hasql-pool/.github}/workflows/format.yaml | 0 .../.github}/workflows/on-push-to-master-or-pr.yaml | 0 .../.github}/workflows/on-push-to-release.yaml | 0 CHANGELOG.md => vendor/hasql-pool/CHANGELOG.md | 0 LICENSE => vendor/hasql-pool/LICENSE | 0 cabal.project => vendor/hasql-pool/cabal.project | 0 .../diagrams-output}/connection-status-model.png | Bin .../diagrams}/connection-status-model.mmd | 0 .../hasql-pool/hasql-pool.cabal | 0 .../hasql-pool/src}/library/exposed/Hasql/Pool.hs | 0 .../src}/library/exposed/Hasql/Pool/Config.hs | 0 .../library/exposed/Hasql/Pool/Config/Defaults.hs | 0 .../src}/library/exposed/Hasql/Pool/Observation.hs | 0 .../src}/library/other/Hasql/Pool/Config/Config.hs | 0 .../src}/library/other/Hasql/Pool/Config/Setting.hs | 0 .../src}/library/other/Hasql/Pool/Prelude.hs | 0 .../other/Hasql/Pool/SessionErrorDestructors.hs | 0 {src => vendor/hasql-pool/src}/test/Main.hs | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename {.github => vendor/hasql-pool/.github}/workflows/check.yaml (100%) rename {.github => vendor/hasql-pool/.github}/workflows/format.yaml (100%) rename {.github => vendor/hasql-pool/.github}/workflows/on-push-to-master-or-pr.yaml (100%) rename {.github => vendor/hasql-pool/.github}/workflows/on-push-to-release.yaml (100%) rename CHANGELOG.md => vendor/hasql-pool/CHANGELOG.md (100%) rename LICENSE => vendor/hasql-pool/LICENSE (100%) rename cabal.project => vendor/hasql-pool/cabal.project (100%) rename {diagrams-output => vendor/hasql-pool/diagrams-output}/connection-status-model.png (100%) rename {diagrams => vendor/hasql-pool/diagrams}/connection-status-model.mmd (100%) rename hasql-pool.cabal => vendor/hasql-pool/hasql-pool.cabal (100%) rename {src => vendor/hasql-pool/src}/library/exposed/Hasql/Pool.hs (100%) rename {src => vendor/hasql-pool/src}/library/exposed/Hasql/Pool/Config.hs (100%) rename {src => vendor/hasql-pool/src}/library/exposed/Hasql/Pool/Config/Defaults.hs (100%) rename {src => vendor/hasql-pool/src}/library/exposed/Hasql/Pool/Observation.hs (100%) rename {src => vendor/hasql-pool/src}/library/other/Hasql/Pool/Config/Config.hs (100%) rename {src => vendor/hasql-pool/src}/library/other/Hasql/Pool/Config/Setting.hs (100%) rename {src => vendor/hasql-pool/src}/library/other/Hasql/Pool/Prelude.hs (100%) rename {src => vendor/hasql-pool/src}/library/other/Hasql/Pool/SessionErrorDestructors.hs (100%) rename {src => vendor/hasql-pool/src}/test/Main.hs (100%) diff --git a/.github/workflows/check.yaml b/vendor/hasql-pool/.github/workflows/check.yaml similarity index 100% rename from .github/workflows/check.yaml rename to vendor/hasql-pool/.github/workflows/check.yaml diff --git a/.github/workflows/format.yaml b/vendor/hasql-pool/.github/workflows/format.yaml similarity index 100% rename from .github/workflows/format.yaml rename to vendor/hasql-pool/.github/workflows/format.yaml diff --git a/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml similarity index 100% rename from .github/workflows/on-push-to-master-or-pr.yaml rename to vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml diff --git a/.github/workflows/on-push-to-release.yaml b/vendor/hasql-pool/.github/workflows/on-push-to-release.yaml similarity index 100% rename from .github/workflows/on-push-to-release.yaml rename to vendor/hasql-pool/.github/workflows/on-push-to-release.yaml diff --git a/CHANGELOG.md b/vendor/hasql-pool/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to vendor/hasql-pool/CHANGELOG.md diff --git a/LICENSE b/vendor/hasql-pool/LICENSE similarity index 100% rename from LICENSE rename to vendor/hasql-pool/LICENSE diff --git a/cabal.project b/vendor/hasql-pool/cabal.project similarity index 100% rename from cabal.project rename to vendor/hasql-pool/cabal.project diff --git a/diagrams-output/connection-status-model.png b/vendor/hasql-pool/diagrams-output/connection-status-model.png similarity index 100% rename from diagrams-output/connection-status-model.png rename to vendor/hasql-pool/diagrams-output/connection-status-model.png diff --git a/diagrams/connection-status-model.mmd b/vendor/hasql-pool/diagrams/connection-status-model.mmd similarity index 100% rename from diagrams/connection-status-model.mmd rename to vendor/hasql-pool/diagrams/connection-status-model.mmd diff --git a/hasql-pool.cabal b/vendor/hasql-pool/hasql-pool.cabal similarity index 100% rename from hasql-pool.cabal rename to vendor/hasql-pool/hasql-pool.cabal diff --git a/src/library/exposed/Hasql/Pool.hs b/vendor/hasql-pool/src/library/exposed/Hasql/Pool.hs similarity index 100% rename from src/library/exposed/Hasql/Pool.hs rename to vendor/hasql-pool/src/library/exposed/Hasql/Pool.hs diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config.hs similarity index 100% rename from src/library/exposed/Hasql/Pool/Config.hs rename to vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config.hs diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config/Defaults.hs similarity index 100% rename from src/library/exposed/Hasql/Pool/Config/Defaults.hs rename to vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config/Defaults.hs diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Observation.hs similarity index 100% rename from src/library/exposed/Hasql/Pool/Observation.hs rename to vendor/hasql-pool/src/library/exposed/Hasql/Pool/Observation.hs diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Config.hs similarity index 100% rename from src/library/other/Hasql/Pool/Config/Config.hs rename to vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Config.hs diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Setting.hs similarity index 100% rename from src/library/other/Hasql/Pool/Config/Setting.hs rename to vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Setting.hs diff --git a/src/library/other/Hasql/Pool/Prelude.hs b/vendor/hasql-pool/src/library/other/Hasql/Pool/Prelude.hs similarity index 100% rename from src/library/other/Hasql/Pool/Prelude.hs rename to vendor/hasql-pool/src/library/other/Hasql/Pool/Prelude.hs diff --git a/src/library/other/Hasql/Pool/SessionErrorDestructors.hs b/vendor/hasql-pool/src/library/other/Hasql/Pool/SessionErrorDestructors.hs similarity index 100% rename from src/library/other/Hasql/Pool/SessionErrorDestructors.hs rename to vendor/hasql-pool/src/library/other/Hasql/Pool/SessionErrorDestructors.hs diff --git a/src/test/Main.hs b/vendor/hasql-pool/src/test/Main.hs similarity index 100% rename from src/test/Main.hs rename to vendor/hasql-pool/src/test/Main.hs From b15f0aebd47845de3faed36908de341c45675582 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 22:50:58 +0200 Subject: [PATCH 1200/1204] chore(hasql*): remove supporting files This removes everything from the vendored hasql packages, except their license, source code, tests and .cabal file. We also remove metadata which is not needed anymore from .cabal file, but leave everything that needs to be ported to our own .cabal file later in place. --- .../.github/workflows/check.yaml | 45 ----- .../.github/workflows/format.yaml | 9 - .../workflows/on-push-to-master-or-pr.yaml | 17 -- .../.github/workflows/on-push-to-release.yaml | 33 ---- vendor/hasql-dynamic-statements/cabal.project | 5 - .../hasql-dynamic-statements.cabal | 33 ---- .../.github/workflows/check.yaml | 45 ----- .../.github/workflows/format.yaml | 9 - .../workflows/on-push-to-master-or-pr.yaml | 17 -- .../.github/workflows/on-push-to-release.yaml | 33 ---- vendor/hasql-implicits/cabal.project | 5 - vendor/hasql-implicits/hasql-implicits.cabal | 18 -- .../.github/workflows/ci.yml | 58 ------- vendor/hasql-notifications/.gitignore | 21 --- vendor/hasql-notifications/README.md | 5 - vendor/hasql-notifications/Setup.hs | 2 - vendor/hasql-notifications/app/Main.hs | 22 --- .../hasql-notifications.cabal | 29 ---- .../hasql-pool/.github/workflows/check.yaml | 45 ----- .../hasql-pool/.github/workflows/format.yaml | 9 - .../workflows/on-push-to-master-or-pr.yaml | 17 -- .../.github/workflows/on-push-to-release.yaml | 33 ---- vendor/hasql-pool/CHANGELOG.md | 84 --------- vendor/hasql-pool/cabal.project | 5 - .../connection-status-model.png | Bin 16434 -> 0 bytes .../diagrams/connection-status-model.mmd | 10 -- vendor/hasql-pool/hasql-pool.cabal | 23 --- .../.github/workflows/check.yaml | 45 ----- .../.github/workflows/format.yaml | 9 - .../workflows/on-push-to-master-or-pr.yaml | 17 -- .../.github/workflows/on-push-to-release.yaml | 33 ---- vendor/hasql-transaction/CHANGELOG.md | 7 - vendor/hasql-transaction/cabal.project | 5 - .../hasql-transaction/hasql-transaction.cabal | 30 ---- vendor/hasql/.github/workflows/check.yaml | 45 ----- vendor/hasql/.github/workflows/format.yaml | 9 - .../workflows/on-pull-request-to-master.yaml | 14 -- .../workflows/on-pull-request-to-release.yaml | 25 --- .../.github/workflows/on-push-to-master.yaml | 14 -- .../.github/workflows/on-push-to-release.yaml | 31 ---- vendor/hasql/CHANGELOG.md | 91 ---------- vendor/hasql/README.md | 163 ------------------ vendor/hasql/cabal.project | 3 - vendor/hasql/hasql.cabal | 38 ---- vendor/hasql/profile-events | 9 - 45 files changed, 1220 deletions(-) delete mode 100644 vendor/hasql-dynamic-statements/.github/workflows/check.yaml delete mode 100644 vendor/hasql-dynamic-statements/.github/workflows/format.yaml delete mode 100644 vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml delete mode 100644 vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml delete mode 100644 vendor/hasql-dynamic-statements/cabal.project delete mode 100644 vendor/hasql-implicits/.github/workflows/check.yaml delete mode 100644 vendor/hasql-implicits/.github/workflows/format.yaml delete mode 100644 vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml delete mode 100644 vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml delete mode 100644 vendor/hasql-implicits/cabal.project delete mode 100644 vendor/hasql-notifications/.github/workflows/ci.yml delete mode 100644 vendor/hasql-notifications/.gitignore delete mode 100644 vendor/hasql-notifications/README.md delete mode 100644 vendor/hasql-notifications/Setup.hs delete mode 100644 vendor/hasql-notifications/app/Main.hs delete mode 100644 vendor/hasql-pool/.github/workflows/check.yaml delete mode 100644 vendor/hasql-pool/.github/workflows/format.yaml delete mode 100644 vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml delete mode 100644 vendor/hasql-pool/.github/workflows/on-push-to-release.yaml delete mode 100644 vendor/hasql-pool/CHANGELOG.md delete mode 100644 vendor/hasql-pool/cabal.project delete mode 100644 vendor/hasql-pool/diagrams-output/connection-status-model.png delete mode 100644 vendor/hasql-pool/diagrams/connection-status-model.mmd delete mode 100644 vendor/hasql-transaction/.github/workflows/check.yaml delete mode 100644 vendor/hasql-transaction/.github/workflows/format.yaml delete mode 100644 vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml delete mode 100644 vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml delete mode 100644 vendor/hasql-transaction/CHANGELOG.md delete mode 100644 vendor/hasql-transaction/cabal.project delete mode 100644 vendor/hasql/.github/workflows/check.yaml delete mode 100644 vendor/hasql/.github/workflows/format.yaml delete mode 100644 vendor/hasql/.github/workflows/on-pull-request-to-master.yaml delete mode 100644 vendor/hasql/.github/workflows/on-pull-request-to-release.yaml delete mode 100644 vendor/hasql/.github/workflows/on-push-to-master.yaml delete mode 100644 vendor/hasql/.github/workflows/on-push-to-release.yaml delete mode 100644 vendor/hasql/CHANGELOG.md delete mode 100644 vendor/hasql/README.md delete mode 100644 vendor/hasql/cabal.project delete mode 100755 vendor/hasql/profile-events diff --git a/vendor/hasql-dynamic-statements/.github/workflows/check.yaml b/vendor/hasql-dynamic-statements/.github/workflows/check.yaml deleted file mode 100644 index 1af4ce8c41..0000000000 --- a/vendor/hasql-dynamic-statements/.github/workflows/check.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Compile, test and check the docs - -on: - workflow_call: - -jobs: - - check: - - strategy: - fail-fast: false - matrix: - include: - - ghc: 8.10.1 - ghc-options: "" - ignore-haddock: true - ignore-cabal-check: true - - ghc: latest - ignore-cabal-check: true - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_USER: postgres - POSTGRES_DB: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 - with: - ghc: ${{matrix.ghc}} - ghc-options: ${{matrix.ghc-options}} - ignore-haddock: ${{matrix.ignore-haddock}} - ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/vendor/hasql-dynamic-statements/.github/workflows/format.yaml b/vendor/hasql-dynamic-statements/.github/workflows/format.yaml deleted file mode 100644 index 243bc33f15..0000000000 --- a/vendor/hasql-dynamic-statements/.github/workflows/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ -name: Format - -on: - workflow_call: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 - secrets: inherit diff --git a/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml deleted file mode 100644 index aa9171eb3b..0000000000 --- a/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-master-or-pr.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Compile, test and check the docs - -on: - push: - branches: - - master - pull_request: - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml b/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml deleted file mode 100644 index b0b812bf95..0000000000 --- a/vendor/hasql-dynamic-statements/.github/workflows/on-push-to-release.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Release the lib to Hackage - -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: release - cancel-in-progress: false - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - release: - needs: - - format - - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 - secrets: inherit - with: - prefix-tag-with-v: false - docs: true diff --git a/vendor/hasql-dynamic-statements/cabal.project b/vendor/hasql-dynamic-statements/cabal.project deleted file mode 100644 index 3a089e387b..0000000000 --- a/vendor/hasql-dynamic-statements/cabal.project +++ /dev/null @@ -1,5 +0,0 @@ -packages: . -allow-newer: - , *:base - , *:template-haskell - , *:ghc-prim diff --git a/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal b/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal index 584ebce4e0..52048da6bb 100644 --- a/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal +++ b/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal @@ -1,27 +1,3 @@ -cabal-version: 3.0 -name: hasql-dynamic-statements -version: 0.3.1.8 -synopsis: Toolkit for constructing Hasql statements dynamically -description: - This library introduces into the Hasql ecosystem a new abstraction named Snippet, - which makes it trivial to construct SQL, while injecting values. - It is intended to be used when the SQL of your statement depends on the parameters, - that you want to pass in. - -homepage: https://github.com/nikita-volkov/hasql-dynamic-statements -bug-reports: - https://github.com/nikita-volkov/hasql-dynamic-statements/issues - -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE - -source-repository head - type: git - location: git://github.com/nikita-volkov/hasql-dynamic-statements.git - common base default-language: Haskell2010 default-extensions: @@ -62,15 +38,6 @@ common base TypeFamilies TypeOperators -common executable - import: base - ghc-options: - -O2 - -threaded - -with-rtsopts=-N - -rtsopts - -funbox-strict-fields - common test import: base ghc-options: diff --git a/vendor/hasql-implicits/.github/workflows/check.yaml b/vendor/hasql-implicits/.github/workflows/check.yaml deleted file mode 100644 index e454bb4499..0000000000 --- a/vendor/hasql-implicits/.github/workflows/check.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Compile, test and check the docs - -on: - workflow_call: - -jobs: - - check: - - strategy: - fail-fast: false - matrix: - include: - - ghc: 8.10.1 - ghc-options: "" - ignore-haddock: true - ignore-cabal-check: true - - ghc: latest - ignore-cabal-check: true - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_USER: postgres - POSTGRES_DB: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 - with: - ghc: ${{matrix.ghc}} - ghc-options: ${{matrix.ghc-options}} - ignore-haddock: ${{matrix.ignore-haddock}} - ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/vendor/hasql-implicits/.github/workflows/format.yaml b/vendor/hasql-implicits/.github/workflows/format.yaml deleted file mode 100644 index 243bc33f15..0000000000 --- a/vendor/hasql-implicits/.github/workflows/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ -name: Format - -on: - workflow_call: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 - secrets: inherit diff --git a/vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml deleted file mode 100644 index aa9171eb3b..0000000000 --- a/vendor/hasql-implicits/.github/workflows/on-push-to-master-or-pr.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Compile, test and check the docs - -on: - push: - branches: - - master - pull_request: - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml b/vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml deleted file mode 100644 index 1e8cc5169c..0000000000 --- a/vendor/hasql-implicits/.github/workflows/on-push-to-release.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Release the lib to Hackage - -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: release - cancel-in-progress: false - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - release: - needs: - - format - - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 - secrets: inherit - with: - prefix-tag-with-v: false - docs: true diff --git a/vendor/hasql-implicits/cabal.project b/vendor/hasql-implicits/cabal.project deleted file mode 100644 index 3a089e387b..0000000000 --- a/vendor/hasql-implicits/cabal.project +++ /dev/null @@ -1,5 +0,0 @@ -packages: . -allow-newer: - , *:base - , *:template-haskell - , *:ghc-prim diff --git a/vendor/hasql-implicits/hasql-implicits.cabal b/vendor/hasql-implicits/hasql-implicits.cabal index 315eeb2be7..392fa2e561 100644 --- a/vendor/hasql-implicits/hasql-implicits.cabal +++ b/vendor/hasql-implicits/hasql-implicits.cabal @@ -1,21 +1,3 @@ -cabal-version: 3.0 -name: hasql-implicits -version: 0.2.0.1 -synopsis: - Implicit definitions for Hasql, such as default codecs for standard types - -homepage: https://github.com/nikita-volkov/hasql-implicits -bug-reports: https://github.com/nikita-volkov/hasql-implicits/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2019, Nikita Volkov -license: MIT -license-file: LICENSE - -source-repository head - type: git - location: git://github.com/nikita-volkov/hasql-implicits.git - library hs-source-dirs: library default-extensions: diff --git a/vendor/hasql-notifications/.github/workflows/ci.yml b/vendor/hasql-notifications/.github/workflows/ci.yml deleted file mode 100644 index c0c24e71b0..0000000000 --- a/vendor/hasql-notifications/.github/workflows/ci.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: CI - -# Trigger the workflow on push or pull request, but only for the main branch -on: - pull_request: - push: - branches: [main] - -jobs: - test: - name: build / ${{ matrix.os }} / ghc ${{ matrix.ghc }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - ghc: ["9.6.3"] - - services: - postgres: - image: postgres - env: - POSTGRES_PASSWORD: roottoor - POSTGRES_USER: postgres - POSTGRES_DB: hasql_notifications_test - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - steps: - - uses: actions/checkout@v4 - - - uses: haskell-actions/setup@v2 - name: Setup Haskell - with: - ghc-version: ${{ matrix.ghc }} - - - uses: actions/cache@v4 - name: Cache ~/dist-newstyle - with: - path: ~/dist-newstyle - key: ${{ matrix.os }}-${{ matrix.ghc }}-v4 - - - name: Build Dependencies - run: | - cabal build --only-dependencies - cabal install hspec-discover - - - name: Build - run: | - cabal build - - - name: Test - run: | - cabal test - diff --git a/vendor/hasql-notifications/.gitignore b/vendor/hasql-notifications/.gitignore deleted file mode 100644 index 36321a60a5..0000000000 --- a/vendor/hasql-notifications/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -.DS_Store -db -release -dist -dist-* -.ghc.* -.cabal-sandbox -cabal.sandbox.config -hscope.out -codex.tags -.anvil -.stack-work -tags -site -rails.conf -cabal-helper* -.dir-locals.el -**/.history -result -.vscode -cabal.project.local diff --git a/vendor/hasql-notifications/README.md b/vendor/hasql-notifications/README.md deleted file mode 100644 index 62b8b3f757..0000000000 --- a/vendor/hasql-notifications/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# hasql-notifications - -![CI](https://github.com/diogob/hasql-notifications/actions/workflows/ci.yml/badge.svg) - -See documentation for the module [Hasql.Notifications](https://hackage.haskell.org/package/hasql-notifications/docs/Hasql-Notifications.html) on the [Hackage page](https://hackage.haskell.org/package/hasql-notifications). diff --git a/vendor/hasql-notifications/Setup.hs b/vendor/hasql-notifications/Setup.hs deleted file mode 100644 index 9a994af677..0000000000 --- a/vendor/hasql-notifications/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/vendor/hasql-notifications/app/Main.hs b/vendor/hasql-notifications/app/Main.hs deleted file mode 100644 index c64e885e8c..0000000000 --- a/vendor/hasql-notifications/app/Main.hs +++ /dev/null @@ -1,22 +0,0 @@ -module Main where - -import System.IO -import System.Exit (die) - -import Hasql.Connection -import Hasql.Connection.Setting -import Hasql.Connection.Setting.Connection -import Hasql.Notifications - -main :: IO () -main = do - hSetBuffering stdout NoBuffering - hSetBuffering stderr NoBuffering - - dbOrError <- acquire [ connection $ string "postgres://localhost/db_name" ] - case dbOrError of - Right db -> do - let channelToListen = toPgIdentifier "sample-channel" - listen db channelToListen - waitForNotifications (\channel _ -> print $ "Just got notification on channel " <> channel) db - _ -> die "Could not open database connection" diff --git a/vendor/hasql-notifications/hasql-notifications.cabal b/vendor/hasql-notifications/hasql-notifications.cabal index 1e305f92c2..e53dd73649 100644 --- a/vendor/hasql-notifications/hasql-notifications.cabal +++ b/vendor/hasql-notifications/hasql-notifications.cabal @@ -1,18 +1,3 @@ -name: hasql-notifications -version: 0.2.4.0 -synopsis: LISTEN/NOTIFY support for Hasql -description: Use PostgreSQL Asynchronous notification support with your Hasql Types. -homepage: https://github.com/diogob/hasql-notifications -license: BSD3 -license-file: LICENSE -author: Diogo Biazus -maintainer: diogo@biazus.ca -copyright: 2020 Diogo Biazus -category: Hasql, Database, PostgreSQL -build-type: Simple -extra-source-files: README.md -cabal-version: >=1.10 - library hs-source-dirs: src exposed-modules: Hasql.Notifications @@ -27,16 +12,6 @@ library ghc-options: -Wall default-extensions: OverloadedStrings -executable hasql-notifications - hs-source-dirs: app - main-is: Main.hs - ghc-options: -threaded -rtsopts -with-rtsopts=-N - build-depends: base - , hasql - , hasql-notifications - default-language: Haskell2010 - default-extensions: OverloadedStrings - test-suite hasql-notifications-test type: exitcode-stdio-1.0 other-modules: Hasql.NotificationsSpec @@ -51,7 +26,3 @@ test-suite hasql-notifications-test ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 default-extensions: OverloadedStrings - -source-repository head - type: git - location: https://github.com/diogob/hasql-notifications diff --git a/vendor/hasql-pool/.github/workflows/check.yaml b/vendor/hasql-pool/.github/workflows/check.yaml deleted file mode 100644 index e454bb4499..0000000000 --- a/vendor/hasql-pool/.github/workflows/check.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Compile, test and check the docs - -on: - workflow_call: - -jobs: - - check: - - strategy: - fail-fast: false - matrix: - include: - - ghc: 8.10.1 - ghc-options: "" - ignore-haddock: true - ignore-cabal-check: true - - ghc: latest - ignore-cabal-check: true - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_USER: postgres - POSTGRES_DB: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 - with: - ghc: ${{matrix.ghc}} - ghc-options: ${{matrix.ghc-options}} - ignore-haddock: ${{matrix.ignore-haddock}} - ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/vendor/hasql-pool/.github/workflows/format.yaml b/vendor/hasql-pool/.github/workflows/format.yaml deleted file mode 100644 index 243bc33f15..0000000000 --- a/vendor/hasql-pool/.github/workflows/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ -name: Format - -on: - workflow_call: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 - secrets: inherit diff --git a/vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml deleted file mode 100644 index aa9171eb3b..0000000000 --- a/vendor/hasql-pool/.github/workflows/on-push-to-master-or-pr.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Compile, test and check the docs - -on: - push: - branches: - - master - pull_request: - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql-pool/.github/workflows/on-push-to-release.yaml b/vendor/hasql-pool/.github/workflows/on-push-to-release.yaml deleted file mode 100644 index 1e8cc5169c..0000000000 --- a/vendor/hasql-pool/.github/workflows/on-push-to-release.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Release the lib to Hackage - -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: release - cancel-in-progress: false - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - release: - needs: - - format - - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 - secrets: inherit - with: - prefix-tag-with-v: false - docs: true diff --git a/vendor/hasql-pool/CHANGELOG.md b/vendor/hasql-pool/CHANGELOG.md deleted file mode 100644 index 3780700903..0000000000 --- a/vendor/hasql-pool/CHANGELOG.md +++ /dev/null @@ -1,84 +0,0 @@ -# 1.3 - -- Adapt to the new settings model of `hasql-1.9` - -# 1.2 - -- Migrated to `hasql-1.7` -- Changed references to `QueryError` in observations to `SessionError` - -# 1.1 - -- `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details. -- `initSession` setting added. - -# 1 - -- Optional observability event stream added. Provides a flexible mechanism for monitoring the healthiness of the pool via logs and metrics. -- Configuration got isolated into a DSL, which will allow to provide new configurations without breaking backward compatibility. - -# 0.10.1 - -- Avoid releasing connections on exceptions thrown in session - -# 0.9 - -- Maximal lifetime added for connections. Allows to refresh the connections in time cleaning up the resources. - -Breaking: - -- The acquisition timeout is now non-optional. -- Moved to `DiffTime` for timeouts. - -# 0.8.0.7 - -Fix excessive connections during releases due to race conditions. - -# 0.8.0.5 - -Fix connections not returning to the pool on exceptions. - -# 0.8.0.2 - -Fixed Windows build. - -# 0.8 - -`release` became reusable. You can use it to destroy the whole pool (same as before), but now also you can use it to reset the connections. - -Acquisition timeout added. - -Breaking changes in API: - -- Removed `PoolIsReleasedUsageError` -- `acquire` extended with the acquisition timeout parameter -- `acquireDynamically` extended with the acquisition timeout parameter - -# 0.7.2 - -Added support for dynamic connection configuration ([issue #11](https://github.com/nikita-volkov/hasql-pool/issues/11)). - -# 0.7.1.2 - -Fixed connections not being released if they were in use during the call to `release`. - -# 0.7.1 - -Added `Exception` for `UsageError`. - -# 0.7 - -Simplified the implementation a lot by removing the notion of timeout. - -Breaking: -- Removed the `Settings` type -- Changed the signature of `acquire` - -# 0.6 - -Moved away from "resource-pool" and fixed the handling of lost connections. - -Breaking: - -- Changed the suffix of `UsageError` constructors from `Error` to `UsageError` -- Added `PoolIsReleasedUsageError` diff --git a/vendor/hasql-pool/cabal.project b/vendor/hasql-pool/cabal.project deleted file mode 100644 index 3a089e387b..0000000000 --- a/vendor/hasql-pool/cabal.project +++ /dev/null @@ -1,5 +0,0 @@ -packages: . -allow-newer: - , *:base - , *:template-haskell - , *:ghc-prim diff --git a/vendor/hasql-pool/diagrams-output/connection-status-model.png b/vendor/hasql-pool/diagrams-output/connection-status-model.png deleted file mode 100644 index 8e62825ec59d46d3ef0dfd2608592efd4a2e7f4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16434 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 Connecting -Connecting --> ReadyForUse -ReadyForUse --> InUse -InUse --> ReadyForUse -Connecting --> Terminated -ReadyForUse --> Terminated -InUse --> Terminated -Terminated --> [*] diff --git a/vendor/hasql-pool/hasql-pool.cabal b/vendor/hasql-pool/hasql-pool.cabal index 81e8c5a25b..a629c34916 100644 --- a/vendor/hasql-pool/hasql-pool.cabal +++ b/vendor/hasql-pool/hasql-pool.cabal @@ -1,26 +1,3 @@ -cabal-version: 3.0 -name: hasql-pool -version: 1.3.0.3 -category: Hasql, Database, PostgreSQL -synopsis: Pool of connections for Hasql -homepage: https://github.com/nikita-volkov/hasql-pool -bug-reports: https://github.com/nikita-volkov/hasql-pool/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE -extra-source-files: - CHANGELOG.md - diagrams-output/*.png - -extra-doc-files: - diagrams-output/*.png - -source-repository head - type: git - location: git://github.com/nikita-volkov/hasql-pool.git - common base-settings default-language: Haskell2010 default-extensions: diff --git a/vendor/hasql-transaction/.github/workflows/check.yaml b/vendor/hasql-transaction/.github/workflows/check.yaml deleted file mode 100644 index e454bb4499..0000000000 --- a/vendor/hasql-transaction/.github/workflows/check.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Compile, test and check the docs - -on: - workflow_call: - -jobs: - - check: - - strategy: - fail-fast: false - matrix: - include: - - ghc: 8.10.1 - ghc-options: "" - ignore-haddock: true - ignore-cabal-check: true - - ghc: latest - ignore-cabal-check: true - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_USER: postgres - POSTGRES_DB: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 - with: - ghc: ${{matrix.ghc}} - ghc-options: ${{matrix.ghc-options}} - ignore-haddock: ${{matrix.ignore-haddock}} - ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/vendor/hasql-transaction/.github/workflows/format.yaml b/vendor/hasql-transaction/.github/workflows/format.yaml deleted file mode 100644 index 243bc33f15..0000000000 --- a/vendor/hasql-transaction/.github/workflows/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ -name: Format - -on: - workflow_call: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v3 - secrets: inherit diff --git a/vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml b/vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml deleted file mode 100644 index aa9171eb3b..0000000000 --- a/vendor/hasql-transaction/.github/workflows/on-push-to-master-or-pr.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Compile, test and check the docs - -on: - push: - branches: - - master - pull_request: - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml b/vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml deleted file mode 100644 index 1e8cc5169c..0000000000 --- a/vendor/hasql-transaction/.github/workflows/on-push-to-release.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Release the lib to Hackage - -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: release - cancel-in-progress: false - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - release: - needs: - - format - - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v3 - secrets: inherit - with: - prefix-tag-with-v: false - docs: true diff --git a/vendor/hasql-transaction/CHANGELOG.md b/vendor/hasql-transaction/CHANGELOG.md deleted file mode 100644 index ea14246816..0000000000 --- a/vendor/hasql-transaction/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# 1.2 - -- Removed the `unpreparedTransaction` session because the same effects can now be achieved via the connection settings in Hasql - -# 1.1 - -- Add automatic retry on deadlock errors (code 40P01) diff --git a/vendor/hasql-transaction/cabal.project b/vendor/hasql-transaction/cabal.project deleted file mode 100644 index 3a089e387b..0000000000 --- a/vendor/hasql-transaction/cabal.project +++ /dev/null @@ -1,5 +0,0 @@ -packages: . -allow-newer: - , *:base - , *:template-haskell - , *:ghc-prim diff --git a/vendor/hasql-transaction/hasql-transaction.cabal b/vendor/hasql-transaction/hasql-transaction.cabal index 9aa1bf3d3e..9713431195 100644 --- a/vendor/hasql-transaction/hasql-transaction.cabal +++ b/vendor/hasql-transaction/hasql-transaction.cabal @@ -1,24 +1,3 @@ -cabal-version: 3.0 -name: hasql-transaction -version: 1.2.1 -category: Hasql, Database, PostgreSQL -synopsis: - Composable abstraction over retryable transactions for Hasql - -homepage: https://github.com/nikita-volkov/hasql-transaction -bug-reports: https://github.com/nikita-volkov/hasql-transaction/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2015, Nikita Volkov -license: MIT -license-file: LICENSE -extra-source-files: CHANGELOG.md -tested-with: ghc ==9.8.2 || ==8.10.1 - -source-repository head - type: git - location: git://github.com/nikita-volkov/hasql-transaction.git - common base default-language: Haskell2010 default-extensions: @@ -60,15 +39,6 @@ common base TypeFamilies TypeOperators -common executable - import: base - ghc-options: - -O2 - -threaded - -with-rtsopts=-N - -rtsopts - -funbox-strict-fields - common test import: base ghc-options: diff --git a/vendor/hasql/.github/workflows/check.yaml b/vendor/hasql/.github/workflows/check.yaml deleted file mode 100644 index e454bb4499..0000000000 --- a/vendor/hasql/.github/workflows/check.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Compile, test and check the docs - -on: - workflow_call: - -jobs: - - check: - - strategy: - fail-fast: false - matrix: - include: - - ghc: 8.10.1 - ghc-options: "" - ignore-haddock: true - ignore-cabal-check: true - - ghc: latest - ignore-cabal-check: true - - runs-on: ubuntu-latest - - services: - postgres: - image: postgres - env: - POSTGRES_USER: postgres - POSTGRES_DB: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - - uses: nikita-volkov/build-and-test-cabal-package.github-action@v1 - with: - ghc: ${{matrix.ghc}} - ghc-options: ${{matrix.ghc-options}} - ignore-haddock: ${{matrix.ignore-haddock}} - ignore-cabal-check: ${{matrix.ignore-cabal-check}} diff --git a/vendor/hasql/.github/workflows/format.yaml b/vendor/hasql/.github/workflows/format.yaml deleted file mode 100644 index 1e0d3268e3..0000000000 --- a/vendor/hasql/.github/workflows/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ -name: Format - -on: - workflow_call: - -jobs: - format: - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/format.yaml@v4 - secrets: inherit diff --git a/vendor/hasql/.github/workflows/on-pull-request-to-master.yaml b/vendor/hasql/.github/workflows/on-pull-request-to-master.yaml deleted file mode 100644 index eb79d34ddc..0000000000 --- a/vendor/hasql/.github/workflows/on-pull-request-to-master.yaml +++ /dev/null @@ -1,14 +0,0 @@ -on: - pull_request: - branches: - - master - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql/.github/workflows/on-pull-request-to-release.yaml b/vendor/hasql/.github/workflows/on-pull-request-to-release.yaml deleted file mode 100644 index c931ab22cd..0000000000 --- a/vendor/hasql/.github/workflows/on-pull-request-to-release.yaml +++ /dev/null @@ -1,25 +0,0 @@ -on: - pull_request: - branches: - - supermajor - - major - - minor - - patch - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - check-changelog: - name: Check Changelog Action - runs-on: ubuntu-20.04 - steps: - - uses: tarides/changelog-check-action@v2 - with: - changelog: CHANGELOG.md diff --git a/vendor/hasql/.github/workflows/on-push-to-master.yaml b/vendor/hasql/.github/workflows/on-push-to-master.yaml deleted file mode 100644 index e263b20a24..0000000000 --- a/vendor/hasql/.github/workflows/on-push-to-master.yaml +++ /dev/null @@ -1,14 +0,0 @@ -on: - push: - branches: - - master - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit diff --git a/vendor/hasql/.github/workflows/on-push-to-release.yaml b/vendor/hasql/.github/workflows/on-push-to-release.yaml deleted file mode 100644 index c1fbf50a3b..0000000000 --- a/vendor/hasql/.github/workflows/on-push-to-release.yaml +++ /dev/null @@ -1,31 +0,0 @@ -on: - push: - branches: - - supermajor - - major - - minor - - patch - -concurrency: - group: release - cancel-in-progress: false - -jobs: - - format: - uses: ./.github/workflows/format.yaml - secrets: inherit - - check: - uses: ./.github/workflows/check.yaml - secrets: inherit - - release: - needs: - - format - - check - uses: nikita-volkov/haskell-hackage-lib-github-actions-workflows/.github/workflows/release.yaml@v4 - secrets: inherit - with: - prefix-tag-with-v: false - docs: true diff --git a/vendor/hasql/CHANGELOG.md b/vendor/hasql/CHANGELOG.md deleted file mode 100644 index a8055ff1aa..0000000000 --- a/vendor/hasql/CHANGELOG.md +++ /dev/null @@ -1,91 +0,0 @@ -# 1.9 - -- Revised the settings construction exposing a tree of modules -- Added a global prepared statements setting - -## Why the changes? - -To introduce the new global prepared statements setting and to make the settings API ready for extension without backward compatibility breakage. - -## Instructions on upgrading the 1.8 code - -### When explicit connection string is used - -Replace - -```haskell -Hasql.Connection.acquire connectionString -``` - -with - -```haskell -Hasql.Connection.acquire - [ Hasql.Connection.Setting.connection (Hasql.Connection.Setting.Connection.string connectionString) - ] -``` - -### When parameteric connection string is used - -Replace - -```haskell -Hasql.Connection.acquire (Hasql.Connection.settings host port user password dbname) -``` - -with - -```haskell -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 port, - Hasql.Connection.Setting.Connection.Param.user user, - Hasql.Connection.Setting.Connection.Param.password password, - Hasql.Connection.Setting.Connection.Param.dbname dbname - ] - ) - ] -``` - -# 1.8.1 - -- In case of exceptions thrown by user from inside of Session, the connection status gets checked to be out of transaction and unless it is the connection gets reset. - -# 1.8 - -- Move to "iproute" from "network-ip" for the "inet" datatype (#163). - -# 1.7 - -- Decidable instance on `Encoders.Params` removed. It was useless and limited the design. -- `QueryError` type renamed to `SessionError`. -- `PipelineError` constructor added to the `SessionError` type. - -# 1.6.3.1 - -- Moved to "postgresql-libpq-0.10" - -# 1.6.3 - -- Added `unknownEnum` encoder - -# 1.6.2 - -- Added composite encoder -- Added `oid` and `name` encoders - -# 1.6.1 - -- Added `jsonLazyBytes` and `jsonbLazyBytes` - -# 1.6 - -- Added position to `ServerError` (breaking change). -- Disabled failure on empty query. - -# 1.5 - -- Added column number to `RowError` (breaking change). -- Added `MonadReader Connection` instance for Session. diff --git a/vendor/hasql/README.md b/vendor/hasql/README.md deleted file mode 100644 index 3958a66252..0000000000 --- a/vendor/hasql/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# Fast PostgreSQL driver for Haskell with a flexible mapping API - -Hasql is a highly efficient PostgreSQL driver for Haskell with a typesafe yet flexible mapping API. It targets both the users, who need maximum control, and the users who face the typical tasks of DB-powered applications, providing them with higher-level APIs. Currently it is known to be [the fastest driver](https://nikita-volkov.github.io/hasql-benchmarks/) in the Haskell ecosystem. - -> [!IMPORTANT] -> Hasql is one of the supported targets of the [pGenie](https://pgenie.io) code generator, which empowers it with schema and query validation, and relieves you from boilerplate. - -# Status - -[![Hackage](https://img.shields.io/hackage/v/hasql.svg)](https://hackage.haskell.org/package/hasql) - -Hasql is production-ready, actively maintained and the API is pretty stable. It's used by many companies and most notably by the [Postgrest](https://postgrest.org/) project. - -# Ecosystem - -Hasql is not just a single library, it is a granular ecosystem of composable libraries, each isolated to perform its own task and stay simple. - -* ["hasql"](https://github.com/nikita-volkov/hasql) - the root of the ecosystem, which provides the essential abstraction over the PostgreSQL client functionality and mapping of values. Everything else revolves around that library. - -* ["hasql-th"](https://github.com/nikita-volkov/hasql-th) - Template Haskell utilities, providing compile-time syntax checking and easy statement declaration. -* ["hasql-transaction"](https://github.com/nikita-volkov/hasql-transaction) - an STM-inspired composable abstraction over database transactions providing automated conflict resolution. - -* ["hasql-dynamic-statements"](https://github.com/nikita-volkov/hasql-dynamic-statements) - a toolkit for generating statements based on the parameters. - -* ["hasql-cursor-query"](https://github.com/nikita-volkov/hasql-cursor-query) - a declarative abstraction over cursors. - -* ["hasql-cursor-transaction"](https://github.com/nikita-volkov/hasql-cursor-transaction) - a lower-level abstraction over cursors, which however allows to fetch from multiple cursors simultaneously. Generally though "hasql-cursor-query" is the recommended alternative. - -* ["hasql-pool"](https://github.com/nikita-volkov/hasql-pool) - a Hasql-specialized abstraction over the connection pool. - -* ["hasql-migration"](https://github.com/tvh/hasql-migration) - A port of postgresql-simple-migration for use with hasql. - -* ["hasql-listen-notify"](https://github.com/awkward-squad/hasql-listen-notify) / ["hasql-notifications"](https://github.com/diogob/hasql-notifications) - Support for PostgreSQL asynchronous notifications. - -* ["hasql-optparse-applicative"](https://github.com/sannsyn/hasql-optparse-applicative) - "optparse-applicative" parsers for Hasql. - -* ["hasql-implicits"](https://github.com/nikita-volkov/hasql-implicits) - implicit definitions, such as default codecs for standard types. - -* ["hasql-interpolate"](https://github.com/awkward-squad/hasql-interpolate) - a QuasiQuoter that supports interpolating Haskell expressions into Hasql queries. - -### Benefits of being an ecosystem - -* **Simplicity.** Each library in isolation provides a simple API, which is hopefully easier to comprehend. - -* **Flexibility and composability.** The user picks and chooses the features, thus precisely matching the level of abstraction that he needs for his task. - -* **Much more stable and more descriptive semantic versioning.** E.g., a change in the API of the "hasql-transaction" library won't affect any of the other libraries and it gives the user a more precise information about which part of his application he needs to update to conform. - -* **Interchangeability and competition of the ecosystem components.** E.g., [not everyone will agree](https://github.com/nikita-volkov/hasql/issues/41) with the restrictive design decisions made in the "hasql-transaction" library. However those decisions are not imposed on the user, and instead of having endless debates about how to abstract over transactions, another extension library can simply be released, which will provide a different interpretation of what the abstraction over transactions should be. - -* **Horizontal scalability of the ecosystem.** Instead of posting feature- or pull-requests, the users are encouraged to release their own small extension-libraries, with themselves becoming the copyright owners and taking on the maintenance responsibilities. Compare this model to the classical one, where some core-team is responsible for everything. One is scalable, the other is not. - -# Tutorials - -## Videos - -There's several videos on Hasql done as part of a nice intro-level series of live Haskell+Bazel coding by the "Ants Are Everywhere" YouTube channel: - -- [Coding Day 20: Switching from postgresql-simple to Hasql](https://youtu.be/ce7bGKETtoA?si=RmY_yDG24EX6i38I) -- [Coding Day 21: Refactoring the Hasql code](https://youtu.be/a9mPNXbT-qw?si=RTtXe6BXnZSQZzh-) - -## Articles - -- [Organization of Hasql code in a dedicated library](https://github.com/nikita-volkov/hasql-tutorial1) - -# Short Example - -Following is a complete application, which performs some arithmetic in Postgres using Hasql. - -```haskell -{-# LANGUAGE OverloadedStrings, QuasiQuotes #-} -import Prelude -import Data.Int -import Data.Functor.Contravariant -import Hasql.Session (Session) -import Hasql.Statement (Statement(..)) -import qualified Hasql.Session as Session -import qualified Hasql.Decoders as Decoders -import qualified Hasql.Encoders as Encoders -import qualified Hasql.Connection as Connection -import qualified Hasql.Connection.Setting as ConnectionSetting -import qualified Hasql.Connection.Setting.Connection as ConnectionSettingConnection - - - -main :: IO () -main = do - Right connection <- Connection.acquire connectionSettings - result <- Session.run (sumAndDivModSession 3 8 3) connection - print result - where - connectionSettings = [ConnectionSetting.connection $ ConnectionSettingConnection.string pstr] - pstr = "host=localhost dbname=postgres user=postgres port=5432" - - --- * Sessions --- --- Session is an abstraction over the database connection and all possible errors. --- It is used to execute statements. --- It is composable and has a Monad instance. --- --- It's recommended to define sessions in a dedicated 'Sessions' --- submodule of your project. -------------------------- - -sumAndDivModSession :: Int64 -> Int64 -> Int64 -> Session (Int64, Int64) -sumAndDivModSession a b c = do - -- Get the sum of a and b - sumOfAAndB <- Session.statement (a, b) sumStatement - -- Divide the sum by c and get the modulo as well - Session.statement (sumOfAAndB, c) divModStatement - - --- * Statements --- --- Statement is a definition of an individual SQL-statement, --- accompanied by a specification of how to encode its parameters and --- decode its result. --- --- It's recommended to define statements in a dedicated 'Statements' --- submodule of your project. -------------------------- - -sumStatement :: Statement (Int64, Int64) Int64 -sumStatement = Statement sql encoder decoder True where - sql = "select $1 + $2" - encoder = - (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> - (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) - decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8)) - -divModStatement :: Statement (Int64, Int64) (Int64, Int64) -divModStatement = Statement sql encoder decoder True where - sql = "select $1 / $2, $1 % $2" - encoder = - (fst >$< Encoders.param (Encoders.nonNullable Encoders.int8)) <> - (snd >$< Encoders.param (Encoders.nonNullable Encoders.int8)) - decoder = Decoders.singleRow row where - row = - (,) <$> - Decoders.column (Decoders.nonNullable Decoders.int8) <*> - Decoders.column (Decoders.nonNullable Decoders.int8) -``` - -For the general use-case it is advised to prefer declaring statements using the "hasql-th" library, which validates the statements at compile-time and generates codecs automatically. So the above two statements could be implemented the following way: - -```haskell -import qualified Hasql.TH as TH -- from "hasql-th" - -sumStatement :: Statement (Int64, Int64) Int64 -sumStatement = - [TH.singletonStatement| - select ($1 :: int8 + $2 :: int8) :: int8 - |] - -divModStatement :: Statement (Int64, Int64) (Int64, Int64) -divModStatement = - [TH.singletonStatement| - select - (($1 :: int8) / ($2 :: int8)) :: int8, - (($1 :: int8) % ($2 :: int8)) :: int8 - |] -``` diff --git a/vendor/hasql/cabal.project b/vendor/hasql/cabal.project deleted file mode 100644 index c95a202702..0000000000 --- a/vendor/hasql/cabal.project +++ /dev/null @@ -1,3 +0,0 @@ -packages: . -allow-newer: - , *:base diff --git a/vendor/hasql/hasql.cabal b/vendor/hasql/hasql.cabal index ab6c1dce56..0f7b9cf4e8 100644 --- a/vendor/hasql/hasql.cabal +++ b/vendor/hasql/hasql.cabal @@ -1,41 +1,3 @@ -cabal-version: 3.0 -name: hasql -version: 1.9.3.1 -category: Hasql, Database, PostgreSQL -synopsis: Fast PostgreSQL driver with a flexible mapping API -description: - Root of the \"hasql\" ecosystem. - This library provides connection management, execution of queries and mapping of parameters and results. - Extended functionality such as pooling, transactions and compile-time checking is provided by extension libraries. - For more details and tutorials see . - - The API comes free from all kinds of exceptions. - All error-reporting is explicit and is presented using the 'Either' type. - - \"hasql\" requires you to have the "\libpq\" C-library installed to compile. - Starting from version 1.7 of \"hasql\" it requires \"libpq\" of at least version 14. - \"libpq\" comes distributed with PostgreSQL, - so typically all you need is just to install the latest PostgreSQL distro. - - Despite the mentioned requirements for \"libpq\" \"hasql\" is compatible - with a wide range of PostgreSQL servers with tests having been conducted starting from - version 8.3. - -homepage: https://github.com/nikita-volkov/hasql -bug-reports: https://github.com/nikita-volkov/hasql/issues -author: Nikita Volkov -maintainer: Nikita Volkov -copyright: (c) 2014, Nikita Volkov -license: MIT -license-file: LICENSE -extra-source-files: - CHANGELOG.md - README.md - -source-repository head - type: git - location: https://github.com/nikita-volkov/hasql - common base default-language: Haskell2010 default-extensions: diff --git a/vendor/hasql/profile-events b/vendor/hasql/profile-events deleted file mode 100755 index d29393f9df..0000000000 --- a/vendor/hasql/profile-events +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -eo pipefail - -cabal build profiling --ghc-options="-eventlog" -cd dist -build/profiling/profiling simple +RTS -N2 -ls -RTS -ghc-events-analyze --timed --bucket-width 2 --bucket-height 14 --ms --tick-every 10 --buckets 500 --window Session profiling.eventlog -open profiling.0.timed.svg -threadscope profiling.eventlog From f5d774d62f86af896fbce49ffa4deec80ee26f6b Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 22:59:42 +0200 Subject: [PATCH 1201/1204] chore(hasql*): remove LICENSES; adopt main MIT license Both Nikita (hasql, hasql-pool, hasql-dynamic-statements, hasql-implicits) and Diogo (hasql-notifications) have agreed to contribute these projects at the respective version to the PostgREST project under the MIT license and under the "The PostgREST contributors" copyright our license has. This makes it significantly easier for us to ensure we're complying with their copyright and our downstream users will, too. A big thank you to both of them. --- vendor/hasql-dynamic-statements/LICENSE | 22 ------------------ vendor/hasql-implicits/LICENSE | 22 ------------------ vendor/hasql-notifications/LICENSE | 30 ------------------------- vendor/hasql-pool/LICENSE | 22 ------------------ vendor/hasql-transaction/LICENSE | 22 ------------------ vendor/hasql/LICENSE | 22 ------------------ 6 files changed, 140 deletions(-) delete mode 100644 vendor/hasql-dynamic-statements/LICENSE delete mode 100644 vendor/hasql-implicits/LICENSE delete mode 100644 vendor/hasql-notifications/LICENSE delete mode 100644 vendor/hasql-pool/LICENSE delete mode 100644 vendor/hasql-transaction/LICENSE delete mode 100644 vendor/hasql/LICENSE diff --git a/vendor/hasql-dynamic-statements/LICENSE b/vendor/hasql-dynamic-statements/LICENSE deleted file mode 100644 index 78878c1fd5..0000000000 --- a/vendor/hasql-dynamic-statements/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2019, Nikita Volkov - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/hasql-implicits/LICENSE b/vendor/hasql-implicits/LICENSE deleted file mode 100644 index 78878c1fd5..0000000000 --- a/vendor/hasql-implicits/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2019, Nikita Volkov - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/hasql-notifications/LICENSE b/vendor/hasql-notifications/LICENSE deleted file mode 100644 index 6c4ebc4d1f..0000000000 --- a/vendor/hasql-notifications/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -Diogo Biazus (c) 2020 - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Author name here nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/vendor/hasql-pool/LICENSE b/vendor/hasql-pool/LICENSE deleted file mode 100644 index defe17a5b7..0000000000 --- a/vendor/hasql-pool/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2015, Nikita Volkov - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/hasql-transaction/LICENSE b/vendor/hasql-transaction/LICENSE deleted file mode 100644 index defe17a5b7..0000000000 --- a/vendor/hasql-transaction/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2015, Nikita Volkov - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/hasql/LICENSE b/vendor/hasql/LICENSE deleted file mode 100644 index fe32f2b745..0000000000 --- a/vendor/hasql/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2014, Nikita Volkov - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. From 37f438c40b11a212b7062794945258711a992a6c Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 7 Jul 2026 23:07:05 +0200 Subject: [PATCH 1202/1204] chore(hasql*): use vendored source code --- default.nix | 2 +- postgrest.cabal | 142 ++++++++++++++++-- .../library => src/hasql}/Hasql/Commands.hs | 0 .../library => src/hasql}/Hasql/Connection.hs | 0 .../hasql}/Hasql/Connection/Config.hs | 0 .../Connection/Config/ConnectionString.hs | 0 .../Config/ConnectionString/Params.hs | 0 .../hasql}/Hasql/Connection/Core.hs | 0 .../hasql}/Hasql/Connection/Setting.hs | 0 .../Hasql/Connection/Setting/Connection.hs | 0 .../Connection/Setting/Connection/Param.hs | 0 .../library => src/hasql}/Hasql/Decoders.hs | 0 .../hasql}/Hasql/Decoders/All.hs | 0 .../hasql}/Hasql/Decoders/Array.hs | 0 .../hasql}/Hasql/Decoders/Composite.hs | 0 .../hasql}/Hasql/Decoders/Result.hs | 0 .../hasql}/Hasql/Decoders/Results.hs | 0 .../hasql}/Hasql/Decoders/Row.hs | 0 .../hasql}/Hasql/Decoders/Value.hs | 0 .../hasql}/Hasql/DynamicStatements/Prelude.hs | 0 .../hasql}/Hasql/DynamicStatements/Session.hs | 0 .../hasql}/Hasql/DynamicStatements/Snippet.hs | 0 .../Hasql/DynamicStatements/Snippet/Defs.hs | 0 .../Hasql/DynamicStatements/Statement.hs | 0 .../library => src/hasql}/Hasql/Encoders.hs | 0 .../hasql}/Hasql/Encoders/All.hs | 0 .../hasql}/Hasql/Encoders/Array.hs | 0 .../hasql}/Hasql/Encoders/Params.hs | 0 .../hasql}/Hasql/Encoders/Value.hs | 0 .../library => src/hasql}/Hasql/Errors.hs | 0 .../hasql/library => src/hasql}/Hasql/IO.hs | 0 .../hasql}/Hasql/Implicits/Encoders.hs | 0 .../hasql}/Hasql/Implicits/Prelude.hs | 0 .../library => src/hasql}/Hasql/LibPq14.hs | 0 .../hasql}/Hasql/LibPq14/Ffi.hs | 0 .../hasql}/Hasql/LibPq14/Mappings.hsc | 0 .../src => src/hasql}/Hasql/Notifications.hs | 2 + .../library => src/hasql}/Hasql/Pipeline.hs | 0 .../hasql}/Hasql/Pipeline/Core.hs | 0 .../exposed => src/hasql}/Hasql/Pool.hs | 0 .../hasql}/Hasql/Pool/Config.hs | 0 .../hasql}/Hasql/Pool/Config/Config.hs | 0 .../hasql}/Hasql/Pool/Config/Defaults.hs | 0 .../hasql}/Hasql/Pool/Config/Setting.hs | 0 .../hasql}/Hasql/Pool/Observation.hs | 0 .../other => src/hasql}/Hasql/Pool/Prelude.hs | 0 .../Hasql/Pool/SessionErrorDestructors.hs | 0 .../hasql}/Hasql/PostgresTypeInfo.hs | 0 .../library => src/hasql}/Hasql/Prelude.hs | 0 .../hasql}/Hasql/PreparedStatementRegistry.hs | 0 .../library => src/hasql}/Hasql/Session.hs | 0 .../hasql}/Hasql/Session/Core.hs | 0 .../library => src/hasql}/Hasql/Statement.hs | 0 .../hasql}/Hasql/Transaction.hs | 0 .../hasql}/Hasql/Transaction/Config.hs | 0 .../Hasql/Transaction/Private/Prelude.hs | 0 .../hasql}/Hasql/Transaction/Private/SQL.hs | 0 .../Hasql/Transaction/Private/Sessions.hs | 0 .../Hasql/Transaction/Private/Statements.hs | 0 .../Hasql/Transaction/Private/Transaction.hs | 0 .../hasql}/Hasql/Transaction/Sessions.hs | 0 .../hasql-dynamic-statements.cabal | 20 --- vendor/hasql-implicits/hasql-implicits.cabal | 35 ----- vendor/hasql-pool/hasql-pool.cabal | 29 ---- .../hasql-transaction/hasql-transaction.cabal | 24 --- vendor/hasql/hasql.cabal | 67 --------- 66 files changed, 136 insertions(+), 185 deletions(-) rename {vendor/hasql/library => src/hasql}/Hasql/Commands.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Config.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Config/ConnectionString.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Config/ConnectionString/Params.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Core.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Setting.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Setting/Connection.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Connection/Setting/Connection/Param.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/All.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Array.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Composite.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Result.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Results.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Row.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Decoders/Value.hs (100%) rename {vendor/hasql-dynamic-statements/library => src/hasql}/Hasql/DynamicStatements/Prelude.hs (100%) rename {vendor/hasql-dynamic-statements/library => src/hasql}/Hasql/DynamicStatements/Session.hs (100%) rename {vendor/hasql-dynamic-statements/library => src/hasql}/Hasql/DynamicStatements/Snippet.hs (100%) rename {vendor/hasql-dynamic-statements/library => src/hasql}/Hasql/DynamicStatements/Snippet/Defs.hs (100%) rename {vendor/hasql-dynamic-statements/library => src/hasql}/Hasql/DynamicStatements/Statement.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Encoders.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Encoders/All.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Encoders/Array.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Encoders/Params.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Encoders/Value.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Errors.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/IO.hs (100%) rename {vendor/hasql-implicits/library => src/hasql}/Hasql/Implicits/Encoders.hs (100%) rename {vendor/hasql-implicits/library => src/hasql}/Hasql/Implicits/Prelude.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/LibPq14.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/LibPq14/Ffi.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/LibPq14/Mappings.hsc (100%) rename {vendor/hasql-notifications/src => src/hasql}/Hasql/Notifications.hs (99%) rename {vendor/hasql/library => src/hasql}/Hasql/Pipeline.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Pipeline/Core.hs (100%) rename {vendor/hasql-pool/src/library/exposed => src/hasql}/Hasql/Pool.hs (100%) rename {vendor/hasql-pool/src/library/exposed => src/hasql}/Hasql/Pool/Config.hs (100%) rename {vendor/hasql-pool/src/library/other => src/hasql}/Hasql/Pool/Config/Config.hs (100%) rename {vendor/hasql-pool/src/library/exposed => src/hasql}/Hasql/Pool/Config/Defaults.hs (100%) rename {vendor/hasql-pool/src/library/other => src/hasql}/Hasql/Pool/Config/Setting.hs (100%) rename {vendor/hasql-pool/src/library/exposed => src/hasql}/Hasql/Pool/Observation.hs (100%) rename {vendor/hasql-pool/src/library/other => src/hasql}/Hasql/Pool/Prelude.hs (100%) rename {vendor/hasql-pool/src/library/other => src/hasql}/Hasql/Pool/SessionErrorDestructors.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/PostgresTypeInfo.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Prelude.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/PreparedStatementRegistry.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Session.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Session/Core.hs (100%) rename {vendor/hasql/library => src/hasql}/Hasql/Statement.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Config.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Private/Prelude.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Private/SQL.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Private/Sessions.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Private/Statements.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Private/Transaction.hs (100%) rename {vendor/hasql-transaction/library => src/hasql}/Hasql/Transaction/Sessions.hs (100%) delete mode 100644 vendor/hasql-implicits/hasql-implicits.cabal diff --git a/default.nix b/default.nix index 204857bc97..4936b5384b 100644 --- a/default.nix +++ b/default.nix @@ -33,7 +33,7 @@ let src = pkgs.lib.sourceFilesBySuffices (pkgs.gitignoreSource ./.) - [ ".cabal" ".hs" ".lhs" "LICENSE" ]; + [ ".cabal" ".hs" ".hsc" ".lhs" "LICENSE" ]; allOverlays = import nix/overlays; diff --git a/postgrest.cabal b/postgrest.cabal index 3d4f765201..ee4e5a6a9e 100644 --- a/postgrest.cabal +++ b/postgrest.cabal @@ -37,6 +37,136 @@ flag hpc manual: True description: Enable HPC (dev only) +library hasql + default-language: Haskell2010 + default-extensions: ApplicativeDo + Arrows + BangPatterns + BlockArguments + ConstraintKinds + DataKinds + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + DerivingVia + EmptyDataDecls + FlexibleContexts + FlexibleInstances + FunctionalDependencies + GADTs + GeneralizedNewtypeDeriving + ImportQualifiedPost + LambdaCase + LiberalTypeSynonyms + MultiParamTypeClasses + MultiWayIf + NamedFieldPuns + NoImplicitPrelude + NoMonomorphismRestriction + NumericUnderscores + OverloadedStrings + PatternGuards + QuasiQuotes + RankNTypes + RecordWildCards + RoleAnnotations + ScopedTypeVariables + StandaloneDeriving + StrictData + TupleSections + TypeApplications + TypeFamilies + TypeOperators + hs-source-dirs: src/hasql + exposed-modules: Hasql.Connection + Hasql.Connection.Setting + Hasql.Connection.Setting.Connection + Hasql.Connection.Setting.Connection.Param + Hasql.Decoders + Hasql.DynamicStatements.Session + Hasql.DynamicStatements.Snippet + Hasql.DynamicStatements.Statement + Hasql.Encoders + Hasql.Implicits.Encoders + Hasql.Notifications + Hasql.Pipeline + Hasql.Pool + Hasql.Pool.Config + Hasql.Pool.Config.Defaults + Hasql.Pool.Observation + Hasql.Session + Hasql.Statement + Hasql.Transaction + Hasql.Transaction.Sessions + other-modules: Hasql.Commands + Hasql.Connection.Config + Hasql.Connection.Config.ConnectionString + Hasql.Connection.Config.ConnectionString.Params + Hasql.Connection.Core + Hasql.Decoders.All + Hasql.Decoders.Array + Hasql.Decoders.Composite + Hasql.Decoders.Result + Hasql.Decoders.Results + Hasql.Decoders.Row + Hasql.Decoders.Value + Hasql.DynamicStatements.Prelude + Hasql.DynamicStatements.Snippet.Defs + Hasql.Encoders.All + Hasql.Encoders.Array + Hasql.Encoders.Params + Hasql.Encoders.Value + Hasql.Errors + Hasql.IO + Hasql.Implicits.Prelude + Hasql.LibPq14 + Hasql.LibPq14.Ffi + Hasql.LibPq14.Mappings + Hasql.Pipeline.Core + Hasql.Pool.Config.Config + Hasql.Pool.Config.Setting + Hasql.Pool.Prelude + Hasql.Pool.SessionErrorDestructors + Hasql.PostgresTypeInfo + Hasql.Prelude + Hasql.PreparedStatementRegistry + Hasql.Session.Core + Hasql.Transaction.Config + Hasql.Transaction.Private.Prelude + Hasql.Transaction.Private.SQL + Hasql.Transaction.Private.Sessions + Hasql.Transaction.Private.Statements + Hasql.Transaction.Private.Transaction + build-depends: aeson >= 2 && < 3 + , attoparsec >= 0.10 && < 0.15 + , base >= 4.14 && < 5 + , bytestring >= 0.10.8.2 && < 0.13 + , bytestring-strict-builder >= 0.4.5.1 && < 0.5 + , bytestring-tree-builder >= 0.2.7.8 && < 0.3 + , containers >= 0.6 && < 0.8 + , contravariant >= 1.3 && < 2 + , dlist >= 0.8 && < 0.9 || >= 1 && < 2 + , hashable >= 1.2 && < 2 + , hashtables >= 1.1 && < 2 + , iproute >= 1.7 && < 1.8 + , mtl >= 2.2 && < 3 + , postgresql-binary >= 0.14.2 && < 0.15 + , postgresql-libpq >= 0.10.1 && < 0.12 + , profunctors >= 5.1 && < 6 + , ptr >= 0.16.7.2 && < 0.17 + , scientific >= 0.3 && < 0.4 + , stm >= 2.5 && < 3 + , text >= 2 && < 3 + , text-builder >= 1 && < 1.1 + , time >= 1.9 && < 2 + , transformers >= 0.6 && < 0.7 + , uuid >= 1.3 && < 2 + , vector >= 0.10 && < 0.14 + , witherable >= 0.5 && < 0.6 + library default-language: GHC2021 default-extensions: OverloadedStrings @@ -122,11 +252,7 @@ library , extra >= 1.7.0 && < 2.0 , fast-logger >= 3.2.0 && < 3.3 , fuzzyset >= 0.2.4 && < 0.3 - , hasql >= 1.9 && <= 1.9.3.1 - , hasql-dynamic-statements >= 0.3.1 && <= 0.3.1.8 - , hasql-notifications >= 0.2.4.0 && < 0.3 - , hasql-pool >= 1.1 && <= 1.3.0.4 - , hasql-transaction >= 1.0.1 && <= 1.2.1 + , postgrest:hasql , http-client >= 0.7.19 && < 0.8 , http-types >= 0.12.2 && < 0.13 , insert-ordered-containers >= 0.2.2 && < 0.3 @@ -284,8 +410,7 @@ test-suite spec , bytestring >= 0.10.8 && < 0.13 , case-insensitive >= 1.2 && < 1.3 , containers >= 0.5.7 && < 0.8 - , hasql-pool >= 1.0.1 && <= 1.3.0.4 - , hasql-transaction >= 1.0.1 && <= 1.2.1 + , postgrest:hasql , heredoc >= 0.2 && < 0.3 , hspec >= 2.3 && < 2.12 , hspec-expectations >= 0.8.4 && < 0.9 @@ -329,8 +454,7 @@ test-suite observability build-depends: base >= 4.9 && < 4.22 , base64-bytestring >= 1 && < 1.3 , bytestring >= 0.10.8 && < 0.13 - , hasql-pool >= 1.0.1 && <= 1.3.0.4 - , hasql-transaction >= 1.0.1 && <= 1.2.1 + , postgrest:hasql , hspec >= 2.3 && < 2.12 , hspec-expectations >= 0.8.4 && < 0.9 , hspec-wai >= 0.10 && < 0.12 diff --git a/vendor/hasql/library/Hasql/Commands.hs b/src/hasql/Hasql/Commands.hs similarity index 100% rename from vendor/hasql/library/Hasql/Commands.hs rename to src/hasql/Hasql/Commands.hs diff --git a/vendor/hasql/library/Hasql/Connection.hs b/src/hasql/Hasql/Connection.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection.hs rename to src/hasql/Hasql/Connection.hs diff --git a/vendor/hasql/library/Hasql/Connection/Config.hs b/src/hasql/Hasql/Connection/Config.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Config.hs rename to src/hasql/Hasql/Connection/Config.hs diff --git a/vendor/hasql/library/Hasql/Connection/Config/ConnectionString.hs b/src/hasql/Hasql/Connection/Config/ConnectionString.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Config/ConnectionString.hs rename to src/hasql/Hasql/Connection/Config/ConnectionString.hs diff --git a/vendor/hasql/library/Hasql/Connection/Config/ConnectionString/Params.hs b/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Config/ConnectionString/Params.hs rename to src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs diff --git a/vendor/hasql/library/Hasql/Connection/Core.hs b/src/hasql/Hasql/Connection/Core.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Core.hs rename to src/hasql/Hasql/Connection/Core.hs diff --git a/vendor/hasql/library/Hasql/Connection/Setting.hs b/src/hasql/Hasql/Connection/Setting.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Setting.hs rename to src/hasql/Hasql/Connection/Setting.hs diff --git a/vendor/hasql/library/Hasql/Connection/Setting/Connection.hs b/src/hasql/Hasql/Connection/Setting/Connection.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Setting/Connection.hs rename to src/hasql/Hasql/Connection/Setting/Connection.hs diff --git a/vendor/hasql/library/Hasql/Connection/Setting/Connection/Param.hs b/src/hasql/Hasql/Connection/Setting/Connection/Param.hs similarity index 100% rename from vendor/hasql/library/Hasql/Connection/Setting/Connection/Param.hs rename to src/hasql/Hasql/Connection/Setting/Connection/Param.hs diff --git a/vendor/hasql/library/Hasql/Decoders.hs b/src/hasql/Hasql/Decoders.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders.hs rename to src/hasql/Hasql/Decoders.hs diff --git a/vendor/hasql/library/Hasql/Decoders/All.hs b/src/hasql/Hasql/Decoders/All.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/All.hs rename to src/hasql/Hasql/Decoders/All.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Array.hs b/src/hasql/Hasql/Decoders/Array.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Array.hs rename to src/hasql/Hasql/Decoders/Array.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Composite.hs b/src/hasql/Hasql/Decoders/Composite.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Composite.hs rename to src/hasql/Hasql/Decoders/Composite.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Result.hs b/src/hasql/Hasql/Decoders/Result.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Result.hs rename to src/hasql/Hasql/Decoders/Result.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Results.hs b/src/hasql/Hasql/Decoders/Results.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Results.hs rename to src/hasql/Hasql/Decoders/Results.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Row.hs b/src/hasql/Hasql/Decoders/Row.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Row.hs rename to src/hasql/Hasql/Decoders/Row.hs diff --git a/vendor/hasql/library/Hasql/Decoders/Value.hs b/src/hasql/Hasql/Decoders/Value.hs similarity index 100% rename from vendor/hasql/library/Hasql/Decoders/Value.hs rename to src/hasql/Hasql/Decoders/Value.hs diff --git a/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Prelude.hs b/src/hasql/Hasql/DynamicStatements/Prelude.hs similarity index 100% rename from vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Prelude.hs rename to src/hasql/Hasql/DynamicStatements/Prelude.hs diff --git a/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Session.hs b/src/hasql/Hasql/DynamicStatements/Session.hs similarity index 100% rename from vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Session.hs rename to src/hasql/Hasql/DynamicStatements/Session.hs diff --git a/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet.hs b/src/hasql/Hasql/DynamicStatements/Snippet.hs similarity index 100% rename from vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet.hs rename to src/hasql/Hasql/DynamicStatements/Snippet.hs diff --git a/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet/Defs.hs b/src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs similarity index 100% rename from vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Snippet/Defs.hs rename to src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs diff --git a/vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Statement.hs b/src/hasql/Hasql/DynamicStatements/Statement.hs similarity index 100% rename from vendor/hasql-dynamic-statements/library/Hasql/DynamicStatements/Statement.hs rename to src/hasql/Hasql/DynamicStatements/Statement.hs diff --git a/vendor/hasql/library/Hasql/Encoders.hs b/src/hasql/Hasql/Encoders.hs similarity index 100% rename from vendor/hasql/library/Hasql/Encoders.hs rename to src/hasql/Hasql/Encoders.hs diff --git a/vendor/hasql/library/Hasql/Encoders/All.hs b/src/hasql/Hasql/Encoders/All.hs similarity index 100% rename from vendor/hasql/library/Hasql/Encoders/All.hs rename to src/hasql/Hasql/Encoders/All.hs diff --git a/vendor/hasql/library/Hasql/Encoders/Array.hs b/src/hasql/Hasql/Encoders/Array.hs similarity index 100% rename from vendor/hasql/library/Hasql/Encoders/Array.hs rename to src/hasql/Hasql/Encoders/Array.hs diff --git a/vendor/hasql/library/Hasql/Encoders/Params.hs b/src/hasql/Hasql/Encoders/Params.hs similarity index 100% rename from vendor/hasql/library/Hasql/Encoders/Params.hs rename to src/hasql/Hasql/Encoders/Params.hs diff --git a/vendor/hasql/library/Hasql/Encoders/Value.hs b/src/hasql/Hasql/Encoders/Value.hs similarity index 100% rename from vendor/hasql/library/Hasql/Encoders/Value.hs rename to src/hasql/Hasql/Encoders/Value.hs diff --git a/vendor/hasql/library/Hasql/Errors.hs b/src/hasql/Hasql/Errors.hs similarity index 100% rename from vendor/hasql/library/Hasql/Errors.hs rename to src/hasql/Hasql/Errors.hs diff --git a/vendor/hasql/library/Hasql/IO.hs b/src/hasql/Hasql/IO.hs similarity index 100% rename from vendor/hasql/library/Hasql/IO.hs rename to src/hasql/Hasql/IO.hs diff --git a/vendor/hasql-implicits/library/Hasql/Implicits/Encoders.hs b/src/hasql/Hasql/Implicits/Encoders.hs similarity index 100% rename from vendor/hasql-implicits/library/Hasql/Implicits/Encoders.hs rename to src/hasql/Hasql/Implicits/Encoders.hs diff --git a/vendor/hasql-implicits/library/Hasql/Implicits/Prelude.hs b/src/hasql/Hasql/Implicits/Prelude.hs similarity index 100% rename from vendor/hasql-implicits/library/Hasql/Implicits/Prelude.hs rename to src/hasql/Hasql/Implicits/Prelude.hs diff --git a/vendor/hasql/library/Hasql/LibPq14.hs b/src/hasql/Hasql/LibPq14.hs similarity index 100% rename from vendor/hasql/library/Hasql/LibPq14.hs rename to src/hasql/Hasql/LibPq14.hs diff --git a/vendor/hasql/library/Hasql/LibPq14/Ffi.hs b/src/hasql/Hasql/LibPq14/Ffi.hs similarity index 100% rename from vendor/hasql/library/Hasql/LibPq14/Ffi.hs rename to src/hasql/Hasql/LibPq14/Ffi.hs diff --git a/vendor/hasql/library/Hasql/LibPq14/Mappings.hsc b/src/hasql/Hasql/LibPq14/Mappings.hsc similarity index 100% rename from vendor/hasql/library/Hasql/LibPq14/Mappings.hsc rename to src/hasql/Hasql/LibPq14/Mappings.hsc diff --git a/vendor/hasql-notifications/src/Hasql/Notifications.hs b/src/hasql/Hasql/Notifications.hs similarity index 99% rename from vendor/hasql-notifications/src/Hasql/Notifications.hs rename to src/hasql/Hasql/Notifications.hs index 5c3c0eaebd..e49a330d1e 100644 --- a/vendor/hasql-notifications/src/Hasql/Notifications.hs +++ b/src/hasql/Hasql/Notifications.hs @@ -38,6 +38,8 @@ import Hasql.Session (run, sql, statement) import qualified Hasql.Session as S import qualified Hasql.Statement as HST +import Prelude + -- | A wrapped text that represents a properly escaped and quoted PostgreSQL identifier newtype PgIdentifier = PgIdentifier Text deriving (Show) diff --git a/vendor/hasql/library/Hasql/Pipeline.hs b/src/hasql/Hasql/Pipeline.hs similarity index 100% rename from vendor/hasql/library/Hasql/Pipeline.hs rename to src/hasql/Hasql/Pipeline.hs diff --git a/vendor/hasql/library/Hasql/Pipeline/Core.hs b/src/hasql/Hasql/Pipeline/Core.hs similarity index 100% rename from vendor/hasql/library/Hasql/Pipeline/Core.hs rename to src/hasql/Hasql/Pipeline/Core.hs diff --git a/vendor/hasql-pool/src/library/exposed/Hasql/Pool.hs b/src/hasql/Hasql/Pool.hs similarity index 100% rename from vendor/hasql-pool/src/library/exposed/Hasql/Pool.hs rename to src/hasql/Hasql/Pool.hs diff --git a/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config.hs b/src/hasql/Hasql/Pool/Config.hs similarity index 100% rename from vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config.hs rename to src/hasql/Hasql/Pool/Config.hs diff --git a/vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Config.hs b/src/hasql/Hasql/Pool/Config/Config.hs similarity index 100% rename from vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Config.hs rename to src/hasql/Hasql/Pool/Config/Config.hs diff --git a/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/hasql/Hasql/Pool/Config/Defaults.hs similarity index 100% rename from vendor/hasql-pool/src/library/exposed/Hasql/Pool/Config/Defaults.hs rename to src/hasql/Hasql/Pool/Config/Defaults.hs diff --git a/vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Setting.hs b/src/hasql/Hasql/Pool/Config/Setting.hs similarity index 100% rename from vendor/hasql-pool/src/library/other/Hasql/Pool/Config/Setting.hs rename to src/hasql/Hasql/Pool/Config/Setting.hs diff --git a/vendor/hasql-pool/src/library/exposed/Hasql/Pool/Observation.hs b/src/hasql/Hasql/Pool/Observation.hs similarity index 100% rename from vendor/hasql-pool/src/library/exposed/Hasql/Pool/Observation.hs rename to src/hasql/Hasql/Pool/Observation.hs diff --git a/vendor/hasql-pool/src/library/other/Hasql/Pool/Prelude.hs b/src/hasql/Hasql/Pool/Prelude.hs similarity index 100% rename from vendor/hasql-pool/src/library/other/Hasql/Pool/Prelude.hs rename to src/hasql/Hasql/Pool/Prelude.hs diff --git a/vendor/hasql-pool/src/library/other/Hasql/Pool/SessionErrorDestructors.hs b/src/hasql/Hasql/Pool/SessionErrorDestructors.hs similarity index 100% rename from vendor/hasql-pool/src/library/other/Hasql/Pool/SessionErrorDestructors.hs rename to src/hasql/Hasql/Pool/SessionErrorDestructors.hs diff --git a/vendor/hasql/library/Hasql/PostgresTypeInfo.hs b/src/hasql/Hasql/PostgresTypeInfo.hs similarity index 100% rename from vendor/hasql/library/Hasql/PostgresTypeInfo.hs rename to src/hasql/Hasql/PostgresTypeInfo.hs diff --git a/vendor/hasql/library/Hasql/Prelude.hs b/src/hasql/Hasql/Prelude.hs similarity index 100% rename from vendor/hasql/library/Hasql/Prelude.hs rename to src/hasql/Hasql/Prelude.hs diff --git a/vendor/hasql/library/Hasql/PreparedStatementRegistry.hs b/src/hasql/Hasql/PreparedStatementRegistry.hs similarity index 100% rename from vendor/hasql/library/Hasql/PreparedStatementRegistry.hs rename to src/hasql/Hasql/PreparedStatementRegistry.hs diff --git a/vendor/hasql/library/Hasql/Session.hs b/src/hasql/Hasql/Session.hs similarity index 100% rename from vendor/hasql/library/Hasql/Session.hs rename to src/hasql/Hasql/Session.hs diff --git a/vendor/hasql/library/Hasql/Session/Core.hs b/src/hasql/Hasql/Session/Core.hs similarity index 100% rename from vendor/hasql/library/Hasql/Session/Core.hs rename to src/hasql/Hasql/Session/Core.hs diff --git a/vendor/hasql/library/Hasql/Statement.hs b/src/hasql/Hasql/Statement.hs similarity index 100% rename from vendor/hasql/library/Hasql/Statement.hs rename to src/hasql/Hasql/Statement.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction.hs b/src/hasql/Hasql/Transaction.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction.hs rename to src/hasql/Hasql/Transaction.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Config.hs b/src/hasql/Hasql/Transaction/Config.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Config.hs rename to src/hasql/Hasql/Transaction/Config.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Private/Prelude.hs b/src/hasql/Hasql/Transaction/Private/Prelude.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Private/Prelude.hs rename to src/hasql/Hasql/Transaction/Private/Prelude.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Private/SQL.hs b/src/hasql/Hasql/Transaction/Private/SQL.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Private/SQL.hs rename to src/hasql/Hasql/Transaction/Private/SQL.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Private/Sessions.hs b/src/hasql/Hasql/Transaction/Private/Sessions.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Private/Sessions.hs rename to src/hasql/Hasql/Transaction/Private/Sessions.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Private/Statements.hs b/src/hasql/Hasql/Transaction/Private/Statements.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Private/Statements.hs rename to src/hasql/Hasql/Transaction/Private/Statements.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Private/Transaction.hs b/src/hasql/Hasql/Transaction/Private/Transaction.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Private/Transaction.hs rename to src/hasql/Hasql/Transaction/Private/Transaction.hs diff --git a/vendor/hasql-transaction/library/Hasql/Transaction/Sessions.hs b/src/hasql/Hasql/Transaction/Sessions.hs similarity index 100% rename from vendor/hasql-transaction/library/Hasql/Transaction/Sessions.hs rename to src/hasql/Hasql/Transaction/Sessions.hs diff --git a/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal b/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal index 52048da6bb..033ad4b3bd 100644 --- a/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal +++ b/vendor/hasql-dynamic-statements/hasql-dynamic-statements.cabal @@ -44,26 +44,6 @@ common test -threaded -with-rtsopts=-N -library - import: base - hs-source-dirs: library - exposed-modules: - Hasql.DynamicStatements.Session - Hasql.DynamicStatements.Snippet - Hasql.DynamicStatements.Statement - - other-modules: - Hasql.DynamicStatements.Prelude - Hasql.DynamicStatements.Snippet.Defs - - build-depends: - base >=4.14 && <5, - bytestring >=0.10 && <0.13, - containers >=0.6 && <0.8, - hasql >=1.8 && <1.10, - hasql-implicits >=0.2 && <0.3, - ptr >=0.16.7.2 && <0.17, - test-suite test import: test type: exitcode-stdio-1.0 diff --git a/vendor/hasql-implicits/hasql-implicits.cabal b/vendor/hasql-implicits/hasql-implicits.cabal deleted file mode 100644 index 392fa2e561..0000000000 --- a/vendor/hasql-implicits/hasql-implicits.cabal +++ /dev/null @@ -1,35 +0,0 @@ -library - hs-source-dirs: library - default-extensions: - BangPatterns - DeriveDataTypeable - DeriveFunctor - DeriveGeneric - DeriveTraversable - FlexibleContexts - FlexibleInstances - GeneralizedNewtypeDeriving - LambdaCase - NoImplicitPrelude - OverloadedStrings - RankNTypes - ScopedTypeVariables - StandaloneDeriving - TypeApplications - TypeFamilies - - default-language: Haskell2010 - exposed-modules: Hasql.Implicits.Encoders - other-modules: Hasql.Implicits.Prelude - build-depends: - aeson >=1 && <3, - base >=4.12 && <5, - bytestring >=0.10 && <1, - containers >=0.6 && <1, - hasql >=1.8 && <1.10, - iproute >=1.7 && <1.8, - scientific >=0.2 && <1, - text >=1 && <3, - time >=1.4 && <2, - uuid >=1.3 && <2, - vector >=0.10 && <1, diff --git a/vendor/hasql-pool/hasql-pool.cabal b/vendor/hasql-pool/hasql-pool.cabal index a629c34916..18e99d44b4 100644 --- a/vendor/hasql-pool/hasql-pool.cabal +++ b/vendor/hasql-pool/hasql-pool.cabal @@ -42,35 +42,6 @@ common base-settings TypeFamilies TypeOperators -library - import: base-settings - hs-source-dirs: - src/library/exposed - src/library/other - - -- cabal-gild: discover src/library/exposed - exposed-modules: - Hasql.Pool - Hasql.Pool.Config - Hasql.Pool.Config.Defaults - Hasql.Pool.Observation - - -- cabal-gild: discover src/library/other - other-modules: - Hasql.Pool.Config.Config - Hasql.Pool.Config.Setting - Hasql.Pool.Prelude - Hasql.Pool.SessionErrorDestructors - - build-depends: - base >=4.11 && <5, - bytestring >=0.10 && <0.14, - hasql >=1.9 && <1.10, - stm >=2.5 && <3, - text >=1.2 && <3, - time >=1.9 && <2, - uuid >=1.3 && <2, - test-suite test import: base-settings type: exitcode-stdio-1.0 diff --git a/vendor/hasql-transaction/hasql-transaction.cabal b/vendor/hasql-transaction/hasql-transaction.cabal index 9713431195..999a5703dc 100644 --- a/vendor/hasql-transaction/hasql-transaction.cabal +++ b/vendor/hasql-transaction/hasql-transaction.cabal @@ -45,30 +45,6 @@ common test -threaded -with-rtsopts=-N -library - import: base - hs-source-dirs: library - exposed-modules: - Hasql.Transaction - Hasql.Transaction.Sessions - - other-modules: - Hasql.Transaction.Config - Hasql.Transaction.Private.Prelude - Hasql.Transaction.Private.SQL - Hasql.Transaction.Private.Sessions - Hasql.Transaction.Private.Statements - Hasql.Transaction.Private.Transaction - - build-depends: - base >=4.12 && <5, - bytestring >=0.10 && <0.13, - bytestring-tree-builder >=0.2.7.8 && <0.3, - contravariant >=1.3 && <2, - hasql >=1.9 && <1.10, - mtl >=2.2 && <3, - transformers >=0.5 && <0.7, - test-suite conflicts-test import: test type: exitcode-stdio-1.0 diff --git a/vendor/hasql/hasql.cabal b/vendor/hasql/hasql.cabal index 0f7b9cf4e8..ab1c508d2e 100644 --- a/vendor/hasql/hasql.cabal +++ b/vendor/hasql/hasql.cabal @@ -56,73 +56,6 @@ common test -threaded -with-rtsopts=-N -library - import: base - hs-source-dirs: library - exposed-modules: - Hasql.Connection - Hasql.Connection.Setting - Hasql.Connection.Setting.Connection - Hasql.Connection.Setting.Connection.Param - Hasql.Decoders - Hasql.Encoders - Hasql.Pipeline - Hasql.Session - Hasql.Statement - - other-modules: - Hasql.Commands - Hasql.Connection.Config - Hasql.Connection.Config.ConnectionString - Hasql.Connection.Config.ConnectionString.Params - Hasql.Connection.Core - Hasql.Decoders.All - Hasql.Decoders.Array - Hasql.Decoders.Composite - Hasql.Decoders.Result - Hasql.Decoders.Results - Hasql.Decoders.Row - Hasql.Decoders.Value - Hasql.Encoders.All - Hasql.Encoders.Array - Hasql.Encoders.Params - Hasql.Encoders.Value - Hasql.Errors - Hasql.IO - Hasql.LibPq14 - Hasql.LibPq14.Ffi - Hasql.LibPq14.Mappings - Hasql.Pipeline.Core - Hasql.PostgresTypeInfo - Hasql.Prelude - Hasql.PreparedStatementRegistry - Hasql.Session.Core - - build-depends: - aeson >=2 && <3, - attoparsec >=0.10 && <0.15, - base >=4.14 && <5, - bytestring >=0.10 && <0.13, - bytestring-strict-builder >=0.4.5.1 && <0.5, - containers >=0.6 && <0.9, - contravariant >=1.3 && <2, - dlist >=0.8 && <0.9 || >=1 && <2, - hashable >=1.2 && <2, - hashtables >=1.1 && <2, - iproute >=1.7 && <1.8, - mtl >=2 && <3, - postgresql-binary >=0.14.2 && <0.15, - postgresql-libpq >=0.10.1 && <0.12, - profunctors >=5.1 && <6, - scientific >=0.3 && <0.4, - text >=1 && <3, - text-builder >=1 && <1.1, - time >=1.9 && <2, - transformers >=0.6 && <0.7, - uuid >=1.3 && <2, - vector >=0.10 && <0.14, - witherable >=0.5 && <0.6, - library testing-kit import: base visibility: private From 2caffaf3cead6c453cfda45266aed2e4462123fd Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Wed, 8 Jul 2026 23:55:21 +0200 Subject: [PATCH 1203/1204] chore(hasql*): run postgrest-style on vendored dependencies To run it, we need to remove the Arrows extension from postgrest.cabal. It doesn't seem to be depended upon by the hasql code (but was still introduced along with it), but breaks the style check. That's because stylish-haskell applies all extensions found in the .cabal file for all files, even when they are only part of *one* component. The Arrows extension makes `proc` a reserved keyword, which is used in CallPlan.hs. --- postgrest.cabal | 1 - src/hasql/Hasql/Commands.hs | 6 +- src/hasql/Hasql/Connection/Config.hs | 2 +- .../Connection/Config/ConnectionString.hs | 14 +- .../Config/ConnectionString/Params.hs | 4 +- src/hasql/Hasql/Connection/Core.hs | 12 +- src/hasql/Hasql/Connection/Setting.hs | 8 +- .../Hasql/Connection/Setting/Connection.hs | 8 +- .../Connection/Setting/Connection/Param.hs | 10 +- src/hasql/Hasql/Decoders/All.hs | 26 +- src/hasql/Hasql/Decoders/Array.hs | 4 +- src/hasql/Hasql/Decoders/Composite.hs | 4 +- src/hasql/Hasql/Decoders/Result.hs | 20 +- src/hasql/Hasql/Decoders/Results.hs | 10 +- src/hasql/Hasql/Decoders/Row.hs | 10 +- src/hasql/Hasql/Decoders/Value.hs | 4 +- src/hasql/Hasql/DynamicStatements/Prelude.hs | 145 +++++---- src/hasql/Hasql/DynamicStatements/Session.hs | 12 +- .../Hasql/DynamicStatements/Snippet/Defs.hs | 6 +- .../Hasql/DynamicStatements/Statement.hs | 12 +- src/hasql/Hasql/Encoders/All.hs | 28 +- src/hasql/Hasql/Encoders/Array.hs | 8 +- src/hasql/Hasql/Encoders/Params.hs | 18 +- src/hasql/Hasql/Encoders/Value.hs | 8 +- src/hasql/Hasql/Errors.hs | 6 +- src/hasql/Hasql/IO.hs | 18 +- src/hasql/Hasql/Implicits/Encoders.hs | 6 +- src/hasql/Hasql/Implicits/Prelude.hs | 157 +++++----- src/hasql/Hasql/LibPq14.hs | 18 +- src/hasql/Hasql/LibPq14/Ffi.hs | 2 +- src/hasql/Hasql/Notifications.hs | 34 +-- src/hasql/Hasql/Pipeline/Core.hs | 20 +- src/hasql/Hasql/Pool.hs | 48 +-- src/hasql/Hasql/Pool/Config.hs | 6 +- src/hasql/Hasql/Pool/Config/Config.hs | 22 +- src/hasql/Hasql/Pool/Config/Defaults.hs | 10 +- src/hasql/Hasql/Pool/Config/Setting.hs | 12 +- src/hasql/Hasql/Pool/Observation.hs | 4 +- src/hasql/Hasql/Pool/Prelude.hs | 151 +++++----- .../Hasql/Pool/SessionErrorDestructors.hs | 4 +- src/hasql/Hasql/PostgresTypeInfo.hs | 4 +- src/hasql/Hasql/Prelude.hs | 285 ++++++++++++------ src/hasql/Hasql/PreparedStatementRegistry.hs | 8 +- src/hasql/Hasql/Session/Core.hs | 26 +- src/hasql/Hasql/Statement.hs | 8 +- .../Hasql/Transaction/Private/Prelude.hs | 169 ++++++----- src/hasql/Hasql/Transaction/Private/SQL.hs | 12 +- .../Hasql/Transaction/Private/Sessions.hs | 14 +- .../Hasql/Transaction/Private/Statements.hs | 12 +- .../Hasql/Transaction/Private/Transaction.hs | 10 +- src/hasql/Hasql/Transaction/Sessions.hs | 8 +- vendor/hasql-dynamic-statements/test/Main.hs | 24 +- .../test/Hasql/NotificationsSpec.hs | 6 +- vendor/hasql-pool/src/test/Main.hs | 30 +- .../hasql-transaction/conflicts-test/Main.hs | 22 +- .../conflicts-test/Main/Statements.hs | 8 +- .../conflicts-test/Main/Transactions.hs | 6 +- vendor/hasql/benchmarks/Main.hs | 16 +- vendor/hasql/hspec/Hasql/ConnectionSpec.hs | 14 +- vendor/hasql/hspec/Hasql/PipelineSpec.hs | 12 +- vendor/hasql/profiling/Main.hs | 18 +- vendor/hasql/tasty/Main.hs | 28 +- vendor/hasql/tasty/Main/Connection.hs | 6 +- vendor/hasql/tasty/Main/Statements.hs | 6 +- .../testing-kit/Hasql/TestingKit/Constants.hs | 6 +- .../Hasql/TestingKit/Preludes/Base.hs | 17 +- .../TestingKit/Statements/BrokenSyntax.hs | 14 +- .../TestingKit/Statements/GenerateSeries.hs | 14 +- .../TestingKit/Statements/WrongDecoder.hs | 14 +- .../Hasql/TestingKit/TestingDsl.hs | 12 +- vendor/hasql/threads-test/Main.hs | 14 +- vendor/hasql/threads-test/Main/Statements.hs | 8 +- 72 files changed, 969 insertions(+), 780 deletions(-) diff --git a/postgrest.cabal b/postgrest.cabal index ee4e5a6a9e..ae35e3c63f 100644 --- a/postgrest.cabal +++ b/postgrest.cabal @@ -40,7 +40,6 @@ flag hpc library hasql default-language: Haskell2010 default-extensions: ApplicativeDo - Arrows BangPatterns BlockArguments ConstraintKinds diff --git a/src/hasql/Hasql/Commands.hs b/src/hasql/Hasql/Commands.hs index a1b52f46dc..a50040cb75 100644 --- a/src/hasql/Hasql/Commands.hs +++ b/src/hasql/Hasql/Commands.hs @@ -6,9 +6,9 @@ module Hasql.Commands ) where -import Data.ByteString.Builder qualified as BB -import Data.ByteString.Lazy qualified as BL -import Hasql.Prelude +import qualified Data.ByteString.Builder as BB +import qualified Data.ByteString.Lazy as BL +import Hasql.Prelude newtype Commands = Commands (DList BB.Builder) diff --git a/src/hasql/Hasql/Connection/Config.hs b/src/hasql/Hasql/Connection/Config.hs index 94f5438c07..a406912c29 100644 --- a/src/hasql/Hasql/Connection/Config.hs +++ b/src/hasql/Hasql/Connection/Config.hs @@ -3,7 +3,7 @@ module Hasql.Connection.Config where import Hasql.Prelude data Config = Config - { connectionString :: ByteString, + { connectionString :: ByteString, usePreparedStatements :: Bool } diff --git a/src/hasql/Hasql/Connection/Config/ConnectionString.hs b/src/hasql/Hasql/Connection/Config/ConnectionString.hs index 8bdae21334..21e9ce904b 100644 --- a/src/hasql/Hasql/Connection/Config/ConnectionString.hs +++ b/src/hasql/Hasql/Connection/Config/ConnectionString.hs @@ -1,11 +1,11 @@ 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 -import Hasql.Prelude +import qualified Data.ByteString as B +import qualified Data.ByteString.Char8 as BC +import qualified Data.Map.Strict as Map +import qualified Data.Text.Encoding +import qualified Hasql.Connection.Config.ConnectionString.Params as Params +import Hasql.Prelude type ConnectionString = ByteString @@ -27,5 +27,5 @@ fromParams = case w of '\'' -> BC.pack "\\'" '\\' -> BC.pack "\\\\" - _ -> BC.singleton w + _ -> BC.singleton w ) diff --git a/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs b/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs index f0243ab11a..a912ec0131 100644 --- a/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs +++ b/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs @@ -1,7 +1,7 @@ module Hasql.Connection.Config.ConnectionString.Params where -import Data.Map.Strict qualified as Map -import Hasql.Prelude +import qualified Data.Map.Strict as Map +import Hasql.Prelude type Params = Map.Map ByteString ByteString diff --git a/src/hasql/Hasql/Connection/Core.hs b/src/hasql/Hasql/Connection/Core.hs index 642b4db0ab..faf1b7a295 100644 --- a/src/hasql/Hasql/Connection/Core.hs +++ b/src/hasql/Hasql/Connection/Core.hs @@ -2,12 +2,12 @@ -- This module provides a low-level effectful API dealing with the connections to the database. module Hasql.Connection.Core where -import Hasql.Connection.Config qualified as Config -import Hasql.Connection.Setting qualified as Setting -import Hasql.IO qualified as IO -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude -import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry +import qualified Hasql.Connection.Config as Config +import qualified Hasql.Connection.Setting as Setting +import qualified Hasql.IO as IO +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry -- | -- A single connection to the database. diff --git a/src/hasql/Hasql/Connection/Setting.hs b/src/hasql/Hasql/Connection/Setting.hs index eee0b56de4..bbcbeaefb1 100644 --- a/src/hasql/Hasql/Connection/Setting.hs +++ b/src/hasql/Hasql/Connection/Setting.hs @@ -5,10 +5,10 @@ module Hasql.Connection.Setting ) where -import Hasql.Connection.Config qualified as Config -import Hasql.Connection.Config.ConnectionString qualified as Config.ConnectionString -import Hasql.Connection.Setting.Connection qualified as Connection -import Hasql.Prelude +import qualified Hasql.Connection.Config as Config +import qualified Hasql.Connection.Config.ConnectionString as Config.ConnectionString +import qualified Hasql.Connection.Setting.Connection as Connection +import Hasql.Prelude -- | Setting of a client handle. newtype Setting = Setting (Config.Config -> Config.Config) diff --git a/src/hasql/Hasql/Connection/Setting/Connection.hs b/src/hasql/Hasql/Connection/Setting/Connection.hs index 466eab65c7..c5a419bb23 100644 --- a/src/hasql/Hasql/Connection/Setting/Connection.hs +++ b/src/hasql/Hasql/Connection/Setting/Connection.hs @@ -5,10 +5,10 @@ module Hasql.Connection.Setting.Connection ) where -import Hasql.Connection.Config.ConnectionString qualified as Config.ConnectionString -import Hasql.Connection.Config.ConnectionString.Params qualified as Config.ConnectionString.Params -import Hasql.Connection.Setting.Connection.Param qualified as Param -import Hasql.Prelude +import qualified Hasql.Connection.Config.ConnectionString as Config.ConnectionString +import qualified Hasql.Connection.Config.ConnectionString.Params as Config.ConnectionString.Params +import qualified Hasql.Connection.Setting.Connection.Param as Param +import Hasql.Prelude -- | Instructions on how to connect to the database. newtype Connection = Connection ByteString diff --git a/src/hasql/Hasql/Connection/Setting/Connection/Param.hs b/src/hasql/Hasql/Connection/Setting/Connection/Param.hs index a1e13d3507..1f8f56b5f5 100644 --- a/src/hasql/Hasql/Connection/Setting/Connection/Param.hs +++ b/src/hasql/Hasql/Connection/Setting/Connection/Param.hs @@ -9,11 +9,11 @@ module Hasql.Connection.Setting.Connection.Param ) where -import Data.ByteString.Builder qualified as BB -import Data.ByteString.Lazy qualified as BL -import Data.Text.Encoding qualified as Text -import Hasql.Connection.Config.ConnectionString.Params qualified as Config -import Hasql.Prelude +import qualified Data.ByteString.Builder as BB +import qualified Data.ByteString.Lazy as BL +import qualified Data.Text.Encoding as Text +import qualified Hasql.Connection.Config.ConnectionString.Params as Config +import Hasql.Prelude -- | Parameter of the connection instructions. newtype Param = Param (Config.Params -> Config.Params) diff --git a/src/hasql/Hasql/Decoders/All.hs b/src/hasql/Hasql/Decoders/All.hs index 9a8624dedb..d2809bb94e 100644 --- a/src/hasql/Hasql/Decoders/All.hs +++ b/src/hasql/Hasql/Decoders/All.hs @@ -2,19 +2,19 @@ -- A DSL for declaration of result decoders. module Hasql.Decoders.All where -import Data.Aeson qualified as Aeson -import Data.IP qualified as Iproute -import Data.Vector.Generic qualified as GenericVector -import Hasql.Decoders.Array qualified as Array -import Hasql.Decoders.Composite qualified as Composite -import Hasql.Decoders.Result qualified as Result -import Hasql.Decoders.Results qualified as Results -import Hasql.Decoders.Row qualified as Row -import Hasql.Decoders.Value qualified as Value -import Hasql.Prelude hiding (bool, maybe) -import Hasql.Prelude qualified as Prelude -import PostgreSQL.Binary.Decoding qualified as A -import PostgreSQL.Binary.Range qualified as R +import qualified Data.Aeson as Aeson +import qualified Data.IP as Iproute +import qualified Data.Vector.Generic as GenericVector +import qualified Hasql.Decoders.Array as Array +import qualified Hasql.Decoders.Composite as Composite +import qualified Hasql.Decoders.Result as Result +import qualified Hasql.Decoders.Results as Results +import qualified Hasql.Decoders.Row as Row +import qualified Hasql.Decoders.Value as Value +import Hasql.Prelude hiding (bool, maybe) +import qualified Hasql.Prelude as Prelude +import qualified PostgreSQL.Binary.Decoding as A +import qualified PostgreSQL.Binary.Range as R -- * Result diff --git a/src/hasql/Hasql/Decoders/Array.hs b/src/hasql/Hasql/Decoders/Array.hs index 8c40bff6c9..b72aee787e 100644 --- a/src/hasql/Hasql/Decoders/Array.hs +++ b/src/hasql/Hasql/Decoders/Array.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Array where -import Hasql.Prelude -import PostgreSQL.Binary.Decoding qualified as A +import Hasql.Prelude +import qualified PostgreSQL.Binary.Decoding as A newtype Array a = Array (ReaderT Bool A.Array a) diff --git a/src/hasql/Hasql/Decoders/Composite.hs b/src/hasql/Hasql/Decoders/Composite.hs index 9a372c567d..56907890ba 100644 --- a/src/hasql/Hasql/Decoders/Composite.hs +++ b/src/hasql/Hasql/Decoders/Composite.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Composite where -import Hasql.Prelude -import PostgreSQL.Binary.Decoding qualified as A +import Hasql.Prelude +import qualified PostgreSQL.Binary.Decoding as A newtype Composite a = Composite (ReaderT Bool A.Composite a) diff --git a/src/hasql/Hasql/Decoders/Result.hs b/src/hasql/Hasql/Decoders/Result.hs index ed67b3bdca..dd671982c7 100644 --- a/src/hasql/Hasql/Decoders/Result.hs +++ b/src/hasql/Hasql/Decoders/Result.hs @@ -1,14 +1,14 @@ module Hasql.Decoders.Result where -import Data.Attoparsec.ByteString.Char8 qualified as Attoparsec -import Data.ByteString qualified as ByteString -import Data.Vector qualified as Vector -import Data.Vector.Mutable qualified as MutableVector -import Hasql.Decoders.Row qualified as Row -import Hasql.Errors -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude hiding (many, maybe) -import Hasql.Prelude qualified as Prelude +import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec +import qualified Data.ByteString as ByteString +import qualified Data.Vector as Vector +import qualified Data.Vector.Mutable as MutableVector +import qualified Hasql.Decoders.Row as Row +import Hasql.Errors +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude hiding (many, maybe) +import qualified Hasql.Prelude as Prelude newtype Result a = Result (ReaderT (Bool, LibPQ.Result) (ExceptT ResultError IO) a) @@ -97,7 +97,7 @@ serverError = Just pos -> case Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) pos of Right pos -> Just pos - _ -> Nothing + _ -> Nothing {-# INLINE maybe #-} maybe :: Row.Row a -> Result (Maybe a) diff --git a/src/hasql/Hasql/Decoders/Results.hs b/src/hasql/Hasql/Decoders/Results.hs index 72ae9bc502..74830ab710 100644 --- a/src/hasql/Hasql/Decoders/Results.hs +++ b/src/hasql/Hasql/Decoders/Results.hs @@ -10,11 +10,11 @@ -- * Row-by-row fetching. module Hasql.Decoders.Results where -import Hasql.Decoders.Result qualified as Result -import Hasql.Errors -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude hiding (many, maybe) -import Hasql.Prelude qualified as Prelude +import qualified Hasql.Decoders.Result as Result +import Hasql.Errors +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude hiding (many, maybe) +import qualified Hasql.Prelude as Prelude newtype Results a = Results (ReaderT (Bool, LibPQ.Connection) (ExceptT CommandError IO) a) diff --git a/src/hasql/Hasql/Decoders/Row.hs b/src/hasql/Hasql/Decoders/Row.hs index cbbd47a164..269106a3ba 100644 --- a/src/hasql/Hasql/Decoders/Row.hs +++ b/src/hasql/Hasql/Decoders/Row.hs @@ -1,10 +1,10 @@ module Hasql.Decoders.Row where -import Hasql.Decoders.Value qualified as Value -import Hasql.Errors -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude hiding (error) -import PostgreSQL.Binary.Decoding qualified as A +import qualified Hasql.Decoders.Value as Value +import Hasql.Errors +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude hiding (error) +import qualified PostgreSQL.Binary.Decoding as A newtype Row a = Row (ReaderT Env (ExceptT RowError IO) a) diff --git a/src/hasql/Hasql/Decoders/Value.hs b/src/hasql/Hasql/Decoders/Value.hs index 678eee6c2f..375dc5abe0 100644 --- a/src/hasql/Hasql/Decoders/Value.hs +++ b/src/hasql/Hasql/Decoders/Value.hs @@ -1,7 +1,7 @@ module Hasql.Decoders.Value where -import Hasql.Prelude -import PostgreSQL.Binary.Decoding qualified as A +import Hasql.Prelude +import qualified PostgreSQL.Binary.Decoding as A newtype Value a = Value (Bool -> A.Value a) diff --git a/src/hasql/Hasql/DynamicStatements/Prelude.hs b/src/hasql/Hasql/DynamicStatements/Prelude.hs index fbb2820fae..37afc21f79 100644 --- a/src/hasql/Hasql/DynamicStatements/Prelude.hs +++ b/src/hasql/Hasql/DynamicStatements/Prelude.hs @@ -3,68 +3,85 @@ module Hasql.DynamicStatements.Prelude ) where -import Control.Applicative as Exports -import Control.Arrow as Exports -import Control.Category as Exports -import Control.Concurrent as Exports -import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) -import Control.Monad.Fail as Exports -import Control.Monad.Fix as Exports hiding (fix) -import Control.Monad.IO.Class as Exports -import Control.Monad.ST as Exports -import Data.Bits as Exports -import Data.Bool as Exports -import Data.ByteString as Exports (ByteString) -import Data.Char as Exports -import Data.Coerce as Exports -import Data.Complex as Exports -import Data.Data as Exports -import Data.Dynamic as Exports -import Data.Either as Exports -import Data.Fixed as Exports -import Data.Foldable as Exports hiding (toList) -import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports hiding (unzip) +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, + mapM_, msum, sequence, sequence_) +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports +import Control.Monad.ST as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports -import Data.Functor.Identity as Exports -import Data.IORef as Exports -import Data.Int as Exports -import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) -import Data.Maybe as Exports -import Data.Monoid as Exports hiding (First (..), Last (..), (<>)) -import Data.Ord as Exports -import Data.Proxy as Exports -import Data.Ratio as Exports -import Data.STRef as Exports -import Data.Semigroup as Exports -import Data.Sequence as Exports (Seq) -import Data.String as Exports -import Data.Traversable as Exports -import Data.Tuple as Exports -import Data.Unique as Exports -import Data.Version as Exports -import Data.Word as Exports -import Debug.Trace as Exports -import Foreign.ForeignPtr as Exports -import Foreign.Ptr as Exports -import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (alignment, sizeOf) -import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) -import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) -import GHC.Generics as Exports (Generic, Generic1) -import GHC.IO.Exception as Exports -import Numeric as Exports -import System.Environment as Exports -import System.Exit as Exports -import System.IO as Exports -import System.IO.Error as Exports -import System.IO.Unsafe as Exports -import System.Mem as Exports -import System.Mem.StableName as Exports -import System.Timeout as Exports -import Text.Printf as Exports (hPrintf, printf) -import Text.Read as Exports (Read (..), readEither, readMaybe) -import Unsafe.Coerce as Exports -import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (all, and, any, concat, + concatMap, elem, find, foldl, + foldl', foldl1, foldr, foldr1, + isSubsequenceOf, mapAccumL, + mapAccumR, maximum, maximumBy, + minimum, minimumBy, notElem, or, + product, sortOn, sum, uncons) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (First (..), Last (..), + (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports +import Data.Sequence as Exports (Seq) +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (alignment, sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, + threadWaitReadSTM, + threadWaitWrite, + threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, + lazy, sortWith) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (all, and, any, concat, + concatMap, elem, fail, foldl, + foldl1, foldr, foldr1, id, mapM, + mapM_, maximum, minimum, notElem, + or, product, sequence, sequence_, + sum, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) +import Unsafe.Coerce as Exports diff --git a/src/hasql/Hasql/DynamicStatements/Session.hs b/src/hasql/Hasql/DynamicStatements/Session.hs index d7fc39067b..5638c4fc14 100644 --- a/src/hasql/Hasql/DynamicStatements/Session.hs +++ b/src/hasql/Hasql/DynamicStatements/Session.hs @@ -1,11 +1,11 @@ module Hasql.DynamicStatements.Session where -import Hasql.Decoders qualified as Decoders -import Hasql.DynamicStatements.Prelude -import Hasql.DynamicStatements.Snippet.Defs qualified as SnippetDefs -import Hasql.DynamicStatements.Statement qualified as Statement -import Hasql.Session -import Hasql.Session qualified as Session +import qualified Hasql.Decoders as Decoders +import Hasql.DynamicStatements.Prelude +import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs +import qualified Hasql.DynamicStatements.Statement as Statement +import Hasql.Session +import qualified Hasql.Session as Session -- | -- Execute a dynamically parameterized statement, providing a result decoder. diff --git a/src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs b/src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs index 9bc4eeb114..661d2ede85 100644 --- a/src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs +++ b/src/hasql/Hasql/DynamicStatements/Snippet/Defs.hs @@ -1,8 +1,8 @@ module Hasql.DynamicStatements.Snippet.Defs where -import Hasql.DynamicStatements.Prelude -import Hasql.Encoders qualified as Encoders -import Hasql.Implicits.Encoders qualified as Encoders +import Hasql.DynamicStatements.Prelude +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Implicits.Encoders as Encoders -- | -- Composable SQL snippet with parameters injected. diff --git a/src/hasql/Hasql/DynamicStatements/Statement.hs b/src/hasql/Hasql/DynamicStatements/Statement.hs index e92cb14b5a..54a9acca65 100644 --- a/src/hasql/Hasql/DynamicStatements/Statement.hs +++ b/src/hasql/Hasql/DynamicStatements/Statement.hs @@ -1,11 +1,11 @@ module Hasql.DynamicStatements.Statement where -import Hasql.Decoders qualified as Decoders -import Hasql.DynamicStatements.Prelude -import Hasql.DynamicStatements.Snippet.Defs qualified as SnippetDefs -import Hasql.Statement -import Ptr.ByteString qualified as ByteString -import Ptr.Poking qualified as Poking +import qualified Hasql.Decoders as Decoders +import Hasql.DynamicStatements.Prelude +import qualified Hasql.DynamicStatements.Snippet.Defs as SnippetDefs +import Hasql.Statement +import qualified Ptr.ByteString as ByteString +import qualified Ptr.Poking as Poking -- | -- Construct a statement dynamically, specifying the parameters in-place diff --git a/src/hasql/Hasql/Encoders/All.hs b/src/hasql/Hasql/Encoders/All.hs index 480a43ba4d..df3a6a8694 100644 --- a/src/hasql/Hasql/Encoders/All.hs +++ b/src/hasql/Hasql/Encoders/All.hs @@ -2,18 +2,18 @@ -- A DSL for declaration of query parameter encoders. module Hasql.Encoders.All where -import Data.Aeson qualified as Aeson -import Data.ByteString.Lazy qualified as LazyByteString -import Data.IP qualified as Iproute -import Hasql.Encoders.Array qualified as Array -import Hasql.Encoders.Params qualified as Params -import Hasql.Encoders.Value qualified as Value -import Hasql.PostgresTypeInfo qualified as PTI -import Hasql.Prelude hiding (bool) -import Hasql.Prelude qualified as Prelude -import PostgreSQL.Binary.Encoding qualified as A -import PostgreSQL.Binary.Range qualified as R -import TextBuilder qualified as C +import qualified Data.Aeson as Aeson +import qualified Data.ByteString.Lazy as LazyByteString +import qualified Data.IP as Iproute +import qualified Hasql.Encoders.Array as Array +import qualified Hasql.Encoders.Params as Params +import qualified Hasql.Encoders.Value as Value +import qualified Hasql.PostgresTypeInfo as PTI +import Hasql.Prelude hiding (bool) +import qualified Hasql.Prelude as Prelude +import qualified PostgreSQL.Binary.Encoding as A +import qualified PostgreSQL.Binary.Range as R +import qualified TextBuilder as C -- * Parameters Product Encoder @@ -497,11 +497,11 @@ field = \case Nullable (Value (Value.Value elementOID _ encode print)) -> Composite ( \val idt -> case val of - Nothing -> A.nullField (PTI.oidWord32 elementOID) + Nothing -> A.nullField (PTI.oidWord32 elementOID) Just val -> A.field (PTI.oidWord32 elementOID) (encode idt val) ) ( \val -> case val of - Nothing -> ["NULL"] + Nothing -> ["NULL"] Just val -> [print val] ) diff --git a/src/hasql/Hasql/Encoders/Array.hs b/src/hasql/Hasql/Encoders/Array.hs index 15e3eb6c3f..81c56d05f8 100644 --- a/src/hasql/Hasql/Encoders/Array.hs +++ b/src/hasql/Hasql/Encoders/Array.hs @@ -1,9 +1,9 @@ module Hasql.Encoders.Array where -import Hasql.PostgresTypeInfo qualified as B -import Hasql.Prelude -import PostgreSQL.Binary.Encoding qualified as A -import TextBuilder qualified as C +import qualified Hasql.PostgresTypeInfo as B +import Hasql.Prelude +import qualified PostgreSQL.Binary.Encoding as A +import qualified TextBuilder as C data Array a = Array B.OID B.OID (Bool -> a -> A.Array) (a -> C.TextBuilder) diff --git a/src/hasql/Hasql/Encoders/Params.hs b/src/hasql/Hasql/Encoders/Params.hs index 08a0d45053..9988a16fe3 100644 --- a/src/hasql/Hasql/Encoders/Params.hs +++ b/src/hasql/Hasql/Encoders/Params.hs @@ -1,11 +1,11 @@ module Hasql.Encoders.Params where -import Hasql.Encoders.Value qualified as C -import Hasql.LibPq14 qualified as A -import Hasql.PostgresTypeInfo qualified as D -import Hasql.Prelude -import PostgreSQL.Binary.Encoding qualified as B -import TextBuilder qualified as E +import qualified Hasql.Encoders.Value as C +import qualified Hasql.LibPq14 as A +import qualified Hasql.PostgresTypeInfo as D +import Hasql.Prelude +import qualified PostgreSQL.Binary.Encoding as B +import qualified TextBuilder as E renderReadable :: Params a -> a -> [Text] renderReadable (Params _ _ _ printer) params = @@ -35,10 +35,10 @@ compileUnpreparedStatementData (Params _ columnsMetadata serializer _) integerDa -- | -- Encoder of some representation of a parameters product. data Params a = Params - { size :: !Int, + { size :: !Int, columnsMetadata :: !(DList (A.Oid, A.Format)), - serializer :: Bool -> a -> DList (Maybe ByteString), - printer :: a -> DList Text + serializer :: Bool -> a -> DList (Maybe ByteString), + printer :: a -> DList Text } instance Contravariant Params where diff --git a/src/hasql/Hasql/Encoders/Value.hs b/src/hasql/Hasql/Encoders/Value.hs index 8b8f55195d..0470712d19 100644 --- a/src/hasql/Hasql/Encoders/Value.hs +++ b/src/hasql/Hasql/Encoders/Value.hs @@ -1,9 +1,9 @@ module Hasql.Encoders.Value where -import Hasql.PostgresTypeInfo qualified as PTI -import Hasql.Prelude -import PostgreSQL.Binary.Encoding qualified as B -import TextBuilder qualified as C +import qualified Hasql.PostgresTypeInfo as PTI +import Hasql.Prelude +import qualified PostgreSQL.Binary.Encoding as B +import qualified TextBuilder as C data Value a = Value PTI.OID PTI.OID (Bool -> a -> B.Encoding) (a -> C.TextBuilder) diff --git a/src/hasql/Hasql/Errors.hs b/src/hasql/Hasql/Errors.hs index 7f87dbe1e9..0497eb0ec2 100644 --- a/src/hasql/Hasql/Errors.hs +++ b/src/hasql/Hasql/Errors.hs @@ -1,7 +1,7 @@ module Hasql.Errors where -import Data.ByteString.Char8 qualified as BC -import Hasql.Prelude +import qualified Data.ByteString.Char8 as BC +import Hasql.Prelude -- | Error during execution of a session. data SessionError @@ -58,7 +58,7 @@ instance Exception SessionError where prettyQuery :: ByteString prettyQuery = case queryContext of - Nothing -> query + Nothing -> query Just (message, pos) -> formatErrorContext query message pos in "QueryError!\n" <> "\n Query:\n" diff --git a/src/hasql/Hasql/IO.hs b/src/hasql/Hasql/IO.hs index fdbbbb69d7..50d5741c43 100644 --- a/src/hasql/Hasql/IO.hs +++ b/src/hasql/Hasql/IO.hs @@ -2,14 +2,14 @@ -- An API of low-level IO operations. module Hasql.IO where -import Hasql.Commands qualified as Commands -import Hasql.Decoders.Result qualified as ResultDecoders -import Hasql.Decoders.Results qualified as ResultsDecoders -import Hasql.Encoders.Params qualified as ParamsEncoders -import Hasql.Errors -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude -import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry +import qualified Hasql.Commands as Commands +import qualified Hasql.Decoders.Result as ResultDecoders +import qualified Hasql.Decoders.Results as ResultsDecoders +import qualified Hasql.Encoders.Params as ParamsEncoders +import Hasql.Errors +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry {-# INLINE acquireConnection #-} acquireConnection :: ByteString -> IO LibPQ.Connection @@ -33,7 +33,7 @@ checkConnectionStatus c = s <- LibPQ.status c case s of LibPQ.ConnectionOk -> return Nothing - _ -> fmap Just (LibPQ.errorMessage c) + _ -> fmap Just (LibPQ.errorMessage c) {-# INLINE checkServerVersion #-} checkServerVersion :: LibPQ.Connection -> IO (Maybe Int) diff --git a/src/hasql/Hasql/Implicits/Encoders.hs b/src/hasql/Hasql/Implicits/Encoders.hs index 641293cb65..0bf58430c7 100644 --- a/src/hasql/Hasql/Implicits/Encoders.hs +++ b/src/hasql/Hasql/Implicits/Encoders.hs @@ -2,9 +2,9 @@ module Hasql.Implicits.Encoders where -import qualified Data.Aeson as Aeson -import Hasql.Encoders -import Hasql.Implicits.Prelude hiding (bool) +import qualified Data.Aeson as Aeson +import Hasql.Encoders +import Hasql.Implicits.Prelude hiding (bool) -- | Provides a default implementation of parameter encoder. class DefaultParamEncoder a where diff --git a/src/hasql/Hasql/Implicits/Prelude.hs b/src/hasql/Hasql/Implicits/Prelude.hs index cf7172f99f..62dd3027ce 100644 --- a/src/hasql/Hasql/Implicits/Prelude.hs +++ b/src/hasql/Hasql/Implicits/Prelude.hs @@ -4,77 +4,94 @@ module Hasql.Implicits.Prelude ) where -import Control.Applicative as Exports -import Control.Arrow as Exports -import Control.Category as Exports -import Control.Concurrent as Exports -import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) -import Control.Monad.Fail as Exports -import Control.Monad.Fix as Exports hiding (fix) -import Control.Monad.IO.Class as Exports -import Control.Monad.ST as Exports -import Data.Bits as Exports -import Data.Bool as Exports -import Data.ByteString as Exports (ByteString) -import Data.Char as Exports -import Data.Coerce as Exports -import Data.Complex as Exports -import Data.Data as Exports -import Data.Dynamic as Exports -import Data.Either as Exports -import Data.Fixed as Exports -import Data.Foldable as Exports hiding (toList) -import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports hiding (unzip) +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, + mapM_, msum, sequence, sequence_) +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports +import Control.Monad.ST as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports hiding (unzip) import Data.Functor.Contravariant as Exports -import Data.Functor.Identity as Exports -import Data.IORef as Exports -import Data.IP as Exports (IPRange) -import Data.Int as Exports -import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) -import Data.Maybe as Exports -import Data.Monoid as Exports hiding (First (..), Last (..), (<>)) -import Data.Ord as Exports -import Data.Proxy as Exports -import Data.Ratio as Exports -import Data.STRef as Exports -import Data.Scientific as Exports (Scientific) -import Data.Semigroup as Exports -import Data.Sequence as Exports (Seq) -import Data.String as Exports -import Data.Text as Exports (Text) -import Data.Time as Exports -import Data.Traversable as Exports -import Data.Tuple as Exports -import Data.UUID as Exports (UUID) -import Data.Unique as Exports -import Data.Vector as Exports (Vector) -import Data.Version as Exports -import Data.Word as Exports -import Debug.Trace as Exports -import Foreign.ForeignPtr as Exports -import Foreign.Ptr as Exports -import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (alignment, sizeOf) -import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) -import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) -import GHC.Generics as Exports (Generic, Generic1) -import GHC.IO.Exception as Exports -import Numeric as Exports -import System.Environment as Exports -import System.Exit as Exports -import System.IO as Exports -import System.IO.Error as Exports -import System.IO.Unsafe as Exports -import System.Mem as Exports -import System.Mem.StableName as Exports -import System.Timeout as Exports -import Text.Printf as Exports (hPrintf, printf) -import Text.Read as Exports (Read (..), readEither, readMaybe) -import Unsafe.Coerce as Exports -import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.IP as Exports (IPRange) +import Data.Ix as Exports +import Data.List as Exports hiding (all, and, any, concat, + concatMap, elem, find, foldl, + foldl', foldl1, foldr, foldr1, + isSubsequenceOf, mapAccumL, + mapAccumR, maximum, maximumBy, + minimum, minimumBy, notElem, or, + product, sortOn, sum, uncons) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (First (..), Last (..), + (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Scientific as Exports (Scientific) +import Data.Semigroup as Exports +import Data.Sequence as Exports (Seq) +import Data.STRef as Exports +import Data.String as Exports +import Data.Text as Exports (Text) +import Data.Time as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.UUID as Exports (UUID) +import Data.Vector as Exports (Vector) +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (alignment, sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, + threadWaitReadSTM, + threadWaitWrite, + threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, + lazy, sortWith) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (all, and, any, concat, + concatMap, elem, fail, foldl, + foldl1, foldr, foldr1, id, mapM, + mapM_, maximum, minimum, notElem, + or, product, sequence, sequence_, + sum, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) +import Unsafe.Coerce as Exports {-# INLINE foldlStrict #-} foldlStrict :: (Foldable foldable) => (b -> a -> b) -> b -> foldable a -> b diff --git a/src/hasql/Hasql/LibPq14.hs b/src/hasql/Hasql/LibPq14.hs index 588c7b98b4..16f38267bd 100644 --- a/src/hasql/Hasql/LibPq14.hs +++ b/src/hasql/Hasql/LibPq14.hs @@ -15,11 +15,19 @@ module Hasql.LibPq14 ) where -import Database.PostgreSQL.LibPQ as Base hiding (ExecStatus (..), PipelineStatus (..), enterPipelineMode, exitPipelineMode, pipelineStatus, pipelineSync, resultStatus, sendFlushRequest) -import Database.PostgreSQL.LibPQ.Internal qualified as BaseInternal -import Hasql.LibPq14.Ffi qualified as Ffi -import Hasql.LibPq14.Mappings qualified as Mappings -import Hasql.Prelude +import Database.PostgreSQL.LibPQ as Base hiding + (ExecStatus (..), + PipelineStatus (..), + enterPipelineMode, + exitPipelineMode, + pipelineStatus, + pipelineSync, + resultStatus, + sendFlushRequest) +import qualified Database.PostgreSQL.LibPQ.Internal as BaseInternal +import qualified Hasql.LibPq14.Ffi as Ffi +import qualified Hasql.LibPq14.Mappings as Mappings +import Hasql.Prelude resultStatus :: Result -> IO Mappings.ExecStatus resultStatus result = do diff --git a/src/hasql/Hasql/LibPq14/Ffi.hs b/src/hasql/Hasql/LibPq14/Ffi.hs index 1df9317a08..0c65799669 100644 --- a/src/hasql/Hasql/LibPq14/Ffi.hs +++ b/src/hasql/Hasql/LibPq14/Ffi.hs @@ -3,7 +3,7 @@ module Hasql.LibPq14.Ffi where import Database.PostgreSQL.LibPQ.Internal -import Foreign.C.Types (CInt (..)) +import Foreign.C.Types (CInt (..)) import Hasql.Prelude foreign import capi "libpq-fe.h PQresultStatus" diff --git a/src/hasql/Hasql/Notifications.hs b/src/hasql/Hasql/Notifications.hs index e49a330d1e..a1d50d8d28 100644 --- a/src/hasql/Hasql/Notifications.hs +++ b/src/hasql/Hasql/Notifications.hs @@ -18,25 +18,25 @@ module Hasql.Notifications ) where #if defined(mingw32_HOST_OS) -import Control.Concurrent ( threadDelay ) +import Control.Concurrent (threadDelay) #else -import Control.Concurrent (threadWaitRead, threadDelay) +import Control.Concurrent (threadDelay, threadWaitRead) #endif -import Control.Exception (Exception, throw) -import Control.Monad (forever, unless, void, when) -import Data.ByteString.Char8 (ByteString) -import Data.Functor.Contravariant (contramap) -import Data.Text (Text) -import qualified Data.Text as T -import qualified Data.Text.Encoding as T -import qualified Database.PostgreSQL.LibPQ as PQ -import Hasql.Connection (Connection, withLibPQConnection) -import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE -import Hasql.Pool (Pool, UsageError, use) -import Hasql.Session (run, sql, statement) -import qualified Hasql.Session as S -import qualified Hasql.Statement as HST +import Control.Exception (Exception, throw) +import Control.Monad (forever, unless, void, when) +import Data.ByteString.Char8 (ByteString) +import Data.Functor.Contravariant (contramap) +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import qualified Database.PostgreSQL.LibPQ as PQ +import Hasql.Connection (Connection, withLibPQConnection) +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import Hasql.Pool (Pool, UsageError, use) +import Hasql.Session (run, sql, statement) +import qualified Hasql.Session as S +import qualified Hasql.Statement as HST import Prelude diff --git a/src/hasql/Hasql/Pipeline/Core.hs b/src/hasql/Hasql/Pipeline/Core.hs index fce3c5cd18..6ddbc40a86 100644 --- a/src/hasql/Hasql/Pipeline/Core.hs +++ b/src/hasql/Hasql/Pipeline/Core.hs @@ -1,15 +1,15 @@ module Hasql.Pipeline.Core where -import Hasql.Decoders.All qualified as Decoders -import Hasql.Decoders.Result qualified as Decoders.Result -import Hasql.Decoders.Results qualified as Decoders.Results -import Hasql.Encoders.All qualified as Encoders -import Hasql.Encoders.Params qualified as Encoders.Params -import Hasql.Errors -import Hasql.LibPq14 qualified as Pq -import Hasql.Prelude -import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry -import Hasql.Statement qualified as Statement +import qualified Hasql.Decoders.All as Decoders +import qualified Hasql.Decoders.Result as Decoders.Result +import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Encoders.All as Encoders +import qualified Hasql.Encoders.Params as Encoders.Params +import Hasql.Errors +import qualified Hasql.LibPq14 as Pq +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Statement as Statement run :: forall a. Pipeline a -> Bool -> Pq.Connection -> PreparedStatementRegistry.PreparedStatementRegistry -> Bool -> IO (Either SessionError a) run (Pipeline sendQueriesInIO) usePreparedStatements connection registry integerDatetimes = do diff --git a/src/hasql/Hasql/Pool.hs b/src/hasql/Hasql/Pool.hs index 37e966c962..899baf7cc8 100644 --- a/src/hasql/Hasql/Pool.hs +++ b/src/hasql/Hasql/Pool.hs @@ -10,24 +10,24 @@ module Hasql.Pool ) where -import Data.Text.Encoding qualified as Text -import Data.Text.Encoding.Error qualified as Text -import Data.UUID.V4 qualified as Uuid -import Hasql.Connection (Connection) -import Hasql.Connection qualified as Connection -import Hasql.Connection.Setting qualified as Connection.Setting -import Hasql.Pool.Config.Config qualified as Config -import Hasql.Pool.Observation -import Hasql.Pool.Prelude -import Hasql.Pool.SessionErrorDestructors qualified as ErrorsDestruction -import Hasql.Session qualified as Session +import qualified Data.Text.Encoding as Text +import qualified Data.Text.Encoding.Error as Text +import qualified Data.UUID.V4 as Uuid +import Hasql.Connection (Connection) +import qualified Hasql.Connection as Connection +import qualified Hasql.Connection.Setting as Connection.Setting +import qualified Hasql.Pool.Config.Config as Config +import Hasql.Pool.Observation +import Hasql.Pool.Prelude +import qualified Hasql.Pool.SessionErrorDestructors as ErrorsDestruction +import qualified Hasql.Session as Session -- | A connection tagged with metadata. data Entry = Entry - { entryConnection :: Connection, + { entryConnection :: Connection, entryCreationTimeNSec :: Word64, - entryUseTimeNSec :: Word64, - entryId :: UUID + entryUseTimeNSec :: Word64, + entryId :: UUID } entryIsAged :: Word64 -> Word64 -> Entry -> Bool @@ -41,30 +41,30 @@ entryIsIdle maxIdletime now Entry {..} = -- | Pool of connections to DB. data Pool = Pool { -- | Pool size. - poolSize :: Int, + poolSize :: Int, -- | Connection settings. poolFetchConnectionSettings :: IO [Connection.Setting.Setting], -- | Acquisition timeout, in microseconds. - poolAcquisitionTimeout :: Int, + poolAcquisitionTimeout :: Int, -- | Maximal connection lifetime, in nanoseconds. - poolMaxLifetime :: Word64, + poolMaxLifetime :: Word64, -- | Maximal connection idle time, in nanoseconds. - poolMaxIdletime :: Word64, + poolMaxIdletime :: Word64, -- | Avail connections. - poolConnectionQueue :: TQueue Entry, + poolConnectionQueue :: TQueue Entry, -- | Remaining capacity. -- The pool size limits the sum of poolCapacity, the length -- of poolConnectionQueue and the number of in-flight -- connections. - poolCapacity :: TVar Int, + poolCapacity :: TVar Int, -- | Whether to return a connection to the pool. - poolReuseVar :: TVar (TVar Bool), + poolReuseVar :: TVar (TVar Bool), -- | To stop the manager thread via garbage collection. - poolReaperRef :: IORef (), + poolReaperRef :: IORef (), -- | Action for reporting the observations. - poolObserver :: Observation -> IO (), + poolObserver :: Observation -> IO (), -- | Initial session to execute upon every established connection. - poolInitSession :: Session.Session () + poolInitSession :: Session.Session () } -- | Create a connection-pool. diff --git a/src/hasql/Hasql/Pool/Config.hs b/src/hasql/Hasql/Pool/Config.hs index b55b98d656..f8dd6791cf 100644 --- a/src/hasql/Hasql/Pool/Config.hs +++ b/src/hasql/Hasql/Pool/Config.hs @@ -14,9 +14,9 @@ module Hasql.Pool.Config ) where -import Hasql.Pool.Config.Config qualified as Config -import Hasql.Pool.Config.Setting qualified as Setting -import Hasql.Pool.Prelude +import qualified Hasql.Pool.Config.Config as Config +import qualified Hasql.Pool.Config.Setting as Setting +import Hasql.Pool.Prelude -- | Compile config from a list of settings. -- Latter settings override the preceding in cases of conflicts. diff --git a/src/hasql/Hasql/Pool/Config/Config.hs b/src/hasql/Hasql/Pool/Config/Config.hs index b2bb395106..30fa97a8c9 100644 --- a/src/hasql/Hasql/Pool/Config/Config.hs +++ b/src/hasql/Hasql/Pool/Config/Config.hs @@ -1,20 +1,20 @@ module Hasql.Pool.Config.Config where -import Hasql.Connection.Setting qualified as Connection.Setting -import Hasql.Pool.Config.Defaults qualified as Defaults -import Hasql.Pool.Observation (Observation) -import Hasql.Pool.Prelude -import Hasql.Session qualified as Session +import qualified Hasql.Connection.Setting as Connection.Setting +import qualified Hasql.Pool.Config.Defaults as Defaults +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | Configuration for Hasql connection pool. data Config = Config - { size :: Int, - acquisitionTimeout :: DiffTime, - agingTimeout :: DiffTime, - idlenessTimeout :: DiffTime, + { size :: Int, + acquisitionTimeout :: DiffTime, + agingTimeout :: DiffTime, + idlenessTimeout :: DiffTime, connectionSettingsProvider :: IO [Connection.Setting.Setting], - observationHandler :: Observation -> IO (), - initSession :: Session.Session () + observationHandler :: Observation -> IO (), + initSession :: Session.Session () } -- | Reasonable defaults, which can be built upon. diff --git a/src/hasql/Hasql/Pool/Config/Defaults.hs b/src/hasql/Hasql/Pool/Config/Defaults.hs index bf5ab0229c..09bf3506a2 100644 --- a/src/hasql/Hasql/Pool/Config/Defaults.hs +++ b/src/hasql/Hasql/Pool/Config/Defaults.hs @@ -1,10 +1,10 @@ module Hasql.Pool.Config.Defaults where -import Hasql.Connection.Setting qualified as Connection.Setting -import Hasql.Connection.Setting.Connection qualified as Connection.Setting.Connection -import Hasql.Pool.Observation (Observation) -import Hasql.Pool.Prelude -import Hasql.Session qualified as Session +import qualified Hasql.Connection.Setting as Connection.Setting +import qualified Hasql.Connection.Setting.Connection as Connection.Setting.Connection +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | -- 3 connections. diff --git a/src/hasql/Hasql/Pool/Config/Setting.hs b/src/hasql/Hasql/Pool/Config/Setting.hs index 3ce6a69e5d..0d9e561cac 100644 --- a/src/hasql/Hasql/Pool/Config/Setting.hs +++ b/src/hasql/Hasql/Pool/Config/Setting.hs @@ -1,11 +1,11 @@ module Hasql.Pool.Config.Setting where -import Hasql.Connection.Setting qualified as Connection.Setting -import Hasql.Pool.Config.Config (Config) -import Hasql.Pool.Config.Config qualified as Config -import Hasql.Pool.Observation (Observation) -import Hasql.Pool.Prelude -import Hasql.Session qualified as Session +import qualified Hasql.Connection.Setting as Connection.Setting +import Hasql.Pool.Config.Config (Config) +import qualified Hasql.Pool.Config.Config as Config +import Hasql.Pool.Observation (Observation) +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session apply :: Setting -> Config -> Config apply (Setting run) = run diff --git a/src/hasql/Hasql/Pool/Observation.hs b/src/hasql/Hasql/Pool/Observation.hs index e364b0074b..8bfab7720e 100644 --- a/src/hasql/Hasql/Pool/Observation.hs +++ b/src/hasql/Hasql/Pool/Observation.hs @@ -4,8 +4,8 @@ -- Specific interpreters are encouraged to be created as extension libraries. module Hasql.Pool.Observation where -import Hasql.Pool.Prelude -import Hasql.Session qualified as Session +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session -- | An observation of a change of the state of a pool. data Observation diff --git a/src/hasql/Hasql/Pool/Prelude.hs b/src/hasql/Hasql/Pool/Prelude.hs index f291d0dd05..fc3bf31491 100644 --- a/src/hasql/Hasql/Pool/Prelude.hs +++ b/src/hasql/Hasql/Pool/Prelude.hs @@ -3,73 +3,88 @@ module Hasql.Pool.Prelude ) where -import Control.Applicative as Exports hiding (WrappedArrow (..)) -import Control.Arrow as Exports hiding (first, second) -import Control.Category as Exports -import Control.Concurrent as Exports +import Control.Applicative as Exports hiding (WrappedArrow (..)) +import Control.Arrow as Exports hiding (first, second) +import Control.Category as Exports +import Control.Concurrent as Exports import Control.Concurrent.STM as Exports hiding (orElse) -import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) -import Control.Monad.Fail as Exports -import Control.Monad.Fix as Exports hiding (fix) +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, + msum, sequence, sequence_) +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) import Control.Monad.IO.Class as Exports -import Control.Monad.ST as Exports -import Data.Bifunctor as Exports -import Data.Bits as Exports -import Data.Bool as Exports -import Data.ByteString as Exports (ByteString) -import Data.Char as Exports -import Data.Coerce as Exports -import Data.Complex as Exports -import Data.Data as Exports -import Data.Dynamic as Exports -import Data.Either as Exports -import Data.Fixed as Exports -import Data.Foldable as Exports hiding (toList) -import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports hiding (unzip) -import Data.Functor.Compose as Exports -import Data.IORef as Exports -import Data.Int as Exports -import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) -import Data.List.NonEmpty as Exports (NonEmpty (..)) -import Data.Maybe as Exports -import Data.Monoid as Exports hiding (Alt) -import Data.Ord as Exports -import Data.Proxy as Exports -import Data.Ratio as Exports -import Data.STRef as Exports -import Data.String as Exports -import Data.Text as Exports (Text) -import Data.Time as Exports -import Data.Traversable as Exports -import Data.Tuple as Exports -import Data.UUID as Exports (UUID) -import Data.Unique as Exports -import Data.Version as Exports -import Data.Void as Exports -import Data.Word as Exports -import Debug.Trace as Exports -import Foreign.ForeignPtr as Exports -import Foreign.Ptr as Exports -import Foreign.StablePtr as Exports -import Foreign.Storable as Exports -import GHC.Clock as Exports (getMonotonicTimeNSec) -import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) -import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) -import GHC.Generics as Exports (Generic) -import GHC.IO.Exception as Exports -import Numeric as Exports -import System.Environment as Exports -import System.Exit as Exports -import System.IO as Exports (Handle, hClose) -import System.IO.Error as Exports -import System.IO.Unsafe as Exports -import System.Mem as Exports -import System.Mem.StableName as Exports -import System.Timeout as Exports -import Text.Printf as Exports (hPrintf, printf) -import Text.Read as Exports (Read (..), readEither, readMaybe) -import Unsafe.Coerce as Exports -import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Control.Monad.ST as Exports +import Data.Bifunctor as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports hiding (unzip) +import Data.Functor.Compose as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (all, and, any, concat, + concatMap, elem, find, foldl, foldl', + foldl1, foldr, foldr1, + isSubsequenceOf, mapAccumL, mapAccumR, + maximum, maximumBy, minimum, + minimumBy, notElem, or, product, + sortOn, sum, uncons) +import Data.List.NonEmpty as Exports (NonEmpty (..)) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Alt) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Text as Exports (Text) +import Data.Time as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.UUID as Exports (UUID) +import Data.Version as Exports +import Data.Void as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports +import GHC.Clock as Exports (getMonotonicTimeNSec) +import GHC.Conc as Exports hiding (orElse, threadWaitRead, + threadWaitReadSTM, threadWaitWrite, + threadWaitWriteSTM, withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, + sortWith) +import GHC.Generics as Exports (Generic) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (all, and, any, concat, + concatMap, elem, fail, foldl, foldl1, + foldr, foldr1, id, mapM, mapM_, + maximum, minimum, notElem, or, + product, sequence, sequence_, sum, + (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports (Handle, hClose) +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, readMaybe) +import Unsafe.Coerce as Exports diff --git a/src/hasql/Hasql/Pool/SessionErrorDestructors.hs b/src/hasql/Hasql/Pool/SessionErrorDestructors.hs index 1d41a45cc7..272b980fdb 100644 --- a/src/hasql/Hasql/Pool/SessionErrorDestructors.hs +++ b/src/hasql/Hasql/Pool/SessionErrorDestructors.hs @@ -1,7 +1,7 @@ module Hasql.Pool.SessionErrorDestructors where -import Hasql.Pool.Prelude -import Hasql.Session qualified as Session +import Hasql.Pool.Prelude +import qualified Hasql.Session as Session reset :: (Maybe ByteString -> x) -> x -> Session.SessionError -> x reset onReset onNoReset = \case diff --git a/src/hasql/Hasql/PostgresTypeInfo.hs b/src/hasql/Hasql/PostgresTypeInfo.hs index 7c46cc712e..859d88fe75 100644 --- a/src/hasql/Hasql/PostgresTypeInfo.hs +++ b/src/hasql/Hasql/PostgresTypeInfo.hs @@ -1,7 +1,7 @@ module Hasql.PostgresTypeInfo where -import Hasql.LibPq14 qualified as LibPQ -import Hasql.Prelude hiding (bool) +import qualified Hasql.LibPq14 as LibPQ +import Hasql.Prelude hiding (bool) -- | A Postgresql type info data PTI = PTI {ptiOID :: !OID, ptiArrayOID :: !(Maybe OID)} diff --git a/src/hasql/Hasql/Prelude.hs b/src/hasql/Hasql/Prelude.hs index 0f694b84e0..6ca22f8051 100644 --- a/src/hasql/Hasql/Prelude.hs +++ b/src/hasql/Hasql/Prelude.hs @@ -10,99 +10,198 @@ module Hasql.Prelude ) where -import Control.Applicative as Exports hiding (WrappedArrow (..)) -import Control.Arrow as Exports hiding (first, second) -import Control.Category as Exports -import Control.Concurrent as Exports -import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_) -import Control.Monad.Error.Class as Exports (MonadError (..)) -import Control.Monad.Fail as Exports -import Control.Monad.Fix as Exports hiding (fix) -import Control.Monad.IO.Class as Exports -import Control.Monad.Reader.Class as Exports (MonadReader (..)) -import Control.Monad.ST as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Cont as Exports hiding (callCC, shift) -import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, finallyE, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) -import Control.Monad.Trans.Maybe as Exports -import Control.Monad.Trans.Reader as Exports (Reader, ReaderT (ReaderT), mapReader, mapReaderT, runReader, runReaderT, withReader, withReaderT) -import Control.Monad.Trans.State.Strict as Exports (State, StateT (StateT), evalState, evalStateT, execState, execStateT, mapState, mapStateT, runState, runStateT, withState, withStateT) -import Control.Monad.Trans.Writer.Strict as Exports (Writer, WriterT (..), execWriter, execWriterT, mapWriter, mapWriterT, runWriter) -import Data.Bifunctor as Exports -import Data.Bits as Exports -import Data.Bool as Exports -import Data.ByteString as Exports (ByteString) -import Data.ByteString.Builder qualified -import Data.ByteString.Lazy qualified -import Data.Char as Exports -import Data.Coerce as Exports -import Data.Complex as Exports -import Data.DList as Exports (DList) -import Data.Data as Exports -import Data.Dynamic as Exports -import Data.Either as Exports -import Data.Fixed as Exports -import Data.Foldable as Exports hiding (toList) -import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports hiding (unzip) -import Data.Functor.Compose as Exports -import Data.Functor.Contravariant as Exports -import Data.Functor.Contravariant.Divisible as Exports -import Data.Functor.Identity as Exports -import Data.Hashable as Exports (Hashable (..)) -import Data.IORef as Exports -import Data.Int as Exports -import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, filter, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) -import Data.List.NonEmpty as Exports (NonEmpty (..)) -import Data.Maybe as Exports hiding (catMaybes, mapMaybe) -import Data.Monoid as Exports hiding (Alt, (<>)) -import Data.Ord as Exports -import Data.Profunctor.Unsafe as Exports -import Data.Proxy as Exports -import Data.Ratio as Exports -import Data.STRef as Exports -import Data.Scientific as Exports (Scientific) -import Data.Semigroup as Exports hiding (First (..), Last (..)) -import Data.String as Exports -import Data.Text as Exports (Text) -import Data.Text.Lazy qualified -import Data.Text.Lazy.Builder qualified -import Data.Time as Exports -import Data.Traversable as Exports -import Data.Tuple as Exports -import Data.UUID as Exports (UUID) -import Data.Unique as Exports -import Data.Vector as Exports (Vector) -import Data.Version as Exports -import Data.Void as Exports -import Data.Word as Exports -import Debug.Trace as Exports -import Foreign.ForeignPtr as Exports -import Foreign.Ptr as Exports -import Foreign.StablePtr as Exports -import Foreign.Storable as Exports -import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) -import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) -import GHC.Generics as Exports (Generic) -import GHC.IO.Exception as Exports -import GHC.OverloadedLabels as Exports -import Numeric as Exports -import System.Environment as Exports -import System.Exit as Exports -import System.IO as Exports (Handle, hClose) -import System.IO.Error as Exports -import System.IO.Unsafe as Exports -import System.Mem as Exports -import System.Mem.StableName as Exports -import System.Timeout as Exports -import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P) -import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec) -import Text.Printf as Exports (hPrintf, printf) -import Unsafe.Coerce as Exports -import Witherable as Exports -import Prelude as Exports hiding (Read, all, and, any, concat, concatMap, elem, fail, filter, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Control.Applicative as Exports hiding + (WrappedArrow (..)) +import Control.Arrow as Exports hiding (first, + second) +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, + forM, forM_, + mapM, mapM_, + msum, + sequence, + sequence_) +import Control.Monad.Error.Class as Exports (MonadError (..)) +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports +import Control.Monad.Reader.Class as Exports (MonadReader (..)) +import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Cont as Exports hiding (callCC, + shift) +import Control.Monad.Trans.Except as Exports (Except, + ExceptT (ExceptT), + catchE, + except, + finallyE, + mapExcept, + mapExceptT, + runExcept, + runExceptT, + throwE, + withExcept, + withExceptT) +import Control.Monad.Trans.Maybe as Exports +import Control.Monad.Trans.Reader as Exports (Reader, + ReaderT (ReaderT), + mapReader, + mapReaderT, + runReader, + runReaderT, + withReader, + withReaderT) +import Control.Monad.Trans.State.Strict as Exports (State, + StateT (StateT), + evalState, + evalStateT, + execState, + execStateT, + mapState, + mapStateT, + runState, + runStateT, + withState, + withStateT) +import Control.Monad.Trans.Writer.Strict as Exports (Writer, + WriterT (..), + execWriter, + execWriterT, + mapWriter, + mapWriterT, + runWriter) +import Data.Bifunctor as Exports +import Data.Bits as Exports +import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import qualified Data.ByteString.Builder +import qualified Data.ByteString.Lazy +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.DList as Exports (DList) +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, + (.)) +import Data.Functor as Exports hiding (unzip) +import Data.Functor.Compose as Exports +import Data.Functor.Contravariant as Exports +import Data.Functor.Contravariant.Divisible as Exports +import Data.Functor.Identity as Exports +import Data.Hashable as Exports (Hashable (..)) +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (all, + and, any, + concat, + concatMap, + elem, filter, + find, foldl, + foldl', + foldl1, foldr, + foldr1, + isSubsequenceOf, + mapAccumL, + mapAccumR, + maximum, + maximumBy, + minimum, + minimumBy, + notElem, or, + product, + sortOn, sum, + uncons) +import Data.List.NonEmpty as Exports (NonEmpty (..)) +import Data.Maybe as Exports hiding + (catMaybes, + mapMaybe) +import Data.Monoid as Exports hiding (Alt, + (<>)) +import Data.Ord as Exports +import Data.Profunctor.Unsafe as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Scientific as Exports (Scientific) +import Data.Semigroup as Exports hiding + (First (..), + Last (..)) +import Data.STRef as Exports +import Data.String as Exports +import Data.Text as Exports (Text) +import qualified Data.Text.Lazy +import qualified Data.Text.Lazy.Builder +import Data.Time as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.UUID as Exports (UUID) +import Data.Vector as Exports (Vector) +import Data.Version as Exports +import Data.Void as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports +import GHC.Conc as Exports hiding (orElse, + threadWaitRead, + threadWaitReadSTM, + threadWaitWrite, + threadWaitWriteSTM, + withMVar) +import GHC.Exts as Exports (IsList (..), + groupWith, + inline, lazy, + sortWith) +import GHC.Generics as Exports (Generic) +import GHC.IO.Exception as Exports +import GHC.OverloadedLabels as Exports +import Numeric as Exports +import Prelude as Exports hiding (Read, + all, and, any, + concat, + concatMap, + elem, fail, + filter, foldl, + foldl1, foldr, + foldr1, id, + mapM, mapM_, + maximum, + minimum, + notElem, or, + product, + sequence, + sequence_, + sum, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports (Handle, + hClose) +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.ParserCombinators.ReadP as Exports (ReadP, + readP_to_S, + readS_to_P) +import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, + readP_to_Prec, + readPrec_to_P, + readPrec_to_S, + readS_to_Prec) +import Text.Printf as Exports (hPrintf, + printf) +import Unsafe.Coerce as Exports +import Witherable as Exports type LazyByteString = Data.ByteString.Lazy.ByteString diff --git a/src/hasql/Hasql/PreparedStatementRegistry.hs b/src/hasql/Hasql/PreparedStatementRegistry.hs index 3cd908824e..905b7facbf 100644 --- a/src/hasql/Hasql/PreparedStatementRegistry.hs +++ b/src/hasql/Hasql/PreparedStatementRegistry.hs @@ -7,10 +7,10 @@ module Hasql.PreparedStatementRegistry ) where -import ByteString.StrictBuilder qualified as B -import Data.HashTable.IO qualified as A -import Hasql.LibPq14 qualified as Pq -import Hasql.Prelude hiding (lookup, reset) +import qualified ByteString.StrictBuilder as B +import qualified Data.HashTable.IO as A +import qualified Hasql.LibPq14 as Pq +import Hasql.Prelude hiding (lookup, reset) data PreparedStatementRegistry = PreparedStatementRegistry !(A.BasicHashTable LocalKey ByteString) !(IORef Word) diff --git a/src/hasql/Hasql/Session/Core.hs b/src/hasql/Hasql/Session/Core.hs index b755f814ce..614b99d3ab 100644 --- a/src/hasql/Hasql/Session/Core.hs +++ b/src/hasql/Hasql/Session/Core.hs @@ -1,18 +1,18 @@ module Hasql.Session.Core where -import Hasql.Connection.Core qualified as Connection -import Hasql.Decoders.All qualified as Decoders -import Hasql.Decoders.Result qualified as Decoders.Result -import Hasql.Decoders.Results qualified as Decoders.Results -import Hasql.Encoders.All qualified as Encoders -import Hasql.Encoders.Params qualified as Encoders.Params -import Hasql.Errors -import Hasql.IO qualified as IO -import Hasql.LibPq14 qualified as Pq -import Hasql.Pipeline.Core qualified as Pipeline -import Hasql.Prelude -import Hasql.PreparedStatementRegistry qualified as PreparedStatementRegistry -import Hasql.Statement qualified as Statement +import qualified Hasql.Connection.Core as Connection +import qualified Hasql.Decoders.All as Decoders +import qualified Hasql.Decoders.Result as Decoders.Result +import qualified Hasql.Decoders.Results as Decoders.Results +import qualified Hasql.Encoders.All as Encoders +import qualified Hasql.Encoders.Params as Encoders.Params +import Hasql.Errors +import qualified Hasql.IO as IO +import qualified Hasql.LibPq14 as Pq +import qualified Hasql.Pipeline.Core as Pipeline +import Hasql.Prelude +import qualified Hasql.PreparedStatementRegistry as PreparedStatementRegistry +import qualified Hasql.Statement as Statement -- | -- A batch of actions to be executed in the context of a database connection. diff --git a/src/hasql/Hasql/Statement.hs b/src/hasql/Hasql/Statement.hs index 4def967e0a..4070c4c8a4 100644 --- a/src/hasql/Hasql/Statement.hs +++ b/src/hasql/Hasql/Statement.hs @@ -12,10 +12,10 @@ module Hasql.Statement ) where -import Hasql.Decoders qualified as Decoders -import Hasql.Decoders.All qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Prelude +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Decoders.All as Decoders +import qualified Hasql.Encoders as Encoders +import Hasql.Prelude -- | -- Specification of a strictly single-statement query, which can be parameterized and prepared. diff --git a/src/hasql/Hasql/Transaction/Private/Prelude.hs b/src/hasql/Hasql/Transaction/Private/Prelude.hs index 18e76aaf74..3576e696c3 100644 --- a/src/hasql/Hasql/Transaction/Private/Prelude.hs +++ b/src/hasql/Hasql/Transaction/Private/Prelude.hs @@ -4,76 +4,107 @@ module Hasql.Transaction.Private.Prelude ) where -import Control.Applicative as Exports -import Control.Arrow as Exports -import Control.Category as Exports -import Control.Concurrent as Exports -import Control.Exception as Exports -import Control.Monad as Exports hiding (fail, forM, forM_, join, mapM, mapM_, msum, sequence, sequence_) -import Control.Monad.Error.Class as Exports (MonadError (..)) -import Control.Monad.Fail as Exports -import Control.Monad.Fix as Exports hiding (fix) -import Control.Monad.IO.Class as Exports -import Control.Monad.ST as Exports -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Maybe as Exports hiding (liftListen, liftPass) -import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, liftCatch) -import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, liftCatch, liftListen, liftPass) -import Data.Bits as Exports -import Data.Bool as Exports -import Data.ByteString as Exports (ByteString) -import Data.Char as Exports -import Data.Coerce as Exports -import Data.Complex as Exports -import Data.Data as Exports -import Data.Dynamic as Exports -import Data.Either as Exports -import Data.Fixed as Exports -import Data.Foldable as Exports hiding (toList) -import Data.Function as Exports hiding (id, (.)) -import Data.Functor as Exports hiding (unzip) -import Data.Functor.Contravariant as Exports +import Control.Applicative as Exports +import Control.Arrow as Exports +import Control.Category as Exports +import Control.Concurrent as Exports +import Control.Exception as Exports +import Control.Monad as Exports hiding (fail, forM, + forM_, join, mapM, + mapM_, msum, sequence, + sequence_) +import Control.Monad.Error.Class as Exports (MonadError (..)) +import Control.Monad.Fail as Exports +import Control.Monad.Fix as Exports hiding (fix) +import Control.Monad.IO.Class as Exports +import Control.Monad.ST as Exports +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Maybe as Exports hiding (liftListen, + liftPass) +import Control.Monad.Trans.Reader as Exports hiding (liftCallCC, + liftCatch) +import Control.Monad.Trans.State.Strict as Exports hiding (liftCallCC, + liftCatch, liftListen, + liftPass) +import Data.Bits as Exports +import Data.Bool as Exports +import Data.ByteString as Exports (ByteString) +import Data.Char as Exports +import Data.Coerce as Exports +import Data.Complex as Exports +import Data.Data as Exports +import Data.Dynamic as Exports +import Data.Either as Exports +import Data.Fixed as Exports +import Data.Foldable as Exports hiding (toList) +import Data.Function as Exports hiding (id, (.)) +import Data.Functor as Exports hiding (unzip) +import Data.Functor.Contravariant as Exports import Data.Functor.Contravariant.Divisible as Exports -import Data.Functor.Identity as Exports -import Data.IORef as Exports -import Data.Int as Exports -import Data.Ix as Exports -import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons) -import Data.Maybe as Exports -import Data.Monoid as Exports hiding (Alt, First (..), Last (..), (<>)) -import Data.Ord as Exports -import Data.Proxy as Exports -import Data.Ratio as Exports -import Data.STRef as Exports -import Data.Semigroup as Exports -import Data.String as Exports -import Data.Traversable as Exports -import Data.Tuple as Exports -import Data.Unique as Exports -import Data.Version as Exports -import Data.Word as Exports -import Debug.Trace as Exports -import Foreign.ForeignPtr as Exports -import Foreign.Ptr as Exports -import Foreign.StablePtr as Exports -import Foreign.Storable as Exports hiding (alignment, sizeOf) -import GHC.Conc as Exports hiding (threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar) -import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith) -import GHC.Generics as Exports (Generic, Generic1) -import GHC.IO.Exception as Exports -import Numeric as Exports -import System.Environment as Exports -import System.Exit as Exports -import System.IO as Exports -import System.IO.Error as Exports -import System.IO.Unsafe as Exports -import System.Mem as Exports -import System.Mem.StableName as Exports -import System.Timeout as Exports -import Text.Printf as Exports (hPrintf, printf) -import Text.Read as Exports (Read (..), readEither, readMaybe) -import Unsafe.Coerce as Exports -import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.)) +import Data.Functor.Identity as Exports +import Data.Int as Exports +import Data.IORef as Exports +import Data.Ix as Exports +import Data.List as Exports hiding (all, and, any, + concat, concatMap, elem, + find, foldl, foldl', + foldl1, foldr, foldr1, + isSubsequenceOf, + mapAccumL, mapAccumR, + maximum, maximumBy, + minimum, minimumBy, + notElem, or, product, + sortOn, sum, uncons) +import Data.Maybe as Exports +import Data.Monoid as Exports hiding (Alt, First (..), + Last (..), (<>)) +import Data.Ord as Exports +import Data.Proxy as Exports +import Data.Ratio as Exports +import Data.Semigroup as Exports +import Data.STRef as Exports +import Data.String as Exports +import Data.Traversable as Exports +import Data.Tuple as Exports +import Data.Unique as Exports +import Data.Version as Exports +import Data.Word as Exports +import Debug.Trace as Exports +import Foreign.ForeignPtr as Exports +import Foreign.Ptr as Exports +import Foreign.StablePtr as Exports +import Foreign.Storable as Exports hiding (alignment, + sizeOf) +import GHC.Conc as Exports hiding (threadWaitRead, + threadWaitReadSTM, + threadWaitWrite, + threadWaitWriteSTM, + withMVar) +import GHC.Exts as Exports (IsList (..), groupWith, + inline, lazy, sortWith) +import GHC.Generics as Exports (Generic, Generic1) +import GHC.IO.Exception as Exports +import Numeric as Exports +import Prelude as Exports hiding (all, and, any, + concat, concatMap, elem, + fail, foldl, foldl1, + foldr, foldr1, id, mapM, + mapM_, maximum, minimum, + notElem, or, product, + sequence, sequence_, + sum, (.)) +import System.Environment as Exports +import System.Exit as Exports +import System.IO as Exports +import System.IO.Error as Exports +import System.IO.Unsafe as Exports +import System.Mem as Exports +import System.Mem.StableName as Exports +import System.Timeout as Exports +import Text.Printf as Exports (hPrintf, printf) +import Text.Read as Exports (Read (..), readEither, + readMaybe) +import Unsafe.Coerce as Exports tryError :: (MonadError e m) => m a -> m (Either e a) tryError m = diff --git a/src/hasql/Hasql/Transaction/Private/SQL.hs b/src/hasql/Hasql/Transaction/Private/SQL.hs index c1277153df..0e042ca47e 100644 --- a/src/hasql/Hasql/Transaction/Private/SQL.hs +++ b/src/hasql/Hasql/Transaction/Private/SQL.hs @@ -1,8 +1,8 @@ module Hasql.Transaction.Private.SQL where -import ByteString.TreeBuilder qualified as D -import Hasql.Transaction.Config -import Hasql.Transaction.Private.Prelude +import qualified ByteString.TreeBuilder as D +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude beginTransaction :: IsolationLevel -> Mode -> ByteString beginTransaction isolation mode = @@ -13,10 +13,10 @@ beginTransaction isolation mode = where isolationBuilder = case isolation of - ReadCommitted -> "ISOLATION LEVEL READ COMMITTED" + ReadCommitted -> "ISOLATION LEVEL READ COMMITTED" RepeatableRead -> "ISOLATION LEVEL REPEATABLE READ" - Serializable -> "ISOLATION LEVEL SERIALIZABLE" + Serializable -> "ISOLATION LEVEL SERIALIZABLE" modeBuilder = case mode of Write -> "READ WRITE" - Read -> "READ ONLY" + Read -> "READ ONLY" diff --git a/src/hasql/Hasql/Transaction/Private/Sessions.hs b/src/hasql/Hasql/Transaction/Private/Sessions.hs index 929b8a583e..19595c1517 100644 --- a/src/hasql/Hasql/Transaction/Private/Sessions.hs +++ b/src/hasql/Hasql/Transaction/Private/Sessions.hs @@ -1,9 +1,9 @@ module Hasql.Transaction.Private.Sessions where -import Hasql.Session -import Hasql.Transaction.Config -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Statements qualified as Statements +import Hasql.Session +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude +import qualified Hasql.Transaction.Private.Statements as Statements {- We may want to @@ -15,7 +15,7 @@ inRetryingTransaction level mode retryOnError session = fix $ \retry -> do attemptRes <- tryTransaction level mode retryOnError session case attemptRes of - Just a -> return a + Just a -> return a Nothing -> retry tryTransaction :: IsolationLevel -> Mode -> Bool -> Session (a, Bool) -> Session (Maybe a) @@ -40,7 +40,7 @@ commitOrAbort commit = handleTransactionError :: SessionError -> Bool -> Session a -> Session a handleTransactionError error retryOnError onTransactionError = case error of QueryError _ _ clientError -> onCommandError clientError - PipelineError clientError -> onCommandError clientError + PipelineError clientError -> onCommandError clientError where retryOrThrow = if retryOnError then onTransactionError else throwError error onCommandError = \case @@ -48,5 +48,5 @@ handleTransactionError error retryOnError onTransactionError = case error of case code of "40001" -> retryOrThrow "40P01" -> retryOrThrow - _ -> throwError error + _ -> throwError error _ -> throwError error diff --git a/src/hasql/Hasql/Transaction/Private/Statements.hs b/src/hasql/Hasql/Transaction/Private/Statements.hs index 9a3bef0517..11cbb2c41a 100644 --- a/src/hasql/Hasql/Transaction/Private/Statements.hs +++ b/src/hasql/Hasql/Transaction/Private/Statements.hs @@ -1,11 +1,11 @@ module Hasql.Transaction.Private.Statements where -import Hasql.Decoders qualified as C -import Hasql.Encoders qualified as B -import Hasql.Statement qualified as A -import Hasql.Transaction.Config -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.SQL qualified as D +import qualified Hasql.Decoders as C +import qualified Hasql.Encoders as B +import qualified Hasql.Statement as A +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude +import qualified Hasql.Transaction.Private.SQL as D beginTransaction :: IsolationLevel -> Mode -> A.Statement () () beginTransaction isolation mode = diff --git a/src/hasql/Hasql/Transaction/Private/Transaction.hs b/src/hasql/Hasql/Transaction/Private/Transaction.hs index 739abdbf85..a58884e678 100644 --- a/src/hasql/Hasql/Transaction/Private/Transaction.hs +++ b/src/hasql/Hasql/Transaction/Private/Transaction.hs @@ -1,10 +1,10 @@ module Hasql.Transaction.Private.Transaction where -import Hasql.Session qualified as B -import Hasql.Statement qualified as A -import Hasql.Transaction.Config -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Sessions qualified as D +import qualified Hasql.Session as B +import qualified Hasql.Statement as A +import Hasql.Transaction.Config +import Hasql.Transaction.Private.Prelude +import qualified Hasql.Transaction.Private.Sessions as D -- | -- A composable abstraction over the retryable transactions. diff --git a/src/hasql/Hasql/Transaction/Sessions.hs b/src/hasql/Hasql/Transaction/Sessions.hs index 6333eb7ce8..f02dfa74b5 100644 --- a/src/hasql/Hasql/Transaction/Sessions.hs +++ b/src/hasql/Hasql/Transaction/Sessions.hs @@ -8,10 +8,10 @@ module Hasql.Transaction.Sessions ) where -import Hasql.Session qualified as B -import Hasql.Transaction.Config qualified as C -import Hasql.Transaction.Private.Prelude -import Hasql.Transaction.Private.Transaction qualified as A +import qualified Hasql.Session as B +import qualified Hasql.Transaction.Config as C +import Hasql.Transaction.Private.Prelude +import qualified Hasql.Transaction.Private.Transaction as A -- | -- Execute the transaction using the provided isolation level and mode. diff --git a/vendor/hasql-dynamic-statements/test/Main.hs b/vendor/hasql-dynamic-statements/test/Main.hs index f89ad8e685..2f2dc40421 100644 --- a/vendor/hasql-dynamic-statements/test/Main.hs +++ b/vendor/hasql-dynamic-statements/test/Main.hs @@ -1,17 +1,17 @@ module Main where -import Data.ByteString qualified as ByteString -import Data.ByteString.Char8 qualified as ByteStringChar8 -import Hasql.Connection qualified as Connection -import Hasql.Decoders qualified as Decoders -import Hasql.DynamicStatements.Session qualified as Session -import Hasql.DynamicStatements.Snippet qualified as Snippet -import Hasql.DynamicStatements.Statement qualified as Statement -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Test.Tasty -import Test.Tasty.HUnit -import Prelude hiding (assert) +import qualified Data.ByteString as ByteString +import qualified Data.ByteString.Char8 as ByteStringChar8 +import qualified Hasql.Connection as Connection +import qualified Hasql.Decoders as Decoders +import qualified Hasql.DynamicStatements.Session as Session +import qualified Hasql.DynamicStatements.Snippet as Snippet +import qualified Hasql.DynamicStatements.Statement as Statement +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import Prelude hiding (assert) +import Test.Tasty +import Test.Tasty.HUnit main :: IO () main = diff --git a/vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs b/vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs index a03102ebdc..f1dfe27c14 100644 --- a/vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs +++ b/vendor/hasql-notifications/test/Hasql/NotificationsSpec.hs @@ -1,14 +1,14 @@ module Hasql.NotificationsSpec (main, spec) where -import Control.Concurrent (forkIO, killThread) +import Control.Concurrent (forkIO, killThread) import Control.Concurrent.MVar -import Control.Monad (void) +import Control.Monad (void) import Data.ByteString import Hasql.Connection import Hasql.Connection.Setting import Hasql.Connection.Setting.Connection import Hasql.Notifications -import System.Exit (die) +import System.Exit (die) import Test.Hspec import Test.QuickCheck diff --git a/vendor/hasql-pool/src/test/Main.hs b/vendor/hasql-pool/src/test/Main.hs index 84804f8ae7..3ea80e7a8b 100644 --- a/vendor/hasql-pool/src/test/Main.hs +++ b/vendor/hasql-pool/src/test/Main.hs @@ -1,20 +1,20 @@ module Main where -import Control.Concurrent.Async (race) -import Data.Text qualified as Text -import Hasql.Connection qualified as Connection -import Hasql.Connection.Setting qualified as Connection.Setting -import Hasql.Connection.Setting.Connection qualified as Connection.Setting.Connection -import Hasql.Decoders qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Pool -import Hasql.Pool.Config qualified as Config -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import System.Environment qualified -import System.Random.Stateful qualified as Random -import Test.Hspec -import Prelude +import Control.Concurrent.Async (race) +import qualified Data.Text as Text +import qualified Hasql.Connection as Connection +import qualified Hasql.Connection.Setting as Connection.Setting +import qualified Hasql.Connection.Setting.Connection as Connection.Setting.Connection +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import Hasql.Pool +import qualified Hasql.Pool.Config as Config +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import Prelude +import qualified System.Environment +import qualified System.Random.Stateful as Random +import Test.Hspec main :: IO () main = do diff --git a/vendor/hasql-transaction/conflicts-test/Main.hs b/vendor/hasql-transaction/conflicts-test/Main.hs index 55ba9c69ae..d2511df6c0 100644 --- a/vendor/hasql-transaction/conflicts-test/Main.hs +++ b/vendor/hasql-transaction/conflicts-test/Main.hs @@ -1,16 +1,16 @@ module Main where -import Control.Concurrent.Async qualified as F -import Hasql.Connection qualified as A -import Hasql.Connection.Setting qualified as H -import Hasql.Connection.Setting.Connection qualified as I -import Hasql.Connection.Setting.Connection.Param qualified as J -import Hasql.Session qualified as B -import Hasql.Transaction qualified as C -import Hasql.Transaction.Sessions qualified as G -import Main.Statements qualified as D -import Main.Transactions qualified as E -import Prelude +import qualified Control.Concurrent.Async as F +import qualified Hasql.Connection as A +import qualified Hasql.Connection.Setting as H +import qualified Hasql.Connection.Setting.Connection as I +import qualified Hasql.Connection.Setting.Connection.Param as J +import qualified Hasql.Session as B +import qualified Hasql.Transaction as C +import qualified Hasql.Transaction.Sessions as G +import qualified Main.Statements as D +import qualified Main.Transactions as E +import Prelude main :: IO () main = diff --git a/vendor/hasql-transaction/conflicts-test/Main/Statements.hs b/vendor/hasql-transaction/conflicts-test/Main/Statements.hs index 294d25e50a..bfdc3eb855 100644 --- a/vendor/hasql-transaction/conflicts-test/Main/Statements.hs +++ b/vendor/hasql-transaction/conflicts-test/Main/Statements.hs @@ -1,9 +1,9 @@ module Main.Statements where -import Hasql.Decoders qualified as D -import Hasql.Encoders qualified as E -import Hasql.Statement -import Prelude +import qualified Hasql.Decoders as D +import qualified Hasql.Encoders as E +import Hasql.Statement +import Prelude createAccountTable :: Statement () () createAccountTable = diff --git a/vendor/hasql-transaction/conflicts-test/Main/Transactions.hs b/vendor/hasql-transaction/conflicts-test/Main/Transactions.hs index 69b45360cf..3d60c5412a 100644 --- a/vendor/hasql-transaction/conflicts-test/Main/Transactions.hs +++ b/vendor/hasql-transaction/conflicts-test/Main/Transactions.hs @@ -1,8 +1,8 @@ module Main.Transactions where -import Hasql.Transaction -import Main.Statements qualified as A -import Prelude +import Hasql.Transaction +import qualified Main.Statements as A +import Prelude createSchema :: Transaction () createSchema = diff --git a/vendor/hasql/benchmarks/Main.hs b/vendor/hasql/benchmarks/Main.hs index 8e3c3f8d7d..ffd7b09201 100644 --- a/vendor/hasql/benchmarks/Main.hs +++ b/vendor/hasql/benchmarks/Main.hs @@ -1,13 +1,13 @@ module Main where -import Criterion -import Criterion.Main -import Hasql.Connection qualified as A -import Hasql.Decoders qualified as D -import Hasql.Pipeline qualified as E -import Hasql.Session qualified as B -import Hasql.Statement qualified as C -import Prelude +import Criterion +import Criterion.Main +import qualified Hasql.Connection as A +import qualified Hasql.Decoders as D +import qualified Hasql.Pipeline as E +import qualified Hasql.Session as B +import qualified Hasql.Statement as C +import Prelude main :: IO () main = diff --git a/vendor/hasql/hspec/Hasql/ConnectionSpec.hs b/vendor/hasql/hspec/Hasql/ConnectionSpec.hs index 5063fa35d4..3bf75e4555 100644 --- a/vendor/hasql/hspec/Hasql/ConnectionSpec.hs +++ b/vendor/hasql/hspec/Hasql/ConnectionSpec.hs @@ -1,12 +1,12 @@ 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 +import qualified Hasql.Connection +import qualified Hasql.Connection.Setting +import qualified Hasql.Connection.Setting.Connection +import qualified Hasql.Connection.Setting.Connection.Param +import Prelude +import Test.Hspec +import qualified TestcontainersPostgresql spec :: Spec spec = do diff --git a/vendor/hasql/hspec/Hasql/PipelineSpec.hs b/vendor/hasql/hspec/Hasql/PipelineSpec.hs index 57fc2265cd..e3c8ab12e1 100644 --- a/vendor/hasql/hspec/Hasql/PipelineSpec.hs +++ b/vendor/hasql/hspec/Hasql/PipelineSpec.hs @@ -1,11 +1,11 @@ module Hasql.PipelineSpec (spec) where -import Hasql.TestingKit.Statements.BrokenSyntax qualified as BrokenSyntax -import Hasql.TestingKit.Statements.GenerateSeries qualified as GenerateSeries -import Hasql.TestingKit.Statements.WrongDecoder qualified as WrongDecoder -import Hasql.TestingKit.TestingDsl qualified as Dsl -import Test.Hspec -import Prelude +import qualified Hasql.TestingKit.Statements.BrokenSyntax as BrokenSyntax +import qualified Hasql.TestingKit.Statements.GenerateSeries as GenerateSeries +import qualified Hasql.TestingKit.Statements.WrongDecoder as WrongDecoder +import qualified Hasql.TestingKit.TestingDsl as Dsl +import Prelude +import Test.Hspec spec :: Spec spec = do diff --git a/vendor/hasql/profiling/Main.hs b/vendor/hasql/profiling/Main.hs index 290948d24c..8832ae4957 100644 --- a/vendor/hasql/profiling/Main.hs +++ b/vendor/hasql/profiling/Main.hs @@ -1,14 +1,14 @@ module Main where -import Data.Vector qualified as F -import Hasql.Connection qualified as A -import Hasql.Connection.Setting qualified as E -import Hasql.Connection.Setting.Connection qualified as F -import Hasql.Connection.Setting.Connection.Param qualified as G -import Hasql.Decoders qualified as D -import Hasql.Session qualified as B -import Hasql.Statement qualified as C -import Prelude +import qualified Data.Vector as F +import qualified Hasql.Connection as A +import qualified Hasql.Connection.Setting as E +import qualified Hasql.Connection.Setting.Connection as F +import qualified Hasql.Connection.Setting.Connection.Param as G +import qualified Hasql.Decoders as D +import qualified Hasql.Session as B +import qualified Hasql.Statement as C +import Prelude main :: IO () main = diff --git a/vendor/hasql/tasty/Main.hs b/vendor/hasql/tasty/Main.hs index 361c85fb04..c92b7671d9 100644 --- a/vendor/hasql/tasty/Main.hs +++ b/vendor/hasql/tasty/Main.hs @@ -1,19 +1,19 @@ module Main where -import Contravariant.Extras -import Hasql.Decoders qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Hasql.TestingKit.TestingDsl qualified as Session -import Main.Connection qualified as Connection -import Main.Prelude hiding (assert) -import Main.Statements qualified as Statements -import Test.QuickCheck.Instances () -import Test.Tasty -import Test.Tasty.HUnit -import Test.Tasty.QuickCheck -import Test.Tasty.Runners +import Contravariant.Extras +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import qualified Hasql.TestingKit.TestingDsl as Session +import qualified Main.Connection as Connection +import Main.Prelude hiding (assert) +import qualified Main.Statements as Statements +import Test.QuickCheck.Instances () +import Test.Tasty +import Test.Tasty.HUnit +import Test.Tasty.QuickCheck +import Test.Tasty.Runners main :: IO () main = diff --git a/vendor/hasql/tasty/Main/Connection.hs b/vendor/hasql/tasty/Main/Connection.hs index a2879da9d7..90503659b2 100644 --- a/vendor/hasql/tasty/Main/Connection.hs +++ b/vendor/hasql/tasty/Main/Connection.hs @@ -1,8 +1,8 @@ module Main.Connection where -import Hasql.Connection qualified as HC -import Hasql.TestingKit.Constants qualified as Constants -import Main.Prelude +import qualified Hasql.Connection as HC +import qualified Hasql.TestingKit.Constants as Constants +import Main.Prelude with :: (HC.Connection -> IO a) -> IO (Either HC.ConnectionError a) with handler = diff --git a/vendor/hasql/tasty/Main/Statements.hs b/vendor/hasql/tasty/Main/Statements.hs index 258de53582..a01338ad07 100644 --- a/vendor/hasql/tasty/Main/Statements.hs +++ b/vendor/hasql/tasty/Main/Statements.hs @@ -1,8 +1,8 @@ module Main.Statements where -import Hasql.Decoders qualified as HD -import Hasql.Statement qualified as HQ -import Main.Prelude +import qualified Hasql.Decoders as HD +import qualified Hasql.Statement as HQ +import Main.Prelude plain :: ByteString -> HQ.Statement () () plain sql = diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs index 8ff8ba9b2d..45a940f36e 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/Constants.hs @@ -1,8 +1,8 @@ module Hasql.TestingKit.Constants where -import Hasql.Connection.Setting qualified as Setting -import Hasql.Connection.Setting.Connection qualified as Setting.Connection -import Hasql.Connection.Setting.Connection.Param qualified as Setting.Connection.Component +import qualified Hasql.Connection.Setting as Setting +import qualified Hasql.Connection.Setting.Connection as Setting.Connection +import qualified Hasql.Connection.Setting.Connection.Param as Setting.Connection.Component localConnectionSettings :: [Setting.Setting] localConnectionSettings = diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs index 544e13c685..0035914006 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/Preludes/Base.hs @@ -3,11 +3,14 @@ module Hasql.TestingKit.Preludes.Base ) where -import Control.Monad.Trans.Class as Exports -import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, except, finallyE, mapExcept, mapExceptT, runExcept, runExceptT, throwE, withExcept, withExceptT) -import Data.Bifunctor as Exports -import Data.ByteString as Exports (ByteString) +import Control.Monad.Trans.Class as Exports +import Control.Monad.Trans.Except as Exports (Except, ExceptT (ExceptT), catchE, + except, finallyE, mapExcept, + mapExceptT, runExcept, runExceptT, + throwE, withExcept, withExceptT) +import Data.Bifunctor as Exports +import Data.ByteString as Exports (ByteString) import Data.Functor.Contravariant as Exports -import Data.Int as Exports -import Data.UUID as Exports (UUID) -import Prelude as Exports +import Data.Int as Exports +import Data.UUID as Exports (UUID) +import Prelude as Exports diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs index 18e6ea546b..e78f180dd0 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hs @@ -1,15 +1,15 @@ module Hasql.TestingKit.Statements.BrokenSyntax where -import Hasql.Decoders qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Pipeline qualified as Pipeline -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Hasql.TestingKit.Preludes.Base +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Pipeline as Pipeline +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, - end :: Int64 + end :: Int64 } type Result = [Int64] diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs index b3b0ec7fde..a86f376349 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hs @@ -1,15 +1,15 @@ module Hasql.TestingKit.Statements.GenerateSeries where -import Hasql.Decoders qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Pipeline qualified as Pipeline -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Hasql.TestingKit.Preludes.Base +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Pipeline as Pipeline +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, - end :: Int64 + end :: Int64 } type Result = [Int64] diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs index cde504ad0e..5548c36f9d 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.hs @@ -1,15 +1,15 @@ module Hasql.TestingKit.Statements.WrongDecoder where -import Hasql.Decoders qualified as Decoders -import Hasql.Encoders qualified as Encoders -import Hasql.Pipeline qualified as Pipeline -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Hasql.TestingKit.Preludes.Base +import qualified Hasql.Decoders as Decoders +import qualified Hasql.Encoders as Encoders +import qualified Hasql.Pipeline as Pipeline +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import Hasql.TestingKit.Preludes.Base data Params = Params { start :: Int64, - end :: Int64 + end :: Int64 } type Result = [UUID] diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs index 15821d5632..bbc2580c75 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -19,12 +19,12 @@ module Hasql.TestingKit.TestingDsl ) where -import Hasql.Connection qualified as Connection -import Hasql.Pipeline qualified as Pipeline -import Hasql.Session qualified as Session -import Hasql.Statement qualified as Statement -import Hasql.TestingKit.Constants qualified as Constants -import Hasql.TestingKit.Preludes.Base +import qualified Hasql.Connection as Connection +import qualified Hasql.Pipeline as Pipeline +import qualified Hasql.Session as Session +import qualified Hasql.Statement as Statement +import qualified Hasql.TestingKit.Constants as Constants +import Hasql.TestingKit.Preludes.Base data Error = ConnectionError (Connection.ConnectionError) diff --git a/vendor/hasql/threads-test/Main.hs b/vendor/hasql/threads-test/Main.hs index 33a749c5a0..3b1b223886 100644 --- a/vendor/hasql/threads-test/Main.hs +++ b/vendor/hasql/threads-test/Main.hs @@ -1,12 +1,12 @@ module Main where -import Hasql.Connection qualified -import Hasql.Connection.Setting qualified -import Hasql.Connection.Setting.Connection qualified -import Hasql.Connection.Setting.Connection.Param qualified -import Hasql.Session qualified -import Main.Statements qualified as Statements -import Prelude +import qualified Hasql.Connection +import qualified Hasql.Connection.Setting +import qualified Hasql.Connection.Setting.Connection +import qualified Hasql.Connection.Setting.Connection.Param +import qualified Hasql.Session +import qualified Main.Statements as Statements +import Prelude main :: IO () main = diff --git a/vendor/hasql/threads-test/Main/Statements.hs b/vendor/hasql/threads-test/Main/Statements.hs index be9807c577..bc9966e0f9 100644 --- a/vendor/hasql/threads-test/Main/Statements.hs +++ b/vendor/hasql/threads-test/Main/Statements.hs @@ -1,9 +1,9 @@ module Main.Statements where -import Hasql.Decoders qualified as D -import Hasql.Encoders qualified as E -import Hasql.Statement -import Prelude +import qualified Hasql.Decoders as D +import qualified Hasql.Encoders as E +import Hasql.Statement +import Prelude selectSleep :: Statement Double () selectSleep = From 5aca0a345d4cfe37cc16d2b7e9d7c9f4f371b66e Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Thu, 9 Jul 2026 09:03:28 +0200 Subject: [PATCH 1204/1204] chore(hasql*): run postgrest-lint on vendored dependencies I did not fix all of these by hand, but used the `--refactor` flag on hlint to do it for me. This is something that we might want to add in the future by default. --- src/hasql/Hasql/Commands.hs | 2 +- .../Config/ConnectionString/Params.hs | 2 +- src/hasql/Hasql/Connection/Core.hs | 4 +- src/hasql/Hasql/Decoders/Result.hs | 22 +++---- src/hasql/Hasql/Decoders/Results.hs | 4 +- src/hasql/Hasql/Decoders/Value.hs | 3 +- src/hasql/Hasql/Encoders/All.hs | 7 +- src/hasql/Hasql/Encoders/Params.hs | 2 +- src/hasql/Hasql/IO.hs | 9 ++- src/hasql/Hasql/Pipeline/Core.hs | 4 +- src/hasql/Hasql/Pool.hs | 4 +- src/hasql/Hasql/Pool/Config.hs | 2 +- src/hasql/Hasql/PostgresTypeInfo.hs | 2 + src/hasql/Hasql/Prelude.hs | 4 +- .../Hasql/Transaction/Private/Prelude.hs | 2 +- .../Hasql/Transaction/Private/Sessions.hs | 4 +- vendor/hasql-dynamic-statements/test/Main.hs | 2 +- vendor/hasql-pool/src/test/Main.hs | 48 +++++++------- .../hasql-transaction/conflicts-test/Main.hs | 4 +- vendor/hasql/hspec/Hasql/PipelineSpec.hs | 4 +- vendor/hasql/tasty/Main.hs | 66 +++++++++---------- .../Hasql/TestingKit/TestingDsl.hs | 10 ++- vendor/hasql/threads-test/Main.hs | 4 +- 23 files changed, 101 insertions(+), 114 deletions(-) diff --git a/src/hasql/Hasql/Commands.hs b/src/hasql/Hasql/Commands.hs index a50040cb75..6f5f407895 100644 --- a/src/hasql/Hasql/Commands.hs +++ b/src/hasql/Hasql/Commands.hs @@ -16,7 +16,7 @@ newtype Commands asBytes :: Commands -> ByteString asBytes (Commands list) = - BL.toStrict $ BB.toLazyByteString $ foldMap (<> BB.char7 ';') $ list + BL.toStrict $ BB.toLazyByteString $ foldMap (<> BB.char7 ';') list setEncodersToUTF8 :: Commands setEncodersToUTF8 = diff --git a/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs b/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs index a912ec0131..ff267f55e5 100644 --- a/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs +++ b/src/hasql/Hasql/Connection/Config/ConnectionString/Params.hs @@ -15,4 +15,4 @@ fromUpdates :: (Updates a) => [a] -> Params fromUpdates = foldl' (flip update) nil setKeyValue :: ByteString -> ByteString -> Params -> Params -setKeyValue key value = Map.insert key value +setKeyValue = Map.insert diff --git a/src/hasql/Hasql/Connection/Core.hs b/src/hasql/Hasql/Connection/Core.hs index faf1b7a295..cb3718c2d9 100644 --- a/src/hasql/Hasql/Connection/Core.hs +++ b/src/hasql/Hasql/Connection/Core.hs @@ -36,10 +36,10 @@ acquire settings = {-# SCC "acquire" #-} runExceptT $ do pqConnection <- lift (IO.acquireConnection (Config.connectionString config)) - lift (IO.checkConnectionStatus pqConnection) >>= traverse throwError + lift (IO.checkConnectionStatus pqConnection) >>= traverse_ throwError lift (IO.initConnection pqConnection) integerDatetimes <- lift (IO.getIntegerDatetimes pqConnection) - registry <- lift (IO.acquirePreparedStatementRegistry) + registry <- lift IO.acquirePreparedStatementRegistry pqConnectionRef <- lift (newMVar pqConnection) pure (Connection (Config.usePreparedStatements config) pqConnectionRef integerDatetimes registry) where diff --git a/src/hasql/Hasql/Decoders/Result.hs b/src/hasql/Hasql/Decoders/Result.hs index dd671982c7..2fb1e5a372 100644 --- a/src/hasql/Hasql/Decoders/Result.hs +++ b/src/hasql/Hasql/Decoders/Result.hs @@ -60,7 +60,7 @@ checkExecStatus expectedList = {-# SCC "checkExecStatus" #-} do status <- Result $ ReaderT $ \(_, result) -> lift $ LibPQ.resultStatus result - unless (elem status expectedList) $ do + unless (status `elem` expectedList) $ do case status of LibPQ.BadResponse -> serverError LibPQ.NonfatalError -> serverError @@ -79,11 +79,9 @@ serverError = $ ReaderT $ \(_, result) -> ExceptT $ do code <- - fmap fold - $ LibPQ.resultErrorField result LibPQ.DiagSqlstate + fold <$> LibPQ.resultErrorField result LibPQ.DiagSqlstate message <- - fmap fold - $ LibPQ.resultErrorField result LibPQ.DiagMessagePrimary + fold <$> LibPQ.resultErrorField result LibPQ.DiagMessagePrimary detail <- LibPQ.resultErrorField result LibPQ.DiagMessageDetail hint <- @@ -113,7 +111,7 @@ maybe rowDec = 1 -> do maxCols <- LibPQ.nfields result let fromRowError (col, err) = RowError 0 col err - fmap (fmap Just . first fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + fmap Just . first fromRowError <$> Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -132,7 +130,7 @@ single rowDec = 1 -> do maxCols <- LibPQ.nfields result let fromRowError (col, err) = RowError 0 col err - fmap (first fromRowError) $ Row.run rowDec (result, 0, maxCols, integerDatetimes) + first fromRowError <$> Row.run rowDec (result, 0, maxCols, integerDatetimes) _ -> return (Left (UnexpectedAmountOfRows (rowToInt maxRows))) where rowToInt (LibPQ.Row n) = @@ -153,7 +151,7 @@ vector rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Left (!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) Right !x -> MutableVector.unsafeWrite mvector rowIndex x readIORef failureRef >>= \case Nothing -> Right <$> Vector.unsafeFreeze mvector @@ -183,8 +181,8 @@ foldl step init rowDec = forMFromZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) - Right !x -> modifyIORef' accRef (\acc -> step acc x) + Left (!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Right !x -> modifyIORef' accRef (`step` x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef Just x -> pure (Left x) @@ -210,8 +208,8 @@ foldr step init rowDec = forMToZero_ (rowToInt maxRows) $ \rowIndex -> do rowResult <- Row.run rowDec (result, intToRow rowIndex, maxCols, integerDatetimes) case rowResult of - Left !(!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) - Right !x -> modifyIORef accRef (\acc -> step x acc) + Left (!colIndex, !x) -> writeIORef failureRef (Just (RowError rowIndex colIndex x)) + Right !x -> modifyIORef accRef (step x) readIORef failureRef >>= \case Nothing -> Right <$> readIORef accRef Just x -> pure (Left x) diff --git a/src/hasql/Hasql/Decoders/Results.hs b/src/hasql/Hasql/Decoders/Results.hs index 74830ab710..b4005b9b69 100644 --- a/src/hasql/Hasql/Decoders/Results.hs +++ b/src/hasql/Hasql/Decoders/Results.hs @@ -58,7 +58,7 @@ single resultDec = dropRemainders :: Results () dropRemainders = {-# SCC "dropRemainders" #-} - Results $ ReaderT $ \(integerDatetimes, connection) -> loop integerDatetimes connection + Results $ ReaderT $ uncurry loop where loop integerDatetimes connection = getResultMaybe >>= Prelude.maybe (pure ()) onResult @@ -69,7 +69,7 @@ dropRemainders = loop integerDatetimes connection <* checkErrors where checkErrors = - ExceptT $ fmap (first ResultError) $ Result.run Result.noResult integerDatetimes result + ExceptT (first ResultError <$> Result.run Result.noResult integerDatetimes result) refine :: (a -> Either Text b) -> Results a -> Results b refine refiner (Results stack) = Results diff --git a/src/hasql/Hasql/Decoders/Value.hs b/src/hasql/Hasql/Decoders/Value.hs index 375dc5abe0..3a56635375 100644 --- a/src/hasql/Hasql/Decoders/Value.hs +++ b/src/hasql/Hasql/Decoders/Value.hs @@ -14,8 +14,7 @@ instance Filterable Value where {-# INLINE run #-} run :: Value a -> Bool -> A.Value a -run (Value imp) integerDatetimes = - imp integerDatetimes +run (Value imp) = imp {-# INLINE decoder #-} decoder :: (Bool -> A.Value a) -> Value a diff --git a/src/hasql/Hasql/Encoders/All.hs b/src/hasql/Hasql/Encoders/All.hs index df3a6a8694..fbd2ff0741 100644 --- a/src/hasql/Hasql/Encoders/All.hs +++ b/src/hasql/Hasql/Encoders/All.hs @@ -500,8 +500,7 @@ field = \case Nothing -> A.nullField (PTI.oidWord32 elementOID) Just val -> A.field (PTI.oidWord32 elementOID) (encode idt val) ) - ( \val -> - case val of - Nothing -> ["NULL"] - Just val -> [print val] + ( \case + Nothing -> ["NULL"] + Just val -> [print val] ) diff --git a/src/hasql/Hasql/Encoders/Params.hs b/src/hasql/Hasql/Encoders/Params.hs index 9988a16fe3..f877ce8bc5 100644 --- a/src/hasql/Hasql/Encoders/Params.hs +++ b/src/hasql/Hasql/Encoders/Params.hs @@ -27,7 +27,7 @@ compileUnpreparedStatementData :: Params a -> Bool -> a -> [Maybe (A.Oid, ByteSt compileUnpreparedStatementData (Params _ columnsMetadata serializer _) integerDatetimes input = zipWith ( \(oid, format) encoding -> - (,,) <$> pure oid <*> encoding <*> pure format + ((,,) oid <$> encoding) <*> pure format ) (toList columnsMetadata) (toList (serializer integerDatetimes input)) diff --git a/src/hasql/Hasql/IO.hs b/src/hasql/Hasql/IO.hs index 50d5741c43..d57c4d02ad 100644 --- a/src/hasql/Hasql/IO.hs +++ b/src/hasql/Hasql/IO.hs @@ -23,8 +23,7 @@ acquirePreparedStatementRegistry = {-# INLINE releaseConnection #-} releaseConnection :: LibPQ.Connection -> IO () -releaseConnection connection = - LibPQ.finish connection +releaseConnection = LibPQ.finish {-# INLINE checkConnectionStatus #-} checkConnectionStatus :: LibPQ.Connection -> IO (Maybe (Maybe ByteString)) @@ -43,7 +42,7 @@ checkServerVersion c = {-# INLINE getIntegerDatetimes #-} getIntegerDatetimes :: LibPQ.Connection -> IO Bool getIntegerDatetimes c = - fmap decodeValue $ LibPQ.parameterStatus c "integer_datetimes" + decodeValue <$> LibPQ.parameterStatus c "integer_datetimes" where decodeValue = \case @@ -82,7 +81,7 @@ getPreparedStatementKey connection registry template oidList = onNewRemoteKey key = do sent <- LibPQ.sendPrepare connection key template (mfilter (not . null) (Just oidList)) - fmap resultsMapping $ getResults connection undefined (resultsDecoder sent) + resultsMapping <$> getResults connection undefined (resultsDecoder sent) where resultsDecoder sent = if sent @@ -99,7 +98,7 @@ getPreparedStatementKey connection registry template oidList = checkedSend :: LibPQ.Connection -> IO Bool -> IO (Either CommandError ()) checkedSend connection send = send >>= \case - False -> fmap (Left . ClientError) $ LibPQ.errorMessage connection + False -> Left . ClientError <$> LibPQ.errorMessage connection True -> pure (Right ()) {-# INLINE sendPreparedParametricStatement #-} diff --git a/src/hasql/Hasql/Pipeline/Core.hs b/src/hasql/Hasql/Pipeline/Core.hs index 6ddbc40a86..11c777965a 100644 --- a/src/hasql/Hasql/Pipeline/Core.hs +++ b/src/hasql/Hasql/Pipeline/Core.hs @@ -44,9 +44,7 @@ run (Pipeline sendQueriesInIO) usePreparedStatements connection registry integer runResultsDecoder :: forall a. Decoders.Results.Results a -> ExceptT SessionError IO a runResultsDecoder decoder = - ExceptT - $ fmap (first PipelineError) - $ Decoders.Results.run decoder connection integerDatetimes + ExceptT (first PipelineError <$> Decoders.Results.run decoder connection integerDatetimes) runCommand :: IO Bool -> ExceptT SessionError IO () runCommand action = diff --git a/src/hasql/Hasql/Pool.hs b/src/hasql/Hasql/Pool.hs index 899baf7cc8..84acfb27fe 100644 --- a/src/hasql/Hasql/Pool.hs +++ b/src/hasql/Hasql/Pool.hs @@ -92,11 +92,11 @@ acquire config = do forM_ agedEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - (Config.observationHandler config) (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) + Config.observationHandler config (ConnectionObservation (entryId entry) (TerminatedConnectionStatus AgingConnectionTerminationReason)) forM_ idleEntries $ \entry -> do Connection.release (entryConnection entry) atomically $ modifyTVar' capVar succ - (Config.observationHandler config) (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) + Config.observationHandler config (ConnectionObservation (entryId entry) (TerminatedConnectionStatus IdlenessConnectionTerminationReason)) void . mkWeakIORef reaperRef $ do -- When the pool goes out of scope, stop the manager. diff --git a/src/hasql/Hasql/Pool/Config.hs b/src/hasql/Hasql/Pool/Config.hs index f8dd6791cf..90e6686ec1 100644 --- a/src/hasql/Hasql/Pool/Config.hs +++ b/src/hasql/Hasql/Pool/Config.hs @@ -22,4 +22,4 @@ import Hasql.Pool.Prelude -- Latter settings override the preceding in cases of conflicts. settings :: [Setting.Setting] -> Config.Config settings = - foldr ($) Config.defaults . fmap Setting.apply + foldr Setting.apply Config.defaults diff --git a/src/hasql/Hasql/PostgresTypeInfo.hs b/src/hasql/Hasql/PostgresTypeInfo.hs index 859d88fe75..e8e3e540d9 100644 --- a/src/hasql/Hasql/PostgresTypeInfo.hs +++ b/src/hasql/Hasql/PostgresTypeInfo.hs @@ -220,6 +220,8 @@ tstzmultirange = mkPTI LibPQ.Binary 4534 (Just 6153) tsvector :: PTI tsvector = mkPTI LibPQ.Binary 3614 (Just 3643) +-- txid_snapshot is the name of a PostgreSQL type, so snake case is correct. +{- HLINT ignore txid_snapshot "Use camelCase" -} txid_snapshot :: PTI txid_snapshot = mkPTI LibPQ.Binary 2970 (Just 2949) diff --git a/src/hasql/Hasql/Prelude.hs b/src/hasql/Hasql/Prelude.hs index 6ca22f8051..51634cb1c7 100644 --- a/src/hasql/Hasql/Prelude.hs +++ b/src/hasql/Hasql/Prelude.hs @@ -218,12 +218,12 @@ type TextBuilder = {-# INLINE forMToZero_ #-} forMToZero_ :: (Applicative m) => Int -> (Int -> m a) -> m () forMToZero_ !startN f = - ($ pred startN) $ fix $ \loop !n -> if n >= 0 then f n *> loop (pred n) else pure () + ($ pred startN) $ fix $ \loop !n -> when (n >= 0) $ f n *> loop (pred n) {-# INLINE forMFromZero_ #-} forMFromZero_ :: (Applicative m) => Int -> (Int -> m a) -> m () forMFromZero_ !endN f = - ($ 0) $ fix $ \loop !n -> if n < endN then f n *> loop (succ n) else pure () + ($ 0) $ fix $ \loop !n -> when (n < endN) $ f n *> loop (succ n) {-# INLINE strictCons #-} strictCons :: a -> [a] -> [a] diff --git a/src/hasql/Hasql/Transaction/Private/Prelude.hs b/src/hasql/Hasql/Transaction/Private/Prelude.hs index 3576e696c3..b14a7797aa 100644 --- a/src/hasql/Hasql/Transaction/Private/Prelude.hs +++ b/src/hasql/Hasql/Transaction/Private/Prelude.hs @@ -108,4 +108,4 @@ import Unsafe.Coerce as Exports tryError :: (MonadError e m) => m a -> m (Either e a) tryError m = - catchError (liftM Right m) (return . Left) + catchError (fmap Right m) (return . Left) diff --git a/src/hasql/Hasql/Transaction/Private/Sessions.hs b/src/hasql/Hasql/Transaction/Private/Sessions.hs index 19595c1517..d61376332f 100644 --- a/src/hasql/Hasql/Transaction/Private/Sessions.hs +++ b/src/hasql/Hasql/Transaction/Private/Sessions.hs @@ -14,9 +14,7 @@ inRetryingTransaction :: IsolationLevel -> Mode -> Bool -> Session (a, Bool) -> inRetryingTransaction level mode retryOnError session = fix $ \retry -> do attemptRes <- tryTransaction level mode retryOnError session - case attemptRes of - Just a -> return a - Nothing -> retry + maybe retry return attemptRes tryTransaction :: IsolationLevel -> Mode -> Bool -> Session (a, Bool) -> Session (Maybe a) tryTransaction level mode retryOnError body = do diff --git a/vendor/hasql-dynamic-statements/test/Main.hs b/vendor/hasql-dynamic-statements/test/Main.hs index 2f2dc40421..7d0b2bb199 100644 --- a/vendor/hasql-dynamic-statements/test/Main.hs +++ b/vendor/hasql-dynamic-statements/test/Main.hs @@ -40,7 +40,7 @@ tree = "Regression" [ testCase "Missing $ for 1000th parameter string #2" $ let snippet = - "SELECT 1 " <> (foldMap @[] ("," <>) $ replicate 1001 $ Snippet.param (10 :: Int64)) + "SELECT 1 " <> foldMap @[] ("," <>) (replicate 1001 $ Snippet.param (10 :: Int64)) statement = Statement.dynamicallyParameterized snippet Decoders.noResult True sql = diff --git a/vendor/hasql-pool/src/test/Main.hs b/vendor/hasql-pool/src/test/Main.hs index 3ea80e7a8b..e1d934079e 100644 --- a/vendor/hasql-pool/src/test/Main.hs +++ b/vendor/hasql-pool/src/test/Main.hs @@ -40,8 +40,8 @@ main = do hspec . describe "" $ do it "Releases a spot in the pool when there is a query error" $ withDefaultPool $ \pool -> do - use pool badQuerySession `shouldNotReturn` (Right ()) - use pool selectOneSession `shouldReturn` (Right 1) + use pool badQuerySession `shouldNotReturn` Right () + use pool selectOneSession `shouldReturn` Right 1 it "Simulation of connection error works" $ withDefaultPool $ \pool -> do res <- use pool $ closeConnSession >> selectOneSession shouldSatisfy res $ \case @@ -51,27 +51,27 @@ main = do _ <- use pool $ closeConnSession >> selectOneSession _ <- use pool $ closeConnSession >> selectOneSession _ <- use pool $ closeConnSession >> selectOneSession - res <- use pool $ selectOneSession - shouldSatisfy res $ isRight + res <- use pool selectOneSession + shouldSatisfy res isRight it "Connection gets returned to the pool after normal use" $ withDefaultPool $ \pool -> do - _ <- use pool $ selectOneSession - _ <- use pool $ selectOneSession - _ <- use pool $ selectOneSession - _ <- use pool $ selectOneSession - res <- use pool $ selectOneSession - shouldSatisfy res $ isRight + _ <- use pool selectOneSession + _ <- use pool selectOneSession + _ <- use pool selectOneSession + _ <- use pool selectOneSession + res <- use pool selectOneSession + shouldSatisfy res isRight it "Connection gets returned to the pool after non-connection error" $ withDefaultPool $ \pool -> do - _ <- use pool $ badQuerySession - _ <- use pool $ badQuerySession - _ <- use pool $ badQuerySession - _ <- use pool $ badQuerySession - res <- use pool $ selectOneSession - shouldSatisfy res $ isRight + _ <- use pool badQuerySession + _ <- use pool badQuerySession + _ <- use pool badQuerySession + _ <- use pool badQuerySession + res <- use pool selectOneSession + shouldSatisfy res isRight it "The pool remains usable after release" $ withDefaultPool $ \pool -> do - _ <- use pool $ selectOneSession + _ <- use pool selectOneSession release pool - res <- use pool $ selectOneSession - shouldSatisfy res $ isRight + res <- use pool selectOneSession + shouldSatisfy res isRight it "Getting and setting session variables works" $ withDefaultPool $ \pool -> do res <- use pool $ getSettingSession "testing.foo" res `shouldBe` Right Nothing @@ -93,6 +93,8 @@ main = do it "Times out connection acquisition" $ -- 1ms timeout + -- 1ms timeout + -- 1ms timeout withPool 1 0.001 1_800 1_800 connectionString $ \pool -> do sleeping <- newEmptyMVar @@ -107,7 +109,7 @@ main = do ) ( do takeMVar sleeping - use pool $ selectOneSession + use pool selectOneSession ) t1 <- getCurrentTime res `shouldBe` Right (Left AcquisitionTimeoutUsageError) @@ -115,6 +117,8 @@ main = do it "Passively times out old connections (maxLifetime)" $ -- 0.5s connection lifetime + -- 0.5s connection lifetime + -- 0.5s connection lifetime withPool 1 10 0.5 1_800 connectionString $ \pool -> do res <- use pool $ setSettingSession "testing.foo" "hello world" @@ -134,7 +138,7 @@ main = do withDefaultPool $ \countPool -> do (taggedConnectionSettings, appName) <- tagConnection connectionString withPool 3 10 0.5 1_800 taggedConnectionSettings $ \limitedPool -> do - res <- use limitedPool $ selectOneSession + res <- use limitedPool selectOneSession res `shouldBe` Right 1 res2 <- use countPool $ countConnectionsSession appName res2 `shouldBe` Right 1 @@ -150,7 +154,7 @@ main = do res2 `shouldBe` Right (Just "hello world") -- busy sleep, to keep connection alive forM_ [1 :: Int .. 10] $ \_ -> do - r <- use pool $ selectOneSession + r <- use pool selectOneSession r `shouldBe` Right 1 threadDelay 100_000 -- 0.1s res3 <- use pool $ getSettingSession "testing.foo" diff --git a/vendor/hasql-transaction/conflicts-test/Main.hs b/vendor/hasql-transaction/conflicts-test/Main.hs index d2511df6c0..1c6a4457bf 100644 --- a/vendor/hasql-transaction/conflicts-test/Main.hs +++ b/vendor/hasql-transaction/conflicts-test/Main.hs @@ -20,9 +20,7 @@ main = (,) <$> acquire <*> acquire where acquire = - join - $ fmap (either (fail . show) return) - $ A.acquire connectionSettings + either (fail . show) return =<< A.acquire connectionSettings where connectionSettings = [ H.connection diff --git a/vendor/hasql/hspec/Hasql/PipelineSpec.hs b/vendor/hasql/hspec/Hasql/PipelineSpec.hs index e3c8ab12e1..c8d3c145e5 100644 --- a/vendor/hasql/hspec/Hasql/PipelineSpec.hs +++ b/vendor/hasql/hspec/Hasql/PipelineSpec.hs @@ -51,7 +51,7 @@ spec = do <*> BrokenSyntax.pipeline True BrokenSyntax.Params {start = 0, end = 2} <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} case result of - Left (Dsl.SessionError (Dsl.QueryError _ _ _)) -> pure () + Left (Dsl.SessionError (Dsl.QueryError {})) -> pure () _ -> expectationFailure $ "Unexpected result: " <> show result it "Leaves the connection usable" do @@ -76,7 +76,7 @@ spec = do <*> WrongDecoder.pipeline True WrongDecoder.Params {start = 0, end = 2} <*> GenerateSeries.pipeline True GenerateSeries.Params {start = 0, end = 2} case result of - Left (Dsl.SessionError (Dsl.QueryError _ _ _)) -> pure () + Left (Dsl.SessionError (Dsl.QueryError {})) -> pure () _ -> expectationFailure $ "Unexpected result: " <> show result it "Leaves the connection usable" do diff --git a/vendor/hasql/tasty/Main.hs b/vendor/hasql/tasty/Main.hs index c92b7671d9..ce65b11cb8 100644 --- a/vendor/hasql/tasty/Main.hs +++ b/vendor/hasql/tasty/Main.hs @@ -48,9 +48,9 @@ tree = encoder = contrazip2 (Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8)))))) - (Encoders.param (Encoders.nonNullable (Encoders.text))) + (Encoders.param (Encoders.nonNullable Encoders.text)) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + fmap Data.Maybe.isJust (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = Session.statement ([3, 7], "a") statement in do @@ -65,7 +65,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + fmap Data.Maybe.isJust (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = do result1 <- Session.statement [1, 2] statement @@ -81,7 +81,7 @@ tree = encoder = Encoders.param (Encoders.nonNullable (Encoders.array (Encoders.dimension foldl' (Encoders.element (Encoders.nonNullable Encoders.int8))))) decoder = - fmap (maybe False (const True)) (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) + fmap Data.Maybe.isJust (Decoders.rowMaybe ((Decoders.column . Decoders.nonNullable) Decoders.bool)) session = do result1 <- Session.statement [1, 2] statement @@ -134,8 +134,7 @@ tree = in do x <- Connection.with (Session.run session) assertEqual (show x) (Right (Right ((1, True), ("hello", 3)))) x, - testGroup "unknownEnum" - $ [ testCase "" $ do + testGroup "unknownEnum" [ testCase "" $ do res <- Session.runSessionOnLocalDb $ do let statement = Statement.Statement sql mempty Decoders.noResult True @@ -155,7 +154,7 @@ tree = sql = "select $1" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum Just)) encoder = Encoders.param (Encoders.nonNullable (Encoders.unknownEnum id)) in Session.statement "ok" statement @@ -253,7 +252,7 @@ tree = sql = "select $1 :: int8" encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) + Encoders.param (Encoders.nonNullable Encoders.int8) decoder = Decoders.singleRow $ (Decoders.column . Decoders.nonNullable) Decoders.int8 fail = @@ -267,8 +266,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) - <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + contramap fst (Encoders.param (Encoders.nonNullable Encoders.int8)) + <> contramap snd (Encoders.param (Encoders.nonNullable Encoders.int8)) decoder = Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) sumSession :: Session.Session Int64 @@ -290,8 +289,8 @@ tree = sql = "select ($1 + $2)" encoder = - contramap fst (Encoders.param (Encoders.nonNullable (Encoders.int8))) - <> contramap snd (Encoders.param (Encoders.nonNullable (Encoders.int8))) + contramap fst (Encoders.param (Encoders.nonNullable Encoders.int8)) + <> contramap snd (Encoders.param (Encoders.nonNullable Encoders.int8)) decoder = Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) session :: Session.Session Int64 @@ -313,9 +312,9 @@ tree = sql = "select $1 = interval '10 seconds'" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.bool) encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) + Encoders.param (Encoders.nonNullable Encoders.interval) in Session.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right True) x, testCase "Interval Decoding" @@ -327,7 +326,7 @@ tree = sql = "select interval '10 seconds'" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.interval) encoder = Encoders.noParams in Session.statement () statement @@ -341,9 +340,9 @@ tree = sql = "select $1" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.interval))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.interval) encoder = - Encoders.param (Encoders.nonNullable (Encoders.interval)) + Encoders.param (Encoders.nonNullable Encoders.interval) in Session.statement (10 :: DiffTime) statement in actualIO >>= \x -> assertEqual (show x) (Right (10 :: DiffTime)) x, testCase "Unknown" @@ -367,9 +366,9 @@ tree = sql = "select $1 = ('ok' :: mood)" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.bool))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.bool) encoder = - Encoders.param (Encoders.nonNullable (Encoders.unknown)) + Encoders.param (Encoders.nonNullable Encoders.unknown) in Session.statement "ok" statement in actualIO >>= assertEqual "" (Right True), testCase "Enum" @@ -393,9 +392,9 @@ tree = sql = "select ($1 :: mood)" decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum (Just . id)))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.enum Just)) encoder = - Encoders.param (Encoders.nonNullable ((Encoders.enum id))) + Encoders.param (Encoders.nonNullable (Encoders.enum id)) in Session.statement "ok" statement in actualIO >>= assertEqual "" (Right "ok"), testCase "The same prepared statement used on different types" @@ -410,9 +409,9 @@ tree = sql = "select $1" encoder = - Encoders.param (Encoders.nonNullable (Encoders.text)) + Encoders.param (Encoders.nonNullable Encoders.text) decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) (Decoders.text))) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.text) effect2 = Session.statement 1 statement where @@ -422,9 +421,9 @@ tree = sql = "select $1" encoder = - Encoders.param (Encoders.nonNullable (Encoders.int8)) + Encoders.param (Encoders.nonNullable Encoders.int8) decoder = - (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8)) + Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int8) in (,) <$> effect1 <*> effect2 in actualIO >>= assertEqual "" (Right ("ok", 1)), testCase "Affected rows counting" @@ -438,16 +437,13 @@ tree = where dropTable = Session.statement () - $ Statements.plain - $ "drop table if exists a" + $ Statements.plain "drop table if exists a" createTable = Session.statement () - $ Statements.plain - $ "create table a (id bigserial not null, name varchar not null, primary key (id))" + $ Statements.plain "create table a (id bigserial not null, name varchar not null, primary key (id))" insertRow = Session.statement () - $ Statements.plain - $ "insert into a (name) values ('a')" + $ Statements.plain "insert into a (name) values ('a')" deleteRows = Session.statement () $ Statement.Statement sql mempty decoder False where @@ -459,15 +455,15 @@ tree = testCase "Result of an auto-incremented column" $ let actualIO = Session.runSessionOnLocalDb $ do - Session.statement () $ Statements.plain $ "drop table if exists a" - Session.statement () $ Statements.plain $ "create table a (id serial not null, v char not null, primary key (id))" + Session.statement () $ Statements.plain "drop table if exists a" + Session.statement () $ Statements.plain "create table a (id serial not null, v char not null, primary key (id))" id1 <- Session.statement () $ Statement.Statement "insert into a (v) values ('a') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False id2 <- Session.statement () $ Statement.Statement "insert into a (v) values ('b') returning id" mempty (Decoders.singleRow ((Decoders.column . Decoders.nonNullable) Decoders.int4)) False - Session.statement () $ Statements.plain $ "drop table if exists a" + Session.statement () $ Statements.plain "drop table if exists a" pure (id1, id2) in assertEqual "" (Right (1, 2)) =<< actualIO, testCase "List decoding" $ let actualIO = - Session.runSessionOnLocalDb $ Session.statement () $ Statements.selectList + Session.runSessionOnLocalDb $ Session.statement () Statements.selectList in assertEqual "" (Right [(1, 2), (3, 4), (5, 6)]) =<< actualIO ] diff --git a/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs b/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs index bbc2580c75..c9244219f1 100644 --- a/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs +++ b/vendor/hasql/testing-kit/Hasql/TestingKit/TestingDsl.hs @@ -27,8 +27,8 @@ import qualified Hasql.TestingKit.Constants as Constants import Hasql.TestingKit.Preludes.Base data Error - = ConnectionError (Connection.ConnectionError) - | SessionError (Session.SessionError) + = ConnectionError Connection.ConnectionError + | SessionError Session.SessionError deriving (Show, Eq) runSessionOnLocalDb :: Session.Session a -> IO (Either Error a) @@ -36,11 +36,9 @@ runSessionOnLocalDb session = runExceptT $ acquire >>= \connection -> use connection <* release connection where acquire = - ExceptT $ fmap (first ConnectionError) $ Connection.acquire Constants.localConnectionSettings + ExceptT (first ConnectionError <$> Connection.acquire Constants.localConnectionSettings) use connection = - ExceptT - $ fmap (first SessionError) - $ Session.run session connection + ExceptT (first SessionError <$> Session.run session connection) release connection = lift $ Connection.release connection diff --git a/vendor/hasql/threads-test/Main.hs b/vendor/hasql/threads-test/Main.hs index 3b1b223886..4446396252 100644 --- a/vendor/hasql/threads-test/Main.hs +++ b/vendor/hasql/threads-test/Main.hs @@ -16,9 +16,7 @@ main = (,) <$> acquire <*> acquire where acquire = - join - $ fmap (either (fail . show) return) - $ Hasql.Connection.acquire connectionSettings + either (fail . show) return =<< Hasql.Connection.acquire connectionSettings where connectionSettings = [ Hasql.Connection.Setting.connection

          v=u9QEj+R+pX06dYkh>ykBqj zYTahdb{yZX*J|B1aCDre+iZ8ey4~`-4REerY4L2^fZ~ov9+86$z$}i>TF)eJe9fms?xd1wuVy~t^L%?V3 zZ|&^5rB2zdmaC;^t?F=9%3fEM@F?VX`sixSv%}>O`$!ap zsRz*{nMR4^72VPP!MMM(JJnfbN#~isRr8VFL(6XuI&zKD2V zJary{zaj(#hg1CLYp81pvpee#yb=jNGDiUuQWr%rg_o3clZbo!Ez2(36~s*aozeJ! z6Ihnqk1FAu;^bgB+Mo0%LA=pBrCd}*#;yptI>=V;lS?<13WwE)7PpJH7z>>pN&qjO zU9w1CoUUAqhvk>si>G}^Nxpc73(EGzGk6$jzj$sDVYdb4|Kj-_Rw6K-)5FOK#`Aj! zslj+=4xsgrK zo|l7NDYvq+=*+7|r(7+!vva7=BWRYJ**UbcIfZ>cwn^Dp;LE@+7F7d}eMtWG@!fC$ zp;*U5O1Yjw_!iIfi6IxZg#_4Qv0yd`>1$;qR?o?sc%?saD2->& z?>V!07j;3o zx8z8|v_J0efwteXUZqXN1%y#f;Qt#Ui{xTi#@N9)1r#lg@VJMO=F(#Opl%PHL4ytAm|2G}gF-QZ2Qo9*xE|u*nDn%YV9}P)bjN|}H;{LU zBr@U+>tyLfNfQm1m2_tn$w`wK@+v7LiPhos=~$T}4^Z>cOrZ$hmqh}@Mu=2o_#RCK zre2{%;sbLe;RtO*BNl9$e~3jURXR|m4skRH4iv#vexftuW^>@1ZtZF9O<71~#u15~ zbaG?e%}x_thO?>7RXGo(u}J43kF42wk|ZwSITMDOGC2*e(&4-FT(rD4W)p{2#7xro zZXlbSHwRf%!CoPQin?B~b;uwL?Ibejc=w=Il^m2gcp2GtWM!I{=gFIrTsa4OlpN%d ztw@d(Vy7MP+MXj>ctevTL9oBcAU3x<8Dz%pXC75#Gn7Fd+8brinOmg{GIQsYK^EOe zWsw^Dsw^^do0UNq-*sgXLn7^2@GYJgJz^b?Xso#@h{hQ^foN1{JIIz`dA@Zu4THP!+nDr;`cATy^E zgDgCU7!l#gz=%kl0Sua8q{#6kqEx>qm8_f8oh<5f)VV}g3k!y-&^w@r%7r2-`8=Mk z0dVLXod1hVU=Icn>TKS)mY_m6ah{C+D$mU2b&aF4$lE;6rVT4F1do@~*ll_h78?A)8bYHcP>fznco40K^n*2rx#sYGeI5HC z8rgrK)it=i|CKd`x&;$cgPF$)NB`0~!kp~F9u_lF{r<~q3v|mH@dC2OAom=eDSvaV zIk~kv-D5?%M+fOz&YS*J^vlTZh+iK&b)JXVnet$?!{KLw@KdEz&xdJPbB06d_jI9f z23mrrL;8CrLHe_)eTrJ+GugcVVy;#vdHx* z6mFZ_Bef~&)vHZNx7I4{rql49TGwlLJG}{z5yk8ZdWjZHF;)bqg8wV%p=Z0GE*omWfh+ zxi0BdImQ|!0_R4M<&MVtuq-)2Gjz(eQoZ5SU9>xNYr3A>t~hO|{d6kzR<#TLmRhgZ zsQF&IT6Y?~YP;vPYc?KRF4TVN^}6dc6%&pzYt3e^##5pPt7=deD`Lp;pC%G#0ykw{ zIZ}20W8nao@l;~L9IJj=$1Axi3mF1#g@paJonK)HxMjt}`Za-2BWPKHBT;o z36`*7tQ87p!X9c5##3p0%ao55q=>Pq-8P*(LV*O z2N@$#`$qf(yO|7B#~!7tO^4^Iw5QbX7g>_|(!R9o0`t~o)l=yJUXf|5&VdkBoJg9n z5GFn1k;+^!OBclnq@4?OD-w^EMuJVDfH;k`{=xSn@px_K^fnY4gluM<<`pQNl&?V$ z)E`5{AI2);B%f8c8MmMr@t{oCc9Zh;;goJ(6uZ8VKoQU9xm(V3ck&&Y{=YMd>~B>@ zf4C+E9xg|0z#_CaPoF)c-HNOM%mYa^PWsP@35ydG7C#IoEJ7nE_(11zV7>fXw+{Zs z_kQ_>kDq$%7k};S|NQ)^zf$O#|!0@&XU6a#B5oDCx@%5CDqnnA+1JN!ItiFAq%CQG1c+pITW_r`7YYEGlxY_yv_ zAIHHpuiC9Pa01w?;2gNofH|B_rPb?p+ORLwhH;>t?NoZODO4*K3njt>&-Cm@fbJ4`@k@xO;XVTk95kSONE96Kate3WMqi3LOsC=zLs z6y`xlXAHn+E9^R$uVlp`co#Ms z%vV@wFkfMh!F+}F1@jfU{^l!LRtUY59fbsI8KQ1ciy0y?YBb}Rj4<%RZCF`ImhdGV z`LOt~w!M%gPRY`g(&EOZkUv)D5>nLd&6_rqm?$}H((oB7Xk!x0mTCS$*d0j_mnH{y zaY1PoWj2JElNm!@bs^4#1Vl-Ql$KOTd`4MC!FppwBZ|dM-+HTB{u+u@1IQFEl>(`$ zVx_QNA(JL@bbnco%<=0jAK7Vk#MG`PW{pe;#G~G`5|?7C&m|s_{jKSk_i6O49h-A8<($ybq(>aI`bomVjr-?XDfP zKw9_L)~r#9Yo?6uy5n1;dG67Y#|;S{EGCbuB@k#owun$HmzhT>Hc{>~`yNHdayjV& ztBJYub58i21V2vGC|E0}XEivhx?74dWGL&XUM9&|Rx4m7=R z=^8iiB6+#*>@N>jM(OdWUT>Aabm{CtrpHE3;5(j`K?;RqZ_2FVxtST-wf=+Uu`Ipt zXj5Jr^jFx&jMBCHcGZ;19L@50mJJ}vx37=1e&!N7T1M&7KKS*~UF|e#3COaFk8)HQ zrVs@&@Jcsk5`A;ho}O{*6WpuXe~GXvZf=%S6b=4#3ed|)$`o^9=Wr@(&BEi;0|1L#u@8DQ`P=mX%2CajIgRl`x9%jHgN~7S3xgF@?gH>2mYUtu0ut-ko)+K3lSa zIB!!udlL2K^tC)`(se8@B;2RQ$}9tr;voGL_26fd)Q4&Et5>h{h;^& zH@mVW6#c0x;y60TPB^;c7@N^}RIUwKbjk~MM9~a$ZwsOcjaB*Z3sV$lur6fILaB3S zzS#k7qgzKc*{XjSPl7tbXVn*!UJu?Q@n?S=jC&1UPjEV9MGtC92zxYrx%5eY*z?EG zT@l_&OR(f_xHNsG^vNCuH)O$OEK60uR(Mn|>!@n=gv#hF%z2Mol0{Ymh`|3C&ufB) z+ozCUgW??KJWS3WW&1cf9126W=R(+Zw(yIjeEdv^{uEL?QFsjWq@@}BX?nGCN!lkV zR{=SoG$x>Dr#|d#k`GzMQc88YAXW>cI$ijTkxZBH^mMo6bSE$lDr_~$lFowqlt5)V zMAd1Y0`+hL4XQm@7w38)bCH6XO@-+cM#+hfO!!Q&YLv(z5QzUUxOzQHSKqwgpw-0R zhF+lzm63CI+8yInk%H6AK^?N92Sy*#bNZBUBLE%7F)6o^X|-cQ$HUIhb&#V#l!yMw zyE|FFW|}eFnUZyoBb3ITQ4C-i9U+?MtTQ%L)3XYVwRE!Q%^|5I)Y7R<&`HmycuRyV z#NTsLvgZAp@1D2|J#iQM2)PS2hHG$i&BNY$_UHc6gr!J==&%R);^HH=+s*;_7R|_=tYfs%}K(T`%8$r=|nhtEf7E*@#L+N6t$&q7ulF z_=J;}jUu)r-9EX2k`lMZS<6N-A{L(K&|)Jh0G=n2Jm~;G`Cv(6$$8F%I)uGv>Rsbx zBdX;QM3o6?$d9KK7v6}vl+)tDkQUxh5_u3^q`$E2aC#&piPIw?SDYRRDdY4=k~vO` z6%xqlk&s7DkA!q`dSo*lQKt;a<@A&!$GnjwxJ*gnyDJL)@am;^Zd}zHu8ktvS~>`f z_>UuEVXxT2sTaLudXP&zE2GSN182vQC#jT)5}$n2x-*{n6aYCB_)H7lO&_cjZ&^P+ znpv(hwBXa36v2g#$_yg8qn>#DDVh0CSxPm_n$aE!3r}G4;dEsNa*WZ~z=L^T9kp7*)ng^_$I0shON8WyKHV}3`9M|;+q#8zf ziGGjVhSmf&M!KU1Fg8NQKp;fzkEfJuJVE(14Ry!P_<#^a1 zO1V*P1zz$xDoOM(K_^5R5WyF?1T5$c)HzM)C_$%C#lRX{xx!xP+ML8VNiY&HG7%(- z5u=@|A9bQfz5x~M#f-+*fn^vPiO-?uxzXbU313nY8ERgEu7ZMtSwg{~adSa-;6x;9 zOi_bYFiEH!FdL}!?CJ1gyKJir#=bP0WBAZxc$UQnh05v!M{IHgDgetdVg%|kLhcmF z@1RT-?!g!b1CIvoJePwq+o;-s%u=B<1VKXKe7s4A-zgEjUSh-*l0-<1!LfI8IBw#T zBjk;EVjLZKr$pcyI59?Df+oh{s5>!SUiT$Oy_XoQ?%*Wv!)gbK^ml>-WSNF646@Tt zsd7T;GNt5o|KUDLofxaD>ORn%g&HCzcp3r|G4ncI%+11bQy*uMn3tvhZtNpU=-w5H z6zPmhoPpCVt0T+uXuLx}BS0|m1ZPltBwOfc(CGor&RZKl-rh3tt zn^I!Ya|E1P;?$8q%Jnp^&_Z$1_;aRe~o03dL+^ zvL3UCVts@hUOLU=HA*_CVR`uqnN**n^@7H?<@P8%aZqu{kF;+he@IbBkeD+YYR(V1 ztpcR&_i##Clp+WeeF7p7R5|CGqKhtC9BeEy2|?<(jQRvVhQ#;K50g^JpFE^cFt3|O zEVlUbYXZkm2w59QadnV2gtmr|4y(*?)LnclSrO#08Ux1xFQNu=Sc&%|hnA!Sa##(Y z;{j)=fUFs?Kmp`mT$jmJE6tedAM1^7ZRWK{OZ9{A`=xM&6s-u|JiaeZIN&u4|0{Ld zm0s6(8r@2((dyW~+jXlwyAEZDI`kkqzEkaV>WxmLQL%m4S9j`;WBavMuj2H2uI+XC z_T>kn!T#y)@lsWkoKU`1gC;RpATd~pmf_R^{Vwcr_>UQ zryzJ2f_g(9G$2JANb9wByY4pXy@umDZm-^IHe0ny#dRI0-m#l)yW4fVW)-jS-QzXu zm5S|ETqu{=l{#v{sw9Qjg)|9sd>WWf1$e&@-CdV(^aD%vuvOn~+ZuXAphQ+2LL5Ox zpM*tDsPgC=m6F?Zs%_8fwO}-<-D@`CamcspExTC*i@R;a^X@8= zRu^QNYR% zP2hfjCK#Hd!;(eREuNPIa;k{eSe7Jrq(w`1BgoYao_O{ z4%co^eTbb;t&84hIH^?PV&z|nrn4^IRXN0o6NJrQGY;xl!kaUoPiVn`5ZJdbi%{6q z8~2?7u5iRDAYHL28#2~CXMh7eb^9}LzJFj{KA8Hqg$rXP1$XLKuJ(F;w-4Lzo7Vme zmf2-lkzC~kQZ$QlF;bGc67q-S#nZEBFf-cG<;!*3h5cAC2#pi+5m)P3A!NN4S{6MHQ}~oY{1QT>CB#^9};@ zgp^b9KwXu&yQ2|~%}^Yj^Z8`#-f}E=HbGL(6Ni99-v@HCE^jgwhn2nuYyUlo$+q78 z$t_qugGt1DU>Mm%9CgtQ_k3>?SBLT%OnKqQLAyEPPI3<;!%P6DVFiW6+o1^|f@rG*2!29EHcErb7vD&2&N@uq8N0j9dTG!f&K{Hkno`xRHPnzynsc}T{xFvO@$qn5Hh5wC z%Rddbp5xJI`bVjecaybBAgna9cB+Y)u5CL7Y3#c)=Zh z-=8Fn3l)aDCl6`wDqsxg8{tNMsFFC(c}`;EgPv1>tyVG)ORT!gnTzs4Ql~%pe^jj6X=eOD&ICOQpwWg!0e5{%4_U5WQ z9j=O$@DHS|nJhHJDvMt_ucaW)M4+L_2gaXPxp``ZoZV|T2mX%r?${rWXA|q<2yf*b z`L^A^+b{R}tS^|KlJh2QlLGdt=jc~HJ_*-(>hV0CPf%zPYZN5q<>P74tH-m!<2lkq zkpw!2KrgUZ*uV$(ygyRT(uV?@3A;?VVe|a&^1xLcKcd%HzXBIQ*kMT_J}p;78yVTl ze$)~&eGpX&9Q{aSr_Kly(kzM;C!-5gI8*XSR4B=GvDoEqbD72BEo_p;+P<_ccUvm^ z3B#b=OkYmoc9`>+&`uIAiG+-V(D;O8BFR1NVaqADt>02(M`!YFtqr*g>((%08@fqX zr85t8syDbq-qU?q?&&UzI&E5NZ?_pXl&e~l2dE*-$uTzKI9fmC8AgwUre3T^>+Tzk zIaPQe8g$I>%=M7k%~6-hgWAxR*`QI3+2U;BWur7kQ&8W?Qb&wt9@Z+;?nHGrF_I@g za;E&v%u6BdRFER9C-%f0k{BuPPB>L^p34tqJZBW_LHJu=`vZoWi z@V!~zz3cA!?%k4}ak)yLS6Y(%6-*!k4DxJ07%fzt6wT1HQ+!k&NK#VBKMm5yXj#^O zI@@OjX(@ok1)LG7PGPwY{&cD!DEUe2h;fRi3@K**P>3Zx4ZexL=M&Z|6?Ilf&2zRY zu#k~}NlryA4Fnqu+N{vuHk`KB>_(;9tTfw|YR`9EyWuzNy4UIA_NiU#;U=LAN4|cq zWz*fyiOZcI2A4aL!5e&Ya4)ku|L^bo#xH#Bo4@)We*d5SPxY7IzV+Jwec@017k}$_ zt?s|`zj;6T&h{_L?vwWKqoBBT^cYXHtrpg{QXObLIj080x!;edf?4z@Jntm=tqFh5 zNA z%50FKMrQ=w&-{$_)?00yiq?%cQY+K1LXXUNgW{O+22C;J4Q?!qH#5@?j zXk^Lh(kaAJMa2DS|ShOVoiXkw_md+v4vMkq-(H;_Nh|$t(;3eVnk1 z$WFPQn3D$!QzdyIPe<$`LpsW}RhIB=MtxSRB@nOJb47__P~yC%3Oa|X{T#O(Ol93s zpUfyD-rTD2^!5((Ot4Y5mw4nB3B7R5RG? z!u?j{3u;Z_ttqTSD-s+>A46mM5410HZr2}#?{R5oGT6e6$JE~vUln*BjeX;yw$!Xu z9loL9Gu@*ZnL=EmKXeB(ZCdWolKaQOK_Mu>j8ngdbs8e}JG`Jm*!n20hhwfU)(~8v z`|#)2spm-^+&i?^WLMS2f+v1htN!jN|N%SWVQ$?7nsNY1>czot$}1w)W|%f zU%8lcX`!Udxe6bv)1iGx3;JUrh17zs10+_2u0*}vfsDTgU&^(%-*zfZyVI%Jon90A zA04me`8CgLHGAz!*J)Q8%{KHFnjKru=Es}6W&u}bBUBl>nj!O@Eb7fvPhA#sG2NjD z(u;-VKus=NS42KMt=`kBgNmH`6;8voikQKEnO&G}S|30zW$IWTj|O)~_f)d4h61gN zLqStMDBlxQ+rs$uc*e3U3z9Q7{w*g+kH`{BvOL~i$X>|F)Nf<4)XG1vN*t16so*pw zYzsRBMMRS2?Mp+;XOU-N%4X2t>ywom3EH}J>$*k834~0wlm-c;^jKt-tM;_)eVZ^h zKpPhhHtrg^T{C;k`if-07T$yq{?8Pi$8GX+kbJ5ZzF4?X_>sbwG3MVd*bsR5Lg6w@p_dBZf$8tp zp)B=Y;VXsBLYp)FA^GKt>X6I_>W1rPzEhPo)l4l0-IA}TB|W)!3jQ?x>AmTI2$3WG z;fF<6Wq>Ax$i#ywQK}^=oid~WCP9dLAO$IF1b;g3ASn5X3ALr(u(-*&8#oAGV`&o& zJF#{r10sYuHY$29b5A)^Ll@gPH9t5$8h=2YuV2fEkoO3Q6ld(BRjHEXxK zeyh=F)Ot0y)peka4aaqD&uQB|8~7>>7hCp@=e2#W+I)m;1c%2ZjS9J~=kZ|u_}?x3 z@u&XU-}{r_{zun-{`b%RiQ-@QAAj{X-}uk|;Hj@~UHRw#=J@aYbfgYHw?ySZa4rdT|5hOOf%~n8`}8SBB|pO7 zK1p_bC%M1Uk_`IhPp!TcqcRUUKaQgYjq@gp7!pqTQfI*l7T&mV{SF7QECq{E97Ygf z(NAHt;%EZk_j_(d6jB5iJF+}0027Nz;1Fy3(ibyRyUkSaFcl>>S=s{l^s&gXh z-AnJ>QBS1o3cc>{``!oseG)bhH3A4h_`b8(^&Dut%G$nATR<-W7>%fO~xmTW605g$}MNSHyhc99-`S!kbXNhDI$^p_R6{2&I&Rfj@Y^Kbex~ zm*JH)kV=G6;$fo#EXNs6h4VyQ8u936zen=p-LP0qfFmIKurE z$)<>8w=uqakJ5b%)k11l6+VSMVP`NJh8c24dF4?m=^_gu<$l{2{ZA&Q?5;U`utlzN zqkx;x!*+08CP_XTlCfe>q@9?uJCHwt%}pN17yIfpkO-IgvyM4gyGiLnPub>az%x z0x~+#Fz6`qsw;Vkc1V7PWLAiGQ3fggOu=GG1 z9rR>Iu?9n(ykv*2;V8kvh8USMSuEhv=2n&oQ)__`Ih0BGUb;ml`c^;uPVtk zNCBRXmmBxR>ZOS`8N>JFtkV>U~VvYOXSTh))rGx)**7NB118Zix#|(0NGtvf&T> zn1MwLWCIw}@}1qW?|8SJp06u$%vdtZmLQm4XD0nU9_o4yNsi=O!zkzHS-G)sbk`|W zE7dB_e7&)M-+CX8nV>2^ygS;o5Lrc}-L$^$?7?8mmC@*~;?q`)+`5R<7UWRIxsS>r zZqM+W3ntqv1|?e;_eOVTlWouU_q(H^*Du4|9}6sT^9iTTWCBNxX=Pl8qMyY7R2QU2 zOqd+1X@$uh3RNa|eqiAk4Tf%foX{R@TC;t!h*)b>Di5q43?2C6a#2`WyvV{@3FZT~*xZf8 zq@cZBRKXU!rr~TB1{Ps@Ql6z*LKRCGP?Sg~MTl6Tt>Gukw&(!Hy3mF$*>nPnIY8b; zZG2})W_n+ZJUG?Zj$CH*jcd05v=_C#3 zZXWDXl95cDQ(lnGWLLgoP2il#AHPv9-h}B)II9S4SkyHqO+ zXQ_AZL2 zGK5EZHM+>z^j(MC*L55)@<9|j1ltm40cUor<({Js+`-%e1=R4no0uXN%z}EBurI1+ zG^OgGpS@PFgL#4;fQA_b35w!5n;86j794wb*n{ye8Zeoa#vWXBD6nBkz|yDiXxAs* zSTTu-02)=yZ&=Q3?}({F=Kml{LbYw!0LA9mG6k#>*j}Yw3Kmr5R8Z3q>d|n0)ngM|VAX%tnrho>-m#i@UZwuYPMIDyKnDX* z*u0~jUd?)4F`v6=1Ga^sH0-K2X%ILiDPmugyW^`_tOPmq#@0`3T5g$gVYO+y$~v$- z+wpe7bt>j5Oc0`rIxv0KA6aYa`y_0z5?Xa&$&UjATKW887!Occ4wVqc(fp+yIqXew z{y`zSn32z=3^<;<^mgB0yK?PPECIiA0ZX|6v#GPSoih$ooM_g+T=>&2eGb$I{!3Ir z-c2c!vmAz&wo1ZhHa3Sl$iG&+(QPw=maX7&@cNp{_Y`lY`72v$KB*YCj|-E#9HVoE z#a*GT3M*P=3I~KEbe>bXrfYKEj!>Y&b&jx>8*ux01Gi9><)kj^?Ln)}lSx=E&SR40 zlZH~Cc~u#6`;#y@X>}b|5r=cv859;V#dR!q3u1FvKujy(KEoO8XrO-|ry@ZYN68wv zO&NnBA%V9cYA_M~dz8-Ceg8d_m}0&vOFHLG98QK?5hevytgAhaV-Mi+_)d#7CUH8= z5xEUYvbY(CGEc}Bh<|ljBP{We6F!b5iDHFrK25WS3l?k|p<^|cqifQ?u4;C6U04O6 zvxo|LT!ut;k0lv)O>W*Q;S-TSy=YbbHGgn@n^)#ZnN)_wQ$`9^Wn<`h2z1Dt9=IN} zv(l=1R7FG<>G7OAV2(-+w;SE5{KVku&Er(lhr z3T4skpjYN2UZG?&^30^Z<-y22KbkK`a(z)#Vh#zDPTyxnP|u>MM5wdcNkmVHjYJK* zrcS-;`g8q z6TB+#dmF;VP#T`T4t)f>WJiLh&@4Zs3{hjr{xBAMlAN;+aeEpMu^JmWftKa%N zs(_R~4}%88-qU!Xwy8FxUNt(cJy+08Z6|-w86=m9$ph^#k;t0;GZ#EOD< zFSMduhBS(#eCY0Jz%m5#Y@DHfHajM;*+sYF>ai;(|Jl4t3pyA*24e0wO_ zk_GOec#8@&I)7RTm!xAVF_%m_H(8e~elG=Hvcxp07scwy92b7+$SDO+p$tq`I@PYK z#b1UXOlBV|4cjekrcg{4kA*dzWK1UCy?AUXOJDnezX4RlIg5lE5h2-<)-2rRr*~Nr zL_5SJ#0!xy01ue$C|hhrxtuTSXINC$&oHiQJQt1UFg;mWRuRI+vVJZa;b8?0^3lAc zEG7dRD~>SzbJPg)_Dk>j=1X+ukDxL zZ*7B@*8lRd_2rgejEOfPK>f1Y9d-udU933RREB?5XrQ4)%tb*JY#O6@z#0gr0Iybv z-ResO4pqBqz4qD_ky&Y2p0n0_LmU<@3y^3??fIR~i{w0Shoa(oU=*eeI*UFG-;5oT zl0{X-WX4cKOzL%2)O<`=c~S|Ku*iBD3REgc3x0$u6PKh8T0-}UjVs$_s(nBlNCokdlj)?`(oDvJOf&2qardK;=!&`pw3DSpgci#N$1E_}P$~(VJ>B)EUtzR! zir$@anF-GJmeUiUJq&101W?txnRFq;o`$!s=7Itff}*lHJIrTUotR%_6@tHO>M~!2po;>cQ#s+|K#6ueODWS-6BHaY!9+WB zNQ-PV$Cw2qhe4wX{AiS!jR-j1ZnipPj#?!-N-csnXZ1SCW3S3gIh3nzUH_~P-w`Ep zdJEd(BcgbQd!@ti-3vhsjgjik1tAD$ znO$A%En!Jo$1__Cp95*6GOJePLXj2f8PBYVKd0U@6^s{|wguV89xjz)2A>G5&AzG> zGoY8iZAS>;7M{$WQS2MsWh)SELeaEdt?_5n0PIj!fuszxK266mdHYB1QVxg(hjWJ5 zUpftDqjlcY{2|ykfa^8X+9jm#d8? zG+_O5;KDp+qv%)NX3#9x9o}X#3I#}&o&@U0Xy^@j^+k5(6r za<1W5%Z*0GZn_Q($~KAt8Ju;>jasqUXx2Rh!wzk;T7)gyavgpj8kK6JK!$LewNlv& z8fr}DRjwX#ZoqNf0Ey5Ip@E#@)Y=XtB3t>3Xz6uosV-xL$WoyIq*bHoGy$|KHA^+S zLI^AeEw|l5#ew^ya=|T^%COs8DL1i0z=&?uw~L5vlR|PaU zjCu7HL{zh6dwILxg2Y?=?(3+Ny=35BP~3eTc_g4y9eT3as}V2n!oRx;ilUaY7lwn) zu68^hJ$znw(Xaa-~bm(8w8 zIMU5190{^6nGs@1AQ;GCaR^A7iJTScNP*pf_h?BP)Z=lO#rO;84UDFg^PkOHavpdZ z)nZ9X!)wh4(j4%2&M1eN&#m@*7K0i?#I`6Djmp>-kFv$1=m!>LJ|&CUW;La|$7?S^ z&Ni!&@V%xiNzgW{an-rdW=Pr=i>^@AHmjfNx%HPRYg=gI7G*zMd}$kBK}Q(Ad&KS5 zoF9IeL6pZ?^~G8TF!dt=9KnAN=@f=#A7VoaQ^TA}|D7ZS;e_ewsJ=B$_KT~moM@37 zqf77)v^MbXI=z9s$k4yVLZJdHbA`roR-}O&9heGS?G6Vp*`|Jou99idib~_$X?fO7 zfazhZjDJW|qHVuG-{=oF2BaWakVW8>4`QzQEyU>`MN>7UylTL8 zg)O%(VrwCnLtq21`_9&Q#mHq)5AeP`!^0sAUbkS}2nOd=u^%xyVmW)sY%%wo`uk#n zVx{7_3kJKSDVFKNYcRP<_V-{}%EbdEf4LWFV&mXYtBBeQ~32 z`mmh2Dkh}r0b$zkDoxHP1!TSxlanIE48_pU#08};oS?!aq_nmwt8NXV6Ya{oE7vJG z7A$oXpz60VDTHCw^Q)M2_48zwlk`E@1}y5*vr(8M@~k^8m^o%)5e6@7*yc286_d0t zy8I$0MG-$FTFoa}X5nZ>{f*+`?S_ZT#V>6d>4XE$V$kt&Jki-r96ERQY!q0 zZNQ3LZwm&1At%Jw3kk{mDa||-l7(=xPk!7;g>4&jI2&Y?RCb38`@J+XO|sBD^ak0s zg?<{W=b;I-c>=jj8$jNAEqu|W?R1Ak?6B=+Y2lE3^QCoIRa85uXgmd;CxidzS$AD_ zJ<{`Hpo-~J05eK#AyvBI!Yg*eHmnT$unUa&;@s)tLrmrmEVm7Ba4;$?q@<^BNY{O* zExie%xAHW~uPS$5VM#(SQt+(gPDUH!MLt42O6pkZ`(}Bida+QiR^3{$1k_EV;n_eW z6x@>Q6q-e^uFpwq6Hpn;)SDuID4&-~UOGIlRtd*{JS9GV`5s&ea;iAtTuS~5eMdu^ znVFBJ6?X$x54p4#$0Zsm@>6N4p*YZf4LrwM@<#R1NM1w-BIDfjtG#yqYaQihd~)XuaHN-3Hq!zmvbyZQt(RIS<|YcD^@cCqTPQ&b0C0a|x_DSz}Jt zXRg!e%;qB0-wU&sq&(ECf(R;li2H7D==)5B1t^;#*naegtF2nAl7K_Mj1!DtWP#h# zwL&)-hFQ4OE>b1+rOvp}S*N=yaUFf)zk&TBw74mz|LU>@b{cpEa#tiif?#HWj|N5s z7y$r-i2JYb9s|~Cao9wM&% z+Bpwct6)SC3|g>Uz?sAiy$7~m559J&4ey@D?SHTVM=kHQ!SW7ou?+wXR= z;I2tNsV*C?H*ohR0*GBej2G}{aYhzgN@=eQ?w_52*r!z07Q9Farh;S#x;SBK=426CCpCLmxYIH1iQSul#)G-OT4Qjm&!HX677(IZtPv%shoJR5A0( z%(cunWIm1W)zyrR@75PN8H@k46- z-}vd&(%!mED(Fp5I^wQ@mx`=_1k~YAR}cotCyvO5M*~DWT{R6j1_#0~Y zG8l2Qaw@|H-fZ=;_!0@Koom{@P2&KK4(a|ASxor8A%V*iZbA>;x}9 z`PKWwpysppG#=>Y>{>TR&6maOIkgy0yc_cq0RD7VdK$3!*TmIaGGh2+sP6co69So3 zu~H3V#3Fp^3%+5zUu2w)D-^Ni551TucgPBD?$3okM7l|P$RUE2Y&2m{xJ1(9z@BWx)`uyDY1Wiv zg|fgUiv|do8Qu3#=BSlTixG>2lr>U-PY4&|IOvLTLx***K)%*;TLT3ILRt#F*6noR zA$}X{a_gqpxdcK|#9rw2x_3!?4#qd(5$lGqRMC+Et0)=3n^tG=O>pie!${%wt3cF`=Pi5gEZPX$y0x;c1t02>6hOIhKfK$+7P zTux+)_q*Da1{gVGFwoa=JKM+`9~&+cBEU{g>rq>lVx1y~I5>^8MbjKVU(qlv1H;&I zZwsz{$W~L*F8j7qE-*ZIZUyTe;U<6!&P|XaD2`Bf z0%SNT6gpOs4r~Vvqt0aJPGnlex)Jh$kw-~QImD6NtQd-xi~5Arfq%m%_w&}v{cig_ z-K~RRI}deIM#*yO_}?=L+*uT{687y2J!s)*224->}9++JcuKcH7`!C|;~QzYg~M+PM+~2PkR+po15j zteF!|q=OSaN@~PN9fK{cAvC|)=TsAm+ouFf&!fasQ*|<&=c(wnNi9$*j$Xd!kXLig zK$>sr`Cy)@j*x%2FQ=bp#zz3lna4+#rr(Z{%>Zn6n`4r6oKBbKVtSGYr3o(wD5L`v zlAIRjy<*ibSA$ZsTCyF-x67qcv)(8HlvRBIC?sQzgl9fp9M$3b_8J+Xhew=uZ1#HwsxHC zY8~=8nRE(}Nwg140eVari$dv#I|!a4QbTckPnH2fFi3LcS0Go0;bU@1+U=jY3or;U zBWFd4Zq%pqtt)R{x_)a-L?y@+i2^zyx8vN+qvODqsBOgy2yy zjY2F4D2*xqrV|)4$c|5xZfhZ|x*{NTav#$X9g#D3GD*0@yEDq60Hf3Bm5+>wP464s zgG8?=$Aax@aUW1`bRAHSyY4$|Tw?F~Ac=CnYc{5NI9hwlo14*z<(`vc2x=FGq*1x- z0+P0XB+cmNbMNO=vXJ$M7Gwn`n7W?P5%1pjT#^WNMn}AJBF>PQE*N2TeWu{5< zLu7kqbFjtSxy7b#VfM9$OWMhdkNdGnoi0N(SR;v#Tzf(Z9QDUtoc0M*Nw9MATrCE0vD$!QpX>O|TB8tnL7`qC!$6*g1cjOtlx^28H(dxCi%x(k=Hq74 z7==Px_!wq~Qv5%L$pTpu{f;3_KOU97mMQdjnDzvR9!Cj0voe`{0uKU|p#?-FgtyUE zC#%!{3jd!me$ANNV+6ScFchLXDr3sYBeA9-lQ~UG0|sjK+7K3fV2emdb9=46HoNk> z>tqo}n0U6%Crw${z-7BZWGUyR)hp6eE)-!%;bch4Aj-tFGAO)F8WTQgb@##b0*{Ln zu}CcfMiy`TS-P}C58yUy(KF$`7q=>Wab?_E z62)zo=0s!L>WB?l?zBbu%hb*V&0f>W^Jb5?^j%E<(E5#-`A7BH!QCIfeBsiy z%Xu;j31JXh+&jMd#)UUuzkK!j>#Bt8_D0dJH}Zq3chW^{thUKl;B!PigUaZJfT& z&&F$H!M@j2Wrydv#Vzpw1F~xjh#K9+>^Zdnq zB7sD*mtTFwDhXo&Rz;ytbnnBEh1QG5UIBzzV>Aif#8eKEq%@kugC{ZgE2LCN0x;cZ z5@v#M60)oVfYYa7#G!o#*d5Ad9h)M5B3ehjk55Kbay)Ch^-hMIyS4{+3Mx_%QdD+Ej12MQ zlCL1A2_;9*Bml$W7De`KB$=&%YGYFihM~mWJzv_7{NGGwoTtN#7Ng6I0A++3-{RXPz9kjm;n1m;oO-cg zJGFYfR;qhY&Mdl4;MGf2yIDtUwSs?PtfNq=`xOV#&AMHz+b)zjtIcwe*~>yQPYw-8 z@)`9G~)+yCeY#sdA*+V^Q(r z+CR5u$6L#@?FP2vzH`Tc@=1jh@^Y1OE%1v@EvVa`FKoaR>{27ZW6^2YWxM9!so)fA zZlzMGmkL3nS_PWZsn+lhLRBN@RjwWtZopC10GiH6AbaO<9;agxMApBfbIzNzc#Wr+ z0(LgOZjO#Veoh+Gw=QxSG)B7z6#1?jsbdL zN!f=rV(sE>{v?g7TTdbRz{13l#V`pG`?@lCUbMcky9rF}I_@0pc2h*$t@vfJ_LWE0EK=%6Lga|wag?Ca9uHx+$5DdnJt|f08pn}IXVWF1 znB6r{R-DP?rt6k5;M>nmS3(?id%;>=d&dG=wNHptAcigB!GKe;X~zmvZUXRxp<-f~2F^tJ-*t(o^rGVfW-BM5Ew z?qV{CGM~-rj(MqXUAS=tvN5+k^Z@wn54X3wy#Zy1u02+P=ikc#5{(jj!bW-y5-laV zMEsk;l#Pid*@{aR-7T+$>_lvsoxsJ?WtJF2S$rRbUW6!g0M@yTH7X<#o^%-}nn%yV zpC~c(DdXy}Kj?0?-X|dED7iW}RG?vvUkG`uJ1s|;<`M=3S}v7xwR<<$_V2(H*%v~| zOE`p^%C>;o0mLXOSc2hb_bfX(?OSJHVZb^a|6HCvi>izd6^Mej){zNKgA*&j$RrBU zd$<@$8h0Ud#H`HqL6{$w94km?L^0WG-JTEUu01g8O=l%oH<%W1W`LoSPG^0mzeA6h zWuFtnz=N`EZNfz#CX_>h?;Wd8Vj~}uQ0Q0FXzOK4>z5|?xoq~;S6@{k9ej?YClc!m zXHH`i?VMgN*3K^D+3EOruAlv4R)iz?-QK$$3PvbBp3Y`(v_Tk+dO!|nyTS)8G{}bJ ztyT^-CX^n9(_+dI)LzYe&-#LtBYyFWG8cDNG!9N8d^DB3_^O6zg!{>Ltj1;Qmfu{a z4M}Z_d{WEag9nj2EiyR4F*f2jn)l?)wCAcB&KFaBY8MwaZqLrO)A zX*HLZ)9X1Zsptfel(E`WoF0lS9K3YtIN-ao=*OY5bV#H>rRt5O*GSgKFsS$;C7)Df z^04Ia`yop{LCap0%q@zPOxixu+=}vvDzvMRK5SqlJ+o=3aMcSUabhzyZw5*5f8!U@ z+lSAW&Y%^vR8Kq#dXFKo*8LK>bb7&f5yhDW>S%yNz<+^5@!lXlW{K$^2ezZrr_&4! z^~f9|9sW7QhukOu&kQ?o+k&r-N2dhUbs~A9j>eHYID>S1vS@LZ7HOYI>I)+*@sV4Z zC5(KIS>YPVD4O49TN|rr(U6>v3urikrN1r5DHd^7IsX&q+@*)+03T z%VLG{;1kihHQ8{tN-sX9`x0OJiRxmBYA`aV=>2q(J`%;n7!GraQ{@kJ%&4XO(=ATi z?$X4{l;(or2h?H{fE!L<@~qVzxVEca`b=yYoBTU;&(j%f2{tqR_P!A)xWYe zGKC`n;Td#s)e!cc#>Ir^tARNnZr55DYB4mlsjPd{hCs&f&eZzGgkuaGh zoW11t0g)7b;m%oKHCUhryx|CMI6ob880J$CxWjbZBbyr^bnbBeL9vJPd&M8l?~p9#LcEE*LZ`;tV9AH_%_w zNb_{=!i7t2nEUZ`AKNKTwY%+|kVXPT6oqI+G$73{Hl>JrvW8HzC48G- zVQB)X$;36N$O1QlFW=klLeLEPgEu72KHXh;KxZN^j5&%18iLVi#0`PEiH2$6C)Io% zlE7Yaz4=hq6fGbO*Mg>K0+upGL&JWI$d`x;x#vW@SSxGeyq7@tr<`xdx6gdWdRb`; zE?Yv{VWffrrje?UuL>fNPK!DaEi{R2J73C6C(uwWw59rCMCXtb$}&Z@NGNs4V3%9- z-MK_)cv9UWp;R(lh74INAF}!(rQuYXKE{a3$mqW>TkNGeWc(q8XhjM8Pfe8uI#p{) z{tzuAd_!qsiz3_Mp_~Ho*hbMjVccEB88Qi_vL*{r9YOmmrAv}T$b=Tg3976rofJW+ z7(shozHrAf@g(Zv0@P4N6Ouk`RC7*L!M5w6nwAT9yiIs;l8_| z+A7ZBV3FWfo{m4leY`1QLKY0U+&_S%XaUZ1w>8+*elM_8ab2N<6S<$mj@J@EB_Ln` zn>xpr`1n3#>=|MN^qizwPsku6fFH#^r5w+X*JvIsGNgk`6Mum&Q6}0(vxNJ>XdJEW z(a@yTI+{wZRfMBkQB2Q?c5bITu$(qI7gU%lSYeFzWK2g|D%rjaPKw+$j0P@Sp}>b$ zJ5cLoxrHVu>%K>_A(v!B;Y{a!&@ResybDI^h>9oVR##VB-I#<*VOQ*or74n!^c7_t zlnLD!|Lzkx{e|1a!i|8sWIQ$^aetZnrUpKpVAXw)bauaUX3e#E0R6vbF{m*#bQgsp zY;Y0DM<%m)lr0`bKd>P438R;wefwt?hq{>3?e{GRWl6fW|M4QxW~kUM7G0rc?d%HF zd%DA~Br4P{G;xcvpFLdavkb8mpiw$80SIHjhcZ{_h7AotJ6HG0CAaDp3kAFA!8>TP zTJ)N>U9MM3O+WDLa>FZnLCG(bpqE-}R4dJ@@4np(>R#d4WxWuU86D_(ScWCNH+?R*q^S;kyg3va7vX9;ZeLe4LHcC}n8W1{)h zLakY{{aWC;6^s}LwpjLqB8B>mTA@_+8nvojEH~Un-E*B<#Vb49PrKEGHW0c*=_61Z zGbZ0#AzzFpU%r~7ngbA1tYdB!ecvlLZLi)8?5gcGN^a9_LSws7s~6k~)N9LyW-TaG zOP*`n#bVX2=!FtN`cjo-l=pBr7d~tvfl)VX89|5Jt$P)2X(AMkN;;f*)@;MONjH6z z2Zsl7&FsS3;ervKSN_b-P+|gCM8`zVFtZW~1ynUZYV99NJ%s zwNl{Qt^+;fs$YP2nOe18!a8p>iY1q;EHYS}8WF^?JQgE!S{pw(;?;)a|<6tobk(Oaz)IYn+xR%~6E_<8bx&^!2vCVZGk-JH27w zdbx|Y{Dyox53>XLp!MpmQ*srApU=?6hLwnvaS0hJOisv0VTeLL3IiANQ5dbD$81=F zGH@Y7p?4^ilgJo`(7Hj=3IHER-#LYDHeZ|Y*r-X+NI5kgc4#lD?X>z zsnrL1xwEs?7s}-q)>f}vu{60dP)t&&m5XI$DV7U}e|M@PmMuTOK?WYO(C?+4!CJd< zVfC_g?wlyG9t#H6;a;(jJ+C_HQNpCCXABJeU;ZZVJTtF8Rl`G}iO$`j{~A|48Fnc1 z6&?A(c;Go;C=X6hd!E#8F7YWn^XYRfgu%!f^@H~8Xqpd>F6{?zvhZm|OcuQGP|GQy z-y$Ek^kfq!Qhrj313kk7J;Mi}XBe5^;VGWyzjgYz-uwUl=kI-C>(w9J{LhNN@Z0~} z7eD#)fAGk6Zv2fueEsKs{_p-t@mD$?_ntMK%Z~d`h02{EoRTD#qih*F=a!7 z<;EQ=8Q1!_QzhK;XhOfi%yIqIxT~V``1;Uyl zk^{93D?WxQlu=n6)oGDB$Efcg1WDzW{Hn>g3WMd1SF>lL5h2@#AeS**tl7grM$J8qJK6-%SP7?Ak7nUn z?3H4>{2&27ziUSLl<_UtOBV0|CkbC{_!AYT8Z!L|Ow7Prq8O2UUoyZLj3j8sKD= znhgL_;g_OFc+S9umy|-;_Djurph%flxw@s?faAIWbUF>0454|^r`C3GL)*$Qd%SW_sNp9i>WZaPJ#=QxNg2qVra(Q!4I%2TrJ7_mq5K3ylerVv@Ip51m;( zYvEd2&EcP#b(4HEz{bFU%@cn*46$A&&kgyFcD_#u&TrsK*3RSp%Yy7|m{t*Z;zqA4 z&2VdHAVS1`40BcyeGHRV2{?}-Oh2;V8KP+Io8cJzEl6=R3%{wJh-U@E--6+VL6<-t z8(5s0$!I?VFgme0Y*JfRs12{TMHj3XYfLpr{=xTau-%WkCr->aMwC5E-7jJ`dfmHy z=>2;>7+tW7uDAq(p{AG&lEy>Mx@k&&n+Ae>3=HmeEp6i=`&sMs=z=_b&T=fb*X{Rn z+ihn+Hi1Hl1wH^m;`$aCBZ_2LKY*(UuWLbX zcN0dNvWOB6V6E=9Px|lhAJG>ZRv!ZNkgVwX17+8ZB89PhMUADY$%0^O!yizY%W#dX z9;kk&{VZ{SgTt6Z)Y3GJS@T`4LhMaiWo!eGXtcA~xLjng*`Kkn)Rd4m%YAa>5@c z3`0_$IN@W-g8gIbr2PHCk>#iK!rX)TQxcgS$8&>CvPKH5cFXRzuu(n_k|J_{ zGIjiz{7R-zpYWhCvODn1nMmk}ed5QZg{`aCUk_~$j~F99pd-B7-{E1)x%m2RjXaDf`U-(Bq{ev&>EM5J-e)*BF|E;f`{bRrR z*`G<9%QF075b^Iljp42IzU?ye7I!hi%c4Wv2TLxmrqN>doLUUWzZydbNI{#vEX6?r zGMcphM!*6xYN}gJ1RNmq;om9lI6AHQKwyD{UwH2@xF*wHhZ4%O!duBKccjD;$6cHf zGfZsjEO)HLnr6OuC6>0!+gKdMA@If-szVkcY{$kh9WsV($HtHyGBRYQ z#Bm()_;kih79OLT!eE?%9FrV88J?3$7+0xcmm)R>E9T8Du6Hc*|U2<;3tFOQudI9>=Ap}KMhkun# z)EYn|(wLu)kq^sZ3bsL*o&weslQs&Y3ytj(&S?)fk(+Je`o9k?fSJoIH8o+0Xrn~F6En0oyh zcp2gdnWjudaieUmq>-hhqbW6qdP0`yMvBByoQZ0dFxw}L^p&KwI5PVwQwo2lJj=;s z8!>PY3)79={+YXy`zH-3s(VxpzCCF%(N6^lBGofTQMAhbB^S0H?qF$A7@1qc&6JpU zTNGmEA^0 z03}YHM0igeD@j;ZbTIFwOVX3zlXiSj<8AK!TBGwLZtA zu(u+-S?&GoF*ODhX;CN|MItR8Ws67Atk&oDdOl(F_R#v=9H@(-kY=?$x7U;h}_@iP)TW?cbI%W&?pvt zyU?tZisgC6R8K1)nhpcn7ny&LgM10Nr^QLpeyBNue6toZBM3xo^w+X8*KImCG%tTFmp0y)_R z-9YxazThsZoPS5i>##%IChVfdB*L`^Oy3CJuqa9v(if0HVT^R!f#oE3C!dvM0RV}r zn!eR+!&8n=xIPaxLroHF-+cBRr`PJj=#nhP>eG&d!g{{dA8r$LkrD~g;pxii2Aq(@ zntkicX>+!TE%x+Ta#O0v^%(bel89cm;Js%X@JGE5qr-WC(d+V;@Zp5Q}hPt|D(E(9IVMn6MoO*`LL1=U1Jfn^sq!EV`U!BoH8oq1(%tA4Xg7} zIs)|wy#IOKEvi;6TvQ8FBR{p4Ty?|=W;PyX(={B!TG|Cj&z&;9hj*!lba_HUi|=I{Q&fA!wz6gETl9%1@0 zl(?8!PBktE#O)eCthWE--$++O2F+-Mh&*a$-|>5W;q_Wa;6bpE;Q*ZwZLtJ^0|`i* zaxot*_S%(o_DY}Zdp^-)dz>$jCAXym{O6m#-Q%f}c@5b&x?4W!8%7A5nvI|wx=WX; zx<`~l_e6*A(W`ZqtRijqTNli zbZYbAJ~$Z>Pxrb^?N*-9el!vqvdKy0!6rm-j`!Hk)~_05x9j4t)%J3i{B3Y<)Od!# zE89TCu|x7}${{)GHZIKqn#Sblzea*Qu`Q=drMQWc6XT*jRU$)fFgZOlr>9RzZ0ud7 zerIxO!RJCU>5Sdz^GL5x079DGPu!8o)lM}=l5;Y-us9zj4kA>102Gt}%Tv%qF-H@S zhSTB<*Og)=Dv1Fn6K47HXq)8sBOxNZhDi^_6^R{%Qbi>pwY)h|N}K)5!--Qu!sr!9 z`Z2Dv6XV9j4Cb9lIYH*kguWh`O~wovZF_X8rLAA12(iY;tX?x|%G!-3nXq!r)Z^A| zQo6KNo02wh&6;U>#p=zEAIwC|zns+BX{*&ND`l;kNzzxUnQCO6;z%V6Bw)s;KNYRA z-F2Pz3e+(M{)*6Pz%wK{M6#+eS1lDCAvoDQi1v%MdbLq20;5`WVKA>!b?QzvC^~Mbq^h1zsUz(=s)#3B zI;J4#36=5*fNTc6Zacp!8>tJJFMTQ1J{_Ybf4OsKpC}qr^@kIv%EMZHU!z_!^X;vP z1bj43;Tzpnf3UAKPC>$l;#6Mo{La9He9X5SC)NLKoW3=>r0moD8(aBE=L*Um?D&q7 z@LatA*5MIT+kwi=d6A5-{bR|r?Q0iKL&L~OqYpd%eI;`W5=J&8N#*|S))NW%M8bHZ zANP63nU0E-4&Tq+X9^OMW-oelU)T6FG)TDSYh<0X+oNNRFv0+FyLC+xzAr9ccs);(yThkB6$j2TdK zGPVmxvh-7)X655y#zkk5UqPhF)2vcaB3HAj+$>5^4B%{Li62qQrLS6D`8dDl6+KU?oq5^f7!|>@ zK6@|M^QGNnj5Y~g&)C!e`?L<&WlWZDF5)0cjblG-h(71v96?V7*NPS3AK2u<<#K!&nnxu#s=9%yEQ3 zw)j5_-(=f(s540)UYSt<@{mz@Cf7ZpGaeZ@8ymhS)6z%dk@QL)$5*}6C*$Mzw8tBw zJ}aUIUHa2z4hZ|V;0lo2gOur2X+n4Tpb@-0NLl(6v^Jor#na(LezOhORes0WYOB&u zYoshXbPq0BWr*|7R-}&tJltvNfx1upm`}dr!?Y7@vc>`xA znB0PS=d|`50E-WR#SZ{jJaSIfo4(chHz$Ao&wu-4pa1%uU;TLYoj2}&>-ii1`S<_L zcYeD3P2ZXS^?N_{-DxvfhCd8A;Jv5u0KB_v@UEIhi`jGPLw53TCyFe_myDz@OL6m? zBiD$fxanOXuURs#6Xz^@iT%qm6qf9hQrQthn+lMu6EpBwnJit(#%z|xE|g1go29Y% zgsbUN+*qk`8C{AScb#~fTZ$WWotQ)3|IiV9JNs}q=4hPew)1miCN!=kyEP=wZLZg9(47|;54kg`n>^V z>-9zb3fz0nTJH^gq6>hIq0{Df)iow#akkDeOGxUTNPI#E;a>27dPon{mB0d(H1wWz z*N25zSe<}_CSfO`y@S36V6j8S6EGpZe92(Ne%ToB>H0f?S36s`Clr*_`$@?@0E3{o z`nTY)>nptwT9wx3Ico~mC+#*s=JlN34&{w|B!@$C zInaSKY!7mwJz&EaFeM-)tTsg~tN>HNaTq;?C{w-kVElwdW$A(3sw~TNlHFh=!XwfZ z^7VW*Z%d@Q&1nsG1LqKFl}-viS_vr?n?aVUF!}f%Q1vj{Oq=kTaGN} z^fkd}g}S3J_IalXGc5QHY;CvTVGc75d(U8#jHc(vG@k4y$Kj^QNiVbx#iA||Q&K?X-r?T{9yW-}=C2^}!)KFp|fp=0PB*!{A z+F-gTCtxXVa;)GajfompHCW|frzdBYaT9X0tUk2}BuMQS)PU&mt&?fSv{5FI#7ZiJ z_CbO`R1UCk{+GiM&hL=ytA9?Be&dFGxao9mze&oAeffS3`&jFS16u-U$F-qEgiq}i{;JB--o`fWwmkX>8!@;GitFG9NhRVxoD~s02k_yaUIbbU zrHI9#XH+X<(db$3K2MYH+>FgqeEKkn@P}IU~!Ql3#S8>5F3XX zpAN5HFv?xa1;uiib4H}%l=mnE$d811-!?B>WYU}b+vO_dl3j8GC^?kM&8AZe92oNU zy^7yx+Ep*8796`=tOt#1wORIk7>uqIY`+>nZNjUSi;V);o+M!>A|4@RR7k|<6Ru~V z#m<*=)tciL%WkRcRNRK`G^#o&T> zgOzN@sd-JWS}qi957x6Au#;Ve!bpSbi-`THI)DT+hr?PwJTUI*qTiv|o^$J-wt}7n z1E7M))4W0c=OYEtRn!@vyc$X?R;v}qM*l%ZT7;yy;1+zZQ7?FvQmN^bZMRwT3w7Tq z)eCmRhFNc~QgfjSW4m6%D>y9sXFywK+zjP*kDH5}X1;TdYuSfM#Z}E`3UTR^rwXUs zhq=I2rTpbRE`2W>GePD$FXlfT<}wQ=4*oujdD7QsWc(J+jGc2``Xah!MQLeiq_{JIY9NYinx=CzTLB#p+V->_|w`_XquD@C~=| zZ=cwFB$HUq4thTR2;m&hg7$?4X zt9up{u0ybf?`s?OsL5z`e?YbRjtfd5$db%Zh|GNOL;aowW0qvV)*+!BTDFDpX}#}z zLTHwSC2-jD>Z32)Ezk1r_#I+8127N5hCQ}mqeq5jK+Hm?+ff8EIA<0V7GJNqRFT+9yj~RHVgE z>(J5Ocs3RnZLhR%P4z{?Wgmv&BZNvq*3_EiQI#XZp(B|-A!r$i&actr@92S-{bls7 z?60J*JuXUI$9};ioEB3R$}xKWVkQVv-}#HJ!COOrsFQwbY*LEkLO-3JQuf;or=^`1 zFobnX@i%&Yd#I7cpBz^@?8+!AUL2Q<=Jz#cr#VI98-w2E_aHY9wNqb6FL|{KQ~$&} zS450SN<8z+y>3wB=y64Ig%#HEV-gvszB3(=MG&P%**2+<(l7_ zPj9Pvb^g;|g^i|Ow>$VY8YId6+08Jia(INEePbjo0biL062dpEe|6MqFfL8Z!6lEsBemn?|s$AWll2w zHM;&e=Q_;|=oX?uZ~-NTsFH(t6b3Eojiy^@lFPPI72KSP(+sNMq<~}4fYY`T_z{hA zqY@PAg-Wv$cmy{On#4!2Rg33YwjOY9$Wo*sq}OqT_4SYzY!UI3j!!}{snK?PD1~#ADjriObA zmoU{7;$^BHI)*U)cod%g#P3+BM0*S>b}IBf6nRy}q{tg;g^kmyHFl4K2m-TY3zQEusau!c>ly}f$Yh-m4_QgpT zlH8}@58@u-O+hq3&tf5DLp1w;k6T zx%fZ*>ye2Z3D|pG!-t{7#nkFk19L#!u9Y>_N9V+EkLW`hXS`IUNMb9-^&yGLQc2Q( zOi_R2q%rNs3CfSV*L@tL`nU_tN26C(cA@@gW|JrGi8_$U_n%Q+Mx$tbpdM9hOiGnc z)^bcya;$+VM*aqjpVn~%pd(*QjVq6dtL96o`N%bjQJZBM^+91UEhG4XsTJ185Q^$j zDXZ8kW%X%;dvUhBV)4A z^)4$F9VHYAMVLB{c%7``D03!hkg1rwC`SGZ6*!2hABf(bXq!->l8TIYH}x7-KZN`j zkv`P-6pfgq?iuDz>JKCKq3RR9{>;)NoHwaIblk(z8Y|!)W|4`CcB6&8g3=m^ zh27}_BOwS1RsU3ep{6I7`&m+IGl-+|YKi5^^s+=#ozN^ZTrx@J+IC{WVJ4+%SI@Iz zp;)l1czRl6CcLe3)eahuu#tR7!%id^NE&l6-FWT3eJit_>%~O^9%l+3$+u zH7S|q(#Pq0*+TOrRqkvIBzsShq4~B*RN)I5;iF_Si%H#LQZ=(vk~z#Tj3i70yRp&y zktpV2dZ%3Tp>U=--IcK|7C_46otZM?j)Xt@s_aO$p@NRHa znLJgcJ%7eMYZ3Zy*?O~eyESmEce?G{T{heOQY6rNxg*l#ck*{cs`F6TYUg{yS5;}d zOde}dreZLAHiykTw3t_9jX7E0N^)Bx<-9yoAuH+NyxIsjZ!%3WsNQGfJ}L}6LJ!V5 z9cjmDHb$x1agP*JV0c|wgp8!sa>so3Mz4FP1p$!--MbB6Xcdy~oxlN-?uw`_ni(C+ z&T~wqMF7I7HpT`XU8Nb-)p|gfIy`&y_u~FH=e^u(cE5@i7fg6m$u-nuV07xo#Gu5# zcu|$AjYhy0x}lj7)4@W98= zWc+ZD<$YDQPskmMY8V>+}y9WHJX|$LsBRN+ z+@WHNq+k`}xVh=hz7ZT9B&^e&fi3GkPr())nb~*;pM$eWC`Dzrclvut1ha@1-Os%w z8^>r)c`u7&H>b@O^BR$INn|`JyWY5VWu1fK5Yt2_52G+um|-qVMAs4chOlyD5q8tv z(XyadnEIyi>F1O^aj(_u%Ql6vEb#|tknQRsk7d2ty#lRf7>XIFv$zVq*6qO0NpE|z z)!(`aL(XKX0Jky`dja+W?)JswMW?fI!x@mR1{r{3J`%$Y%HW$|4NZm-9>sX`1#WH) zj=3CR7ey3w33`=xd`d|c3CIGC5&RmkCGjAsE@mWR00^~8mbM-`A{FT_Z*32DsESK4 z_##PrO<4h^+X=cR8mJ8bi`)Xef-Z;}6BbdgU%0d`vkD?$r2$4^-t_Mhno^JgjG{<* z)!Ax#&MNH3$XAF(VVH+nyavZ3ot-UN$~9-BI@SKD2f zi}T37MQ1}6My8S5ZNE(xVF>;slBzL#eF*=iGTB>0r{8*O*d6%tJv6f{GTijtZqK^~ zS0}4F3zYS@eUGSzI#Y`VNM?lqqvJX4ZYSFKb)`SApeCZ&^&xzut@&bZ$;?#TYt9xp z2&yy+xGrq*!1#{H^md2*O?V=2pD->wxkGFAmSqB3QgBj9S5i?yQbfpUn<9zgf~Kdu zE{7qpB9p5}t&;|^;nZ-54nCJ&rn!I<3toSNic7#1Dii*%zEZ~iCG5yc1oJX1A{o+b zz}Em-6Y&zly==vAaYzEEFd|7wP&%3sHylSt=B z_d*zsjdL%hO$HiiA<4r>HFm>Va55L1yst0f9K;|eAeMf7K}n54m-Ylfve&CR3B&Xk z7O_9$V5S8oGDJ1~#6tI^32%CMC|$^X^Wg$KG53E4@KID0p{*n_7j(`>k4B^#B-8j1 z&ZdV#0;aSGHeS?0=UozX90|(};-~7!kr}8SIxtsqm14b6v@4Znp;Ym0&+%(^wbFD7 zb6}i`wbw*3PqsF_z=TmG>u*C{V+6@nX+G*{(bH) zt~TW__hvepYo2{LUDxeXkMWGY2|t(M5P^3BNMjYcvxS^fg8_OwXx1xk$**9-7RwdK zFT*f?0Z~=2Tr2{DRw)>8BWNo+3Q;P@ zzzo0m9be^U>df<}Z=}+vG!^*^;8pGPTWnG(lbJs`>9s!|(skwfK6X%2y-%C81_jCACtCrmY2#ffg^0#o3%6SkP2$2wz$a{b0(ZK0* zSL(nSb2B6|;ZrloDB_C%b~nfjV%56X+ku1U>o2Vh+wImJJc1c7dB{xsr*BdUaPJ2L z>t#xv-)QIi^m=|nAR>XYV@TwSBgMVk?Do&Yz4JC42(&srp&U7}>a@(`^l%&>NCg=> zjtBkt7=!SR<14CQNXJ9_h{pj@QpUK+x}nOJ#lvw~d=~lj<5BkNl0}$KdxDIrsox7E zw>-D9a`*1te3a@HcjS95^L#^ssB_cl-}c+>FwYporS?DoDId#QNAkxYmX({`=CD6l zwqRsjh*B(wJm63pH+XYx z?hC&U@W!xX4Z2*U)$ay_yYNYnHR{V-)|Ek6P7@Lc%drBu*!1B6;kI)0?Yl#QdJ{oe zMG)Saa0juu<@9copK%Y_`o8d~;E{ZY=y#aQ{iJCdiQktwqQxxrrO7xewcbuv~7zhXXQ`{|EAZn-wVA3A18l zFdTFt*J|g;U-L< z(bHKe)lr@@bZW@-DfMlVppt-}97Oj9XaRMZp0&!a2U<*iIHqfpD0j2Fa-A%eDRLFz=!}Mq2(@2{ZaVd=>tVBs300R75~i~ce|dSquouUF4~1zlRRg9 zekGM4P_&Aa(88al;iz&WfWoQWNmK%(1JpxT^=DXy**E?@*O&JiS*tkVpz1^NfTc3& zT8{;-why;?o9S&j_LY9lg$JSm6?ho?GLD=m&}@W3z=^Gv+k;Cacti3j!^F`%yftWx zf|J{`b=S?oU7*+95){$_k!#kCcm@Vqww)d(sk2SEBzR!DBPu@xEI)pt`Og~V>zqeK zHWx)dDk$YNI>8d$m<$FxFr7obWn_cINfTv0!beJxOK16LBufsnx|KuTEv$sLECAIB zqR5hO_|pZDDZv4NH!W8!vL{sfLr_Zye>(l6ghCR%BhJt&g%RD_8Z)mW`nsZ&unJ>b zpN6=;)2G9w-@|+mz7|Dl;%f0v*LmcQn5ZJbF?1CFbb=>kf}GRdz;S7?xz!hG!=j9; zIWzy|LQaK?O&)esg5&b8n&0e)tC#aW;J-}zVN6s-3U|)YC_Cbz`Dilzk&ouF9FCq? zmHcJg>u%>QKzzi+%rR@=Ud|+cxzf{zm+15~iJOf`e$t>plVF62M_%zq`c6msWuhH2 z{2gBt;h4N;Xc+(Co|vA;=;NC@unTjT;i7wUbs*HG87Hhm=Cj4R~ZeIfyZfPo>_{60-VO5`qa$EUa| z@6C!#n?HQ~c!F^`{guz=-9CRdBEf@gwmWdrO#Ky3tT}FcJxXzn@;I*Poel70H}YG& z&!1uj@k-PPMi>sVoTkGREa~*0r3+Nb??Bo4K-u{LC_9JeT>3^yJPm)(tRvs>2k)=G z^!@+tyIyR3^jqFO{@Cw-$G3lM=XdUY_Q(F|U+(?v@2tF)GL=y`|G+&Rl$imNnRGYOlQSUHyU zWvz>Amr6R6Rc0;qaaxM&{Ei|MlAr`jah+dl8nnVv+(`2O&GjVG$*a&D({gB)=g` zP|k~a1)(7G&_VC|0HMd!2vdiRNIE)bEJfVHQ1t6>tiJM!aJI5+yu!Gp`3jdR<}19Y zn6Gf0V!pyxN-caR_b5hL4cN`Bo3Z8SYc*drW8vw=d_~b%F-zGH^K*`fHcxXn`^AHB z?u!R~1&L6M-v@77h;c+YdjQp-itY!kLHX|&ut81s(`I z{nl3NeaNSPoRq1RN1NB2cHgHEppS-5Te`T>g~uUrBNbgH%$%T&){sSFNnm^=0!GS+ z1%k*StWy^oFlmmX#|TeEkD?Q4SJb~Vx13%FB4Q8%djx1eyN&W(Fv0o)2xMdi%ISR= zlY?=ARsiW?XVBispPjC83O_}OBeJ4g@i;^@h zCjQA#MMf=Kg!^k=d_f@KAY(0R{YQOK(L~OPQiUHY?kN4mkPm!j%PI7&EXv*94&4Bq z&Rx2E?c(K2r-|Up`WqBpvVd$P@FiuvBrVtEu7Wc+1i(lhzhj+^vu;j_|M^Y7wY|OFkgoUSFJ2I8i=j5Kk!;zsE&y#mt^LM)*>X3R21;*9ryw_x}J*Ef_O?Yx?U(rY#1YJ zhT_Fe57+Ki?>nZ0u^@i6h*BW-IQuC{BrBJThZnIJ;dL_G3_Zv04RxFh(L8%TSCazm( z`ptUDhUYBU;i)+_E>vP22?|L%T!$FxkjcC$PV6}d!-!9rYZQx3*S1T6Z99#ISN4Nq zwODo=^?IYwaEox%RV~|&@7Z;?9C&WkEBZCxuarvFM$;=-s$8Eyd6C11=g>f-x^%NN zDF}P&peIP}BP98Yi3|biG1w2yp??C;DO5ebRDxxqYNh1C?hss#c}+K{dCgMb253ja zsntt0r&(xL8?{2obDQMQ&MRmi97^AeDn3q*Aj0~eR*Gf?aAjdRG}m-Jt*aMPLX-GM zD8q%h-;S!O5nlnulpL?@R7$n7Q*8tlw_2$cYenC#f-X4PtGT6O$qpQ{sN@%FngcpFDQooJzl6NyB?+q1& zjPU7(d~n?s_(i7{)NK!@bDDLpV3!&J9*YjM24T-N~KaS!SP$Q3KwurwT6EX z$|Q#xb5yH9YJ|OYLo>5cFFcp$O65keS_s^#?F41F-e?p8zgn&b)d~jHD|xjBz(l2H zBk*k0R4jTR&~@OSux$HqC#UVK7&>@Vtx&`Yt9?4;nWNrXE-04EOmDJco}@jpw7w<0 z9vB*Yq8+r<>;mQ-)-#6Kt~48HiEsOrdf+#)eCxF!aN%gN;?^7=*0Sto(+hmB=)qf_ zTdG$JO}(@kjZbs!2;ptRW;~JXmI+huFzlLeyIYG7QH0??a z{p`7Azgeze5Gp07>2s~79->^(0N;ic-!w!PVl|g?)fzTYuj14(meq>isFa&Q729XI zTCnTbKe4%%8crD-Q_Xci2WY93Tnv_5aj=)`sYVKo)KtTXq9zj&@eKYmrq#D3@n?w~f>0E4p4}+a9sI9Q4`7DN!B@>K z`hHNU)*aMWXuwTmvji($rAo#3%QevCc<4F5S@GObI8T%=rc}jz+9co^Da6T<1jmLX z2p?Fd!UG-E(4?Uj3WwoPuSW$rkn~^(8bt@28#X*FTMvWnf)u~*SJ7u!tmQ(r)U09a z!6sR=OLi3#B7jk`I(iQ(&KC7!_ zA{wjIwq1LeO;Tp1f{uY^W3)bR%Hvo89$yxaUqnx19%EHi>o`r-3U0yo8ubDucB$!< zaoPjHb>At~3pUOzbTpgj+y8N zK~M>>@6?@UqwG2~E&)C^b(}x`fA-!5NUkg`6Dy6RmXs~^`!PK;%-qq=jHID5D{nq- zW{U2n)OxhUv|5@jbvHZoZgcZKsuE>oR_8-f4KvFUGwd1+%frBU7cl0r-ZjK-*gz1m zu;5sGZEQo}z!=sWHePH8v9Q=1EH*(n%!d8_=bZoCb6;6mrOHyOCu^panfLtXoc}!U zIsgCt|6dIQ+jH^e#+jqp_8atCErXy^)vxZf=`Gb>K=&K-<8vwdTuhUecpbr`USLe>)pH+{$V%Fy2-4hD1)tvV!^HM;_ll?}0F(=E5!jdmrdKvLND+M!*Bl+!D- z`0GF`(`OQHYL3o!d>;kUA5dL4eNNdZ!X+b ztB#ZK(E-9zqw33#z^SFNU?0ZEa4 zvv5~UdUH&Yg}dt5+knxT{`zdc*Z@!);GVc>^l-2OP+dyYA2mf8$TRfH|PrDv-~x{42u< z%4wD>A#nUQELLnl>f0??3j(zrG}{gU(jm+ZsxZ=mu~pzSfxdTPuh(Yi`zj#Tt+rdO zc=d|o+n(35-8Kqp!vdfNJCvXmG`+S1^FkP^G;9FELkDU~7=$d`RWICC7lGf0^&o7* zD(=d{UA0`Tuf&{okl~`%gJQ|Q*In@uiLKZR?jkf!H{fpb+biTQNOq`N_6v8_yY4x4 z9$L7oUbw3c2Jk4W00#?q)#Ukl;jTIgDZT69;^Zf5;jS8;uy9wsa917q;$FC`R*q3= ze=wYLmlp1-$uWxdXv}_+7w)R1|IUTGYV8hu;jS8y56)Y~8w+>Uq9bS@6@O_z#|wAW z3wPBbh)v{LTQ8d|ugQ6Cco*)fvA`DYss{^q)$-Vyw@xCD;tO}xTjT_pgtSUJdyM3@ zTen$xW5>k4B_xiwhh#6{ zw};>Hb%xnLH-2g9ji_h%4Cyx7@J}4VmofaF*5L`YQme!7DZI3nkpvf`l}ZiHaBJ|u z-1Z$C4pM_!4W1v%aL5}r=GKQS59m_9iz9t-KM-F>y0#gP0oQRbPG7jTyiXp2{1G^i zj-OqB&$yd;*&d7wr-P|Q&lPUm4(`|$J@4$#USwA-rRxaaJ01j^L2slBJ=iu(Wah(} zoR&n?+y}((6fAvW0@tN$D#-8yVt;qMNhW!g9iae=if?|VO+@2~M-|x)6Y~)7Zd}|k z735xJ|74|HZWSwK+p$tkW!#=`iAaP)MSS_XJMj9}=lY)KS}%T{K1!S7(Kude>C|vc6zY}nJ4WN;4Ap}R?>p+-?Am)fn%47T^#)gHcuw6kA z&kdjG1J|RB;h?`61+-ljLD#L#POr1+b`gP;BCQ5JuM-SQh-n^J0}+MYMI7`H(c?!H zMqNBTA5gvThxf3uJYDjhTMn#I*T2h_3aw)ijnCe@!r!HGJBhb~dMUgfU zLVekK1@&%VZr;W(?tAnfcOj4H(*16Zds*!?_RP}(fAZ{o%xiZ>!xe8EQ8R}nPjT^- zd@7vSQ&h)$Iwi>_^M80a;LJ&qXnvGlmmNkirEg%R)OpGKeX4Sj-o^q*k z;*HA}E?vJ|+VoX1C%p~CyT-1v9z9Fda2TA4zX?V*N9nC_UN>py42oiDVU=UITV;f< zL8ur6sc>Lc)Nl}*A!y;VQT7qvqgtsTXqbxtH}Gf}Hp>kUv16Q8#a4Z|+D6oodc7J} zy#|B@emg+?3ExGiF59=;Wkdz>t1aJeBEk^@q#zQF?;|KurS7>+uUrjk9O+>d=|Rm2 zt8J%hy9gdpLyU|j_&`{x2Vj+x_r9l75Up39Y}Rj#|L33jt6v`e?(hHFg&+T&zkByT z|Mj2yz|a4~Q{VNcjdAzWfBc1i@xSp@%l@QwEB{vaCPZCW=*aF{Sm;crD30a}PrQBT zIkgy$KhtwJgYyFCW&Gpuy}W1~jth5!!4PNTI5h>{KmfJEaJ$#v8g?Q?5EZxALw3Or zhTuV9jH2r1_{d$@=x+vFuqTbUMf0b*`4qYxFX#>98Ld~=E>$_DNKx2yx$0h8aL1#K z{y;yLgE!S(u|RRyNBA!=v+v8D6=$HW?LlXKV`MTm)!n(^;R>~m_~>R%YnNA;f<&Js z0^6^3Hn+L~T$15FR#frWsZVLH>I2TQWgcz7P224j6Epthmk_h6Tp&*(fnU7a8Eu>g z-2Bz67s;##3t>6>1$#{6SFKbtemSMO@v9k26UISY48>uKifLh`HFZXcs%QRkN{*4% zjO9b2cA*e<-F1s3Cn!F)z92x@LU)L3X@5Mj5EibZjVlCk=#IM>(kpIv7~lc)h-0@a ztq%&ArtN_{*v9jXA$KnV7V=Jjs}GWbd$=i~(>4`OU(8p%J(%J@5NG~n5=#l(9h)FiB*8atxtW*deOozmtD=WMfV4ytd&}lwmykc#T%mxh`g0c+3BHAB~eps zu$i5LS&M7GSj)q_qEy&PDvKh~A+%o}C0{*cwYja3A;csRV(t}CoDUD%m?Fh4ZUF@BGi#rKD2eRpuT)04%gsKx!hKg8``)nt7uz6j2c75V)B-J#5zQJ2WA zh(rknw|V4Bn1EWohz6*gigcdC4j^RP)&>IfAu-zC);qMA32{bUdw#kXj%5wUZ7fjQ zXz`MTED3pIFM1pf#Q7jnv_?l^K7$;_aHyvrj-P{(0L36; zAMe23BM4`~n}N%lPyW(?ym{wy-ue5{xtxdD*t`F5UU^M`?*7hP@|lIU`w!-qQv+r< z&s;|My88yR&SXayqfUKk0_z?kR_Am7d7+h} zv@y?-C^o7tA5OGnDrV?J`Z!5mqnvAo-iBgbQTUFg!XQ?!aBs@ z4Zjv5k~*Z`&8Az0OD==}Y9PwBUoThdjVfZp+qH6=&$&w5L)D#tKIlkP>x3Y8rV5C1 z3ayoqGrFpQ-9|C2)O2il)(eqZ=n+y3McF0=V_VYNBC78(>Kr2@U6{6@Nuti7(`vig zbaeyeB~E5LY}Plca8P>Y&1!~m(N-)jD@z+F?#+r#{HnLnn z&L?YcXS1{95BCg5dBWgMh~7A9D4&@yg8M#jyh(h{8*Fcl`f!N0QQY+Fv{8_R6GEb* z6NKamQW$S7%Xa|Fl^%hV@5dTawl-UlyaKVbGFaadG z7C8i9u@@A#fNfJnUbuOU0A{0&pztEI8T3kbJGVPqf!}e-J?aYmTA}LbKiV@aw+oF8 z)F7KL7tW%F?$`&8%-W%ZtJg1FwCJCgA&A`C>JK2_C0&ZO6+zT2uM2g7Vo4}1pmRwy zb7;AD0H+j?xK2+(FfA594@-ptVd>&MLpZuk*T>_Yby33bTxtnPs;w(mu32{n?iScU zN4O(vqXRVw^$BR><)HA_Z``^J4G4krl!BHDvf4q=BiP<;!2bGSXssHHMeMGPRnU0u zm|BODjr3J6sGti1HgEu9!VuD+4QYgo3hDIF>5YlWzBRl-|-!0fq$?zS}q$`ZRAit3MW9PW)6AorfO=OB%f z^_QJC@(6rlEa{0~xr!JVZ(@%7NaV^4m?De$pH6gk39Cfa^vFf%4PA4S5(&oD1-D@nYEP7rkMi5@(2DVy8ICoqvax7yy^b zGouGQ=&?zc3W2fTmGgCLhoD4H(w=QQ#c01Kv@FdC{D)~4;oOKp?te4t9mw@#(Fpx3 zaZt@CJVpl^ynrO6_X7mw6_XtQ=s#Vmj9nqQ6z505r8+*w88DsZQw9pohd*SX%Ruy} z%T7hKi048P#-Gk*JQH6z;Y6Eo^_h$8q)wXmRVElswvd14t}-Tg*gqLmzQZaqcIo_C z9vSh<$;&(c2O^mmx{D{z($uRb*~cmT_M;N_fX%+Np@+S$MWf)T>X2$fBt_x{@~Q;$;T#PRC8e6rnEN?&&?uW#V;Y6E*3|j%~rI#$>jMBzF0owuf8^U4pH>?88pFsDUKLPzW zf5I-n{0XCh=%3FEs#IsFJ@1%zi8%+nM3*# z(-t9(NQd^zgrsMn{soZVY>5E%*YQM{0AvE<0sq$mZi@+CzM$a&g$Tf{f z2wjm|IG9LUPte<3>n}+%Ye|tT=t-Nb0r!$G<;PozJju~H=)4peAo!4%BS|WBf}&x| zA;!EQCUtQ*26WtFks;`J>~Yx!nBlF}H(+7Y?L#BuuZymK z`Tbqx&NFX&20+hj-entS?AefHmV71* zGk$p9_Lh|_ql`V9kIbwmwGn}m;LR(Ckuk=e9r4b-4^2aihlI`f+aDh;0}NIr3&rB@ z3?d9=BOUfmL7#nyRU=DFAB--dbmYO!9WdU&3E6iOH2Uf)}uy*xA1YS8nuJf7D?UG+u^OoDX zea0x4rk4rQ+(~fDKTpw@c>pOJzB<9t{WY$>yRMmlSg!1@qy%KSm@90>Y%bafNUa=_ z!ynt5GHC}zlB`hv3zfzKxI7!+vQ`&CM|c3hW!e;}N@F-5BIGi0KL^m|9e4N$eIb|V z&j0coECzerIosYSxUvlF@-xXd=mNaFw?5{>+=B-%pAaH^^+u1Qmrv@Xc?VV!qYndo zd2f?t=Ufa>K8!6;0wRx*J(xiAavGJwOIzBGV-o5Iq7MCQmPqF0c{ZPmhXesB;Zt( zai3UaDr0Y8Wx3nLT~aLI$}d?Gu55sr2?;$3y-Y(;+Q>pD0vT&Wy4h!E%vrPPeT!eF zodrF-1Av*R9w35Qtmi4%nfu%GH}|q}%0D)jj3$7}UztB9v1bi}xZrZ>N9L4G!*~4LvKV2N_Z-$h zW0m*&eIjA$Nw4t_3!ihiPcGofV&}-k|MI@VsFS693^9|=16=t{AEx0&Hc%{=C?cF) zbZfPs>iW<vhuOQL;j>1=sWCwjVZXWxwV%TIJAfmTQexz0vgBp4SWm$FJ1wpd2<_ z_DVd{!gVjQ4(p`Z6jE^!Je7xoKTneP%+e(p_)8aYAdF^J{jAB3j_!7_eC@!4W=4Kt zFOE6AO@pz?x8Xzey4z7H){9+w0yEcAtz7-u4cEJk zuxzXAc+e#`4lgUZ6UmHRW8SC6CX+ojd`Pbg*T9?Z_%^h5#tN7KD?Y=p;vI@GSoqWh zcm#&KV&M;#uFymF@~Re`b;s?F`AG6}!Y!}#3QH!#2z5#RWv3~jWL@hGM=soDBgY^p zNTI*-rn`Ff-0HG*M$ELeU{u0?XZZJZcdLZ|==Zgrc#Mx=Js6x>E}Xdn8+S?CAGf;! zh{&BU-ul~8E;eMBv`46HZZ`&<$6c?!JxqO7-0pFl%*U)gxp5j5lB$R)QVH*u2fUdY z$jTGcHeliM+`>j7BczK;QG{@8DRQcwnY!ng@Ccz2kvR^kJOP&&9d9_tP_RQO2gIre zqP4>h-fy4NLcpRKgSo=vEjvU1ioJyL$qsLhy7{R)b#U%NXEq8Kh0LYRvQ8JOhI3V-9zLtF|kzg2{@sM?5k;gp>w;$Z}? zX9J&Q*Zfwy6}Zi67zE8W;t2&|!>(5AILNt`z-ju;n(KQAp`l7%wF9@+hP9ekuQfI zU%vK-8(;j3)nEK?c|K)-E>KwbmG3_pJrwb?ePq_A*@*2n(88{9bK)}-X zL|fnOF&Qd5D_Hgpw@}lmT&BWZc#V7cCHUkMI_$a`lO3+GAO#Z7F~Nmu zJGh5<-hprWauXLyB}rMf%wJlNA+oBwt`TLOecH8}DX(lI$F$n!Om}Je>@SMSfErNC z&DJhk<{DqNa99*sGZfVnw|o-b0u92uR=jTCPY$jA-MuME%x;CQcwa?}-#bSv87ktr zVk@m2o>TVbl&ybnp5|D#DtM1t)|sr#6|k640`C!LG8^`?)W3UFw9Sw~L-9L@%tb2S zJvz{uanG5aspg-dKA2oWRcEl!giY_BoNp|sW`L5<6W~*ZyMe1q;j&wEBYx{ zldnO}Dx90}O|c~=v`1(NylTO(R;>*wUZoY(n!e|G_!Tr;j$Li}2z^VQrkWMV1M5z$ z0x4m&+H3?BuNpYzMpy@->$Vh&2T+CX3~ts_>1NUB!IzjkZzF>yy=3TkOSn-EBfkX) z$hrvB$g1W98@hS&3oBJ8Hj3XQ`d9)eHuE!l9vpVqeO5jz@oO=#BFO(!R@ z&O#-OSdN``r`v%a=;20Z^PFO*ZHi0=L6PpS@XjydjGj@K)-$YI9rQP?)8?c(y-X@w z2pi1eMdXcs*GEuJx_s}b{N%ovVje_un0xa zKc+RQ*~-b;xSjt$U5Ytu;K~Zrk;+Y$L{d-FBZp zU8hy8RBXHIR%(u0ZiUTq!*eR3)2gt4zSVZnsMqV&u+uUy5;nA?T)pyq_two|oTH?V8fYP$(OTCU?c&9+~& z8$r7cHC(OS49gDQ*`8N!H0q5o@Pc}U`{yvvNhf}R^;~$mUlC$&HqIU*Fp9v~WauY% zd>IkjR^boI|MdTT^mqU3zyC|EA3XOP|NPh9{n0x=eB}F|fBt)4``17BE60E57gXDF zJ{Bsag-Yptqf+|7|G0aVQc)bxvlL6>#J<0ZrOX4Qrj%hiq~tx9j~7`|U4dhJs@b znMlCzW`do(bc zWnT(54OPh8vKT2u_GnvnAiZd+MIIJD=Ww5VxKt!81&GP7r1%PUQJlK8G+W~*UC(T* zNxUACKbec!Fu|qY5Q{nN+{4?iTB;Qrw(B>XN)2{#o>zChR@1B4O+d1%@Dy0D*={Wi z{lIl9?RpJTBexRPoMy{z)!KEZ;rsl~n^Cd4kC^@A%sx$$Bjnsz{b_RqdO1C%q-Tr2$eB&M$6WXZm@2>ItY4$F>9MnUcR>#3_6=ZZ{&7WRfmLy%!#FA^hs#_6Zju` zT7G?$w2}0+fDusEGzENtz*#;$8ht&6GSpLDLSgAqWpibO2SIV#cFnkV4!2;AP~05D zQbwA8FAJ*mU<74P*B8cZJi&r9$Br%sg((C!{1EblPL0u}1y#uwfhp-(r2H--RM;*}57GU}QM5-g3K` z0DbF?PT&VT1x#x>URg%edesw$Y@~6r{*t>O=2wGcgg7t;S$@^}!c@uuKfqEFf3e^X z&lcbA^@}4c=+Rv$4>z`pLpNk=%@>MqBh)Yygxz2i6cG)!2uYAS2=r&|angH1TnAJ?g@= zbSi3{f0tjhf{p7vdGYFn*I&K-+KpEYi>+j#3#Hpa>GlAWZaD`Tnw{47{K*@?_1#B4 z|BwF2I_muW?H~Ev|Mj>3+OPilFQ53(@XNpWt6zTZXB){W9RIygwJlU_?;BOy(Z7~b zwIOn3;dOUYnhTNoiT?OTQ+O*7XGCF3BvQl;%{X?c6uaPur7SmA3V8DN{!J`i58Ri@D5;q4>7jC7Z6a5gRQX5@-~X`7)3G2_pQY zzt}n7ya>co;x_=DH}e8OIrYgOKeCSe#B$uaO_V9U9m8J6CK)irF8WkLj;f+NLsgo_U*-eeB^0MoMoO}o;xJ>b%vw#ML-c1r%`Td6U{(nR)| zYIdx04LP6OlKh5D;(vB*r{+V7|4Do?aW)N2tu-d$&u8V`3(AI7Oq+zaGA7FVJbej* ze=8t|mg351^+Tz@gHmJcjm863VSL~hg=vIUxZ;WDzR3|;s0 z+t#&}8&t%GyM_EvOO7ls%g2LTFADoRg2DpO@EhX|n>x@e@RYT)2+CaVB;rM!|1A)*+V4YFh z${8yh_dJsRz{O`lcI`W-tvga?MkSnqO6Lr>K!&)v{=t6y_Kyo7i zT(dAxulEO=Zr8ek58)-|9az^1nN&10q+8S;`lY94P~Z#eyM7P)ui-iC?ncMk&`wcF zPX-wnCaM@y^kibTbl}(ys`ybMl6{q|wIHzAyK3JX3$?t^-(nO_UnGTYzYBBCU~4US z@3bg*6Zbv9;~|;rYG0?v6s1}RRwM9X;8Sars}8J-S{~f#HS4zT)$AJC2({%s8PvR+ zKc1*6wV;^rcKqA|vBr3dZl5bcR8tX0R+4oXKT9R?)O82mhEs!Tus6O}jA)85=dG`( zLC<=Ze05j-)@(Xl4e*6eeCyWj^+CTs`r-=4NgfAxHBzb|9;D~4u1y%q)U?WZu(PrG zGc1v-DbgeD1Fj%68)w#V?CadY*B9IU;p#9L;E+ASc4-C*P`m-niofGPAt~?E$AP2NUmxYK zX21x}nf|0bO5e>to}v5$J3?%-W)(zPfQ)`f#mpQSudldxLld zsN$r53;Dv^rfbEJGH%1>5|;^al&3R!{Otj#WEbaVxbW}$<8Cl447cDn!wSj$#Zd3E z$Rspy?BC)A?7ADvRy38Dt=DmQ#{G#~hLPvNCn&4{_9U>>f=p99wuxC?lBxhZ|PXA&yX2-RDiqf|_X3U5gyNBw)wX8bFUL zoDxBfDTU)9q+%V2Y}4G3)3FdJ>uxUO>0k_0Lgsxx?Z=2nb8nVu-#|pJz{)bB!cbyR zDL@3lJoNzqHMQMtQR%K2+)F4&fI}%-7?8K*$?-hlZeMz-0oZMInZGxU??A_Lg792# z`rt`JP{H2S9Z;wsVIXQ6+KNPpZcSrUspa~1u4JGJK8mFHUy9I>MNXfG1%cD&P;$8G zGYB~t$m0lB)fkG<5O0_K_3}$rtyC8{RZC!{(?lk;HJ*yhm;(%*j;GNt1b&EJ2_p*R zq&=q*Ju$vzH+fm8V8yl3prx;(uxef|d6P?I;amdUoK6Ghsq3Yp5|s%Yc{-cU#n;Bk zJQb7oQP~oK8K-4c9F9BCNz=g}1>NrgAq6t8UCnxMuQMXgtHt5S@ARR+B(!(tQX+s3%OaFw)4v)5pb* z@5?|WdyUADF=+d(O53ZipINeIz_;g;JsheM7oRz2bI#e@tCysi&Or=vhX1Y~k1NKf zHnx~Gs|gQYd-aDlQ#P|8;d}LmHhV@5fcP9U8NtPWavo=9CV2ee;dCzd&4&wE&Z;RP zsXrKCc|u1C8e>7$~`-_V*l)C&+KkZG-& z*Qmo!yI&67N~;yZ>rNx6RjOsbTy9tEVcV-!D$SbHYCEl3PzybHcyA%@vDXgUwWg~z z+Df5El|BYFqfzNib=4A3IG9!zA%KUsciX9ZVF)kuLEtsrHu!M;R;v-Zz|=P?4TM{^ zJ+}^weNcuU_lDD~w#y)>RCSeU6=6n`KbN}b>86)GIE=4W900$(Ryp+QezRP!w%isX zIKw+U{N%gvVebTf&2PBnYO`E*;T^vgmI0NmR?51|^VE;T&0*LjXy@`vOW&-xN!|>> zQw4Skm7;A|T0Y`Q+Zb=#4$9=|49@iZYCXV+1VPJl5M%~c2koZUXtXMgnrAo4fU(uX zO4HMR`j?UlPRYw*`ryB}6fb<46+BdmjdnF`VO$!4=eNk=K3uO=FaY(Y*Miso&}}0A zbqy0EY`E=)9W>hYdd0@P4a$yFxApOqSKlQ24Q2&80pS8C3t-DMGhaDe(F_*}S243C z!4(|9tmmo@Y)W&5GoH6xP0lAz>%E!2%y{>o-PE1cjGg^NJ*fFP<7s)q@4y`bd5$2A z$r0i1FgZn^(=^yft9ZeeVQ(K%Be!k{Kx{jZjDt zu?_XYrWJV)R7`eaDkK$t8qXh5@rm2(Y>iPT*&PWr2jK<_+$&`K z0>c%UF2OY&VPLJh?lxog9$6EdsOqg2?EFICw`&bVo2dnGH(Ex-nwsl0a3E?lef=I~ z%*Ycmf9X;*OtP#Ok_n}2J#u=d{aY@5JeQ($6Zpfiufe*{rzmd>Z$bpGxYkg@Pp0U& z&eFwq;eio`JVSTHZJj{e-`wo?rlISFopnX`vHbFG!ubh%%$(3_xC!+8cQxjhk1U(< zYbIV?9Qz z6PfH<5uvNfD#w#>l5-El;G&!frpfkN)PK*3vF4d@=`MMUP94MbYc=*>J!0 zaclQ(Q}m_}NV;@edndp!JGiIW#d@u3SG^F?(W>gP>Ur>t#D|Lc7`W8;BIjqdL>V^~~T-IB7P8E`rB!I|brU{PE|LWQ~fKSk!1; z&Vg{7TmK6w#!9aS@ctHI>fx2$V0*vEio0P7KH@!E7zSj0+#hf83r)*L9vQjo>w&L| z){l8Cc9D}|(b;2shz}_|6%qy~XD;@)wg;W{jgfWs;yHq&*hT!~u)ppLCF!zTF?w3L z@#e?Yi@|O3=$$q^c|1X>3V2kU=g0xIJ_HG`2kpn@mQNP z#q46vqP`t#ErH0a)Lg03B)vZvTE(JuX$%8$n7iK^xCHDmOuk~PJ2TI!k!e-c_BgFS zplaft3G^}8a0{t2#JzFzoW7s+%?0a9)q@BA!OQBQus>1DV=0EDhgts9F+FMJMDkaDWNS^-+Qu@vP#9C)JC5NKH;MrQeFlgoFN# zffj$Ub#tO9orvg{`0*lE4P0q*8~2;bJuD0JrInfxJO)cotjp6>5l&n>cW^b44(7#s z8BOQb%l7D8(rkrD6#+h&#RTb2J)tdF)SG(g(b5KtF-N6sca!5lJX*Tb*(`a8F3{gp zQDc`@8A2g z@BW!9Ug0x8>c9Na(vSV#zrOtC?|$b?-}o>8Q~UP!r{;0&!NMA5VGZ-Xv4(l{7ZTPm z<_qpr(rhAeZ8?=RkWnI?Q^p16yk(za6B0&L!>puAWycI9BtE{ZiP_#nS(=P|+Qw5sjhJW_yE~KYmIkGMsljGz<&7CfryvL$TSacwJ zYD!50+7WlYzngpPshGJDINmXH>_SToCZGNqDK3p?RTCt^9^5TMYH$Sz=7u?rQB(BkV*KC(cM z3IYrgqL%Xzw2TA#t?W3=2T`O5BCxE#j7V!9ys%*75^6|tEU5hs2G%!66@0VyL5QGp zP-=d2F)SLXC0U;Oz%oE_L?*l!lH)|UafDmMExOCYiHYpZv5eCOulHkkSA=gwciUQTjF5sK3xl&SEQpj-&T>WbpEf$zZ(45+@563rR)i!3~=PgKfW z^@p;5q`rvT%*a8@ve?24rH1+OsZUuiTJ`0Kj-?tjdFW3VDFH4fDQ!h*N+={9+fGS3 zXqsr8G7NxVM@P?-hIEpFl;B+!(g}s*owHEGz6_hd$~j4$EJOIOjENjsZm)}>MRit= zpeiKZUzSXht!}6`>)hnTM>8Q4VWF5^5WD3|Wk!Ev<5Zc@GQm=`&{RTlAdQ_sGG|xw zxI+bvQd52vWP?Hx?`2ZDUWsj z2wK^w7IjiALlX_!VOwUbC@R4QuX*|eRfRsqR)V)LaiMMdlxUHjC8nAwiIbTUBM8U4 zmX>*0EbO9^b{HgxjD*za{S^LWukj9yQQmJgtjo>m9_Ofi_ekcwPn%dTIb_^OeadXIAWDECq=CbF^04np( z;au%|50}jwE8q5D^A^*e(`l_hsywagTUs;q>o~WxO4VYm?$*3=({UPyzf*Da2ZnP^km&}tWVv3EguyeEBS`7wYjFw!|NT@@AT8x- z#agx5tien!th=7;g|!C4u2joq&vV^c%XXSJ(0IOs=qzr-Z~IQIT( zE!K*}wE0xsF<=A?JFOSYyRkdZCgeI-xaiwgn1&~L-7623< z48(H)-|6{{Zm@2>ir_PYF+%x3NG)X`05Ym^{iK=GdU1$yN{Ajr<)ksEj~cb}#8974 z(Pv@lQO1K6@Ul_Rumauy$0S(+SkV*w^>Fl6yF@;L5|kNW3`2U1k!dl!sm8IMK&Pv9 zbQ~q99g*Cst4@zOTQ@MTx s3;sT0h~_rNZSvv10+)F!Y5~g@sDJ;`Bw7_^S&_yt zsiycZRYwAg`otv_L&!sHCoBdYy|1H{fv6m}5q^nW`CCdML5hkSXYF&Ai1p+P7w^Mf z-!rVb*f{G5Eql$M{9-6t!H@tmX*79CarQ+2UVb}(9a(17v@JJsMMTZdfM16 z*#Jzj`ZY$9-bhoHY22-RbcY7Aj~&-EkE;)?3I2p3DbcNW>J)F+B>BUIU_gY01^ z==xmw6lmI~if;pHJscs5*=S>1Kyp=~`~AUlWqO<~dy1C;L6IM8?E}1h3I?a1FHFc@ z$m8zQk6nj5x;gfp9)q*;5%=*+wBg+xka6k=Hm7RDp1c8=Zny9Hfe#ctHa|{yEb?pj z=BUF^$EWqGOqHakz+zdxZn3LJ;3kRgKmF4diJbPtF2rUHU;vCj76PO#nJ+SyFlPR00eI0 z#-mq|_54fT@a!)?|MkD&yj%Y7fBgUck6-zLpZNVhc=Nmd_@%#i@_+gE&mMXO>5PuSt0NBW>LIR!36qdM`rtr5q8Dg?H2v?`z3lNPd$f!o|Qj&{IaH%LjpH37`Mwe=QF%K*>S+f5!k1#1HvChkw z;uNY_Qvhj22x55QgY$^|dNmnPSyNCsC1(n%TB$h&72HisL6wFZ>n3UpwZH%ad}yS^ zzN$txq2o!yo((!p<&+e>%t+K=$Z=+6K<1~#_IQN|a)J6s3YYI?p5=>h2BtN8mU4W|J7Gi2@u^&Wu>8Pm7 zJpq+2nslK%?v4^W?-c}#7dULjWk*HOH;K}wZCgZar24Ypdhty1mw@mI*j@~un?Q zS=3sbNZHcxK;kuqtrm9##uI1{U$hF!h zVxV7oIa4u7(66jH8~Ur!urcx~en&z-IiVOFMF#9hh?#m~QWIQAQB)Z&{n#Gh} zo{^-G%1C0HC7a?LL&@=NkJ}&)=@Sl1vshcE8V21v0ok!|M8z)}9>Dq*M!$8qZ>SdA6{qFYLcbAK{jytYmm784uhh%F?YEnN4+BE% zR(*tIY1aLAt=$UkAoLNRrR@iHqgJab9%oXhZa=gBh-97o@=>%K{^JgLUWkS+i{_Os z_BSc?3EbF6>i?N?xkK&GnasWAc00bXh2}Oa&6KyDD%V`dFAU91_IC=KyOVdnUo1fq&htZ&ro2EntEv;7I{rG)ULL>l!FtjjN3zeoryt7aZlgx{*^l>Ebot zF|4A`ckcR$3_-YZDl79Qz_cGXR*LY+0VLpULd*&){o#0%*U#x42^mED_(eii_q)s1 zbpkVT0d&*krL6nrK9`N0uqaj+te!mR59Vi2o?1V!^bFZ19q1o39P>K4-yHDHVqic; zJF(Vse61GRop9Wva3sPPswx2V3PZ0rWbT&^Z;rYWza}1m@Gzs^1*s+^*U-Bv`IPq3 z(eL;PX4JNkWM-%CV`enE^C1SMrrLUlTbD{X;0JtCh|TOB{i!}7BGI$oiI_*G2HEhH^44t6jgk@OK zHmZKDqB?oC?AE`4E@4Jn_sUuEgIV`skps?O{-DXf}*kKI; zD(W`O2YoK5ZX>H>w-Lw>PX62Visv|Xwc2nH>o92Hvr+b4r-g`vHbNgFETmg*h0Suq zgMqKp(sqceZ3IKA*Q;UGYqVWlN&*CQ^xdW%+TgET_ga3n<@?RRuQ;~jwc5TP+Vu)W z6ZFamsKlWYSCJmnoUqz<5bYAt7;DvPy9qv8uJZsOpvjZ9Ud7gC*!k#}f9P}H_mjWX z`SXwb*+;(g&$`b%SO4|z`N{w2)W7(PpZ@Dt_4-!*ocLH^Ko=O$_YDU0*vAq8PkDby z`dv+2Hj-{vg`9(pNEyOIn8_R;t4zvBO66j82M?>ecd$Cazv|TPRn=v1YQL(n%i~TC zRdX)yNq?$4-U^dGRCml!%66NY<26;dA&o23wbNALg)}z}u)W+g0RM8+fU3()1H`hC zlL#kyrAlrZAdtCf08!?q0fw2Imd~ifg63wlfv3oFqlygC8BP4a@r*trU#j?(cA$!f z3IC~u9Pg>1)Xr1!J@TD8jZ~w+U_0cDgHG@OkANtl&*+aZcEEhlpF-M6LVe|AQUS)3 zKLnw(EC_MeWD4~OLIhe9KLlZ=RFkB}Z8IVz7o7BGmKnQciqvG~jRGo{@Eo|hMSw-% zT;RO%;?0}Z8*cA*`OOO~4 z^$*6yE@248=-DMTCz5w10`UNMtw22ZR*}U;*S)B?3Qa~eZ*1B}CXWjagW^2+egbcN zX>Y1iIZ*qn)JQ}woYpnjzOrIKIOc+#G>T)+*qSqT_UO2Cf9Fs(oMVrg?tN!1f#~?o zIoJRsG$3)e{+_vE%)oWb5mOPg;|J!dr%aE8^UK*>>{|~P#)IX?d+XNCVl59ei5#@TrxKju| z0q5}C2Eqcnm3p(@YL~+%0yz7Sk(S#|5I~aJhTIeW3#)KiSh0h8*{fCCkixdYRuh>* zU2|O5Mas5AagJ}rt|>*til$)2=pr~n3`4iks_Qum5c^)W%)aL$eO*4pMeohC8!N6NXK*-qhNHk$%(Sz)lAKRoWcfoe zvk}Pd_}TUMOuCtu>t_RkL~L!t#b*s6+!6QKua>b&8&wn62yVhL)dbpuj$%6y5gS3p>5r{# z4@bdf>9TC8&Y$LxG)B#4#q*%Naa&HM8I&7#HSp}P={2ggO3g2q>)4|F3bwBrHV3}~ z_myx_8Me!$2+~E%FL@QqRA%pSzu)VR)&odP#7L+@I9WF%myVZ0svma3MHO#BE8z|i zDfyK#fIF~CdT}J4l>9No5A-DMUGU&CJwlPbx~y{*qgsGU7jG!~i(#4!q?3VvGEh+l zR!SqN_UOeBb!RyRyw%^lerY8>hJsQ2b0$Md7^B~%1HxEdt^}W-ykKo1mI=k^g=v=z z+X0R&#g!!^L#Yh^=7P1^AC9`)*?ADpe53DE0PTKz1Se#cH`v}9_16dP7Ock*1!LPn zsE$4WS*rBH**7k|apCn#%NF7*_5A+kvUQQNT)25{S-3VtbQfsphp;>Adhiu@uJ9&B zPJ%48FK}JpI=_yyz42xn=ukjJp@ttx21r)h^Uql~-+291I91%}kGno1(!k3ijN{H+ zdgGN>&*~s;FZnTjPXgJ|_V1)}z(YByr9;h;1%Q2j;ykIyK6ehk06q<;?Ox}S&&xA&M z4&PATR(<{e0kSiX@-h6pi2D2T#WL|JOVB zQdyZanQ#Pvw-=V4TY4;+Fyr6M&*9)idndQf>yJY8DJn>ruiqzRMf2~Fb@m7Y||=NpRE6RaoFSCM2J z7Eaq1h@A(3*hwAw^is6`?Dsx*=*;(i>4X1#`{my~_TkaW)4%Eb+GX$TFa5)B_>FJ> zTg4yvSIHS1|Gj|hEFe4Y8_3S1ZzkQgz5Eg`yXBOtHa^QLHw}!-fu>a6j+3AfYrhZC zrXrWV@A^=kEa1Km*~tQTdFW2!a?oQ_+))_qqz6DCqms_#7z33E!EEj7UYkTv?J_s1 z^yz*S3?#3+tJ{N1?sc5^xt-~&NfLCm=x_l;qU%1}U^}CQnJy{pwmbs7U{m_#^#OLY34{=~OK$T6j-0 ze@e8Jrk21e{S!XH3VCRv^x+ca>NBIb-o`H_X0kd`rXOwKkv>Qk3RftW@}>Uk{n4wz z=(3dlfZ~$r{_DaWSaq1Okt0FT*>l#XaoDzmwFs~_CF_-KMrK$M84RWnvQox3_ECK7 z53WgkNS-_jj_i-=XdjD+dRD|y#(LczT3h}80GEDYe&r4N!=Xuet|S;&{>X$2GCa6$ zM20RDJTY$&y?Hd=LZbN8u|+L$&sP4z*t1N@PN3Z^3qhL+E`{j8$)+sB!;ZXQBNech zbh^G>3xWh#j*3=SYmp2z6ZF&MT?Yllus{|rWq6jv9$E2gCMXQQFW)jeXMN!dR)0u- zeDFgsmvChi&;KgXQ8n=9W__!mM|mjVE+jksyQ&BVTlOIGzUhue!Js#kz@pf^lRwt5 zaR)x(!rpQR9olV()j0A=WfP-Lh_g~tB9ZEt3Hm-t$g?yi30Y0J7-%Mpi0b2v%EgEk zA<&YLsa6TlT?MW}kr{u>*0&5{m4Lld_Mg%7V89)C8)xq|op+s@oCXN;zO`k9GrmL= z?@9_)foFs}wu&Z!nvBE++(oT>9`z97VndkQsWu%ebUR)6pX#f{8dw9hJHZK5fZ*sN zsCqHHdF|rIxvruV69T%2KP85VwlsRE+(s3#pg<)^L}qRs)jX+fl+Lwfv`jEA7nvBc z^rTOW5~g{zBE3@awvg!3&d^*6XjZ)1WHRuJ0~ZlnX#FFA!FkK|@3>o?s>I3Ccq;Z^ z8F#vV@sbLVj9Bw(>7a(F8&iS`?$zw~2rW7Eq;Ln9csra^v(#k2c)kik zF2DQgnq4KP2HR>H|23 zTe=5uWu#pvj{--4ATjuSP74R%YO{*a&gG(0bsAiqR^C(AM*uT2vOddl2jr|nPK;o; zwpZnxtgn||3_cXgsN@aE2QVjYl||31>MC_V@E1MGx(B(A{1m3(PebDm(U%u&(ODmk zaL8*ymS>meA|e`h#Jn!rZc|6CR>kH~5$9`M^_7c&nGHJY8zbxN#d91L)vhPKFcngC z73&xC?QpPxerxyDI4s>64eGsT*V$2-``$Nzj<$)_4#=LKJndsP$7*5pxqiq%DXq z>w=W)BGm>90ma*GL>hP6jRtVOb=R&s^+uxtCjwywSYW+b@eFxdm01!VkV+Q`lEVY^ z!Hl%hO*DiF^e4~A&G`Ehf|Bvp3jSRYLg0!xK;dW6_*p86r!L7joEom!z45(bL{qGI z)%r@*aT$|tQTbc5>2@`|7eDc>TesH-{r>2SD;O<#nA_!esiJtOK6rI);*jczwZj*F zW8{N=v$45P3`d)I2h|0V-K#hFE%H&oLP;4F6gS-A?Vw9w_evF*@p7@*v}=l+{5a=3 zu$!06-I8#qJLU4hnCM}l6JxY^#Nm;amy}xNEFZp8@wtKOCp(*Y&#u#vbDDDWz+;g25?C)>O*Uhto+Vj>Ezg;+N(t0CVz~oIZcLsj-Ry^Am)z`l@;8;eKl3Htzj(mA)*ddUfJZGIb6SF{s~K<=2Bw*Sg*zXg$>Y zFk7p`w{4}oY{gzp^g6RCf!}GTyM7)Lfpr-41&AP));RJf+<|VTZi5jLuex{7nTEr zNYKclyY9An%^mswZfzg}&z9@mcGm+^@!#nnz?w!)098KPP8Yw*<*!8pi8rNjpWbjMKGI9YBRdw?t89J&na?5cb_ zubw-P&LWk(Fy9#WwmQ8YTC%#f(I1Rnfi_*0ZJp(gRQL?Yh+*d8^?mgGxk3RgLPt=* zu+7Z?b|%71WDJ}FS0t6oI4uo3xESLI5_m49cSOcbpa!6i9+0g=2{0IRL*RNF+%aUn z0Rk8QjWz}_=OBm`Y*qX*@B!$iPg|#r_dLyk(#`&`bMLgZqElpp`MI7r826hu)~aV{HLsG1{`;1Bs4~VtRP|-`R)eXC5sKEW6oeir}0xl+A0J$J1gyQg&Ki66Q0;7-8u3Y#43@ zUMEy1R55Mk@QD%K>fa3p;kZk7K~#ipDug0dKh%?B+1l=pEksNbuqNtUy^1#EDvhlq zwQ^VV`wbu%^`_%h{c<$LX=1v<1rL@4qRwq^ie_PAs<}kkS*Sqm4Sm`dMo-v{A5W|~-l(5VJeO;ZQ=dQ(35KN zm)TxX@-zXGr%88|>11(}+m=q{&ijr%EwJ5PBT^%yx8$5l%k}sixzF0Tsk^_oaL#KX zPFwKUQ7OVvakX5lxNf5wRG?s}1&$s1Ww>x|KuF}*+l~uABQ1D04n2y(Qf`!kpzK5c zP^)?y(1ilN>@Y%MKLo5cdGiMtZPZK zR=R@dFszVTTACSy(=iY=V`~e>7r1#nfF8`Q`fGF#Celk+aHUk^JHrl~s{W{#Q%oN8 zFi&D2lg(Q&j2#}(a+!{S=Xl8Bs+R(|AefR|{0s}E0KLdPWK{nY542RCAIzI1ztU&Z?36BS&AzK9*84&RQx`YJ(Du)s zu^sEyud`?X4{DX}RCQLT-nu&bKATu?g6V^NBkWZ5hvV}sV(mbdz!bHAESJH9S`Jfk zklEAM4rJ5axoW)tX~Y2&9l_s$s`bkBzfB!Asu+J+X2a!A-DxF4TO--!ZME(1X?!Th3VlKx}G5< zz1JXi4p*g6_>3@9><`Y6fR$vr5b#o+X9PoM$Yf5@QWB|M3Xob;wUDQ8^r61!K~yW5 z>$>fr%Ss?3_W+|5Y#|_=5O#;FCF>Rv5Vp`SymOjrdgnATf_5pHGFk#J`M?c^);p)i zJ+udcbJE>_5NZa9Z^0zQ`{*Hf@o485Ufi@8+rw!AP2izCw2uAL`f}oV+<%v55^T?V2col<|5oN1dpm`X$z?}vI@<~OV3V06B zuL4GGL~KLF09_0mTp3)#JQfNhbjEekf^~YB-_&>1|2?x4mXYQGz(Xx#iT*OPV<;wq zLfG$i`*(>>s}-Oo)4Bq=5)EAiddY{%6{_OqitO+rm?+W=U3qz$e73zp#6=@BR2Rb) z))?o+*<_hb;a+hNNa(HFaSt_+#>pAto5bB!<=V#^_;mMA{klpDZ4^UMDG7N~OsI4J zm&x3#5{-)DC6{KZ`%KoUP+u+X`FKfe+o>0*rx^KU{o!6Gs+oi!xP#Gfkgw3Kcc53*H$0)8vx$9!3jYL;jV>--FC3e2s~W_(%WgilW%LhZRRt#?B=V z>R=v)=5$irpSbMTBh>xKa$GY)Uo#%e>j9iD|FEaYmxgLWKma#c_*UM%f z1@$515hJNH={zUVPrV_X571dMhnN^5hsmAJ@uZofNG>zDA`GR-X3i{~O;^3kFWM<1 zV+0CO6fRZNqoobNNk*k@caxPG8SzpdXZV*pxD9_LJ(W2>jOr%|_>S{oKU}#ek6HK> z#}RyrgUqK(o4nAzHlO$w^>9X(kMN009(4FuNq7-c+&#fhSCktn_5756{^`;NFa5`i zhh6nY{k$&!EZxUKn#@GqF32w#NxiExRSpGdJ=^HN3d z*8Idu$;nTgz-|i$={ANI2->Y-M|uK-J3lG4BZ;h>(vXIFgN~3jo~L@QV50A{2$za2 z(LeVm$)ytZNtjDT?Wa7K%G*zoE|quxQe7%#TEQ;SiZR+(`7V{Ze^Cnk#q&5*7@fyT2UA*?BBt*It6tAP9*ear% zqUfOLmMDHkahvI9;&w=n(y^TBY5qmexD`$&Ox*~HTwmU3+tc`Zc^izStD9i#8QlUC z4{!tIjseR?ujq>MGGR~d156P>f)4Y64uuM_HXzTZ3S`$q2S-05KYlwa=VvYcc|NyUKC+w z1dod{+m$Y&C__qgjYWU*@tcq%c^#kRM~Rd-bew5P`RavBw@?=Sh`WrG$-=3qddce# z;bb%xd|MJL;hUxtUqB4ME$~UIgJm-@3*QWS5plU*YLsm0J`~;QBL6ce>%~{8Nh8;Z9XNcXH9-Jt~;aFJ}pAH@l8t_6se>5)?KU}ho^Ik|pNP18G zC%Oek2rk`G#IfjnOf873r8*Ng6meW+rl>`y)X4o1_hFOC4QUw{ExUzE*3HzV8{|S% zMl`B)K%lwwI+vdC6hYLoS8QsfBu59~97p{E|D7MF4UpXZ5*b{wo|F9*pNEzX=~(m# zE*K1<<|R?MWJOOD+yy9m(&w-&Qi;HTe2If}C#MRW>`o+vQq89kn`MbkeF>U`{%dlo z)Q-hzlr&EvJSU||09Q7JD35#fa2RQ8^ynBf=*V_`9suJ&PIHGixI!P_hBAoM_*)&a7>06Pm^8v9w@7~DWe+2t@p=TP zBW8IB9)%rmaRn0i_2At>@E#0-Vdqz^wA5uT(Tq%m6uK-|6D8Y~r#CupNsZB|_ob)Z zZ;RXH(21qH0v+EdSP?P}d|km(V3KDm0}`_ch?+1}??$G?e!kdhP>J-Z#xVKXStZ zEQPACRqd)5f`e+U-9}((H}GI)TMt@@Q}2gPnJjFZVast~lN&UvVZCg_4KLc{H)@qu zS@RtU38-%2+%>9uvX%By7Ep&u`2gX2qEbGWAy^Rp_i9B4J|rqNuUd2K9^zxSoUl>% zg0k&}&AL-@>vgAz(Q(Rcry0~LcC+fEskLg=p%y~8!_6S%4`FJK5JV!XIor$Q61j9` zSp-dyW5{RZnq7qUr8tg=;6~J2M%^=s;m*C3f+SIweGs)Din?q{^ZEo%iJAb^m|4)< zaj^`|d*PhfbKFYP_rnH)p*KU!PcIDYTEliQs$RQ^v@i@Y@O9g1x~+;|ZqQT+tr(qWmGmUi~WnMOfTF-K7lKKSn&M@jh)T2d=H#fDpM1dXuLEMxfv zaIfpP$<*C=t8lu-H{&(8<5HX13gegV8|wk0q!OYZ z4)V!QGaORZYmKl9Co^pyPRD{u=(elyOjh>WwMxTp25z%%*BkIhT*ZO1=~U`CDfo4- z3}-YAJFpqyJG+wgZorLr)Mx~qCnDrxbh`K;gv_N^Wn+i@g<7pkn?1uj^PriLUl|5Oxfaf_Gs5G%I&`1NF9zU|Q)*awy!iB&sb@EJ_I&*@ zKYKFWny;qpog40i4BMxpOV1nSGNJKkcVD%Q3YT=!fDZBdBUR+WxME>k@c@h~GT*&= z2eXd+mp|?N>OcKYF8uk2hF|~IPyEWaU3}O3y+8czKYr(9SAXZ5uK(kU|6OVt#~wr{ zmDRlo_th(+-u?9X@S8EH{+iF8Q``8FpHG-Q z5C#iT-)#V;64n3mE>K8O<+U;8lMYSmccr}vt~X%lcu1|BI^V^vx!Cq5_bfQ5UiXDZX}@2I00KP zz0`zW3X>CMec=n@C%}T{PqxNTscbHyezJjx`l(Gq#P7%mMEyj##i-~O#M;t+M5Q{V zs+kHj6wQg9aK+RK(_oA9uR(Nsp_&Y+G3*pvK!c0yvgf>YHI64vpe4bB!0f*KQmxby zm`gxGMK=O)8Ha||&QW>{gbAybY!Id>wAdeP!Q0Ld$V&iv0qI5d7qKk}s8|vcZCL^p zoknC@6!d}b{ISdb`xC^Kh+#G@zQfp$_g573-LaQ*>A~@1z`Ev#r!>B69(kKbp1yBx z=2bTI>j&qFzXS$skFcHn-y<@?U_UT7J(om<%^PPCJnSp;*Jmb9Y|h!6pZ)FOLXNQr zPe=`ShaBUq)1Wb8Qj_Qh7m=?4UMi3|K)bWv8*j=G<5BMD+tU#dg&Hq58g(~H72h&R zsQ$GC;nK76Fb#{jRdw*D=wpfs!F9Tj&iAaVP{~Bfr(_xO_fvFDd8M=d`gqe)Cv-)4 zJ3D|H3@%`0c(>RM?gU+N_zn;Z4Dfvw?upXbV`SkBmF$krEL&&rF&?jir^2OY%L0|%@=TY8d{-i8~|3xk2Hhmoh_(@de-R(kdNO)i*ez9qh0 zV*>6^obLRY{MB6ZYy%6e#)HO86IdudOlorQ2t9jsEuL;}NKABieKT?_&$CN@GRffJ z=2+r*$^0-U&ro}|u$1U#iD=%%cD3m;(Jnu^%!C;OYM5pPO&`%GV+e%dlYE)v#1HyR zd@9^mZQRh^M-Sp2eN?moVdIMw!nv??ij?)Kzvm6AVhi$GL>sC%s(MRR8FI;p&(vE` zjJO}%$$ANlFLSMi>rm)UC4^WQ3qvQ&}(k9bk4m#6Um ziMhQ3G2tk`#8F10nU>Z zp>K`1U`+{^$G{m3&`dwz*Y;s_m+A|vQ4h)ig%P(KFqd?i^>U-ycIuvAZnV6xUejtV z_D1;t%JiwSo5nZe1O|3{>#pANo*~xa>EUQMb!Qfk$Jfm*9q&XOP|S*vhGuh@Je%a} zv*Z3K*bQUZC8+XKwXX?p*}Ew}rwCQShlzh0XmZzn`5tE55QoQMY}gBe2F7lidM0r5 z^%UyO^4%kMw2Zxqx6H5R+GlÿlFO?}ph4VjuPJX$ZP^G=K=>lLJDSUsWs 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

          *27r-jp>5>9_sIQBoOL*iQ(jzbTw~ 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 Nq0+CYq5q8Q{|D+?^~nGL diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build deleted file mode 100644 index bb9058c20e878d9105c7a77002d116b0170fc58d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29019 zcmeI4dsNlM7RM2Mr&wfSX(6O2rl46V2scSdOi2{ql7?~w?7+cuVEO9FL$Od(Gfk`I z^Ja<-zzC0GCSSB*70wTgx=Yu zv->BlN=q)zYqu*jGkf{DT61sBd%f)y$4~2)Km7Qn@g;+YKV-d|#c0$sG5+!13H|!_ zc896z-#8}U2vdA8aQ!zO?Fq}Q5kXC!ZT#B5w>fr{zaDd=^FQPLUi;?jfB>T__gb^Y z*wgHjqY~2`6Rc4w7KbCtmJ`*}X17FIGaVhr*lc-qm^w_Mmc*?T;<358nGPQJZiUo3 znd@3AbRNnk@o4ubqGdY9dL|s}={Pb#z)oVz$#zR_n%$C~l9!fe$+qO=4YXurIr8k2 zO%OzRda1;tqo-FQIPE>X4w8!S^df-G<7)uJ`#fz&0P68o0$q=dfT&TDIZ<2l)6M1< zngfPV!q`F@aZNx3t+}}hA__K_03d_{*ng*a48d$dBUnpx7aG|XHDz<;W!No_L6dVW zeR9UxOr}b><_gK$)|v~D$DtZIG#f33$+-8xb)6L0kJe);s=z@f7J%r+2FYOCvT`lf ztQ-rqiJ&bfS&&Oia7P3+0)pq7poKK>ToZ%c_ z+QxznT{_;|q+j#H1O1Hpz=Pm^RCyrvL>M0eD~Vx-5xsbHT$ahSCjwWCrR+jDj80T* zQEs8q11e!=q1746Kwc?SAgfUJ!B|30DRhG4iXlL=QR2CqH8I+}UD;&w(PD$q7QmVX zwxRvVkmwb_RJ0ozF$6;ijbJ9xU1%f<)2F|QhbW9wBjso_t5BjlB`7s-mjo~)gQTAV zzvLeRtC~tz3NFb%77UVm1-(JJlVG>o><$xuP|mt_l1F!mU3JTlPbhtiHh~?;YPUiw z0G=V9tiPc6H*9HwZXRIyVVs}IhNwemgRhMXwP7w8ypJ>5Fa^x#oM3ETg zB3fFI68NkZ0>4qQgdz(0s+J1=t49Pmpc<34pPXh-%Qj1B3Y_}_i3F;aa03VhHAbU5 zz+!5QZmH)=Km%>PxU&KdjaJ~H85RUW`5SMyraTUfUcwL?`83BTR?ird4vhck@qN9kXW%TASLi0`Gtgl07?-g z6xJcNRG^?95#)ffpS3^GHc_Abf?8rg^|v}SB7m|+hztEk*)QmT`zjgmo`O`}LBV;I zQ1D$f4(K|1M8wBoapYU`%ywh6eM?tJ?xXEOx&RSCo17$v6iBe{-UAXkDWE}3*@5n; z0uh~9prRWaB%}7(WJ*vAnXB9Ko>7#Cr~tYozHyap%pT2}5z@7eF{vzH&9-qZb22)I8^r zg^8n=3!wC)gsiB!;4UL2)2YrFrJwqx9>eOABR*7;yZZv{rdD^C(qkcDLZ!DcE>Kvh zr2-4}h#&`wnnxuqx7CA^RuCfs)MltDX@!u$eQHy$4hOs^X=+MZp;^Iq)i|K*XbI_Q z%gM2f%~QOjM$-jfAWav973-1xD6_B{u1+YkuoOVhC;q%bqJJYUAzte)9Ze(uLgPL{ly@m9`L$lA(Onn zTu34BU4yxUs#m^9Rj*ghWy>U0(EX%*iL?x<_MVzXP$Hn3RBi!sSFPtY!2xEi7Eo1f zfHiRih+4J4Oglh`NZJOov(s|Y&F zv(cL>7De!w5((B)eTI&rZJm8!W|Hj4d@hwdMU@*@B2&>QxDL9CM!`kER#F3eMK76o z9Kl#pB{)lV99oM~(Ea74iLux&*C&?pu7dmK)*(|-im_&aUFhwhA<-*gN8 zXap;X?m{C`;u+rqnK+3oXG$qU(X3}e;6#$B!6QKr;6%7ki1nM~m* z)6kAG3GFD8s2pV?m7`1q9gQJN$rMXoUiDogD28foAWh7U_CAQjp{w^X5F)y)rH2C0 z&}A)o`R}_LFn`ed!3*i&!}UU@_+TAOB5y7?Ngr>Vm-p+=UU-LJKty_TEu8A;BYrSP z}kQ82-1JeP$)Q~%Ck^}T@q1#XyJpDw{xCAW_^evNd z0YpsSG8t;XRWAlG(Tf2Se*}VhxqwYSO2~@5K{a87?qYbqWj3fp1X9EVRog%aS)h^( zr~m_61iVKjDTpL^PRj(Z>E1g%W?zPz-+4GUR_EcaOo!{E@Id=jA3vY7#no$FpX z9CcS=kL+1z>estmKRD!>YjFd@cGdeaurB*3TpgEx501DAhszKSRY(W~`6Gk`NK`Ta z1!ap6O~9fO3Sd;@fM`5EOJr~YAMfud2|9IZ`{7?hA_|Y+$Zm1RiUwt$ExKop-_ht6 z=feBfKEgP8(Flizb_)7z8Y1X%V-P1=vFXMDTaT{+pglhDB~bVHDj@|tHUj1YzK3)l z6EmUz;EEB`KdtOme^6P`g3)w%0PBX%u`e%P4)Bk=myXC$M74}EVA1>|NJgC`~%ULh7BvgjwDTtWC z)=>f~0>bn|n*j_6l24%msfSV&#uAnYg-%F2#Smc9p{3v5EUR_Fl8`k2+HD7K#KrAN znD$Fv>!8Z|H>xgO@4u~hYPZt|1~**wH%5aD$w`=7f^YeWK#&01BaQ9@_X!1X9_^w= z48e6mBREcU7rK4B6(3A9DOaLfKhvVX3@CE=w#L(`VbsjKoCuKSWH?w7H|4IcK-Pdr2iS-(f zdN3=p_TY$QW+D}l8;NdK-EE>3!#oU3Rm9_e@1z_v8LgAX<9+u@Ig^YH|FPDE;ggRq z%~%x>7kK)7gY1$izs@^a=i)6@U#>o!-RB2pwk|R^9c_lF56FCVSO@`a#waXUHq=6} zdZ1DeMHChhwNzM3)FXmR3Ki7-1(^x0ign-4sr%`G4M%@H`P=4=`5$gyJ)%kD_#HXT zmb~$G_eJ9yF)pi++r!a`74`>tbd(mXnQS7pHY z#lw3IPO5MWdG40{b(NRnuVk)Bd?@vcH{-6SE@Y_GaXBbzQ2)Q@09nb0wmFW5oq3b+ zgkAmkj?fnicK2TT`rT(<-?SlkQomI}8+S#o7`Nx(=gq$hXL$6nIU@9UPwEGnO}fx< zK9ThQxQ7K9KK0nl?&izFcW%h~=wSMS%tl8?fAZ{&{EbcaZ%AJDLFuV`=N;v zhUV~45s2X7tx6LZqNA3WKjw)-Mvd~z`Gsq)>qMbR^?o^K=@aAU{q(|Z4LcQQ6=t0b zh+VwBc**s1EsyV6(WK08E(7ODbj}XFp=a!PU(nRkhld2IJ(7n98=77WHZ^L+;E{!m zO)nQVH~lE#21n(oQK(95XpfZT1MC;?$$b0N8~bKtZYc|;w{C%S85kXi~)lhwm&t%>u zj0|~X z-WRq#QzjKHNxV2@(RxNl8=3<`b07BtO(jiWhzaE=4h%?XlmHg0gm6q@4b*4_WSU_? zYV`N1&fcg_IhxG2N%s$$aq`0D&7)4fH72I=`rWDBzbHRY(Z$|s)`%w``>lw-JN_Mw za?)|)V|l?mWzSI#_}m$o9rPEv8XH00_#6XdRCixZ5pvDvC_)zcY%I)A`rB2)SiTML zUlTrk-gBjc4mNuu@!j#|{>4Qx_O+v4d8zl9nco-IYL+rDzYSYxd})nmkhsg>|1~FmPMULFDMAv zyI_4{$(*&vdbHiuD7xRVbx&Ri>AEd|;iF@6YN#$_?V??V3I#V2^e&o(0(%4{0b9Ub zcne@gfGJ0b1plc%L)%dxcplN^JNWSSp~D%c=NC^cNjPC2Ub4T=jp>IDm#iI>^h#)* z2Fs&Qy|jb*t_aGFM|CN0897e|gVv*=@?gMwQUlCK-$?K{!h%Pt1pCR3L;q1i7>6KD zsB~n4B=3Lf*v-o8QQuT;+MRwPV%2wBo@VZoA-VT>0Dtl`ob2Hb zN&(~3HNHpiUp=02e@N-~4a#iWMnwdk-`XU!SLjzG&s`W(@BL1ZLCI@6e8TLeV{*UI zBE#B6sZNE0nU3hPP$1DM3CMGln=Fcu=9Eata;ncT$&to*17&7=?w;F)v@d-}GbYzHw(+nGjfJCiAFXBygeCZTO-5|!;tq_Ulf z6t)|W2+VB1_3B9fE}JH_E;!PB{TFR+yf(GP&$C~S+A;9N@K37R92m2OvK_=EZD$&_ z?M$YyooQ&>nS{2TNmRBok;--^g0|D;u=`+?^MMNc|uLt z$kZ364L&#Hr<=hi=9fm!UDj?~)ZZpDB0e?8VRgmj2J0HxTg1_a4nV|o`A>EL(D&hL zkQhFk3l(z4hwFuO^1(WoX;_V1~ke}1>^{c9D2V&ALV zr#$e`$WbiEyljYP*I$QE(HU{);tR_7|K8zKRszuvSdC+wCW+EAtp26!lHaahu*L^3 zex~8lYi&R1lltE1GZjZ-T70^5(jJy5oR0SuYn>1^p=DB7kan-WR^l^IPY`Bd>I-zbqrLal@nb!D|XaA1PY8vQbLx z2f2lp!a8@`J(Gb{Mdbj|+X~P&0!N2~z)-;n!U0gU2mnF_H;5#Fp=AOPy7x{H?qjLO JU$v_L@gI0vg}49! diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config deleted file mode 100644 index 2c726cc665af1406d3278c395bc3becdb72a3c30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18048 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 o>U8%8vfSpA+valG22$}UUx3~f0F+JIRF3v diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration deleted file mode 100644 index b8d223f9a7bdfe32d3e466361dd21de4ad8b08d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4915 zcmeHLOOG8#6`l|wU<6J`2oA8IF%n56ci(zf7m6aH*j9{8GWLWlzzgbeYHs7cx39bV zjy->aT{ehc1RK_@koXTQfK%PoGn0v}Sb$hD^7ziwIdvZ2`Oc}TdG()v{?p(7_?N%_ zzWn>GKivQ99|u>yUdq3Jb!~^o?ZLrU4i54ABQ@$Pogsm`j?N$Y1D+q6}`fA8N@ zUxN6_dK`DdPgkpxW?b)G<-5&l_EgS(RvC_E!}Q7S*kLS=x?w!&;rRZ&BJ|BE^u-f2 zQrIH4@U(F)6dSwSHQSTo{iD0{{+B;{&~;8`QPiaPAqGceb}1 z7@?mfJq-JH9IC_HPe<4W2u0j)C(E{N#^FkoH4TNmYC6HdYz>w~Fy>2k85viak8uH;8X>*6oY2E7tZD zrY$!fA_%+3Sm+PRrL@g<7%@CFjhY$K>hO59b1+l*$f*fJTIrO)g(r;g+}Xn$i*Z!3 zW6?q)=lNDqVT6muj8ABWv2WZy)=#)d%Ojn%58Byeg=UVN9G`6n^|Xg=ZLh=LK}Dqtx_^^=tEv zTR3F`qI6~X_V$^}N6ij!0GvH=d62m7rtnY4P_xT`>dT94y0qcj^8XgI@hk&zqCiMe2NfT`; za>g`w!eyTa%S8CiYKfEwSi$B9YQC<~*f5QfiF}0wPmPcvIJg7|#q9N>B@d)?UQmRbZe2B2bS z3sw_Db+-IkIwDI^FyO%r@JIiYJM!IE`T1@MJ21c z#GDwb1@lT67o)R+**Yq#BBMH3!xlbfr!nX6hp?DACpmNx3GGU^s7RHpBADh_5{?NcwvK@^~rJFQ?_Dt0$On@^FYz zK@1v4kHaqYQAvX1hJmmQJS71;gGw9lQzKxOS;A{%Nz@FuTY$QjUZ2P-DoU&m$&q|- zdaUA`Vl#KUnqtCcm0985e%}P#hTKu55tiT_iIRG1B6d#gfbc++;aV6VICiMEnoC>b zzhDUsh7&1qC8YV7Z62NC%N$>l$OS%)In5%Hmn!LFj4}fF+BzdVGQj9)u{AZraRJm@ ziLDBxc0sF};}|xEai8seoL)W9PaRKiFi~WpHrC=WoSNJUz^&+kIfE4g3Bvgr2@!n6 zzGcc;&i7v|Bs? diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi deleted file mode 100644 index 7749446cb8630c4eca71f8aee80950d648adfafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7744 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 AOaK4? diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o deleted file mode 100644 index c04856bcdbaf5fccc8e78988d70233578f660aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14032 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 P*YflbE%$uL_45A$M-tXR diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi deleted file mode 100644 index 4988c10f26abf6684c0eae2d6dda2d88da044bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7741 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 P*YflbE%$uL_45A$M-tXR diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi deleted file mode 100644 index 5683907af3415c94dfae8b0d6b81116b5d7fae7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8666 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o deleted file mode 100644 index e20254979924d6235256eb8614754ef2a48cb311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 zcmcIl&59F25Uy9!H z;9qJ@<{wAp=aD+srAe}jw~0|_g&s`?x>N^IsR4%M?{w9^>Z+iVWaCj3>yBCQJC}(8 zI66LTqdQQ+A8Kf>JsCg~cGgBV;mQWwxeR73?ramjDgU(%`LD0wR7nd~^GA%gy@($b zzPj&2EcBkoCG!yR7T$yJ`^tFRkHOSFx1u~AEP7_su1)rBg5QBnxp6k-&e;@O7go); zN!@*$Nc(L<{SWQH6esy$GSWfVpJDKJlE2($^1Uz~<>jQ%a50Q+Ixdnl#5arQo{e=G zo)@Q4s^5oko`p&FDc{ZsyUQY~U)2BZ&NBPjBQ82vpU`p7egFkcdUDR=#YQ11d`R|}EIH+=#ny8P`6bm^N&FHBCh4U&>gUCdn`eliB zP6p9IWx3Jn==4LUG*NsBD$dhXXE?L|c|G77{Rz_Bka>9?_CMu#nZpv+V@0Ik(igEG zp+YmMCjiSSkIZjuQyfhpiI;voXUyM!j`+Ie*WX1FVgAgYbMOI65wgGJd4&$qg+ubE zYdE^kJwYE~@@|AG@$Q=@pTxV8?!{lf7??AW-ZXurez`xw{JW#jGfw)%OD_8ohgJ(e Q>*Cw|7xS@V)n9)6Zxpv6kKrtHPcED&qk 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o deleted file mode 100644 index e20254979924d6235256eb8614754ef2a48cb311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi deleted file mode 100644 index 87b948d0de778339dd295748e1a9932e98903d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12646 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o deleted file mode 100644 index 771a983ea8e0b44dd44c985ff3805432015bfb39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25864 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi deleted file mode 100644 index e82a1043e3a3388cc1ab6c8da69c8fc8b28e0c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12677 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi deleted file mode 100644 index 441e458febe1c1439f133d957b75f5c2af1b3627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12674 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 X>sBH^6+QDDR*IarHKQDXGwRquAENF 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi deleted file mode 100644 index 068dcfc5d09a8f4a51ffb59525af429a0d9cc0e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12881 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 CZ-3+f diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o deleted file mode 100644 index 42d8d001e0fb3b94608c2a39b0c516381b3898e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25928 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�^XP0?aw7C?! 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 H_zm#?=W&>8 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi deleted file mode 100644 index 62bf694631cd0b1c5c3e66b0e1c25d5b0eb89972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13503 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 H_zm#?=W&>8 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs deleted file mode 100644 index 9f359ca59d..0000000000 --- a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs +++ /dev/null @@ -1,25 +0,0 @@ -{-# LANGUAGE NoRebindableSyntax #-} -{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} -{-# OPTIONS_GHC -w #-} -module PackageInfo_hasql ( - name, - version, - synopsis, - copyright, - homepage, - ) where - -import Data.Version (Version(..)) -import Prelude - -name :: String -name = "hasql" -version :: Version -version = Version [1,9,1,2] [] - -synopsis :: String -synopsis = "Fast PostgreSQL driver with a flexible mapping API" -copyright :: String -copyright = "(c) 2014, Nikita Volkov" -homepage :: String -homepage = "https://github.com/nikita-volkov/hasql" diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs deleted file mode 100644 index fed03dac73..0000000000 --- a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs +++ /dev/null @@ -1,77 +0,0 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE NoRebindableSyntax #-} -#if __GLASGOW_HASKELL__ >= 810 -{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-} -#endif -{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} -{-# OPTIONS_GHC -w #-} -module Paths_hasql ( - version, - getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, - getDataFileName, getSysconfDir - ) where - - -import qualified Control.Exception as Exception -import qualified Data.List as List -import Data.Version (Version(..)) -import System.Environment (getEnv) -import Prelude - - -#if defined(VERSION_base) - -#if MIN_VERSION_base(4,0,0) -catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a -#else -catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a -#endif - -#else -catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a -#endif -catchIO = Exception.catch - -version :: Version -version = Version [1,9,1,2] [] - -getDataFileName :: FilePath -> IO FilePath -getDataFileName name = do - dir <- getDataDir - return (dir `joinFileName` name) - -getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath - - - - -bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath -bindir = "/home/deepak/.cabal/bin" -libdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2-inplace-testing-kit" -dynlibdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a" -datadir = "/home/deepak/.cabal/share/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" -libexecdir = "/home/deepak/.cabal/libexec/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" -sysconfdir = "/home/deepak/.cabal/etc" - -getBinDir = catchIO (getEnv "hasql_bindir") (\_ -> return bindir) -getLibDir = catchIO (getEnv "hasql_libdir") (\_ -> return libdir) -getDynLibDir = catchIO (getEnv "hasql_dynlibdir") (\_ -> return dynlibdir) -getDataDir = catchIO (getEnv "hasql_datadir") (\_ -> return datadir) -getLibexecDir = catchIO (getEnv "hasql_libexecdir") (\_ -> return libexecdir) -getSysconfDir = catchIO (getEnv "hasql_sysconfdir") (\_ -> return sysconfdir) - - - -joinFileName :: String -> String -> FilePath -joinFileName "" fname = fname -joinFileName "." fname = fname -joinFileName dir "" = dir -joinFileName dir fname - | isPathSeparator (List.last dir) = dir ++ fname - | otherwise = dir ++ pathSeparator : fname - -pathSeparator :: Char -pathSeparator = '/' - -isPathSeparator :: Char -> Bool -isPathSeparator c = c == '/' diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h deleted file mode 100644 index b6034dc420..0000000000 --- a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h +++ /dev/null @@ -1,193 +0,0 @@ -/* DO NOT EDIT: This file is automatically generated by Cabal */ - -/* package hasql-1.9.1.2 */ -#ifndef VERSION_hasql -#define VERSION_hasql "1.9.1.2" -#endif /* VERSION_hasql */ -#ifndef MIN_VERSION_hasql -#define MIN_VERSION_hasql(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 9 || \ - (major1) == 1 && (major2) == 9 && (minor) <= 1) -#endif /* MIN_VERSION_hasql */ -/* package base-4.21.0.0 */ -#ifndef VERSION_base -#define VERSION_base "4.21.0.0" -#endif /* VERSION_base */ -#ifndef MIN_VERSION_base -#define MIN_VERSION_base(major1,major2,minor) (\ - (major1) < 4 || \ - (major1) == 4 && (major2) < 21 || \ - (major1) == 4 && (major2) == 21 && (minor) <= 0) -#endif /* MIN_VERSION_base */ -/* package bytestring-0.12.2.0 */ -#ifndef VERSION_bytestring -#define VERSION_bytestring "0.12.2.0" -#endif /* VERSION_bytestring */ -#ifndef MIN_VERSION_bytestring -#define MIN_VERSION_bytestring(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 12 || \ - (major1) == 0 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_VERSION_bytestring */ -/* package hasql-1.9.1.2 */ -#ifndef VERSION_hasql -#define VERSION_hasql "1.9.1.2" -#endif /* VERSION_hasql */ -#ifndef MIN_VERSION_hasql -#define MIN_VERSION_hasql(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 9 || \ - (major1) == 1 && (major2) == 9 && (minor) <= 1) -#endif /* MIN_VERSION_hasql */ -/* package transformers-0.6.1.2 */ -#ifndef VERSION_transformers -#define VERSION_transformers "0.6.1.2" -#endif /* VERSION_transformers */ -#ifndef MIN_VERSION_transformers -#define MIN_VERSION_transformers(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 6 || \ - (major1) == 0 && (major2) == 6 && (minor) <= 1) -#endif /* MIN_VERSION_transformers */ -/* package uuid-1.3.16 */ -#ifndef VERSION_uuid -#define VERSION_uuid "1.3.16" -#endif /* VERSION_uuid */ -#ifndef MIN_VERSION_uuid -#define MIN_VERSION_uuid(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 3 || \ - (major1) == 1 && (major2) == 3 && (minor) <= 16) -#endif /* MIN_VERSION_uuid */ - -/* tool alex-3.5.2.0 */ -#ifndef TOOL_VERSION_alex -#define TOOL_VERSION_alex "3.5.2.0" -#endif /* TOOL_VERSION_alex */ -#ifndef MIN_TOOL_VERSION_alex -#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\ - (major1) < 3 || \ - (major1) == 3 && (major2) < 5 || \ - (major1) == 3 && (major2) == 5 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_alex */ -/* tool doctest-0.23.0 */ -#ifndef TOOL_VERSION_doctest -#define TOOL_VERSION_doctest "0.23.0" -#endif /* TOOL_VERSION_doctest */ -#ifndef MIN_TOOL_VERSION_doctest -#define MIN_TOOL_VERSION_doctest(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 23 || \ - (major1) == 0 && (major2) == 23 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_doctest */ -/* tool gcc-12 */ -#ifndef TOOL_VERSION_gcc -#define TOOL_VERSION_gcc "12" -#endif /* TOOL_VERSION_gcc */ -#ifndef MIN_TOOL_VERSION_gcc -#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ - (major1) < 12 || \ - (major1) == 12 && (major2) < 0 || \ - (major1) == 12 && (major2) == 0 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_gcc */ -/* tool ghc-9.12.2 */ -#ifndef TOOL_VERSION_ghc -#define TOOL_VERSION_ghc "9.12.2" -#endif /* TOOL_VERSION_ghc */ -#ifndef MIN_TOOL_VERSION_ghc -#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_ghc */ -/* tool ghc-pkg-9.12.2 */ -#ifndef TOOL_VERSION_ghc_pkg -#define TOOL_VERSION_ghc_pkg "9.12.2" -#endif /* TOOL_VERSION_ghc_pkg */ -#ifndef MIN_TOOL_VERSION_ghc_pkg -#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_ghc_pkg */ -/* tool haddock-2.30.0 */ -#ifndef TOOL_VERSION_haddock -#define TOOL_VERSION_haddock "2.30.0" -#endif /* TOOL_VERSION_haddock */ -#ifndef MIN_TOOL_VERSION_haddock -#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 30 || \ - (major1) == 2 && (major2) == 30 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_haddock */ -/* tool happy-2.1.4 */ -#ifndef TOOL_VERSION_happy -#define TOOL_VERSION_happy "2.1.4" -#endif /* TOOL_VERSION_happy */ -#ifndef MIN_TOOL_VERSION_happy -#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 1 || \ - (major1) == 2 && (major2) == 1 && (minor) <= 4) -#endif /* MIN_TOOL_VERSION_happy */ -/* tool hpc-0.69 */ -#ifndef TOOL_VERSION_hpc -#define TOOL_VERSION_hpc "0.69" -#endif /* TOOL_VERSION_hpc */ -#ifndef MIN_TOOL_VERSION_hpc -#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 69 || \ - (major1) == 0 && (major2) == 69 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_hpc */ -/* tool hsc2hs-0.68.10 */ -#ifndef TOOL_VERSION_hsc2hs -#define TOOL_VERSION_hsc2hs "0.68.10" -#endif /* TOOL_VERSION_hsc2hs */ -#ifndef MIN_TOOL_VERSION_hsc2hs -#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ - (major1) < 0 || \ - (major1) == 0 && (major2) < 68 || \ - (major1) == 0 && (major2) == 68 && (minor) <= 10) -#endif /* MIN_TOOL_VERSION_hsc2hs */ -/* tool pkg-config-1.8.1 */ -#ifndef TOOL_VERSION_pkg_config -#define TOOL_VERSION_pkg_config "1.8.1" -#endif /* TOOL_VERSION_pkg_config */ -#ifndef MIN_TOOL_VERSION_pkg_config -#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ - (major1) < 1 || \ - (major1) == 1 && (major2) < 8 || \ - (major1) == 1 && (major2) == 8 && (minor) <= 1) -#endif /* MIN_TOOL_VERSION_pkg_config */ -/* tool runghc-9.12.2 */ -#ifndef TOOL_VERSION_runghc -#define TOOL_VERSION_runghc "9.12.2" -#endif /* TOOL_VERSION_runghc */ -#ifndef MIN_TOOL_VERSION_runghc -#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\ - (major1) < 9 || \ - (major1) == 9 && (major2) < 12 || \ - (major1) == 9 && (major2) == 12 && (minor) <= 2) -#endif /* MIN_TOOL_VERSION_runghc */ -/* tool strip-2.40 */ -#ifndef TOOL_VERSION_strip -#define TOOL_VERSION_strip "2.40" -#endif /* TOOL_VERSION_strip */ -#ifndef MIN_TOOL_VERSION_strip -#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\ - (major1) < 2 || \ - (major1) == 2 && (major2) < 40 || \ - (major1) == 2 && (major2) == 40 && (minor) <= 0) -#endif /* MIN_TOOL_VERSION_strip */ - -#ifndef CURRENT_PACKAGE_KEY -#define CURRENT_PACKAGE_KEY "hasql-1.9.1.2-inplace-testing-kit" -#endif /* CURRENT_packageKey */ -#ifndef CURRENT_COMPONENT_ID -#define CURRENT_COMPONENT_ID "hasql-1.9.1.2-inplace-testing-kit" -#endif /* CURRENT_COMPONENT_ID */ -#ifndef CURRENT_PACKAGE_VERSION -#define CURRENT_PACKAGE_VERSION "1.9.1.2" -#endif /* CURRENT_PACKAGE_VERSION */ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so deleted file mode 100755 index dfa9af0f7e56f317d7b45b6832b1017f802bc672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189672 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a deleted file mode 100644 index 1e6a432df40d918d03abdd34dc2559705e3745c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149402 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config deleted file mode 100644 index b588ecb4e7cc216736a90dbcd6cae66440b182c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13062 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o deleted file mode 100644 index 4f801c3f075665cb4aac681835286a9e65e41bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83016 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 ZVL#HvHeYVCvFCl0Ax|l8Kt3y0{~x=AkK+IU diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi deleted file mode 100644 index 9a5cd2647371bcef9b42a0ba7e5ccdfaa46f0be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28481 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 a78SR&C}Zfr7D=t)lcls&C$Hz6L;eSccxt-< diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o deleted file mode 100644 index 4f801c3f075665cb4aac681835286a9e65e41bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83016 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 ZVL#HvHeYVCvFCl0Ax|l8Kt3y0{~x=AkK+IU diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi deleted file mode 100644 index a155fed4f61c963ab31efaa77120bf6512bfc560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19936 zcmc&b2Y3|Ky65a>Q`pc^iV{I`v1XZ>?TB8f8ZQD8Ecd>5pUzGR(PTI5ZUpXqg@hJ5 z2q;0M1nGiw5DW&xn7k z5TooY$7#i(&g$H22ToPa%*CU3=B~*9aqFm_2)$l}kl}fRo?DO5(~A(o2u;b`c=D?~ zOKRWEzOl6W+ilAZTW8G3Kd~?G+rs7eqr2zN-JN!D(Gq;+=BYEsCtN%5_Q_FYr%%^j zI{9ClCV&2E^}Ji#7UG{~@1J)3^7^sI@R+UZFCAMq@5oeqdCP%2BR-mNvmBRhD_OTZ zXY#n^cy!U8+;Phm&FqHY5C0H_Gze)Cib6<-a5U*`g<@h+Tmz(!NBV}SQDfAkDQean zwRi+Q+7h*DjoLhh+B}Zhv_%O|poDfPp*>1?5+!s%35h7-Pbi@ydg^KP%(Lj3=Pn}j zd=h%zfI2a#6N@@=sFM+OGNDdp)X9RZHe|IUYiDGA0a?2s>x(GvB^38(6!$WU>x#N{ zN8Ng$Zaq=AUZ~qEsN1V3`8D*H-str{==Hux-w)~EK>GejpMvxQkp4}ie+%i~M*4S< z{;x>?H>CeJr2luM|2xwE2Ws*zdXGo%IglVCNk*vyQED1`{{!@XI(k0?z3)Viy2!~M z%|wITXpjdD@}fam=)=M4L5B=Q|M(~R$A6-P|3V4>jS~I`B@DwTAsc=<@EZ=l5%3!c zKREp;xQvEhN0f`lU}(mYW*lk8lV$>GCX!|nX(p3q3TZwf%~aA%Bh7Tud`y~8NHc>p zd8C<%(WiJ8X+FbfHl9P8xfne&4}SUZn-9Ow;kN*O&!J})f^cb$K7vrEMR>%Lsn=Iz zuPJ%&@X}37&R4G53>YC`^SIJs=g%#e`^z(*Y_8r_wtCIf1k$}2Z`^rvcj1>44g(Gg zPk&xjTy*e9I$;UEx@=TI!PTjYHsg;*UmrF4^QmQ>$&{sd<>iwfUtV1>{I4~~XMMeR z)6N<|1qPPkg=Z^H<}SK=c|5)_ck!riau(dBn|y)yY%V^$bKkz>kBnV9?!xqIJNA0W zgypz)>7+}$&t4ew){Wbh#hVuIA7LQRHR|Ai1BW-2?5tWb@~@=-OMG!& z(X5l@C)cK4UvR4YhwmrlQ;b&P?el9F{ruU*iz#zPtzWpJcE@a>J3@_C;omlIIy+)- z<>G00!R*7o%{g|v)JO(aDHODk&5-@a7*9KsqjudwKwGgY6?e6f7V zPt`Zq>|Hn!<6Fhq2XnIv4jsp()wAv;mu>aYo?9OmT}&M(_6Dk zcO9``J8`<`=AG|O|LCO2*QemK zxAq_Z^!SaFX1oD^HuGXx@r@lDFXAQ3Ze6K3S3WucZ^XA|Tqrs{=j8fHc^uJ^}}O#eDd7V-?rcWW#TDZR5a^c&bb-O{}Tv_qQAnMe?4Bh zdQ{2GUK?&tT6KNdoSLr*?Kk1g_Hm@qAl(nRTSv?e;H zbZg0y{W~hYdhf!)J;!oR&H8a5z#tSuwkAgIse^@=H{?#advyWcc|Py-*5NSVuGp$_>N(wfb|XH_4;UBfCUZ4&}cPS&}uZ$f%WRW5Cu?8aXi*& z1RaLEhFUB{!$S?{v-X;)}=c;GDJ7E2}Fn+}(kZ9@sqzxJu3&bVwnJJP2{I7)1#Uu%O3691?UO zAyKga7z5r=i;)&MuK~frnrN+-+-bm1Y8qoL24y5mg2xoJMTB?sZY!LD-fV;A07`?l zVVzE=Zviqufr{{iRrAJ=nKONVuPHSP4(H#zb72cc%|Psm5#CO4R8d6=<0+Eyv~4If zMA1<(uzVD3riImkxPT7^-eHhOc!n!^rhOo~nEc=gaK?=R7Ze{w_kaZy-02<^-(oDp z)0-U_wjqbwi2;`0l@QWI>*96ss2DfJM0{Zg7FOjK?ZhBzp>pom091l^0V1P@4Z9Sp zDaB0suEtwPM;IBl;Dh@M$9++jyRhM zEk@0O@<0DRW8+aQkvbfSxlumm1~J>mw@?Q4B^)h}O3xc7~cK zA{P%U4HY5MKvaZsU#D-SvY+ZnS%CbF!^lsRfgn@>sG|BrBOrf8f1o5pFz9t9p#Ybx z{&wH>S$k?P;M}X{vU9ggyR#0XCLju9>lcM4cmL`0^Y7e_MNPr3r$%HCQhX&jnR+^Up-z(A2|n}O)XzE{(qZ_gn&gP4 zIuZ+YLD~$SM={%wmDOXmDPEL;mBF5k=tiMpxyyZ4eQ#Z>9?IcxWe2w&rtIZ)cukyM z9V1-eV=Yji1lOnRI{jm+M^rFZP_D$_8~kRsSv`7RNaSj7U2LdJQ1!k!M)x6C_ZC+S%^cU znEgTV3n;~YU;MH+H25pOZ&&2!L;X?7efpy11>0`@vhz&Qc)az?PbzEH-P*#Sw!pL* z^)gLm9LN&63%DeIbOIs*+zPg8^>UAd%&=Kw3~5w7Rt)y=n=jat+B2|CibL8OiHSvZ zbsvbnHJphLY>CM3)CApc=op~XALN*7mQCEbVb$=NL$Vib8-5~x){GL2o&f96UU)=H zGtze9#zEg+|KzMw`NJzFtv@>GWX>ncE^S&n4eCcv!mJ%ZSj&=NuN0Gv|(fwm!S zV}B+9TmWbBD2hS*z%WDFuG4ow<@g)$^od#$wpU@D{!i!|#Vr7Tlr(3nFU{E+ssW%; z)Qo`mK1@D*ykzUfQTx|yXm{%7@tV6o)Qp5WQhSi6*MwH8wd@#75FJU;W5HfNb#FW8 zvx#axs$xoX&NmV;dtf*9Pv0Yf@Xe@`+eRWlgiM0CyU>C_=-&UA<%SI*emzJn=#MR*KFQ44;P6gCw3SJUign6?ofR~IkIfyEVzh|t>Hjd!N3 zxNzl#rN87I+P!znJST#;O{lHVR)rp&9Y95I(05w<&FRYZKNa43F0bnIz1O~5UGyzR zonS^QApvQlVxknR<8ahdJ)Iwx?^&^G`RSFbUaOcnw|dOt3;BQy1He6h@1)yL{IKW7 zt&;4g;h>t>58GC}^TOr#&%ilZa!#!0=6${-|BK_(_qN(|ee=44bvIW78eILyyjVVE z_NkhArJL}SWvgeO{BB-$XT;v?oW_ER(chO${JgRjUpu<8vhYIHjb?}x{p+5yziaTw zQ(xy5&6u<>8<$j1Irhb*%e(Z*1i;C^cg_n}R+k<6u6kTYdd@0-{oojXg}vo$<(lf_)nm6Tz}v2WF@EW!@vDBr z$O2PZhOtQtT*}F*op56QiV;aw1@mhUtiJx$d&qhp$ZKMI)z(bh^WR-35NXUG_kF?k z?Nf`p0P;2k`7s3f@6LR?YWDeSBj2xGckTT5i-+y7Bip@Dw~xA0IHI_?bmmX^*4GPf zo;^2l-#f@233H%(>D{R(znXq0JLCL@pC>L}acz`{o&(T!!V{|WW(P^HPTyJog1*bN z?fGZsES@>K8gJP$;^dP26PMxLTbFyG^kUhF<#`o9W>^2cYUS)BOE=fdO+zojgpOgf zZ1yVe8I*45Aqg%~a(fJb;Q6(83dh&1SyYOrFPK_+^x(8ZM)bnH_Ihc}_ebZ?TDAWB zd_3;z^qR|uPF!h@UV<6Vgl+c7K(bj9Yp@$w1DBNM%uMG6Y59T;RUiL)IFH#h_S~;m zD^~8T!5T<-Kq(=lgJhfh>4bJdd-y#GzYg$Agx{Z_5TOO%_-E7wczWg1iQ}_w@7VbnuKXqE&WsrwHxvOOppf)I@OeAJ zd1Hd#DfsI`8l=;bcM3tdZ}@#QpzQbS^-<#>7CJ_tMl{qwcEh=Kx@vp~AI3-UQHY?( zpZ>_0VOL_Y0CDouAOPqnNuR=;H3ih^Yr-KRyzU-P>NGw=cqtvCDC%E9)uiCI)zA-chz5$p@o0#&6d zd>mdV9LL|o!qfc=L#_e{D6bRXmD{U$1{uO9)cElr1Qf|2uOJr~9f60}d=Dq^N&lOP za-h2gg)XJj{{_Mk_2tCgAOPR{ooFabodS}>>yC@DnsR)agf9^Uu;U*ifCc$;PmP#3 zZt`Y4aq6&&qQbR{;T|qpYu;Vk1tS3Id z@yNp2(pSw0XBjDI(id#c;qzlokJ>c*i@V7)zpWUxdf)mP?~u=jG#SBi*HL($8a^l- zDR%z<&hUYpDQ*BN6GWgY?%(hg{l6MMA?X3^UO>!=uqoy#)cO$-rnX2((&;~@R*zV@ zf6e}p#i$V_i-j1z;B9pJJl{Uy*6+*%SwBNq0UbyaUK;^KpbK-Z z2{f)5xx?sk7*M|upymqDl`x<;LV%hmKv%GV%aXxcs<OQFHPKO7_Cq$Oc!D(yoIa#WLAjxBZ-8PAbq9hUs)8SKg16ltJaR0Uz2xgV_>0s1 z&3E%}%1uLpo)7VO-M0t+PlgK4t^gOB^!1wyB~ zH6P34iBzg~qN#49GRa4@=KhI9z^E+=l4>f!K^#$^{dA5+Tn(Ut(G6fVMv#6(yOy>$ zNvpj@T1;DFlHi`U=r(+f6p!yv$h)*1rXimiYO^);t2b>9xqgJT!$~lu9YI<&lD4C0 zJDRq+8uE=L8lzmsDs#~|c#KEm)u##Sbt3JZq<~H)4|ob)V43c8!L9O-Kl)U#rosQyZ}CURLI zLS>>wSh3&CzcVYf_*3xux_hQ96t=T^?_$TOu_GN1Bs& z4^3hWtjPdPl11P|hf$VnCYyzo?1I@U+pVm_!kA1pvq^GDMw{Jc7dTn6ILy4nIZT3R zafn9IWE9P;Rch{E&<52FW0FG9^1S&cT4hjR(MEZU3~ z)?tHDiy2yr)xwx5xtyi<@or%;+xl!i!R zlGn|D2-PLJdzx>UoFA${jLl|}8KAppw}^}^8y!}Y?2uU#>u`uBi_G(kg|j(ChuzBa zCX2+$Mw`VZ8I2NvN{p=?#iCc1Q}DXnhPTta1Cz%a(|Fy1ZrF1;4)`1 z8(|g3%nAZ)+)}E`oyI#AsUAQF)8YJv0bP^Z2PX7#xifgLLB058p;aA- zQ@ba*S*31=5k6RnYkZ%2?YdK zMkep21xj0z6_^2*fMW!kV7J2$b24=WHa zd0b8q5DtWhNwRaCLtt4DRF=2fMUw=I!I=cR&1Prd;C9wzF|oWPvNpjai-JYuB&!5e zFm@D=Tv!a-_+M$?znZ4HnQBP*2ez$v|T`o7Dm5=IlIYwZVT5v&>2so``^1 za9HgYyTk~hY!bjcIZSXb^Jcrx+N;Zg-IrwrH@H)+Q}=Y&U}t#eYpxF@x1t6CNc9}e z=s5!2aFR#Dx(4u0r{q-hg-|Tiefa6$R+$z6@G-_f_*7?<7zzK}gz&jwGu*`NDXeWS zfF0t~z`uDwvaMiVO(x}#00Bbb2lRKQP@}2(G`e^&m_mybX;78~Zp1%Zk+$Hes(Euu zQY8|>*CxqnLjVJ#!IWfWc~BJ2#1Rv3=0T5&FeuL-i7WV2bUjeU~a0|o)nG9;#_d5Ga)k_5?Y zXC*KTJkNrIv6xH@*i@Ev$Y#52wK)WbWCGhP%0|W{S%Fp{Q}932iNp;XC5}~C(W5u4 zXXw$#7dVgMooeccc_vVkk9a;1rhbqD-v=jUZ8ZWI9`h6X^qb=~=IfnP&G9 zy?JNqAqv0zF;e$*-s7o6X_;Vzyu{;L4Xindb65lmNQG6jg69wfBg2}Z z4}wv!$PCYkJO@Gy0fSNI?cgsYhiGO%ka#P=at>KBlF9uHT}9E|kWv#KAaqETs{FxE zmOBj$zr_G17_>t+iXsn_O{@t*K�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 jmh|@UFRgsdVtU-T4z>Am=WZTbHJKV^2Z diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi deleted file mode 100644 index c0abaa2921a473cfc14dcf0a5a71fde4d89b8bc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19933 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 aD-W317*%Cs)NP~t(;zBZ;hc{04gD_+xB$KY diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o deleted file mode 100644 index ef9a17ef1b2ee0a49f1bf632080dfadd5ba0f92d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34112 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 jmh|@UFRgsdVtU-T4z>Am=WZTbHJKV^2Z diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi deleted file mode 100644 index ae49aec167ee24d50aafc0350917d330a0d822a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12582 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 L^re6=xpeebAi?&} diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o deleted file mode 100644 index 2e84055bafd4a954e1ccd0a13c251ad5fa2c1ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18664 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi deleted file mode 100644 index a8c64e83d6871f86f2a1048fafe049c481a38d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12579 zcmd5?37AyHwXW)!p6OYTRapiQ1yK{a-@Ui*YLe$e5FLX+7?c;^%S-O9TX*Q^O!wH` zBTSZ;83aUG#9(9%$SNWT85B{7?6N2bh{z@&OGI2E5Cud{PSx#oXeK6K-uGpotM9Gl z)TvXa{_~%j!C&sQ^9@mw(5k5$_iTUT^ascBf#ttlHt(I6H}peD^di)8H9{TcBGkSR zA&k(}Lyb@U?whAK4PC$ggD>A}_+<7?bJnhV`}E!!(|@qzxj!AaykghFiTK>*lc$eO z`18J@C&p|)b?TGPPWXsn{OssUa}H0&XJ6a* z&8Xi@xV!^z+py)Or6VVeTZ$iD_vYAf&p$i;4g^2=AVwa9^Vo9-l&p=+;0?K`0M9Z~yEsH`(8>w?Og7kh0;t!&pJ>z?f@BrR8j^J+8%Vwl6?_jBd>$Tt}I zDv)mo^4*7g_aom>56dMYe+~hoQ<4s{CJ6 z`5Pz%;)#XUK8%KsK*Q@$+0RkgFHqSpQQ5Ch+5e%kU!$^m zjLI6|GZH?q^he-p6nwg)(Rd7o;!#$NWyNExc$^jESTUXz6Id~k6;H5Y5-Xl$#cxRO&%kF6eCERE7SwYd_!GKRgutvj z9-aNs=kM%ac?9qIY|4~5?=2g%l{NZ`#%-(r=*)s=zPNSD>H}N1H?El6l~vEjt6snS z#@b~Q4vocA7M_~FchkE4AMgPS@ba@Ko<7_7hev*VjAt@RzO#d(h&~x6b|jvM1MV!mHQKnEBMX1C7%$K5=I8mm9zSV&X}> zZr#i?BhO4-`b(G>*nO{@1pT0N#JXmo7z zrsvj9yEwMs>DMOiTf2AMkxLl00GmC7paby$zK}xpVQ)q3ffSQs`!5vANq)quGYP!MFJpT$(a{rj%E{)ns@l7qT2PFM1VhI;OtxA{a5JKs_hDCH;;3^e+=pMlIKzhvT=&c2&MkAeGmQQE)h{m0 zT=B*3fh#`WcIegDPtWxtID%*jX_M#WfvintAOmE=r6p~@&4i#x?iou<+BG|#A!qXB zwaPqsb4QiYVUmWb&Nn6V!DtlUoNh^NX;25ze0l}gz2m5tNu!psx6)xDXPl5f)6xe5&A_MH3 z@dUI!7uYxPfHc@I=P{kLfDHTu=uVu14e6Ml(O!TyG{JV}t!tULW&q^HQ5VOYUO8|1 zV!Uwcj%Uv=zO);74J;pje5KhF&2jaN(VH@0Fo!Ev= zm|UB^4J_s+wjmvJH>I{A!?7~9;hz_Cmp6^M?uNlWqyl_1d!E{>oIsLuv%F{{1G3Bz z*~|q0D7+kdchaZ(XCC~^KK$|d^Q#&ru3Y#IMqqh#C%F#gbC9^qqPV+}z&aT5xUQ(6 z7`?Xkg$0);A9}tgdzm$1{Dt}3CVs4yv@hvURDcmK>9}$4qRIOo-E?#m{^Hfg>oI#G7meRGcTPK0#wX|qM7=QI)wu{4+-+n*WX()^%mbtuuzZh*S}f0dBOuvzYPoR!WN23 z9vcO`e%kKo2fsSHc;8oe*R;_yo;m&bjGNe0gfkyr0e4dvWr~_uqSR7e?)&cQ?{0VV{N!`*=&PFX>it z!=a1s&$v)O@APDR?6VE4FEo6!tPQ%MIjwHoGi~y|#Uq!!&~?d6dmGoR9JTs5MmNHU zTbd} zG5W&hb9m{zosFLyn{^5@*6uLm)+Q5PJB&@}7XwB>3`qV^xTeY^blRB($6xu&b0=ow zm6sPiId;>i$A97B=@O)3@EK3cqwESX!nVC-+Axg%zabwt`%<` z-@AG5H-}(b;pbOPQWXNR22iR1q74j%|9P2d3BW4|1MUe$W?Hh&#Y+~a(7McUoAxeK_rzw@%`@TQ99&bac&{~(d!s;qRdd$glr|Un+%L>29U3Yk**LHzBb^J z9x1eKMpE-&=*ml_RT<$hgSupGPSVJkTQqBC!pZmegQ49GM3 zs-ctkxS(Pn9L$IQW}*wu>3S5DDUV8Xm~^(_%MPJ%MZlO$iu9+L3=5$U$Npu~)n;C;XzhC9|8rcI1%pP&flTNO1}UnJc=mk;efo>#ilk1#yx^yQJA=YaA!w?jy^^ zHgov&+=PJ+vWqhSO1NQsyuSXVk5{oAgjc~gz{-|O7d{+ybm8pK3v13E8NKe2Miv9v z4}KboQtwUhM7YQzF9>8mExgMc>i@{(z)x%Ms(SvyIXzSqd3*8(=r+l1VXy7Hi`+3D zxRQf#!0K9fk24CwpPO_5-{c*}rX{ps(ZLSvHeVH$NGhaq#E_P35 z%h80LI)4`?MBBhP7;Wd}8@zmzm28_q9bTdx7_kdkypy-T#Y;w67Gbm-BOefhJ?_`r zylF2h^MHKr!|&p}{m?Wh?*O~#ehlZqZzOz0m_=ob4)gLoULL`y?9{iYT+`cK~Y*&YtuuhCK8KRMkymVRw!&n>-<7Mlmk%sRU+9| z(4o4lt0FasqB({pTB;z+x*}7H26aO>h~!Y!QcNmYGO<<54%%|iRz!`qO$pS2HU<3_ zv8A?s&A1u3gU=MWi-u`5L^@b?aT<$9L*Ys`xfGBBf}g66-QMjCtrfgAa7S&Z3iw`W zm94mkiO=bX^PTwh8MZreo_tRkUiZd{9gwP6yEL<2)Z@nPj` z*0dVCP?*MtN1_kLI+b3f3PO(!2bI^niYm zXtfy+B)(F<(BX<6A2gK{HXc%NhW7OSMK1)IruTJl3&-A$d5n@*HuBoGus%pO5 z1CcPb*~mR8&MZJ8)iq|EXFj@LgUtXWkOZO=L(@%asG>$HXgqcy|KaBLTPm@+SAp3i(y@N1GI8M>${#Bm(Op%k3MGGt=f zhM|E=TDm5IBTxKXeH$+*LMU&d1PGrX>sx48C zf>na50Y_6&-4*s`G6O%Pb@!Szu0C$fkh&TggAH?`tBnO{<(C7J$gxL~6s>L2e|y)| zRE3Bc4?Rp<@&)ydM$Njw9RP-<{JjtCOBEf_j=v<2I;)JtXm;hGXvD51@m5(qD{8A< zhp(X3p~`5awq`f7LXHa=F~1T};k>}{v@Pm@jbUw?1?!d!Q_^(!XDN6d zCD%5o8e)dSH0+)iX0hz>k+OdmcUZbZa$^E)pRQ$F){hDaPL6KyMLA+vuPZLQ5yitQTcrbXi>^L?xRmoCh*mhHLWK}mrL$(xE zvu)zzTJ;N!Xb1gkV)P*%HNkiNx~^(1lb+ib8bQ(R$gT>-7;p%FLKQ=#01KumLV!_a zSpZBGMaxkPN7F50Q5mq=c7lRTHLw-<6#T7<&BAbyN}{_JefxvFK;Hq8@SW8)@$^=> zUgowY?SEYs2Vg!hFbd3}Q&x3SV>nuo;n!z1xl2vDXawT(jaP3kw`n*Yir00xvI~Tv zNXYJSWkc%NrS>vgH?9D4!vHAW@yhY{gJ%J**jp%610WP<5myU{ieIu+qJmdwwg!=dkf0zcPzPib5LqxK+myhGfiMIe z(|~wEEn5-5kxUKxN|xh-Wci>#Z`+Qx;MRl}pbnLEZ;JfXMneGnY5*V@PKOh;Z4(B| zq6`#JlYxs6g5edfcFrH1gc`$rmmJG3DA9m%iBd_{sf_g zhz7@>#gwiI`Z6$FLsG49%R3#Rmx^9y8$ur~fE5@Yx1TKuFUIRQ@xdbO&$)0$F8xqqE z71d@{6>qsNo8u)-)TFwCnZT*7+5vwZ1qnnPmZty#)HPMsWuTD6(G>u+AkbLBpt>ST zuxGj~fD;)&It9~#TFFoq+YAy>GpQ^}z$4tq!ghzm19t*zrqKkzx>fg@br#L483J3- zq^1_4@(vU?D=UHI3js)d{BjWZJUFWZplcFG)*yih3IZWO-VIUJfz_L~3VDX9*_N%! zf*{%gfxs#XGN7VS;(`Gexf^jl8)MN1#Eal5hNg-RoC-;oh#&zgmMziNAze^K+Xxak z6p*tBnl2DU3>v_~G>2h6upCKJMa53=Q08jcLF`QgCIE&4)ETTRX#^x|GVm=RUY03{ zKnd8qO!c4%uuT=)(p6KCfS^e_Z~`4xDL95ms6$NGx=E(OEm!O=j7`$reazz5Nuu2s zXhUDKF6QQgoYf|q0<1oRNT=$-KjXtX4C8^5AeYYR5VzTix?Ngh>hXCZx8yL#`H9 z*C|(n8&^8#YDz}aoKx{5Se9$p;Gq?PK7%T9iezn!y>-3XK=;h&)O0X48F9!pvVvAY zmXT8^M<_mLx11vxfCb!HbB-Sx4S|!g1zn$Oe4?4H>4s+7-3eTFoIH5Yo!v#mUBph- z4yMd4>0wkGjxeGG*hMlKETl(}nFRq=s0HCzr;eaVs!f4JDx#s;BC$mQf;A0N%QO_o zoTx0QqM^${fFV%;wrQxYA}sJ{QrmQGCXd~XYHLGqOTrQ+#vuXc2!V?x5g^+zgJw{I zbRTk2$OvUYf%_)IF$kcgpc+IKAU|{9szHOSEGX&%L^v4Y!o+>|mG^ZcZtAGH=Q&41 z^1{glU^j7er6iKb1aIQkPVPDq4XN1XnmJKh0f{cV@NuCqRmtK_me@pY%EflcB3{YO z?gRbb>2 z`bD_d(+txzEI@Qf^-Y;V;DkI~vJ6ubs6u5({57CN1hztzRLi8A1hujb{y}LmyNsgT z2*tnfckfm{pnv&*JF)2rOW5*+gLp*#aJb|1j1WDR=yAk68aMOdBjRdLO!QFE%bG=x zDSBcz^JmH9gz?Wkc8qnCa2<9$)ncm<B zGrvD|;@-ib%3<+NxjH+1vcdtkae4b73Fo)4HSETR-HIr{hc&+pmyV8P5?Ke%CPFd> zXOTiwha(0aZaAs})CR6zDR5X#b#%cpbwN?#aKeEQZCdJHx$+C6=rsdw%X}>!a9a{{ ziw4~0BJ+?UShTy&mf0(on!JleJ>tau8;2t1bNq_KJERUg6NRV+^LUq18i;`F6} IFS&H|R|3oRfdBvi diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o deleted file mode 100644 index 2e84055bafd4a954e1ccd0a13c251ad5fa2c1ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18664 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi deleted file mode 100644 index cb1622a3a8fb1a52ec12c199d286451572e2d8cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7872 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 D17_M8 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o deleted file mode 100644 index a7de3476610555563f86ca63283dfb20b627b4a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmbtV&2H2%5T0%LDHH^~A@#B#ggCGk2^{F5QV=Tbf%Zb-8nTIDBl5E(uGGx|_QI=F zeFL~4^<8)oJju+)@@6I4TH4Ia=lN#F9^3n4_ubpI!2oy+;1_fjqX6gEI^AznA2#52 z2VPKf$bUbqzNKO}kBV596~F}Tkt?=^E4)#XPt!1x0DJpyh8psO_aAwj-W32iu-40V zz*wB&;lOpnYSngcR^hAS-&l%+fCD#|aI9prC+};*?^}%T4ZfWBkH&3Zr2Zv;d+w25 z*rwi}Avzi3lg4e|X8Lj5_Nva@I@zuh{q^dM8WuEdtrPBRP{*n~DB|N(dck<6WOX_6 z%d3!I1W{U4$EAcXlc>(7Ws(K@T-C|ZY$~hZs5}fa`96q>JV^4-#pNn=7fG6ve9_%m zuzO2vcd)C_=o4PyJBGbZI^yOn4(NoUo?ki2_l|G!${DLJ;Gs(sqFcx`W6ICB@$1hf$@%=qre*$TFEL%5@d7 zMK#(t)L#*Fu^yU#LVSMDnC6qhl5y?}+YhyZciv}!j&_g0?o-0 n&outHe%?RC?7c(kD+>CP6CtRFW$HJxpFg3$l#dOo``G+{Kv~p@ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi deleted file mode 100644 index ef7335859969cda89538a67160c4ea8a3cd3ddef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7869 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi deleted file mode 100644 index b164cad5966128b3e59d1a43b63d2d6edb92faec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119637 zcmeEv2|!iHx&O?$TtKfzO`9g^lD4L8UeZX}m!w9Q@qe-E{$W=HUzuF#81wopQkc@mnLMrhIqLgRu6 zp@bCfT^zG9e&OXq^g?sTvBHA*=3!YyX~8>YEnRnr-b_eXTpu#?u=BNB^%rZS+bVv2 zE`0y_^OsxC{e9EiWlO5kx_4#LE6HUGYOijXRYN0pZfLDppLS|Ky}GU9PFQU8t%G#m zuHyA8L*~w2NoVdTjhLOYeDU)H|L7GxkqFTd;y{R=5J#eSavnC^z@9xqMvNrR50Fu# z$*3{p!7q_7KSaLrFnQ!r^3|`AuYZF)_D%BGx5#7PCSxBbW4}YjewU2>9vS-t8T%h( z?2}~dQ{?+klW{I&+z(m^adIV2Zp7V#xO)`5}4cN936w zlV^THp7|+pevUXlPn=&M&M%UeUM4U7jJ)&;dFfU1(re_U*U1}ilDB?N-u?x7`yDds zT{7xDGU}IP)UU{>Uz1VqlTrUkMtwj={f3PCEgAJYGU~s`sQ)ITeosaj$(Q}fFqsSs zAf`a_;YVcrAISKR$%Khy!Xz?bGMO-ieD#m4W?!93f~Jw6Pe{<8NYJ0jr=KYm{mWm; z-~LYi_CI9oKgif%O2$sdUkLs}@fU`_8Tbpw-%R|W{t@_z#NSh77M)EIM6n>61u-m` z!-Bain8$)x7R+bC0v5!vU?B_QS+Ix&2`pI5f+Z|Sq$G(Zvmk|%RGP+ubV|l8#osdg zW#BIpf6MXr12QfPROXoUE%e0-x^vsU`MGP$*E(;^iEqjZK636h9-@b0X0@iDjJdVo z6kWWiF@Nj+vb}#qyn8mioKd+frnsY{l7?2VSk<^YBmQMPaDM*a%#`N#a_SMlRBWQf)`DNvMc2qX7FN|7E*B{!JSRIlTQ$*8mtv=a0KWr)5A5YfM!z-IN zwXM!Q``zxAtm7w_W)!^3;@8qW+cxE_-h6ZEGZ!xxZ_I4kUKU8GM7kH$&DeM4Qgs;J zup}opzBa8ro6u6lo@`|R#nK9$n9Nr#PoSL)g z_quiT+_J`{yK;+sbC0w{%?-b~7i5!1%j(vL9p4-p_G(1rzMW0Wug=&=Nj~k|QV<#u zQdb&6gZGu>l!Qh_qifgGE8%t57p+N{<+i^4@}{VW#@#Owsw4Zib(E#mhevxf&bgKu zetvD<+jRT-;;z*x7m7~PoJB<^qh=jRepIL1K(h`c-B?$WQk_m`Z%e+kB`5H46IoT4oJU)N^z8CPVf`xNtZM!=!XB9oPf6=P+q^5i)LLJDB^*fdvI30fB zN7pW0ZLYhM()1>s8gVxTUwSC5}rUj!MXaQYZ-*D;hg`4%OY1PW;#KW@> zEf}jSpw*|26g3@8yXA4`eAD9moSNYOB87BUcGK?E*5!GJ>Fv6z)bhfx!`;4^MsCXI?TACc0Q@-~n^zhE6)7>|ZmmH!U z3l<(7UwTkw%<%RUHD6~jn0eS zuxQu9bJI7`)aYfYXR8lwb|Twpe(9MF$Ik58{g^3j7S3KYlb$%1v~g+OompT7d+FxJ z^>Gm!liP36ZL2SatWUgg>Mc@4!_rfBZ))4S__@f^Z;EDUr@I*uCnzjB}oUmRvo)NE02;=8guMcR%PkT%=2_(@X{MsZnTFzN)FQb z`wlgQR$RTCL{~3A5}(zvxcCw!hiK`BlSkqT7DpYS6&nj97S-(R_9KUB`t7sH$9Hay z{zK%3W%*q(_33YtBecFcBQ1a3ov0afam1nAeXG}8e~lcanPJhhk1p#t^oxuWHxlX- zveUrr%IM{oWw{+KchhFj`hy2f?usbg1a?UsNp^cl`r6g=cI=^>cPvR2LYR_7R*eq zJGSS&Ln~S@ttmVmdyw&!;pKGMiR$#Dsawi?Bd>0)I(xWa1;#ER$7u!Knjh62TY4qO z5Ib|t+~uXw>p)+GJa&TSmR+jJ-@my1;p&yw3+p!QJjJ<}p^{$Bi|mTetKC#gThb2C zKbR2T4bmaRP(?H2g6D5NbLHg3xFvP_8;&np?uqzndXhHhE>Aulnw@x+ZYYmk+;V2d zR!2O+B(6~kp1_>6{|{)%`Lo!>7UJD zOU~6@?kdUMahe|AxwQKBnTFj-{Ea79+}wEm_WBElO)FZLrRJ=<7{8jwN6@xCcOver zZ;5_m*@nH9g;kNO!C#P7B)xTR?WWBOm$iPf`^usM07D3H2mufwKq3TC zgaC_>Z<243ZY5a{P?b|>FL!McCvzD`V&8Tl0t7JoV$4;rs3Q<+Hvi|$~_xyH9HeFPo>C2r+0AH zIY}NmdK&2^OcRvos7yx~JRRv7Dod0iaHKWrrB0%qoeYw{Bat*C&DY+nAH_?+>iL6$YW)PK8mb2_!|7u zq7Th#$%`)e>VYfihpP6Rjr1aZcxyKicvL+)`}aWUmOC6xn1I@7^4DEGp&?QC&HeOXAA1J;+aZkss)z$fHIWemdkLKW8p7 zyJAIte(*(RuZSXxY?d`Ho_lBJhV4^MS8ZHfyDGeW5_thdeq0`{;{*Ri>w)h;Wxc`2 z@RH%>hNjXL1>FssKFU8?bZ1jUVFG&eXL#>5L1<$5V+c4CCzcJE2F3rx5ko`_6^sC@ zG1A1TT5m`R4!-0}-gO5g5Mn3qI(P&#rbyzy`3)KHXtMPf6wopgXOs{aJ)Jm^XM+{f~&+r=S7e+9Y zRThKwG9@jPv{G`FUPEMfaB!=$be*aj(XyoDlJ4v;>c1?0 ze!+gkTp~Y2MAx9{YcW)ucygXVZ{W!>V=UVlwS0bL+TAsD{q@BgR$g1QQzE~>*Bh0u zb9!|Wp+dD{dK;J?2Ts8TpgqO%iP1bG@(Ds2iPkekUzBKght+@3w0CK4epATtuHABG zXXw?2ih|G%O4!0TNp1VD^waha>kaR*uZ_?f-sFw1bUKguC5y44g&wyS5Nx}$gT^0k)Vo`}^eoErx z%-YxRJFDguj8-sCr2_=d6I?axNO@xJvJ*?=Xjn{hO~Uk|`N0&;PRIo7f`1!dWRsrK zm>9f#Tv`{~YNoX&35>mOo01j@vylQ8v-<^8NcWhYiDbpmvd=rH_YDF9T<|FITDj5Gcu2R1F@9uKT8 zaffI8f%+v?aCgapy@~FJmX)O~-=EwHA?150@?Mp2AMb~79|ngQDo6P}DUe>*AApQkvuQW3vnl({I=T(u~kln0E20mBdFC7xFYX*dg0ZM z<^;NM)2W2Lv3t@AC<#Q?UzNYBWL+GBti@0#WKP57r88PqMTgSXo3rL#i9DV295EsJ zH{|ar$!AWtl*I6%;iH*}$MP&3)kvZ8}n<@E-f8YtCb8vDHg&sy7pLlNS zRO4rx%43>W->R$Vq$x|&=XZ9MltHG;WU(&~P*-xey)|x0eo9^y;WZCWUe@LsvwHz5 z`v+0kkBgc%T;Cmj;l_i}CrWPAl{W8rhJ4(2RXa|1&TWp!D;iyyv1?&`+3MAIDEUKw zRh@9BvU*AJiNmoEr5>z0v-#5LQvhER@Wx}ZZB>Uq@xtVZQzi$EpJtj~pVwNH9kDTq z&Rsq0ZvFY3TPG=*IGF0z$8D{uKQJTSmvwDHUi;aaGnH;EiwD)p*1cZ%v-`)+ZAt82u-hPM-|BS$4Q!$t8NYaohf_u@`p& z#4=I;KwT_3|Kk^LTzIxPXDh37-1>RTs}DsL6|p)`6?G0ujqaRxX#IxyRrFxm(u&#p z8=IObfs(5)dOlQ@UT`FK{-I=AkyRRgU|&YqPD-ZsSLbQBOK!B6?AXxIMZ2Q1E@c*M zyf&SZY5W!2ZXWi8TI2Lft2#UD<|j&xsTVRMI!ddDlTYx%z{B^{$38KM4|Ei<`kqfZ z91+)5aq3}I_fLYN|Gc(nVbiITD-%}H(xT0~kF01)_?Y~;@7f+{*q^!XV*d86w4rjr zy!68C^}i&4>aVh&o+wVqUzoY0b0u9D5?{Z3%l_J*lTY!+*X%mj>4~?EQ;idYqBdVm zUQt=H!)^A)w2SpOm&`7tr;m+xXyJcwztFAA50A9jf{lQPscJWo+Hv zReN<`3{C7TpB=VkRVG0EU;D1>j$;{hDM>}$8Fb^m>a1H!A`@;<@|XT9`?rm;nKiqP zHJ+SKZyev&aC+&Td64)pvFumvYU}vKuZ$BuF*T-_-|pVO@$3THyrpIN%}o`H-zR@Z z^4A7pRT))9Df2I{t2rZB)nnn?e((Oufo-Vm|FGH;Lu4416Z@AOj?SttO=_jFk$HzI ziwlpep+KSiFx!7*#9b^+N=i&BptrW}TiDqVmARLaf8doz?P{Rs%(f!8q%vi7_1uj# zD?hclbbrdaAOe6hh#IVmik~+tqN~=2ch~<6D|&X}+}Z?GU^=y`LCxJo^)a(rQVshL z?%ZBBJ^FYVB^WG>Bla;}gwS(4W>>GBw`SLO);H9jTeP}6ek&y*?457eRbiN!iSAxs zaxHIn=#FT*G{0i=tl~wNrV{8y3HjLo9U(b89P4_yvF*=W*Z`}Fxz*Sf7uoPQsu8AC zV+LImys_P@2@(S@+UHbW!}dOx#z;^j=PDcH(jA+>z15a6uqeW2?7Oe zKXneLt$7=dtXObzP7!UqeLEt!b8GSMNjQ7w+jeyxsdAK`Pkn3hw9Md+jJ)}|nJ;&3 zsW}@KUex_pGLyaa`he9wo&1g13qN}_hgbW`?qzo}>x!>4J{n=&eU~dPg~r!iYWsTe zt)%e8^A)>aClUSDB$95Qb!uPsisZHyx?*Y5(Q6&u2>^PL?4=%KNHC1#*5b^xyydVn z$UHcw^W5UHLsOt#9z-R`j7tsirMqhnw2DDw?5O|5apKXvsKjjRN>n9nZ`)tCqw?{x zOQB5{a<{De72yimK1nc&PQQ^FUB6}aHvgRw-FuE*Xgu~lf&QzPLBzSh%3YZ``$HGx zU!x_pQAx9sw&gud0+9M~`9Bm$G~Egk=?&4;5JL@f=*9AatNX9z+dID~{X=Vh)~vkJ*41MPOac1&-aNYNVqI84TmGWiG-t-4)RULf4y!RF?BXjxc6Ecv zMz^)4Zt&%7EY;nlw`eyL4ziUhf56s8cyOEEp?CQ*ay~-C{*d5n&g3Q~w=H+K zD7iyNu-q?F`AJ@eU`c)opBbSaLAvP}W(ERPz!(}wvG$gqq$F6Hjz$dU62=fIRN^V` zDk(!HtCS&CwN#ER#lwWyY>b}CF}t8_xXOMOx1YXp`gU65<0!6_?jiMEHFhSTWh;BOd}dK(4@4mS(~uoqDeVy#6z zI>;*(sSnDjig?stL?M!qtnz0e&a~*#*tn=W=MK=sBL(xqR(7s_m|$WcBz=&49b;>R z{C#TqU&t(BBV%32i6fTk(qpEm?dF8a3ZtKO1*JRH60<5 zS^TlkNP~K3OJLw^&?Qjm7LAgeNVFuoA+2G}bT%X0VpD|Pu-H5+Fx>8dXg)8*fa!Cd zAm#-UBh5iAmr&ZS=%WmCBasW0-ATJZTYAHWV8rMR8!_*piiyy2dDvCe!7@LR`Tb6uW_7HmA({#MNTfu^>DuW6$(DNB`=lP;v9{#X zPBFHu$!EGGdx0>gOV=RzjpN@jBvCAa@I`tNeJ|*W5yO3=t2jYd3)w7UO%r6{;CpRA zx)OQaN4gRj4!(o~(v`^YKG2oO=-%l{#csodGas92huFC4YKiAvD_!VW2D^y2gieDP^iskV-eQ^*oR0el(%EqocSGu1>W&QXx+nWv2j~r%=%XY__Fz-eatuxArA9c=WQieNG%z$neq76* zBFWG2i&QL8@J^Z}!}3UJ2R>;IU8b%%HzZ_{j^kw~cIf|3|=Xk0JJ^oCq?-m}U}dc#U~$KG8hBd1}&8=vDzv#B3qb}3<-Ig7mGilYLSsQn;=9}#{k6S zs(o3?+hD0gLJ*rHI_~SN%aA|os+CBHhF_(oHxHMUNWa>q?^m(DUt`_(Pg?qZt=jkN zSg$&gwNjqBKx{;>lk#y7WVD3MUu}FeXR=&k_dC8_>dHj0Dp{bIz9bbwrAdC`LY|n|e&7OT;uqHnBe7 z@C&>_Pu8fthOdjp3FQeHAhd-lA_KED;75=-_0m_C(m0XLqA{Q11L;Y=l>RX{OL&UN zFx6p;4c14AY(%q*ElkGHf2qh8GiO2p5_!w4XDtIJveDcmtRc1zp&|4rDr(bLmDNGO zlLbrYJu4dJZ3wbeUsi_lHBOi@5=eC$7EeG|IqVt+B5Vw^n;4Y<^dwy(S471#)b3z> zKgGJPsgl8w^F>g$*-Q$|QJtxuu}E2d#4b00ZBfTzj>E{K=HRLmyS(be8XJp`VNANi zuEpHeD+5Kf3e@Qa6A^ebhO*$z+a>uYoFDE`2gf`~{wW5>cFqV3Dcy;Yu>+h!9lE;| zszj!{80VwNOqt_g4Ydo~T_9MLb~DOnykfW77)UQ@lP7WHMX+gxpO~BBSyuOrV4Fw; z!163Dy3um**53AgcW7kO#`5V~S7e-}*r5Side!VrhZf+=y#b|&$Q9TEp^7Wm!r8JS zzUKwrbZ&R-h~*t?tIcBa+Jl_=_~=Cn2#pl>;N8Fl_A9$?jv?lAv}?1vbLQQM zI@?M8Knn^AAL8l`J$Rp%bxKb6VLhkhG$7y>vuAIBo6)7Rf^z~)lb_&ox%C2-&AIqz zUcU})tukNQ%jn!L4`e4kG4!>{Ua4r{42QB-DUyl@&ak(p(_7ZS#Zn2&qu(`f&$UWP zzlf7@EHNfn>(Au)ONQ_m*7^`0o9&ecS{Dy((2YReqp=8LxJImq9SvLffB`ONPIKC-z!15n$jDm4Ggz((DYHEpFhhQkN;UY-+2$?u?U`HNM{GboE1u^$^%r>aJm zAL6Spu4u7KYu02q!*H3|#KV+X2N*84&2Ryl4cJ|MqxoF>l?~y+v~5Yn$=Jh3*6v{2 ziy_bp=vg3H6X=25G=ZKb(9;BZ5N2XGye81o1bSQ+rU~?HBw2$I=7b!8gke`#Eht!oBv5=7Yd9AC0 zJ33~<`lB+mtair5ccdq6UdA>t253coFn*DrvqMVe2pC8K-a*XBGEU#xwJ>#e^Q9*e zvJz6xM|NJUq0;vy8X;uhOlE2>Aw&o$%+vTvFVA^-Sv)HND+fNnl#l?HGG4UKkHzp@ z;lx3HPP_y7Dc+%Ebxumdg2p`+AKjeYU3dO^+TAQFx!6=y_XGQOdQ@$vq=xXw#g|H} zqUnmvycMT%GcO;YlB@08up_aw6Kmxc)VH(F&0M)_PSd%gbXh{_+UsctcCzhqgnC#( zL-|GdCF|Xj5Gw1?b-V+ip+&WYjVAU6F(E5#nefZ3=h!cc8+flJWZW+jEO(liQH}6) z!L)JvMY~cd)Bh37U4Y{LS zE6juou)jPak)vFKyH}`m%cNtf8m5TCsRSvL$T3CW%@zjX+>Vkh4Dg9!IIv;M0vJEC z9beD!mMyL>J-&8+@#;!?dRO?#-WgKU^3{hnJ@4U|Xxk8d(;~joNjOS|(=(`TReFOS4%QwzQHG}(xuK#){?W7jHMygdrDBq-n(BEV%K{LQ9x+jXYc9kdavew^&S&E zo5wdB?AGI(83KGE}~L+HnC#>JWY)v`K56EvDo+%3Vw@2+3k+-6T61j_t;K8w)FFNs+X2g9dtp=E-OLWb zItKjo7?4UZ1c%RJPVB4;S+;Y@wi>VW4cV15cHFLL;=Wyg9^U8^J(Qc#!<#Y3GNRYC z&OCUQo@mcISF-bFY%*qA1|QPow+0U%uqlH5<51vD!*Ob;us{J=y0O_6n&>w%iwY>9 zH=JM&s6@-&+q56u`?N32kF{xEC0=dX2U%*N^h9-{*4SwF|v|nkS_Fvl+)8244e|p0ix~6RT z^r+=gnLj3#V%C5A-e&#R;5gP$Z8htkRA>FytY-aF+N@84wZ(q#GqSeWS62esV!w9^ z(H8rP)bYNedTp_9g@*s77yG++?`qw$>g?HVbjO*FqS(U~o7b?7Yj8_#t#fgL&INm{ zm_CWXW*$=iejQ;rVsm&e>H+3Dd3)i?nqSET@ z$h<8I#Y?GVqibQW;4_dTU!{gK+?E};+>b48nY~u2WYLpk#T~zMt2`s3h~8Yhdu`15 znfbrKCJP36e$gl75nj)sXOZ7I6T2xQB>K+EKh@q14#|otUNwR+-P^Ea`Q5=I9xFA; zI~Fxb9kK_=!LDm~%E#6|zU>-S3xhHPRjg&dBS;-YI}nKK4UNpr9uqoeUH)4$8WvG? zlx+&P+V#gCJ8(JfS=Da`cE>$MRR@Z&DTb3le3B`)&Qf|xRYIv7tx-9a2lDQ3E3}a2 zKZ0E-{chG4c?~|p0gd}bhFkr;h zA=f*GbJS38fxG5SHk=YvAs4LGqm_=iHzAj%+cHaNnXKDdLi>e@Ff`qkrrXjR`qO@D zLM~0nWvd(K0%lFOrD*!^mu{=NySOUlx2ZnA)G&2GW0 z@GmnR0XX76wG1X%M_f`P422nYg@lAKJc5Z5H%wv%NWjg^i=5d|332!+ z|6|d@M2Vwo{;u%AZ(~<83h8lB$OUVM(2k();qKJ@1X0_qBpg#i<|chU=t8?G!eUfSx3n~;h}KM z@Kbwx2j&ur?aZ~^v>^IRoM&O)xy-G7nBo!WT)1=qlKv@$L6qX$<5&HC2u5l!yi%>u z*axVNWrmf{uegm6(74DoRYI=f)E$W?bN34jV5Uj{)y(<}&bn7hbuhNTjZZC6LI|VQ{uT!p(r= z|5|6OsOO9B?4b(z2G!YibF*sE(|N~G>}-_kV@WOs6XQOxlI&?}v%W7= z8|Hk1zioi4ONe03((aArksB*Er-jmEsdW)mJ9g(|2L~)_a7rObjeMvB_U4gO5Hbvl;MclKL5L>FqMmc2*iG+o?BDLf~PK(r16=DkUW#jS{8GFt} z-F>Ed&DL#m4(7B?#UYaf#|>DT7eI`k+QI-L#I!>LVwR)4L&M{ z=Nf!u!gdWlYVgrw&OZo)a1B15#3m9AK7Jnfh=bZVe9SFdH>3VkN#=LAEoiSyS$k>c zaOUQ|7x4JjFW-1$arm4iv!dcEJ~@3Lam%$m&0SOBAP$N90Bu)k*TLZI#j{IxxR&6> zxe19Y{NOth8q6U1*Y~8seBVZc`Mz0$$$-FhV7B)u^qK4!WQ#LWO)aUoy%LJke>t_} z`-V1ZXzxue$+}lnOX8GAO)aTe;oTpwB)0W^v9dPtjeC=|^|NV9+j2)l%MNW*=1>K6 zgQAc=1a$rMp0?$VZ2cTky<74jLA-A%qS(P1lObdF(j(A$eNHPf zC8zsfKBnaKIRF}RPz}boGk0s>u!^ae6RGd5NeyaK+P7lA=cgbq(Tek>^UyG>Tj|v< z01aCErR~oaPswRCIWJupI4AzqK8)~`oSeyp{vFx&<6*a6B8vM(rWGyfX?CahwjZ3? z-3Nvn)Nr#me9K0Sif`doTf?^+zSZ!p?KCzxwX)rIbIqm1{c$>?;afJlX)YyT4@9|> zAO`NNec1G;>Q>zB{4cqbXqeY^DzqSD!^9m2s!JpC4s2LJ$#4iJpOSyu=SGWbsyGTFaxFO4R?6{R%sfko?Mbhi^R;@uAniL`~>hs?WjD4 zJ!+L;%fK#LBvuDU(#q}F?o#O{JIxSTXREHR;27M>>6OjFMhZ038)hgTz8vUP*06Xz zp2y&J82sfaE03YjO7MXi|epnpO3a2Gt}$zUgJAB1CSCW5< zvK;5`#S}}P>+t_&Wyu5IW9?Q2y|3m^s?p(Gi_u}nK>Di=zRDSzm}{s;hvFMwtRPf; z<30*PMTYlV5c*H15Y8pF3PJ}(AwvO*3OU%ZogwQ@;ye_p_A6W$#6nn8^}T!q$vkZVw${$I5ADK zGbe3cz)^a9vc*Jd-VM>8t)uxoJ-8ENGa}jsrwv*>Z9=t!tst=4%G=<$2J{s#Ha3Ffag$0(kXQb@f+co zgy9rmlJ34R2|ujT`s}s-u?O-VEcOs!#nKDCblcE+LBRIoTK2B|)_Y_FkKDYL9 z>O^jc^AfQ^gpC!!cut|Gm-ju1_u`<`iQF7|J_DJMIgwlUCsXVB!-;g?W2Uxj4Z|&m zGehhi=XBXGj0K3ZVny~2WN)YkEZ$akm)k8^$!$q>cj$W&rrM%NyY7A5Xy-x~O zP42L>|AcG>?a9z0UcEbrS0!?n*_;bMt!T9l@oKQH7hY-iRUHXtHvQZeD-%c8s;t8< zox{+EgPAFPPNG$C%Y7qSTl%_JqV0pebpH|+WjtmMqY0t#<%D1%`y-YVa z6xhsRZ4OH9YqAE1WjUH#%+goPMfVNff`e-@R_)z*XQ&QkheoF0gl2IG15uDyF?7Rc z5x9eA4%Drb;aBcO7IeR%+v$6SZrA#RZr7yg*#F7uYHkek6v5AHAIxAGvW!T)fG;b+ zPQz*a;yn$gL6;!7h{8z+$#*rJHgu?My|~bD+P~U5K*MROI|B2;AR127D=XpuFL9cA z%{fTT+HZa*mdE$1S+j#eHaasah{$2^J?OcVGj^t%^;`@ztKwxa&UBIkJ(H; zs74jZ^b|Xr@vkBpACdzPYe|Gzb~E5N?xUVd6#9Paxy;P=pF<(4p6iRI5S!k+Uld|1 zhERz@XfD(NugVNX?|oqg|NV$SzrZuJ6hV$ffO@~q(6VdUe)U|+-V8gf%;(i}na4#x zAf$o|i&Pfhi|lqt22uQUB73q?wnuz!J(uFb%4{NYD>p7CWcH@m74%MddP+upbQE+q zBVkzdlowV2Q ziKOOLpo*LXW*oX=#Ey^#I%zMzEj@W%Zbg;j+|CQ@b8@0*ETkkH)3$S!Y#RKuZRJ5e z(6a3huHyrlwqcpIMFli+Fhqg1vDn{-J%Mb0Umaz~8{7DQpD7K(|9cqU^`|!^i`{=6 z+-s2P#^5X+`p!L(p+U`v%$4Rba~CFxo7Z!jm)J5V4Q`uPpdmssL|X8S#k+c-8PAB* zgem2fN7K!MFyM?*DYNgY*M=_i&<++B#=ZZX$*dQl#}_i0@kw(CLXSaBW}rfA!HUg< zsT!;d2&puz2C;YB13yq)cYp%V4~|j>^&;Dy~q6$dVHY=3*YE& zxOn4g*!21IeCwX9jip=izD*wBGL8@XlyQWcWgLNp*V~G2pQ}0bO!dLo9b4j;Ry;;# z11t^utNhVDfhA8Hu;keTEQ!N%1_74Ne(u9^?gcEBE9k35psynKqpW@IgSP|yzqVH@ zPeYVsi0%!}dG>&Fyn7Tlw@PUx4bCYCMrqP3P=+SGve`jVE7{4n@Ab&xe-7Z+q*u1P zaPGDD2CZq)q*p(t^4BP~uwnyIKfB<}a>4&U;M~$Ri=yJAwrnq;#g`M7tgkQM{zo#3 z!@2Q&!nxUIIOlnw=1B0FmZ;N_H2VDIjVTLquD?TKfaivvm;Z22cLoLh~dad6cDr)?C>2c9*AK5Rq4JQAl2TbmwGzNR64D%!m!^?1B!SXT0@|807K=LC-aR`8hoHgXEH=I&D{b|Tq zL(a@pvhOXly-|pb7<&-bUxN~rYkFVS5t=)!{{!x@BK9;jcN{q1)=u{?E?$uvU3)5n zlF=MGf7~Z@#=*^swbyTUH|AC4q$bAAqnQn5^Y$Isllw7YzNwy)C-nI`j;B^$pSbnH z#^&~vj?U$@p*(y?>4^;qdnjNO%*8g!lLimHt7kRC=ADXai!7q#L5>F|_lXA*%y?kR?(&+bh^ASQ+!O-ulga_fKFkl2>?`{yXJo_aBsR?B)N5vz)=p&~)hU24 z5JWo#Y@i8L3XwwLq(A_QRLCU|okksQ(p$8fE@sXX5}4c~ou5^>l)_~sJT8)MF3Q8( zcW4x|9W&d(;aa$j36aPhY~;h2VJjzOg78c56g)tU(2wAbs31#$+i#0_g#=rj$6dZrlg z#l+quJ!pTk8}lSdb7QUnEs#uat8&eNO?6#I$i3>!G>s>zX53bASWRwY*ud&=t}(YgC#Te6qa zWlQ2#thl~B>mMYUNnO(9w+4^1tfek*+D-bvKn%`6y7H#gq53*@ z(WEO-kC^e9X0`q-#m;0qlPxrl_1S#2+10zUyDuFKrx_JH!*dsI3&WWkU*^;P)IO*E z6!Wz2J8yn{`+}@ntlU`N{}6Xz=sCm3+n5M!w>!$yd;Us^A5e zOcwKb1Xrodu+RgwsddooO!bR#$rm+ zfUt)D;(lqcpf-_T<=&eur;XL(d=X}3uADYjONYUW0`n7?E>Zb4yupoVS;SHahO>xZ zZWbbggIk?-Ewq(hMPiHAss%coWfEznQ`@-*sbRz!s= zex{4fCz1)37$1`{y{NiE;0BF>rWk7lmbI#jDd3n(j8Gj{i>X)(XS4LDr@CKiziUts zLhZ+$q~nt)0#pAn<=^ez)PG#}M{ZMgILhGEf4#K{bClh0oBXS(|1u;)rl$U5htpY3 z=wV|Ihu1Y>XjzW%>3L|3?Q`oxV{E6fe~xlT^IxI)ujpTaq-}WAHas#dqusU)JA?Rs zopx%Hz(Gg?XY3D6U3;Rb=o)QIyqwn7eR07r$yWx@|1CGe)HipWo_l#;VNK2fdh7I- zy0~LyDSsl%fl{513`PHEB?o-dMh?hSe*Y|#%7HB8X3WzSFxM?%a&_MUs2So81%_H| zq~0|21(NL4rP0cnVMFn3t~vSAoP1q#=I87T)dB{LTXXWokDd7fePe4NNdrk5NV9VYI>!sCE-CgG%zt+~7a5!Skoe&BSQp|C}Cw-dotuTXA z@51ou>*~Xn9*m}YqGEy@??xUSO;!M%J|N3~x+hCMZyO1ow`R$Ae=Yg+*eU5mlK9cA z?A+gBj!p!oDKuFm$ID>nJU!*dxa89rufGafY|oLHPB9EnROmW1ATagq{IFU`B@%5Bma;R9pCYqsh+jD9Ob~) z*Gwr3+G}wpU*3bt2jPV@{-oDn+@*cF^Dv zG~rAQn$0XCtm;D;78gewvV{q13k|!dE>f3scj4lI1&7{V|A$4%inkT#9wMQV3rb?h zp_T&_Ey?tTTon6RprU@>oVle zcG;{%LNxp;HNAOL@k*p$ZPWLwSl_R)?)xV#eZN-i`*o~W9dR6dp1DA5-}5>tANM$& zV+oT=GktcRg#0Z>Pr@()waa7mT}Mg21oBX7=L83VpbzY5#vvWyj2^HzI#eoPRLjN# zDd1V=QKVDHM=-TJvr_DdMhbQ!A@4QnfJzEiJ$rbV-Y=B zqxKroipB|5+^#DfgZNfXr6L2WTJipf;^dE>eP!uwC$d>I=2LtiJ?Tt|gDfVrr-=L` zkg~F+JdurN)>&K7wzU6Jku7HP7Zf0ox6FFhGGHKZi>{sniU{Rs>_Ihz9z{iMP*pxw z?W?Q~0-h{bLho7Co3|mzR()9+%GWqyMoS>oZP-3f^q@{$GoQT}!|WznB>+81m&g@S z@eH*)*zWig>$;{&21m{lLD{mTgY}XQtJFVJ_39bsS5O%Je9A62Si2bXHe^eNoZc)? zFrAqVq;oX`Y0W@dGms|Q9yDzanzjc`+k<8&z8Yu`T4_nc!G!t^XS-2SBBMe&-zyRGS0`DB_W>TmdJl0P7cm6KxT-S;28zN0IniL8U>(09jr1S4m<?_Kdu>2~o3F(B(H;mo#nMvFZczH54ak;Ntw1INB9QRC=)G zSY=&~wb>yT)3Vow1g36|T^?C_bIE2(u!Msk;BS2j0#=&^0e_FJJ9sR3dc(p0OvyRd zydbXd_9!57tOVD{|1)?wfb~xPzZ=#_hP4(HWmw0rv6KJr78C^>m?s$k@GrukHHAyE zmBuW@3LpOs%{@VY{R z!8^M+p)7Lb*E#I2WNRBIi0|2I+L2U9%qUwut4LjLnonO;mN&NMxYV-T>-D*2&a3S@ zv*V_kGC)%XkmHb$SRIo=BV=UiOs zO}@b)K;OrgtT#gd&!g+(qU+b~P6?s6I)nFY%ua0l53(K@Ks%0(Sy|bf9{2BX9Nh-V zP+);?7B2zXadaA->)j|Au)7cEaGDbV&53~KL_l*QfYr9pn`yhV2C+M9{=Bp0RjX#s zKSJ9Y^UG4#Y>E9cc?@_i(n`1`yT}g{7y;Odv~=_|6rv6gqN&0yTX~l3!ZoPdAoPM< ztO*BOP^JxRb#}N+#YTRpJDF_ceVzbY{adKm$gjxZ@Y>CSIs0!f+_wEXO>gZCYrGqO zc?9_;N1J_Ho)ntVruVv#h}F?$DY+?h&y3rvN{btoUZA89#nntt*e?BlO()%&>4|1~ zqM4p(rYD-|$rojMQbi5bT+sjx!!Tl5b!(<4+Lnny$-uQU541B6?A&Gm$M?A#TRW?g z8IEG@15?r})edxFzrOk{t=pqjcTh4<+Rcnn9mz>pRbn}#n3h^+X}1akJxIH=P%*GXTZpM|i%G&CTWJF3oSfDkM5s!Aay~?j&w>kqOYB{$kSnFz|2=1iHGe_0T zQ8jZ^XU!Z{Ge_0TQHO{L;x}K&TbiAkQ$kO)9@#c?&&Fan`S><4!P9aGwzRPsoypWK zlQ*nLM;Nx7K|v_pv-4(COXtPn6SR5#rOlh8%c_bf+0NwI56EFd00qn&TB9&U45c=k zDMQ(OkNthW0b&J&ybjdx0q*pM9pd0b%Yl$g)#l7M7hxBmI0rJ7?Hh8$E*U23$JVPF z+??fZdAlfOyTq`s>S+drE2eX6hjeB)iLY$pzlH@?W|ZHu-z_C})!|)5`&-Vl&>LFV zFEVDud4!~jjZ}6o;}c@Xl*j}d8UddB&FMbaUMOX923U{fU|rxab^DiHnRLCB2|18h zX+C?|3CDWMPq03*sfmLVsqd{x%}r_75XhyM?;umriuFn>&X>;jS7MRLAaWW_&Px{t z&WV4uul^8aawZp~y#wdeYb(}EWUo}jUS``Ji_H7N%xx*^VwoRMm*CZ1kJY~sLH&EK}>Z<`}ng&gcw2Q_@Fxs_1yUJpyw4D{_<_RRfiS?1EB zkkV>wb*SX~Ags4Ou&og49xP?Dwq^zp#hX_Y!t0n>;IE47*;ybbkoQUE7=bN7xSJI4 z9$~I_zeLYf@zrx;FXy$E(yMDuC9OU+z4bR_EMH~L=zEp9*SyLMrx%Ln&s|*HRdR^V zZi#LQE6J~V9S9nW%-7|a_qNCkw_Rk0_qE6@(h#(Upv6-C-+7VQ&u}pmYePgEBLB8S z#Inc?r-l;Aux}`fOg`xMgHynq5z+k|FNNT8%3@0Q*rRI>v3L6FYly}?i zfY#*Qn!Nj7C8qzJ6G*kAlc49)AG&{wkAHKflsPJS4t{=XXm0+_(x^)nr+>fx zQdMiwqNQ{8Qt0_nnytN-=7ph@rY{#Oi@4WVUOnzyauhY3mJDaC zkX4N$d%+`%$i-0mf5n1OgH{@}(x6pO+bPSMS%X&aCysMv;L1z0Ane^ag(gwC&k_~P z@?>}&Fb{Sdx#ODZa6%Tl$MI=C{60*_?_CIi0X&}LY$NvEm5`tC`vOYNiu5n2>DfKf zzpkcV6C7Oc%(Hw;O`=30)w^n{)#g-htErSIq^k1*uRnbHPeGHuoEBn&Djuk(4}%C((BpXFg>cy z{*7c8l-BYz$_+3V{*Bh>2lJe$JVvC95clk6xc(digZQVs1CYgU#5YE=n_+rXiTzVc zI*Q#4)1y(@zmfX0y!^a8!}ZwJq(t)qT~hKBX?T94^}Iby za|CIdn4OqG9?+j>UuXCd|4_o|Rt>esx(O34wSHKCfxX1_VlmLz&EYR2FCHz=Rq_&d z-YnzMdfvNMWzH3OD|Hy7pUDV66j=?=w~4Cf#SNwHO2$p*jGN6@mz1jq^p|nPkM-k)Xi?%v>XR*bj@DmO^27;n z`1gSRiq%Ua^(B@HKA>;qkAitVWAtjnV1iB+g4n=$(9_>RO1#CGQ3)Jl=Zo9ueHzKxgD zk{gd!lDx)}sGs3C%7b^ryX|)G@@SpN04Y(S3w zX0{U|^&KVk!(xEhCs6Xn;+p4u*Dh~0K3K=ILtUpUSEJ3WO6H@?igke{#L^I?qhtmT zaflGEx9~8W$IRs6Rvv?6Hu02EE+r8>K9Yyqc>H!A&f+mU`1MX6?&9HY9`4~G1Tx5B zHcuJF!y+CN&97s4Sj=PQ@awreoX5iw9>0%=u{@@fUmxP(VICggA#6VJmH9l)0v?vJ z7zUug<#?zAc)~Rgb#eT9ArIqO$eb^Xv6I+`z*E9v1R&BSIb7#IHB=a0`z?&GGJ5 z9v(vUhv#@$&%^UP zyuiZ-9$w^OBM+N+*v!LAJiN@q79L*VVJi=>ib`JNH`jUC#=~|VcJQ8KbjLanKb^WR zo$dyINq3Vcxy8e7gbs}AI(4^o^o~dm(j9eIM}r;M55W)1WV!<*y$~LTIuPd;!y6us9myKpvdqK<4sf^AN^5kon?g zfp`=reirg9;>FD(ev=^bTg-nbvSqn1VUKi)4y2l%#0YU9?w&Lmk5U|Tsl3c-2=#P7 zCBxGl$Wk7)jE5NrbtIFA%Xv%|LWvDvmhlSQI1scD8iB>J*Rz#cqP@^2IcOk6=8B({ zJpC$!da{~_Yfy}}4rHD9$-_^+16ePAHsGhgffV8=#er-@dP+9&w>I-|3##=z*~;U$ z@tEyA+@X|UCtgI}yLcojx7%Tl1KG=y7deoz!BkhwQczODe<*%Xu6-go52AC1X*&c4&(%G^rVu9Rfrlx zs`+Dfy_V9G{J|+6p5~9wAY22<2cjfWD~PU6e3#<8j9kw09M18V>UnrxH2Mxoh6Rud z{BeW$z(xMNk%vtz%7HZV=eR+^F7fa(j}eJlc+3?C(&}*4fm{=>T;~be_@j0nc8D)_ zik~jD;VDXP@MJgPYvq;$>E`Kf^Y9L$+{j)2I2g-0j3Yh9j?$wcdfvLBh%n%;aGNe z<9Nb_JV`tc7x9<`9xmoFOL&+lGDs3X$$BythMOroSt{bvaDKA*S;~_y<6#DpJxMZo zs^#KwmiSr0pJ($h2dSPSxjbBna0aET_=~F%0=2B+H*0w=>-ZaaJj_Q{7;o#v&jvIb z`nCXxQL;ku>P8W{iNCvuL!4g&~0P6r;x_^A&3!TAMU5xVy|T`>>A_i$Z; zp4*3)@T$b&f&-iW8Lv9PNP)em;8tIPd!4=B&y5sD3kAtp4e?tGzN5-H(P8jFr;^*S#;y!Ntq$v}O zvgyHBSggxSljO+(rl~x zA5Jv|z4zG^)2ovLCy!L3rCyH z0iLEncW-x3+0WP4&(%+M_jB{~_H;9v0^EFM&%glLJHXxKV={SpczFBy2Y7mUKjQz{ zG*i&DspBVoIL_6@jb-aP&g2~!aF~prGIjDN(@dzjkBghvICp<<+1upl;S=EF>hCGb z9H=`~$pP{bhfn57N5(2c9HTl$xP6{l`x- zPW_C1(bEONIB(fKz~3VfnfZFVnfzogpFlq!H-B$ePfuSjPm{mN!`IIj^$9e2`+FHp z?kGTjw|{^~fTu@*mz$62IGJYpblN!oPsUF`cc93w_|J2khbb`7+Y}h!6X@mT@9pCz z2YP$Cdb|6%n>>x~CfUt3z~tuU=4A}PuaB1}B8{#dzNl58kGsjk-}6i6a{8kCJ;wRV z0q$RV(KyZM@;tAA%g;=cOjF0p4~sZ7<-5EoU7i;O8S&vqGAL%6Y3d~7gfTyRiCHx*t55B;qua_(~gplj6ok6{U@;A@M4u4XY}?k z`l5f0KEA#_9=-uaw2EvD4Dj{vcJueeQ*SSX-ag*0UcM$TBOd$vy1Dzh$=-n;-u|BM z-{eIGZSic?ilBT!(~Og3Q&2q_KPkZUsVQLGw5i5FfyDXO$E%N7*I_ic`uchXx}w(t z{JaBP0|Pz$eLMsG1Km8`{6Svcfkq>m+t)w9-_OTr^z=5l2YUE=`XQKi5DX)YQ+%)zib>2+9iZ_VF@)=`E3=%e#~1k4@9? zsldqx$yDQ{fXNflx*nj$08bwbDA_g8!^h3d*W~W*>h9;|Y68W0$i7A|Pj^tI(beQ< zGJ$s7U41gH#B@ZHaXrkN(Xyu&kfdDmnL7#%ciA_lD&&mZLNJLZMS zlcr6bJi+D7$&-u$F7Lkg<|t0W?z~++jDdl}c-y=Ox_-cXX5?sG75+ly#1>*$MqyXbom!C~FeK>jQc;h5NyzlXc6HtGb_nv$8+m;tz zo;-D;ahi+rW2S{idZc*u-Jhce+`iJ|0r*>xN%SiJijozNw)E=vEbqNBSvF4KNzFsU z9Myla4<=7C1+X{E$TZdh^5ltAjMLB%elEV_e9#%-Bkr!Uuk7dJYc%pzoR{j{gu-$dseRe|(@A;z8rQ zT)e?IFq{JXP2kP0U=u$6n4#SLjP5?Z_|M-f(9Ps+WL@SZ`}_EL`0s>@bUaFVJfBI#lpAuyHBcJ6!yW@O)y?sWhl=~tcqM-Xpz=ZKZY@oZ2 zlTBWJZYB(4qtOi$g14uqD|n!rn}48}U!adK;0F*3X2n1cS5K1<+6pw~=I$QArcDo% zyPN2W7vDgBE-$_{dD2T0r%bbSg`hI=RBivS*v#3C27W#jkmIX1(Q1h?v?l-gn>LR` zRaFw5jQMnI-_KtSFin~^e%fb`^h|AbWb;q~NI|wAdiCc(HL_{SG<@hw zHtAmtVtLp$8T;fX#t%&ZLZ(TqY(ci2@ZKvf?|z0s@u}!9Gp2cAf-xva@U&Ooc6lx! zVCqO-dE8)T{?Jrz#ulGU9goS`+XWmG#2n}m5MTsm^>p(D!t(L-2n3As@W%|{?d9$l z7!cqFtYdWbVLZ&o-OU}aLI%Y4_VN!f`g$8weDTY7Uj6dqpm7Sg#)N^<%E0<#3Oe|C zkitDw(&Ee^=u1=o}(xl1LjMGd3F0Xv@ z;YX&Rw_kg-M;i4>8DW5OJmdHnuxuHFb%Uqu+dGPK;fKiLBd*Do`&jq0l)eBczgPK0-?!)zFy!z z9zcn%ekNZpH+S@zucs^4E`GptuEs#by8C&11sFYKHy@+P)6E^zw3rB3@5s|!UIHjJ zO;z}zh z)m4^(js4ubeF2({0p5V|MxOxx0B=uMSGNFH8S|ipGitb?qmo<3>`1^Vr zUEP6y+VN8Z@J;3V(cT2i%T2$s^ZueG0VSb{47W;w>W52 zAGxr2E1YVM2YpWa=&QYC`ioDDQ!y#_me;RMrjM=5!I82`g5Wg_+_SG+;aq?XplNfO zU%vMOOJD_H?GyaJKCP{{Z5#_XvgB)=v^%qNzjR_#|MZ2CUgbT6}g zH@woJ(CF_m-BOxLoRO6N_NPp#7#YxC!n<3+9yfHr2+jfdjo>L*%br>Pf;mZkddgViD=y9T-|$Qzshh~W6R&?;&S5N4pJov!Rn z6l}h(81^S3n1~KABIT;FKkNdMQeLMgh6B%q8WJ5Chr^!k2%Xb;OLUW(H#`6JV6~b7 zgdqQhOg`wjAOH#^pt6U)>$?)(G+aG6TwbROFlaa(2GEwB-Z1EO0DMj1$@c+wxnj`4 z35P0LO}u`6{9K>7*;dp0c}qr$=V%42{W8tP_-Mw=VN^$t!(?P@t+4Yhk$W(8Hlla(0u|F6Q}xM zIEKedRsdww>ve&r^nlRFpa%%g1>P|k!e|D@)9J!9gOvb}cH9X%O0-$QZ0*It^V#hz zo?(RF7OXq&Dlm^Dta<E>`n7 zm1IoSxg}(^tWj5olWMC)>`&GC{`7L;JKm(Gr#*YLl>26LrN zs854}wABPdsZoIKd9!R}RPw$|bn@P&9Z_Lv9iM+?@Z!-gCn+e&pfmv8e?N$W895Ns zSpXBkg$)91*Ms@$xt@oe*#qX`!hHfT-1Yk%5sW2+xk$x^>bSiLnG|rEu)8OL-|tR5 zUt5T2B-Z$@G`e*~3+v9a?z-GH*NUYT3o8cUSwYB&p5@EEjZA)icJiWf<1d$3T&3$! zSV2tP!3J2~x;wW!5lKo?;5y?FNY>78HWuK-p+MB=HX%9*!=*LrSmVf=iBh;!yGXuJ zv@nQk`&VJT6FcuJRORw!Sv7xw_S~JBMU^G0Y3X)%)>hQwuJ$2CN+@)3HUQiL1%!OGP zmYSCo`f220jYWA)2FFE3_fJ3+UYXZ%NB>NLlM0tR5zcBcOLQoib~*Gc)hel$z$fv! zy7-0Io2zMl{VkH3Mi$Yi!&0(INVS0BMkLw_n$wxi)O^xR$IEkABjrlxT-+pzjyaCi zS?Myl$7GgMU4;4^Xe`3TsW~O8>2cxk9;vLf>Tj6;3$)%$%brE2VbTCflqOVD;?wrD za0+t|_m2(>iI2AxdeaW{*^F&fIX&cxUw)+E)Akqlax&SqKbDc_|Lva?dfNW$y<9D; zAGW6ExmHgPbp#R_eYyI5E!|^5C@l@<+ToR#J#x0EM#21 z%W=&51THa_K5il~4O!7bHk&>W_=mXyQeB4gcW>wvI{YWgIOgIITUI=isA&kZv?Y(L z)!Iq$qgE_rVe)l~bNLP%7&*}^+;hxTJu4$Oq^Mj*r?Buwnt*6 zDXFvEZR(;PN=C_Ywh+vcAgLLWm>81eU`X$O56FSgh5%#1Kq<{}3q#j~CpLJ3rx^sc z!sqga!MStQCT`Ay1kEN8Z1kQ|`4G(weYB=`#ePGj~MaLca_={_U zB|Ovb4-Ph_-Y(R1X7|~rhsS4)_Bu$9*;;#TjE65i#;am@7Co@@Br4&nEwJ8rLQ{kE z%|bxE@afH$D$dbcoT=^9ChNZO zY&D&#h~fMOZCu9uRqUwWVOf`NW()j^^?~Een;}pRcysF)xS)x4aT@$xMIlF=YlSM# zb%Jo0I!XLrVsy@&lA37}H(8k{)SW>^{m%c|>7f}F%H_O|hp$!%`J^OUmePK~jU8QL zLPnRB_L>cy*2i7C6o}9UCR|Z6j07q!$->9~mQL3F_L}A+^Maf0bre z*y-V1l&AhYR>Dc5l>)abUiX|uhI}}eMG=y#+<-2{kKA=HN4v$6beU7dBZTYZ?aOD? z+2n-DVi~fr>g_50AYh5JDz_d+mpCVut4Nh;8~H;2T>X=un@(iQpAHrDiY;vn2P?$o zP*zvTbZ`XIl1?|2Akq~6BmXdIJ{vE8Cl8dMrp^<9AfiK0SKxH^JJSvxI>AR4uD~r( z-=)iGT=wJP&@^!I*r~4uZXb`9T#2^?fJpitzp|mrcW|Z7ZbKkIhcC#o5vSmmL2FW*_XPiiU&47-6&52}}O z9{pu#v=FsRM6fA8CC$Ka7=V3jPTCgn=LO|t zu7089tLJlg=^!*0SN~*V<8g`oqRS;50>5*R27r+5X*r$XN{K-t!1$a^#RSBzia-I z+e+SR$?;GSf$ZR}vh3(8ROV+0&O$+`@IcZy^{J_&+Sr2X);_t|C4K%{Msm)@WhyGO7|qW3}nJfuEslKPJuyFrH1y`XSwe F{{y!!gy8@H diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o deleted file mode 100644 index 66f84b4b8fe65c206a0a3639a164ea40673172e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383528 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 z 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi deleted file mode 100644 index c4f7ed94c6378fe6c6a4f69d9c1b4bebec3e9967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119634 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 z 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi deleted file mode 100644 index 3e17246cf0fe0b72b8d3ee1b868295acea34b541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22550 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 DeU#jb diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o deleted file mode 100644 index 9abc89c4d8e838f817a96bc9652a09745eac757f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45496 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 yDd~6L@BPAIEF9{=wxlJf`v diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi deleted file mode 100644 index 2a47e6961af05cfd91b528f448f0ee1abf86e6c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22547 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%0AtL-eRa#CwZT2ET3;oxorVrnU| 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 AJpcdz diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o deleted file mode 100644 index 9abc89c4d8e838f817a96bc9652a09745eac757f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45496 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 yDd~6L@BPAIEF9{=wxlJf`v diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi deleted file mode 100644 index ae1c21b2e78feda255321b339fe76fbb943b16e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18527 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 YU|P5cnQ=m?z#fV%J!(8N;?yMn3Au@1wEzGB diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o deleted file mode 100644 index f0a07b25bb224d4edd228831d5f98a7ddeef02b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75288 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi deleted file mode 100644 index 29e99c762a7e3eeb3ada4a811a63b1af7bb9b651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18524 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi deleted file mode 100644 index 9afe3639b7b64d737981088c52df12fbddbd1502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12540 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o deleted file mode 100644 index acea04e6b164b01cbf2615af75640159300f95fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22520 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o deleted file mode 100644 index acea04e6b164b01cbf2615af75640159300f95fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22520 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 hkr=tA!pP{Xe>8EE)g+ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o deleted file mode 100644 index c3f9584ed2807aac5f6b7b06ab6ebf8bdea97e3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121304 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�V&t!Q@k$Gjydx>Z6G2aWKx?HM5x{8b_FDdEP5oxDcT`ss5=Xr9XV!g1)*Ar z#2Ks_^oUgASCT?HU<%5G6k}IjPhwKXjyMDGlTohI0dXJ18U)jol ztOR9A9bHXQ;Ukx=c8pchM7>QCzco3$CB%l7Qb|-jE^?t)i?XtCgPg60gFa)OZmXow zM~kHhcG=3xdO}g2HnxLH`Wgv>d9lL@tKA@{Lwdn!Ku_~{hZZb>K>#nGAdJPFhS}04#4gmFVIt@pIIJc-0iklywWN*OLP+Q>! z2^6Pp`RUG5BoM8q#j5MS11rVaOqPoa>Q)xR!fvZ9LfuyyR2HS}rj=I3mtg(MvOV@h zp0!2$yh@8?aZGxrnIGY5dz#%#8Km%}8#evaja|O_dpic(3 zw7Gq<+lJ#?5J-dvhc<`kwPA-t7L`pr{&<^~>W-@~HFZ5#5`kkS$D>pRtez{?QsQUK zxZK21DYYN*2z_r;hdCaahjTE)gH%?i2eSPpso40@l^5GEN$}Dpy9MY6&_qeH(5S`o z#aW3os_tpYc{sahU6>zW4NI2))F@SM%t>kn080xC;If+%&0_cbNSh%=nXnzL8C7B$ z*4d%(@eZxM4H5E4DBL1H1Y!9RB^rgO80}E_gcJz_7t9P7s_H3E^s zqQ{g1oTosVQB$NioE}A{d?g(K31HL)48sWJD;3~T)`Q#Qk&lNVVF4jEprweM_}w;#9mtAoQ#?*CE-|dY z+Fq?A@6m^?3?_b*qmh-ySX+gQ3!-9tuq#f5Qs95ojDG{-^JwbBI0K^DKTjx1uFYoap#CsRHQ_nY~k@f z*&;DY&lT`tdal6sTu2n33*lmWuHYXXt0!A%U4AZ<7_H|*e7K$qwQk+!$rkM&jVclF zyZ9N(%=#gsYYzOJLYF4lV0~e5cAR0-qCf(vpC_@SUk?17__=t9!<^6ZrgK-!1X_qw zQKTdjasr+l#FPx2{n$at^t4i9YWjB%e%`eF!os4Q5O9KyN(60HV%U;F?s}D?5Ea>I zI+^35U4$qfTsQN2sw-WJ&@zP=>!1=1qs=_t%i?`zIHHZatVb?>XXh^Kotxh|x$A=8 z!|&8k);ga_igZkC`ghTmh8vOHiR{j9!o2Y=JB8RiY4F@*F2G^)9zhaK;h4ya@tR`y zh-MZirt?TqknD(6tM~EjE{vTUKM#IhG=TklCM6Q#vFXCM?4YKqV|bQ(O1xSpDD@nekZ>YdtIF7c0%e0Tpd! zGsR2xa@Qv)Vj8HJJ9c*GV2+bHF6Lm^!bQcgnv(oXaVVmI`NoN+aXh3-zHy7(Ns*sU zWMI-lakLf>%`=jwg$IFSfeLGPRAOw=8p);(!Yb4PmX(e0I3ukQ3Ws8es%qkSk^)we z2)T`sI6xIXI0`%IaN&hLU8=*PIEzgVZ^Xmn+_aMTJ6L>z-&T?$t7$Cq2w+LDaP^X{ z2RIV9Vn&BZTd6?FO9a^yw@z)H2K-`L+XvdTO9ML=Ga%hyFvaR1s=`QoqY=T`wb^O+ zbQ<#{Z)h0Uv^EZVlX94eil6-{wAww zkZSJ4Zpda&nzGes<1gajf#Eo~qe2$U+izi`g9cd$d@IlvtWe0aRE7 zaaI9QGbX`X)H|s31hvFk4&~ou2ze+Jj@`mb zVA$pqm#5gG$7N zOYN2qJoW&aS59K=91!kkZuD#8P1qAunrzhfuh4t0~+4u{8{ zVywxG$KA46LE>i|DSm#s{i?FRJ)`Xd9KFv5e~s%_WMHB~(N1DEn-RX=#T@;X?-c i`;*15c`>EPqAod(E8`x*U>*Q?Dc=OyIb9Vi$o~VR_KNWU diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o deleted file mode 100644 index 2ab05ab183ce26f5beec3282e344261558f79b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294832 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¨c?{3~PvP=k{ZESg&*1Veev|ZN^tVYbUgCQ8 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi deleted file mode 100644 index 0327c88cd770dad19335bf99ececa92b455af467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52485 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o deleted file mode 100644 index 2ab05ab183ce26f5beec3282e344261558f79b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294832 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¨c?{3~PvP=k{ZESg&*1Veev|ZN^tVYbUgCQ8 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi deleted file mode 100644 index 181fa4016b2115d046bcafe947e20a6b4f14dc2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17139 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 CarVFf diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o deleted file mode 100644 index 3a0462d67870b8a41785ce3962daf20c7eb1754b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25576 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi deleted file mode 100644 index d8d1047fa15d47f2cbc9ba1defc256efdaa673f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17136 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o deleted file mode 100644 index 3a0462d67870b8a41785ce3962daf20c7eb1754b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25576 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi deleted file mode 100644 index ad8cf76e2a8894ce347e639dd647d2c7ad1380d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7328 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 D&wQ?A diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi deleted file mode 100644 index 2eb16280b56a969852dd9e6b5355f11b43aa895a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17344 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 Q0jVNKk`z50$g9!+0qG@t+DNSQt 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi deleted file mode 100644 index fc7a0e56bb108a547228ea3b052edaacaee495b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17341 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 MNs1m0 Maybe ExecStatus -decodeExecStatus = \case - (0) -> Just EmptyQuery -{-# LINE 26 "library/Hasql/LibPq14/Mappings.hsc" #-} - (1) -> Just CommandOk -{-# LINE 27 "library/Hasql/LibPq14/Mappings.hsc" #-} - (2) -> Just TuplesOk -{-# LINE 28 "library/Hasql/LibPq14/Mappings.hsc" #-} - (3) -> Just CopyOut -{-# LINE 29 "library/Hasql/LibPq14/Mappings.hsc" #-} - (4) -> Just CopyIn -{-# LINE 30 "library/Hasql/LibPq14/Mappings.hsc" #-} - (8) -> Just CopyBoth -{-# LINE 31 "library/Hasql/LibPq14/Mappings.hsc" #-} - (5) -> Just BadResponse -{-# LINE 32 "library/Hasql/LibPq14/Mappings.hsc" #-} - (6) -> Just NonfatalError -{-# LINE 33 "library/Hasql/LibPq14/Mappings.hsc" #-} - (7) -> Just FatalError -{-# LINE 34 "library/Hasql/LibPq14/Mappings.hsc" #-} - (9) -> Just SingleTuple -{-# LINE 35 "library/Hasql/LibPq14/Mappings.hsc" #-} - (10) -> Just PipelineSync -{-# LINE 36 "library/Hasql/LibPq14/Mappings.hsc" #-} - (11) -> Just PipelineAbort -{-# LINE 37 "library/Hasql/LibPq14/Mappings.hsc" #-} - _ -> Nothing - -encodeExecStatus :: ExecStatus -> CInt -encodeExecStatus = \case - EmptyQuery -> 0 -{-# LINE 42 "library/Hasql/LibPq14/Mappings.hsc" #-} - CommandOk -> 1 -{-# LINE 43 "library/Hasql/LibPq14/Mappings.hsc" #-} - TuplesOk -> 2 -{-# LINE 44 "library/Hasql/LibPq14/Mappings.hsc" #-} - CopyOut -> 3 -{-# LINE 45 "library/Hasql/LibPq14/Mappings.hsc" #-} - CopyIn -> 4 -{-# LINE 46 "library/Hasql/LibPq14/Mappings.hsc" #-} - CopyBoth -> 8 -{-# LINE 47 "library/Hasql/LibPq14/Mappings.hsc" #-} - BadResponse -> 5 -{-# LINE 48 "library/Hasql/LibPq14/Mappings.hsc" #-} - NonfatalError -> 6 -{-# LINE 49 "library/Hasql/LibPq14/Mappings.hsc" #-} - FatalError -> 7 -{-# LINE 50 "library/Hasql/LibPq14/Mappings.hsc" #-} - SingleTuple -> 9 -{-# LINE 51 "library/Hasql/LibPq14/Mappings.hsc" #-} - PipelineSync -> 10 -{-# LINE 52 "library/Hasql/LibPq14/Mappings.hsc" #-} - PipelineAbort -> 11 -{-# LINE 53 "library/Hasql/LibPq14/Mappings.hsc" #-} - -data PipelineStatus - = PipelineOn - | PipelineOff - | PipelineAborted - deriving (Eq, Show) - -decodePipelineStatus :: CInt -> Maybe PipelineStatus -decodePipelineStatus = \case - (1) -> Just PipelineOn -{-# LINE 63 "library/Hasql/LibPq14/Mappings.hsc" #-} - (0) -> Just PipelineOff -{-# LINE 64 "library/Hasql/LibPq14/Mappings.hsc" #-} - (2) -> Just PipelineAborted -{-# LINE 65 "library/Hasql/LibPq14/Mappings.hsc" #-} - _ -> Nothing - -decodeBool :: CInt -> Maybe Bool -decodeBool = \case - 0 -> Just False - 1 -> Just True - _ -> Nothing diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o deleted file mode 100644 index 8354281c43918a07817d0fc2fa926a44e3fb3698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41792 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi deleted file mode 100644 index 7469104272d590dbb65d5cd42b9acf8c7d86d59b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6430 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 BF_QoQ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o deleted file mode 100644 index f9495fb56304517eaaa2842b683704355e3558f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o deleted file mode 100644 index f9495fb56304517eaaa2842b683704355e3558f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 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 b!XL@L4p|FNq=}G9 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o deleted file mode 100644 index 57adbb509cbcf6fa74552336886594daff21e1ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226080 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 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi deleted file mode 100644 index b1e89c871b638b494a44fefc0fe06b286276cd8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15671 zcmcI~2YeIPmiN7qWo%>zFeN}Bfdo=s)_OCekw(g9UzSi3SONsY%WihRZ{KKU1lkzM zk>r41+0O+qz4s0VVyeMlFfG(zQ*2X=DF#fj>0nyGV9Iyy9Z8mKh41m+e)4bb+A6w=lubpe`<@+yKf`Z;b(-}+Y!PD zRgcSDwed+_;R`(d*4jIjd+yEop<>)mM<3LjPyI6W`tn0d7nE#Xgzwi@Ub`^IKK9UAVVtOa&gjd(+*Dyv1jy;(I@py%;`ad~Fdv zu%{qzP5Pv{DKR}&7M4dlE zoqvNme~dc+1L_=)48KJTix{pNAtR5BCKO{vf&~dyBz%H|e?-EkNcblt{0@Eg&*-x* z=(Eq!XI;@}-Oy*ioPy%)=*>ZBumcVL zFZ5j^8sbE*B;@)Yxjo43Mebze{sFZgN*33C7)tpgO8FB?`7=uS3;OT><6CPgPQxf2 zXOLt#Mx95%GZLOmct*i98lExmjD=?$JmcYkotOZxiSWduNq91bWC}^9l4Kf5rjuj_ zNoJB{7D;B4WDZH@l4Kr9=96RrNfwf15lI%4WC=!DcqvJiVYD3oNRn)fm=*A>gl82z ztKnG#4~LkwpnSS!tq~G(@bDE=AFoZ@Q1FNHm0MTbELpz|=8Zt)V-KX>ys>Q2qmO28 zJ6(7%cf(ZBT@<$t=kKpQv@>UX`6xVddDYU=eY;Lwr482Or7Q1@%sN*-^Egf)eQR}b z(d@A>8EBJ>*WJ53<6iELjDI_SVcz!at^3czRDrPpm#n$D^M=XPUM^)@o-jQ>uJx+pOr7EJwFuaE%WfxZCkGoKT?uC4KG_z{&Zo*^8-f0*o4#1 zZppb_Rx{dLwX*p9&F6RbeT=XM6`wmZD}VU2xui| zxol*5SG<1qvxiT98h4BzHRi_7lsB?pI*6`Wk=ianEZun_n#_RJrkd~dHK

      v=u9QEj+R+pX06dYkh>ykBqj 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ÿlFO?}ph4VjuPJX$ZP^G=K=>lLJDSUsWs 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

      *27r-jp>5>9_sIQBoOL*iQ(jzbTw~ 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 Nq0+CYq5q8Q{|D+?^~nGL literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/build new file mode 100644 index 0000000000000000000000000000000000000000..bb9058c20e878d9105c7a77002d116b0170fc58d GIT binary patch literal 29019 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 JU$v_L@gI0vg}49! literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/config new file mode 100644 index 0000000000000000000000000000000000000000..2c726cc665af1406d3278c395bc3becdb72a3c30 GIT binary patch literal 18048 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 o>U8%8vfSpA+valG22$}UUx3~f0F+JIRF3v literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/cache/registration new file mode 100644 index 0000000000000000000000000000000000000000..b8d223f9a7bdfe32d3e466361dd21de4ad8b08d1 GIT binary patch literal 4915 zcmeHLOOG8#6`l|wU<6J`2oA8IF%n56ci(zf7m6aH*j9{8GWLWlzzgbeYHs7cx39bV zjy->aT{ehc1RK_@koXTQfK%PoGn0v}Sb$hD^7ziwIdvZ2`Oc}TdG()v{?p(7_?N%_ zzWn>GKivQ99|u>yUdq3Jb!~^o?ZLrU4i54ABQ@$Pogsm`j?N$Y1D+q6}`fA8N@ zUxN6_dK`DdPgkpxW?b)G<-5&l_EgS(RvC_E!}Q7S*kLS=x?w!&;rRZ&BJ|BE^u-f2 zQrIH4@U(F)6dSwSHQSTo{iD0{{+B;{&~;8`QPiaPAqGceb}1 z7@?mfJq-JH9IC_HPe<4W2u0j)C(E{N#^FkoH4TNmYC6HdYz>w~Fy>2k85viak8uH;8X>*6oY2E7tZD zrY$!fA_%+3Sm+PRrL@g<7%@CFjhY$K>hO59b1+l*$f*fJTIrO)g(r;g+}Xn$i*Z!3 zW6?q)=lNDqVT6muj8ABWv2WZy)=#)d%Ojn%58Byeg=UVN9G`6n^|Xg=ZLh=LK}Dqtx_^^=tEv zTR3F`qI6~X_V$^}N6ij!0GvH=d62m7rtnY4P_xT`>dT94y0qcj^8XgI@hk&zqCiMe2NfT`; za>g`w!eyTa%S8CiYKfEwSi$B9YQC<~*f5QfiF}0wPmPcvIJg7|#q9N>B@d)?UQmRbZe2B2bS z3sw_Db+-IkIwDI^FyO%r@JIiYJM!IE`T1@MJ21c z#GDwb1@lT67o)R+**Yq#BBMH3!xlbfr!nX6hp?DACpmNx3GGU^s7RHpBADh_5{?NcwvK@^~rJFQ?_Dt0$On@^FYz zK@1v4kHaqYQAvX1hJmmQJS71;gGw9lQzKxOS;A{%Nz@FuTY$QjUZ2P-DoU&m$&q|- zdaUA`Vl#KUnqtCcm0985e%}P#hTKu55tiT_iIRG1B6d#gfbc++;aV6VICiMEnoC>b zzhDUsh7&1qC8YV7Z62NC%N$>l$OS%)In5%Hmn!LFj4}fF+BzdVGQj9)u{AZraRJm@ ziLDBxc0sF};}|xEai8seoL)W9PaRKiFi~WpHrC=WoSNJUz^&+kIfE4g3Bvgr2@!n6 zzGcc;&i7v|Bs? literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..7749446cb8630c4eca71f8aee80950d648adfafb GIT binary patch literal 7744 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 AOaK4? literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..c04856bcdbaf5fccc8e78988d70233578f660aa9 GIT binary patch literal 14032 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 P*YflbE%$uL_45A$M-tXR literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Constants.hi new file mode 100644 index 0000000000000000000000000000000000000000..4988c10f26abf6684c0eae2d6dda2d88da044bba GIT binary patch literal 7741 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 P*YflbE%$uL_45A$M-tXR literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..5683907af3415c94dfae8b0d6b81116b5d7fae7b GIT binary patch literal 8666 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..e20254979924d6235256eb8614754ef2a48cb311 GIT binary patch literal 2104 zcmcIl&59F25Uy9!H z;9qJ@<{wAp=aD+srAe}jw~0|_g&s`?x>N^IsR4%M?{w9^>Z+iVWaCj3>yBCQJC}(8 zI66LTqdQQ+A8Kf>JsCg~cGgBV;mQWwxeR73?ramjDgU(%`LD0wR7nd~^GA%gy@($b zzPj&2EcBkoCG!yR7T$yJ`^tFRkHOSFx1u~AEP7_su1)rBg5QBnxp6k-&e;@O7go); zN!@*$Nc(L<{SWQH6esy$GSWfVpJDKJlE2($^1Uz~<>jQ%a50Q+Ixdnl#5arQo{e=G zo)@Q4s^5oko`p&FDc{ZsyUQY~U)2BZ&NBPjBQ82vpU`p7egFkcdUDR=#YQ11d`R|}EIH+=#ny8P`6bm^N&FHBCh4U&>gUCdn`eliB zP6p9IWx3Jn==4LUG*NsBD$dhXXE?L|c|G77{Rz_Bka>9?_CMu#nZpv+V@0Ik(igEG zp+YmMCjiSSkIZjuQyfhpiI;voXUyM!j`+Ie*WX1FVgAgYbMOI65wgGJd4&$qg+ubE zYdE^kJwYE~@@|AG@$Q=@pTxV8?!{lf7??AW-ZXurez`xw{JW#jGfw)%OD_8ohgJ(e Q>*Cw|7xS@V)n9)6Zxpv6kKrtHPcED&qk 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Preludes/Base.o new file mode 100644 index 0000000000000000000000000000000000000000..e20254979924d6235256eb8614754ef2a48cb311 GIT binary patch literal 2104 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.hi new file mode 100644 index 0000000000000000000000000000000000000000..87b948d0de778339dd295748e1a9932e98903d0a GIT binary patch literal 12646 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/BrokenSyntax.o new file mode 100644 index 0000000000000000000000000000000000000000..771a983ea8e0b44dd44c985ff3805432015bfb39 GIT binary patch literal 25864 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..e82a1043e3a3388cc1ab6c8da69c8fc8b28e0c1f GIT binary patch literal 12677 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/GenerateSeries.hi new file mode 100644 index 0000000000000000000000000000000000000000..441e458febe1c1439f133d957b75f5c2af1b3627 GIT binary patch literal 12674 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 X>sBH^6+QDDR*IarHKQDXGwRquAENF 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..068dcfc5d09a8f4a51ffb59525af429a0d9cc0e8 GIT binary patch literal 12881 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 CZ-3+f literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/Statements/WrongDecoder.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..42d8d001e0fb3b94608c2a39b0c516381b3898e6 GIT binary patch literal 25928 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�^XP0?aw7C?! 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 H_zm#?=W&>8 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/Hasql/TestingKit/TestingDsl.hi new file mode 100644 index 0000000000000000000000000000000000000000..62bf694631cd0b1c5c3e66b0e1c25d5b0eb89972 GIT binary patch literal 13503 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 H_zm#?=W&>8 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs new file mode 100644 index 0000000000..9f359ca59d --- /dev/null +++ b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/PackageInfo_hasql.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE NoRebindableSyntax #-} +{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} +{-# OPTIONS_GHC -w #-} +module PackageInfo_hasql ( + name, + version, + synopsis, + copyright, + homepage, + ) where + +import Data.Version (Version(..)) +import Prelude + +name :: String +name = "hasql" +version :: Version +version = Version [1,9,1,2] [] + +synopsis :: String +synopsis = "Fast PostgreSQL driver with a flexible mapping API" +copyright :: String +copyright = "(c) 2014, Nikita Volkov" +homepage :: String +homepage = "https://github.com/nikita-volkov/hasql" diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs new file mode 100644 index 0000000000..fed03dac73 --- /dev/null +++ b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/Paths_hasql.hs @@ -0,0 +1,77 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE NoRebindableSyntax #-} +#if __GLASGOW_HASKELL__ >= 810 +{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-} +#endif +{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} +{-# OPTIONS_GHC -w #-} +module Paths_hasql ( + version, + getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, + getDataFileName, getSysconfDir + ) where + + +import qualified Control.Exception as Exception +import qualified Data.List as List +import Data.Version (Version(..)) +import System.Environment (getEnv) +import Prelude + + +#if defined(VERSION_base) + +#if MIN_VERSION_base(4,0,0) +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#else +catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a +#endif + +#else +catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a +#endif +catchIO = Exception.catch + +version :: Version +version = Version [1,9,1,2] [] + +getDataFileName :: FilePath -> IO FilePath +getDataFileName name = do + dir <- getDataDir + return (dir `joinFileName` name) + +getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath + + + + +bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath +bindir = "/home/deepak/.cabal/bin" +libdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2-inplace-testing-kit" +dynlibdir = "/home/deepak/.cabal/lib/aarch64-linux-ghc-9.12.2-632a" +datadir = "/home/deepak/.cabal/share/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" +libexecdir = "/home/deepak/.cabal/libexec/aarch64-linux-ghc-9.12.2-632a/hasql-1.9.1.2" +sysconfdir = "/home/deepak/.cabal/etc" + +getBinDir = catchIO (getEnv "hasql_bindir") (\_ -> return bindir) +getLibDir = catchIO (getEnv "hasql_libdir") (\_ -> return libdir) +getDynLibDir = catchIO (getEnv "hasql_dynlibdir") (\_ -> return dynlibdir) +getDataDir = catchIO (getEnv "hasql_datadir") (\_ -> return datadir) +getLibexecDir = catchIO (getEnv "hasql_libexecdir") (\_ -> return libexecdir) +getSysconfDir = catchIO (getEnv "hasql_sysconfdir") (\_ -> return sysconfdir) + + + +joinFileName :: String -> String -> FilePath +joinFileName "" fname = fname +joinFileName "." fname = fname +joinFileName dir "" = dir +joinFileName dir fname + | isPathSeparator (List.last dir) = dir ++ fname + | otherwise = dir ++ pathSeparator : fname + +pathSeparator :: Char +pathSeparator = '/' + +isPathSeparator :: Char -> Bool +isPathSeparator c = c == '/' diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h new file mode 100644 index 0000000000..b6034dc420 --- /dev/null +++ b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/autogen/cabal_macros.h @@ -0,0 +1,193 @@ +/* DO NOT EDIT: This file is automatically generated by Cabal */ + +/* package hasql-1.9.1.2 */ +#ifndef VERSION_hasql +#define VERSION_hasql "1.9.1.2" +#endif /* VERSION_hasql */ +#ifndef MIN_VERSION_hasql +#define MIN_VERSION_hasql(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 9 || \ + (major1) == 1 && (major2) == 9 && (minor) <= 1) +#endif /* MIN_VERSION_hasql */ +/* package base-4.21.0.0 */ +#ifndef VERSION_base +#define VERSION_base "4.21.0.0" +#endif /* VERSION_base */ +#ifndef MIN_VERSION_base +#define MIN_VERSION_base(major1,major2,minor) (\ + (major1) < 4 || \ + (major1) == 4 && (major2) < 21 || \ + (major1) == 4 && (major2) == 21 && (minor) <= 0) +#endif /* MIN_VERSION_base */ +/* package bytestring-0.12.2.0 */ +#ifndef VERSION_bytestring +#define VERSION_bytestring "0.12.2.0" +#endif /* VERSION_bytestring */ +#ifndef MIN_VERSION_bytestring +#define MIN_VERSION_bytestring(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 12 || \ + (major1) == 0 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_VERSION_bytestring */ +/* package hasql-1.9.1.2 */ +#ifndef VERSION_hasql +#define VERSION_hasql "1.9.1.2" +#endif /* VERSION_hasql */ +#ifndef MIN_VERSION_hasql +#define MIN_VERSION_hasql(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 9 || \ + (major1) == 1 && (major2) == 9 && (minor) <= 1) +#endif /* MIN_VERSION_hasql */ +/* package transformers-0.6.1.2 */ +#ifndef VERSION_transformers +#define VERSION_transformers "0.6.1.2" +#endif /* VERSION_transformers */ +#ifndef MIN_VERSION_transformers +#define MIN_VERSION_transformers(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 6 || \ + (major1) == 0 && (major2) == 6 && (minor) <= 1) +#endif /* MIN_VERSION_transformers */ +/* package uuid-1.3.16 */ +#ifndef VERSION_uuid +#define VERSION_uuid "1.3.16" +#endif /* VERSION_uuid */ +#ifndef MIN_VERSION_uuid +#define MIN_VERSION_uuid(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 3 || \ + (major1) == 1 && (major2) == 3 && (minor) <= 16) +#endif /* MIN_VERSION_uuid */ + +/* tool alex-3.5.2.0 */ +#ifndef TOOL_VERSION_alex +#define TOOL_VERSION_alex "3.5.2.0" +#endif /* TOOL_VERSION_alex */ +#ifndef MIN_TOOL_VERSION_alex +#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\ + (major1) < 3 || \ + (major1) == 3 && (major2) < 5 || \ + (major1) == 3 && (major2) == 5 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_alex */ +/* tool doctest-0.23.0 */ +#ifndef TOOL_VERSION_doctest +#define TOOL_VERSION_doctest "0.23.0" +#endif /* TOOL_VERSION_doctest */ +#ifndef MIN_TOOL_VERSION_doctest +#define MIN_TOOL_VERSION_doctest(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 23 || \ + (major1) == 0 && (major2) == 23 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_doctest */ +/* tool gcc-12 */ +#ifndef TOOL_VERSION_gcc +#define TOOL_VERSION_gcc "12" +#endif /* TOOL_VERSION_gcc */ +#ifndef MIN_TOOL_VERSION_gcc +#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ + (major1) < 12 || \ + (major1) == 12 && (major2) < 0 || \ + (major1) == 12 && (major2) == 0 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_gcc */ +/* tool ghc-9.12.2 */ +#ifndef TOOL_VERSION_ghc +#define TOOL_VERSION_ghc "9.12.2" +#endif /* TOOL_VERSION_ghc */ +#ifndef MIN_TOOL_VERSION_ghc +#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_ghc */ +/* tool ghc-pkg-9.12.2 */ +#ifndef TOOL_VERSION_ghc_pkg +#define TOOL_VERSION_ghc_pkg "9.12.2" +#endif /* TOOL_VERSION_ghc_pkg */ +#ifndef MIN_TOOL_VERSION_ghc_pkg +#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_ghc_pkg */ +/* tool haddock-2.30.0 */ +#ifndef TOOL_VERSION_haddock +#define TOOL_VERSION_haddock "2.30.0" +#endif /* TOOL_VERSION_haddock */ +#ifndef MIN_TOOL_VERSION_haddock +#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 30 || \ + (major1) == 2 && (major2) == 30 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_haddock */ +/* tool happy-2.1.4 */ +#ifndef TOOL_VERSION_happy +#define TOOL_VERSION_happy "2.1.4" +#endif /* TOOL_VERSION_happy */ +#ifndef MIN_TOOL_VERSION_happy +#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 1 || \ + (major1) == 2 && (major2) == 1 && (minor) <= 4) +#endif /* MIN_TOOL_VERSION_happy */ +/* tool hpc-0.69 */ +#ifndef TOOL_VERSION_hpc +#define TOOL_VERSION_hpc "0.69" +#endif /* TOOL_VERSION_hpc */ +#ifndef MIN_TOOL_VERSION_hpc +#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 69 || \ + (major1) == 0 && (major2) == 69 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_hpc */ +/* tool hsc2hs-0.68.10 */ +#ifndef TOOL_VERSION_hsc2hs +#define TOOL_VERSION_hsc2hs "0.68.10" +#endif /* TOOL_VERSION_hsc2hs */ +#ifndef MIN_TOOL_VERSION_hsc2hs +#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ + (major1) < 0 || \ + (major1) == 0 && (major2) < 68 || \ + (major1) == 0 && (major2) == 68 && (minor) <= 10) +#endif /* MIN_TOOL_VERSION_hsc2hs */ +/* tool pkg-config-1.8.1 */ +#ifndef TOOL_VERSION_pkg_config +#define TOOL_VERSION_pkg_config "1.8.1" +#endif /* TOOL_VERSION_pkg_config */ +#ifndef MIN_TOOL_VERSION_pkg_config +#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ + (major1) < 1 || \ + (major1) == 1 && (major2) < 8 || \ + (major1) == 1 && (major2) == 8 && (minor) <= 1) +#endif /* MIN_TOOL_VERSION_pkg_config */ +/* tool runghc-9.12.2 */ +#ifndef TOOL_VERSION_runghc +#define TOOL_VERSION_runghc "9.12.2" +#endif /* TOOL_VERSION_runghc */ +#ifndef MIN_TOOL_VERSION_runghc +#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\ + (major1) < 9 || \ + (major1) == 9 && (major2) < 12 || \ + (major1) == 9 && (major2) == 12 && (minor) <= 2) +#endif /* MIN_TOOL_VERSION_runghc */ +/* tool strip-2.40 */ +#ifndef TOOL_VERSION_strip +#define TOOL_VERSION_strip "2.40" +#endif /* TOOL_VERSION_strip */ +#ifndef MIN_TOOL_VERSION_strip +#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\ + (major1) < 2 || \ + (major1) == 2 && (major2) < 40 || \ + (major1) == 2 && (major2) == 40 && (minor) <= 0) +#endif /* MIN_TOOL_VERSION_strip */ + +#ifndef CURRENT_PACKAGE_KEY +#define CURRENT_PACKAGE_KEY "hasql-1.9.1.2-inplace-testing-kit" +#endif /* CURRENT_packageKey */ +#ifndef CURRENT_COMPONENT_ID +#define CURRENT_COMPONENT_ID "hasql-1.9.1.2-inplace-testing-kit" +#endif /* CURRENT_COMPONENT_ID */ +#ifndef CURRENT_PACKAGE_VERSION +#define CURRENT_PACKAGE_VERSION "1.9.1.2" +#endif /* CURRENT_PACKAGE_VERSION */ diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit-ghc9.12.2.so new file mode 100755 index 0000000000000000000000000000000000000000..dfa9af0f7e56f317d7b45b6832b1017f802bc672 GIT binary patch literal 189672 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/build/testing-kit/libHShasql-1.9.1.2-inplace-testing-kit.a new file mode 100644 index 0000000000000000000000000000000000000000..1e6a432df40d918d03abdd34dc2559705e3745c5 GIT binary patch literal 149402 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/l/testing-kit/cache/config new file mode 100644 index 0000000000000000000000000000000000000000..b588ecb4e7cc216736a90dbcd6cae66440b182c3 GIT binary patch literal 13062 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..4f801c3f075665cb4aac681835286a9e65e41bba GIT binary patch literal 83016 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 ZVL#HvHeYVCvFCl0Ax|l8Kt3y0{~x=AkK+IU literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.hi new file mode 100644 index 0000000000000000000000000000000000000000..9a5cd2647371bcef9b42a0ba7e5ccdfaa46f0be1 GIT binary patch literal 28481 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 a78SR&C}Zfr7D=t)lcls&C$Hz6L;eSccxt-< literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Results.o new file mode 100644 index 0000000000000000000000000000000000000000..4f801c3f075665cb4aac681835286a9e65e41bba GIT binary patch literal 83016 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 ZVL#HvHeYVCvFCl0Ax|l8Kt3y0{~x=AkK+IU literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..a155fed4f61c963ab31efaa77120bf6512bfc560 GIT binary patch literal 19936 zcmc&b2Y3|Ky65a>Q`pc^iV{I`v1XZ>?TB8f8ZQD8Ecd>5pUzGR(PTI5ZUpXqg@hJ5 z2q;0M1nGiw5DW&xn7k z5TooY$7#i(&g$H22ToPa%*CU3=B~*9aqFm_2)$l}kl}fRo?DO5(~A(o2u;b`c=D?~ zOKRWEzOl6W+ilAZTW8G3Kd~?G+rs7eqr2zN-JN!D(Gq;+=BYEsCtN%5_Q_FYr%%^j zI{9ClCV&2E^}Ji#7UG{~@1J)3^7^sI@R+UZFCAMq@5oeqdCP%2BR-mNvmBRhD_OTZ zXY#n^cy!U8+;Phm&FqHY5C0H_Gze)Cib6<-a5U*`g<@h+Tmz(!NBV}SQDfAkDQean zwRi+Q+7h*DjoLhh+B}Zhv_%O|poDfPp*>1?5+!s%35h7-Pbi@ydg^KP%(Lj3=Pn}j zd=h%zfI2a#6N@@=sFM+OGNDdp)X9RZHe|IUYiDGA0a?2s>x(GvB^38(6!$WU>x#N{ zN8Ng$Zaq=AUZ~qEsN1V3`8D*H-str{==Hux-w)~EK>GejpMvxQkp4}ie+%i~M*4S< z{;x>?H>CeJr2luM|2xwE2Ws*zdXGo%IglVCNk*vyQED1`{{!@XI(k0?z3)Viy2!~M z%|wITXpjdD@}fam=)=M4L5B=Q|M(~R$A6-P|3V4>jS~I`B@DwTAsc=<@EZ=l5%3!c zKREp;xQvEhN0f`lU}(mYW*lk8lV$>GCX!|nX(p3q3TZwf%~aA%Bh7Tud`y~8NHc>p zd8C<%(WiJ8X+FbfHl9P8xfne&4}SUZn-9Ow;kN*O&!J})f^cb$K7vrEMR>%Lsn=Iz zuPJ%&@X}37&R4G53>YC`^SIJs=g%#e`^z(*Y_8r_wtCIf1k$}2Z`^rvcj1>44g(Gg zPk&xjTy*e9I$;UEx@=TI!PTjYHsg;*UmrF4^QmQ>$&{sd<>iwfUtV1>{I4~~XMMeR z)6N<|1qPPkg=Z^H<}SK=c|5)_ck!riau(dBn|y)yY%V^$bKkz>kBnV9?!xqIJNA0W zgypz)>7+}$&t4ew){Wbh#hVuIA7LQRHR|Ai1BW-2?5tWb@~@=-OMG!& z(X5l@C)cK4UvR4YhwmrlQ;b&P?el9F{ruU*iz#zPtzWpJcE@a>J3@_C;omlIIy+)- z<>G00!R*7o%{g|v)JO(aDHODk&5-@a7*9KsqjudwKwGgY6?e6f7V zPt`Zq>|Hn!<6Fhq2XnIv4jsp()wAv;mu>aYo?9OmT}&M(_6Dk zcO9``J8`<`=AG|O|LCO2*QemK zxAq_Z^!SaFX1oD^HuGXx@r@lDFXAQ3Ze6K3S3WucZ^XA|Tqrs{=j8fHc^uJ^}}O#eDd7V-?rcWW#TDZR5a^c&bb-O{}Tv_qQAnMe?4Bh zdQ{2GUK?&tT6KNdoSLr*?Kk1g_Hm@qAl(nRTSv?e;H zbZg0y{W~hYdhf!)J;!oR&H8a5z#tSuwkAgIse^@=H{?#advyWcc|Py-*5NSVuGp$_>N(wfb|XH_4;UBfCUZ4&}cPS&}uZ$f%WRW5Cu?8aXi*& z1RaLEhFUB{!$S?{v-X;)}=c;GDJ7E2}Fn+}(kZ9@sqzxJu3&bVwnJJP2{I7)1#Uu%O3691?UO zAyKga7z5r=i;)&MuK~frnrN+-+-bm1Y8qoL24y5mg2xoJMTB?sZY!LD-fV;A07`?l zVVzE=Zviqufr{{iRrAJ=nKONVuPHSP4(H#zb72cc%|Psm5#CO4R8d6=<0+Eyv~4If zMA1<(uzVD3riImkxPT7^-eHhOc!n!^rhOo~nEc=gaK?=R7Ze{w_kaZy-02<^-(oDp z)0-U_wjqbwi2;`0l@QWI>*96ss2DfJM0{Zg7FOjK?ZhBzp>pom091l^0V1P@4Z9Sp zDaB0suEtwPM;IBl;Dh@M$9++jyRhM zEk@0O@<0DRW8+aQkvbfSxlumm1~J>mw@?Q4B^)h}O3xc7~cK zA{P%U4HY5MKvaZsU#D-SvY+ZnS%CbF!^lsRfgn@>sG|BrBOrf8f1o5pFz9t9p#Ybx z{&wH>S$k?P;M}X{vU9ggyR#0XCLju9>lcM4cmL`0^Y7e_MNPr3r$%HCQhX&jnR+^Up-z(A2|n}O)XzE{(qZ_gn&gP4 zIuZ+YLD~$SM={%wmDOXmDPEL;mBF5k=tiMpxyyZ4eQ#Z>9?IcxWe2w&rtIZ)cukyM z9V1-eV=Yji1lOnRI{jm+M^rFZP_D$_8~kRsSv`7RNaSj7U2LdJQ1!k!M)x6C_ZC+S%^cU znEgTV3n;~YU;MH+H25pOZ&&2!L;X?7efpy11>0`@vhz&Qc)az?PbzEH-P*#Sw!pL* z^)gLm9LN&63%DeIbOIs*+zPg8^>UAd%&=Kw3~5w7Rt)y=n=jat+B2|CibL8OiHSvZ zbsvbnHJphLY>CM3)CApc=op~XALN*7mQCEbVb$=NL$Vib8-5~x){GL2o&f96UU)=H zGtze9#zEg+|KzMw`NJzFtv@>GWX>ncE^S&n4eCcv!mJ%ZSj&=NuN0Gv|(fwm!S zV}B+9TmWbBD2hS*z%WDFuG4ow<@g)$^od#$wpU@D{!i!|#Vr7Tlr(3nFU{E+ssW%; z)Qo`mK1@D*ykzUfQTx|yXm{%7@tV6o)Qp5WQhSi6*MwH8wd@#75FJU;W5HfNb#FW8 zvx#axs$xoX&NmV;dtf*9Pv0Yf@Xe@`+eRWlgiM0CyU>C_=-&UA<%SI*emzJn=#MR*KFQ44;P6gCw3SJUign6?ofR~IkIfyEVzh|t>Hjd!N3 zxNzl#rN87I+P!znJST#;O{lHVR)rp&9Y95I(05w<&FRYZKNa43F0bnIz1O~5UGyzR zonS^QApvQlVxknR<8ahdJ)Iwx?^&^G`RSFbUaOcnw|dOt3;BQy1He6h@1)yL{IKW7 zt&;4g;h>t>58GC}^TOr#&%ilZa!#!0=6${-|BK_(_qN(|ee=44bvIW78eILyyjVVE z_NkhArJL}SWvgeO{BB-$XT;v?oW_ER(chO${JgRjUpu<8vhYIHjb?}x{p+5yziaTw zQ(xy5&6u<>8<$j1Irhb*%e(Z*1i;C^cg_n}R+k<6u6kTYdd@0-{oojXg}vo$<(lf_)nm6Tz}v2WF@EW!@vDBr z$O2PZhOtQtT*}F*op56QiV;aw1@mhUtiJx$d&qhp$ZKMI)z(bh^WR-35NXUG_kF?k z?Nf`p0P;2k`7s3f@6LR?YWDeSBj2xGckTT5i-+y7Bip@Dw~xA0IHI_?bmmX^*4GPf zo;^2l-#f@233H%(>D{R(znXq0JLCL@pC>L}acz`{o&(T!!V{|WW(P^HPTyJog1*bN z?fGZsES@>K8gJP$;^dP26PMxLTbFyG^kUhF<#`o9W>^2cYUS)BOE=fdO+zojgpOgf zZ1yVe8I*45Aqg%~a(fJb;Q6(83dh&1SyYOrFPK_+^x(8ZM)bnH_Ihc}_ebZ?TDAWB zd_3;z^qR|uPF!h@UV<6Vgl+c7K(bj9Yp@$w1DBNM%uMG6Y59T;RUiL)IFH#h_S~;m zD^~8T!5T<-Kq(=lgJhfh>4bJdd-y#GzYg$Agx{Z_5TOO%_-E7wczWg1iQ}_w@7VbnuKXqE&WsrwHxvOOppf)I@OeAJ zd1Hd#DfsI`8l=;bcM3tdZ}@#QpzQbS^-<#>7CJ_tMl{qwcEh=Kx@vp~AI3-UQHY?( zpZ>_0VOL_Y0CDouAOPqnNuR=;H3ih^Yr-KRyzU-P>NGw=cqtvCDC%E9)uiCI)zA-chz5$p@o0#&6d zd>mdV9LL|o!qfc=L#_e{D6bRXmD{U$1{uO9)cElr1Qf|2uOJr~9f60}d=Dq^N&lOP za-h2gg)XJj{{_Mk_2tCgAOPR{ooFabodS}>>yC@DnsR)agf9^Uu;U*ifCc$;PmP#3 zZt`Y4aq6&&qQbR{;T|qpYu;Vk1tS3Id z@yNp2(pSw0XBjDI(id#c;qzlokJ>c*i@V7)zpWUxdf)mP?~u=jG#SBi*HL($8a^l- zDR%z<&hUYpDQ*BN6GWgY?%(hg{l6MMA?X3^UO>!=uqoy#)cO$-rnX2((&;~@R*zV@ zf6e}p#i$V_i-j1z;B9pJJl{Uy*6+*%SwBNq0UbyaUK;^KpbK-Z z2{f)5xx?sk7*M|upymqDl`x<;LV%hmKv%GV%aXxcs<OQFHPKO7_Cq$Oc!D(yoIa#WLAjxBZ-8PAbq9hUs)8SKg16ltJaR0Uz2xgV_>0s1 z&3E%}%1uLpo)7VO-M0t+PlgK4t^gOB^!1wyB~ zH6P34iBzg~qN#49GRa4@=KhI9z^E+=l4>f!K^#$^{dA5+Tn(Ut(G6fVMv#6(yOy>$ zNvpj@T1;DFlHi`U=r(+f6p!yv$h)*1rXimiYO^);t2b>9xqgJT!$~lu9YI<&lD4C0 zJDRq+8uE=L8lzmsDs#~|c#KEm)u##Sbt3JZq<~H)4|ob)V43c8!L9O-Kl)U#rosQyZ}CURLI zLS>>wSh3&CzcVYf_*3xux_hQ96t=T^?_$TOu_GN1Bs& z4^3hWtjPdPl11P|hf$VnCYyzo?1I@U+pVm_!kA1pvq^GDMw{Jc7dTn6ILy4nIZT3R zafn9IWE9P;Rch{E&<52FW0FG9^1S&cT4hjR(MEZU3~ z)?tHDiy2yr)xwx5xtyi<@or%;+xl!i!R zlGn|D2-PLJdzx>UoFA${jLl|}8KAppw}^}^8y!}Y?2uU#>u`uBi_G(kg|j(ChuzBa zCX2+$Mw`VZ8I2NvN{p=?#iCc1Q}DXnhPTta1Cz%a(|Fy1ZrF1;4)`1 z8(|g3%nAZ)+)}E`oyI#AsUAQF)8YJv0bP^Z2PX7#xifgLLB058p;aA- zQ@ba*S*31=5k6RnYkZ%2?YdK zMkep21xj0z6_^2*fMW!kV7J2$b24=WHa zd0b8q5DtWhNwRaCLtt4DRF=2fMUw=I!I=cR&1Prd;C9wzF|oWPvNpjai-JYuB&!5e zFm@D=Tv!a-_+M$?znZ4HnQBP*2ez$v|T`o7Dm5=IlIYwZVT5v&>2so``^1 za9HgYyTk~hY!bjcIZSXb^Jcrx+N;Zg-IrwrH@H)+Q}=Y&U}t#eYpxF@x1t6CNc9}e z=s5!2aFR#Dx(4u0r{q-hg-|Tiefa6$R+$z6@G-_f_*7?<7zzK}gz&jwGu*`NDXeWS zfF0t~z`uDwvaMiVO(x}#00Bbb2lRKQP@}2(G`e^&m_mybX;78~Zp1%Zk+$Hes(Euu zQY8|>*CxqnLjVJ#!IWfWc~BJ2#1Rv3=0T5&FeuL-i7WV2bUjeU~a0|o)nG9;#_d5Ga)k_5?Y zXC*KTJkNrIv6xH@*i@Ev$Y#52wK)WbWCGhP%0|W{S%Fp{Q}932iNp;XC5}~C(W5u4 zXXw$#7dVgMooeccc_vVkk9a;1rhbqD-v=jUZ8ZWI9`h6X^qb=~=IfnP&G9 zy?JNqAqv0zF;e$*-s7o6X_;Vzyu{;L4Xindb65lmNQG6jg69wfBg2}Z z4}wv!$PCYkJO@Gy0fSNI?cgsYhiGO%ka#P=at>KBlF9uHT}9E|kWv#KAaqETs{FxE zmOBj$zr_G17_>t+iXsn_O{@t*K�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 jmh|@UFRgsdVtU-T4z>Am=WZTbHJKV^2Z literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.hi new file mode 100644 index 0000000000000000000000000000000000000000..c0abaa2921a473cfc14dcf0a5a71fde4d89b8bc5 GIT binary patch literal 19933 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 aD-W317*%Cs)NP~t(;zBZ;hc{04gD_+xB$KY literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Row.o new file mode 100644 index 0000000000000000000000000000000000000000..ef9a17ef1b2ee0a49f1bf632080dfadd5ba0f92d GIT binary patch literal 34112 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 jmh|@UFRgsdVtU-T4z>Am=WZTbHJKV^2Z literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..ae49aec167ee24d50aafc0350917d330a0d822a8 GIT binary patch literal 12582 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 L^re6=xpeebAi?&} literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..2e84055bafd4a954e1ccd0a13c251ad5fa2c1ac2 GIT binary patch literal 18664 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.hi new file mode 100644 index 0000000000000000000000000000000000000000..a8c64e83d6871f86f2a1048fafe049c481a38d32 GIT binary patch literal 12579 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 IFS&H|R|3oRfdBvi literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Decoders/Value.o new file mode 100644 index 0000000000000000000000000000000000000000..2e84055bafd4a954e1ccd0a13c251ad5fa2c1ac2 GIT binary patch literal 18664 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..cb1622a3a8fb1a52ec12c199d286451572e2d8cc GIT binary patch literal 7872 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 D17_M8 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..a7de3476610555563f86ca63283dfb20b627b4a6 GIT binary patch literal 1920 zcmbtV&2H2%5T0%LDHH^~A@#B#ggCGk2^{F5QV=Tbf%Zb-8nTIDBl5E(uGGx|_QI=F zeFL~4^<8)oJju+)@@6I4TH4Ia=lN#F9^3n4_ubpI!2oy+;1_fjqX6gEI^AznA2#52 z2VPKf$bUbqzNKO}kBV596~F}Tkt?=^E4)#XPt!1x0DJpyh8psO_aAwj-W32iu-40V zz*wB&;lOpnYSngcR^hAS-&l%+fCD#|aI9prC+};*?^}%T4ZfWBkH&3Zr2Zv;d+w25 z*rwi}Avzi3lg4e|X8Lj5_Nva@I@zuh{q^dM8WuEdtrPBRP{*n~DB|N(dck<6WOX_6 z%d3!I1W{U4$EAcXlc>(7Ws(K@T-C|ZY$~hZs5}fa`96q>JV^4-#pNn=7fG6ve9_%m zuzO2vcd)C_=o4PyJBGbZI^yOn4(NoUo?ki2_l|G!${DLJ;Gs(sqFcx`W6ICB@$1hf$@%=qre*$TFEL%5@d7 zMK#(t)L#*Fu^yU#LVSMDnC6qhl5y?}+YhyZciv}!j&_g0?o-0 n&outHe%?RC?7c(kD+>CP6CtRFW$HJxpFg3$l#dOo``G+{Kv~p@ literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders.hi new file mode 100644 index 0000000000000000000000000000000000000000..ef7335859969cda89538a67160c4ea8a3cd3ddef GIT binary patch literal 7869 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..b164cad5966128b3e59d1a43b63d2d6edb92faec GIT binary patch literal 119637 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 F{{y!!gy8@H literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..66f84b4b8fe65c206a0a3639a164ea40673172e1 GIT binary patch literal 383528 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 z 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/All.hi new file mode 100644 index 0000000000000000000000000000000000000000..c4f7ed94c6378fe6c6a4f69d9c1b4bebec3e9967 GIT binary patch literal 119634 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 z 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..3e17246cf0fe0b72b8d3ee1b868295acea34b541 GIT binary patch literal 22550 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 DeU#jb literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..9abc89c4d8e838f817a96bc9652a09745eac757f GIT binary patch literal 45496 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 yDd~6L@BPAIEF9{=wxlJf`v literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.hi new file mode 100644 index 0000000000000000000000000000000000000000..2a47e6961af05cfd91b528f448f0ee1abf86e6c7 GIT binary patch literal 22547 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%0AtL-eRa#CwZT2ET3;oxorVrnU| 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 AJpcdz literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Array.o new file mode 100644 index 0000000000000000000000000000000000000000..9abc89c4d8e838f817a96bc9652a09745eac757f GIT binary patch literal 45496 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 yDd~6L@BPAIEF9{=wxlJf`v literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..ae1c21b2e78feda255321b339fe76fbb943b16e9 GIT binary patch literal 18527 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 YU|P5cnQ=m?z#fV%J!(8N;?yMn3Au@1wEzGB literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..f0a07b25bb224d4edd228831d5f98a7ddeef02b9 GIT binary patch literal 75288 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Params.hi new file mode 100644 index 0000000000000000000000000000000000000000..29e99c762a7e3eeb3ada4a811a63b1af7bb9b651 GIT binary patch literal 18524 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..9afe3639b7b64d737981088c52df12fbddbd1502 GIT binary patch literal 12540 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..acea04e6b164b01cbf2615af75640159300f95fa GIT binary patch literal 22520 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Encoders/Value.o new file mode 100644 index 0000000000000000000000000000000000000000..acea04e6b164b01cbf2615af75640159300f95fa GIT binary patch literal 22520 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 hkr=tA!pP{Xe>8EE)g+ literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Errors.o new file mode 100644 index 0000000000000000000000000000000000000000..c3f9584ed2807aac5f6b7b06ab6ebf8bdea97e3b GIT binary patch literal 121304 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�V&t!Q@k$Gjydx>Z6G2aWKx?HM5x{8b_FDdEP5oxDcT`ss5=Xr9XV!g1)*Ar z#2Ks_^oUgASCT?HU<%5G6k}IjPhwKXjyMDGlTohI0dXJ18U)jol ztOR9A9bHXQ;Ukx=c8pchM7>QCzco3$CB%l7Qb|-jE^?t)i?XtCgPg60gFa)OZmXow zM~kHhcG=3xdO}g2HnxLH`Wgv>d9lL@tKA@{Lwdn!Ku_~{hZZb>K>#nGAdJPFhS}04#4gmFVIt@pIIJc-0iklywWN*OLP+Q>! z2^6Pp`RUG5BoM8q#j5MS11rVaOqPoa>Q)xR!fvZ9LfuyyR2HS}rj=I3mtg(MvOV@h zp0!2$yh@8?aZGxrnIGY5dz#%#8Km%}8#evaja|O_dpic(3 zw7Gq<+lJ#?5J-dvhc<`kwPA-t7L`pr{&<^~>W-@~HFZ5#5`kkS$D>pRtez{?QsQUK zxZK21DYYN*2z_r;hdCaahjTE)gH%?i2eSPpso40@l^5GEN$}Dpy9MY6&_qeH(5S`o z#aW3os_tpYc{sahU6>zW4NI2))F@SM%t>kn080xC;If+%&0_cbNSh%=nXnzL8C7B$ z*4d%(@eZxM4H5E4DBL1H1Y!9RB^rgO80}E_gcJz_7t9P7s_H3E^s zqQ{g1oTosVQB$NioE}A{d?g(K31HL)48sWJD;3~T)`Q#Qk&lNVVF4jEprweM_}w;#9mtAoQ#?*CE-|dY z+Fq?A@6m^?3?_b*qmh-ySX+gQ3!-9tuq#f5Qs95ojDG{-^JwbBI0K^DKTjx1uFYoap#CsRHQ_nY~k@f z*&;DY&lT`tdal6sTu2n33*lmWuHYXXt0!A%U4AZ<7_H|*e7K$qwQk+!$rkM&jVclF zyZ9N(%=#gsYYzOJLYF4lV0~e5cAR0-qCf(vpC_@SUk?17__=t9!<^6ZrgK-!1X_qw zQKTdjasr+l#FPx2{n$at^t4i9YWjB%e%`eF!os4Q5O9KyN(60HV%U;F?s}D?5Ea>I zI+^35U4$qfTsQN2sw-WJ&@zP=>!1=1qs=_t%i?`zIHHZatVb?>XXh^Kotxh|x$A=8 z!|&8k);ga_igZkC`ghTmh8vOHiR{j9!o2Y=JB8RiY4F@*F2G^)9zhaK;h4ya@tR`y zh-MZirt?TqknD(6tM~EjE{vTUKM#IhG=TklCM6Q#vFXCM?4YKqV|bQ(O1xSpDD@nekZ>YdtIF7c0%e0Tpd! zGsR2xa@Qv)Vj8HJJ9c*GV2+bHF6Lm^!bQcgnv(oXaVVmI`NoN+aXh3-zHy7(Ns*sU zWMI-lakLf>%`=jwg$IFSfeLGPRAOw=8p);(!Yb4PmX(e0I3ukQ3Ws8es%qkSk^)we z2)T`sI6xIXI0`%IaN&hLU8=*PIEzgVZ^Xmn+_aMTJ6L>z-&T?$t7$Cq2w+LDaP^X{ z2RIV9Vn&BZTd6?FO9a^yw@z)H2K-`L+XvdTO9ML=Ga%hyFvaR1s=`QoqY=T`wb^O+ zbQ<#{Z)h0Uv^EZVlX94eil6-{wAww zkZSJ4Zpda&nzGes<1gajf#Eo~qe2$U+izi`g9cd$d@IlvtWe0aRE7 zaaI9QGbX`X)H|s31hvFk4&~ou2ze+Jj@`mb zVA$pqm#5gG$7N zOYN2qJoW&aS59K=91!kkZuD#8P1qAunrzhfuh4t0~+4u{8{ zVywxG$KA46LE>i|DSm#s{i?FRJ)`Xd9KFv5e~s%_WMHB~(N1DEn-RX=#T@;X?-c i`;*15c`>EPqAod(E8`x*U>*Q?Dc=OyIb9Vi$o~VR_KNWU literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..2ab05ab183ce26f5beec3282e344261558f79b61 GIT binary patch literal 294832 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¨c?{3~PvP=k{ZESg&*1Veev|ZN^tVYbUgCQ8 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.hi new file mode 100644 index 0000000000000000000000000000000000000000..0327c88cd770dad19335bf99ececa92b455af467 GIT binary patch literal 52485 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/IO.o new file mode 100644 index 0000000000000000000000000000000000000000..2ab05ab183ce26f5beec3282e344261558f79b61 GIT binary patch literal 294832 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¨c?{3~PvP=k{ZESg&*1Veev|ZN^tVYbUgCQ8 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..181fa4016b2115d046bcafe947e20a6b4f14dc2f GIT binary patch literal 17139 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 CarVFf literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..3a0462d67870b8a41785ce3962daf20c7eb1754b GIT binary patch literal 25576 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.hi new file mode 100644 index 0000000000000000000000000000000000000000..d8d1047fa15d47f2cbc9ba1defc256efdaa673f1 GIT binary patch literal 17136 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14.o new file mode 100644 index 0000000000000000000000000000000000000000..3a0462d67870b8a41785ce3962daf20c7eb1754b GIT binary patch literal 25576 zcmeI4eQ;Fgb;hrD!Bz>jKCA>y%z(xv9Zh1(NT@C8;B@&gmZ!EOgEG}nW>!MGcy}Uc z#qO$>6}43{Y1Nn}5~d!vrR}=GE+Gn*srhiK+Oq4oG$yGauFW5GMxA<6CNM=%8f$0d zanHH;JiBL)c5PNBN&nEDVeh@a`@GM4-gDpg>fU$n@(1@mu-R8q;$SIpPB_^;P{+B@ zmfa4xn*nF3^NEbMTn_KM!#NZ5Ex-6ppVLz5IKx|f&d9#qD`(zb5=if-V`rBH_FZ+H zV`qJVbilXrZMd$GjcO`W?GL1@Z+1q`#sepR`}YG+Qn?X2Tov~PXSmGD8vnl`M$~(3 zhcgmCvOfKaukvD3iPJ*$q$|j)p6Y+Ww{qsF&q<%$;G9`T>^)-aSLq)-8-JrDt$lqG z2gU9#`FzjZ8c3Is&*c(lsC;eH6Fjr+>)b zt+dSx*N^;_QvPu6j#51*sh$&*zY|msNvkT!oAdT5%E8-|%lPi>dC}fn#}YQDWgo@G z{bJ+NtT(sI?Gy39%&z0>)AiK8#wAYrg*%*)*vsqFR~9>ImwzFUex6u2u^*NM(w9qa zeY4(I_GXOAT)D?dzyFn2zV*J}8JY6mcDTYB-0~lE93lE{#)ogZ1?#`Dybf~?@&xzZVIHobcb_h7j4&5zvkF4 z*9Ts@{Cj~XFaIFhVo870HG{7cTj)Ab>2r>G5IV0kq$wwKrHAek*hU(?9 zYWr`!Gk7-WtGM`#gFZ?=OT2u|(0IkQgL6pnR`GRcF>TL5&i}db+xoeYogJquX8J>;;m}76 zhyS4A&`%l;{gmO*&l(Q>($d^Gp&v3F`jp|&PZ|#Wl;O}jzm!`q^wow#Ut>7*YYm4! zf-kP68tD5Bhkn#>=*JC*e%f&8OFxm@F6dhghdyFB^m`14e!t<+moLq&7y4Smp>H)D z`iSAs4;c=9%5dlp84mq~;m}X>7u9NkKJ$gF9D}|QU(^bRev{$Q_ZbfTu;I{884mrl z;m|MT7c9#|(#l%5dnX4Trwm{K1C4)^O-o8xDPw;n4Td%K& z#|?-6wBgV@^w6jm=&KEfK4LiZeTGB7-*D&;8V-HyZ91Cl-}fHFp-&kO|1ra%pEMl$ z3x-2KZ8-F$Rk?9OzxI>49Qr21p&u|D`n`rjKVdlZ=M0CwmR^X^3-oIZhrY#d=tG7> zpE4Z!F~gz1U^w&+O)lsK`qhR*A21yHHp8LsGo0)4JLZqI1mJhfA5-G2tjKepf3I*e ze4Vcfuc5VGPSFngtksaVmrw(kHycjx=()Vj@UIEC_xW!KA2NC$-5=W+S+c4CZ!W-h z7vM(<@K=df(sLH>^EXLce!4%-7f%E6iagI>j~38>OZ4_#YPFUoXI4F2GL{=ktQ+ltt8Ucqya% z?0j*qEWkGq=X|Ez(%Fxp0{X+mxn4Yvv`LYR;xm@DaJTNJfya70Ur>78B}Sa{vUbZ`*QZLmb}33`=ZDFd7B)#neLC>er5Fc5qH}w_s@v` zanal7<=2GsxYx^4x)075e>-vZ$NezkKS-S888$vY5k2l#+oY1u(fuy#Q$`;n&i=Un zMEuW--agk~6+U5n?xFk9eDOa?oc(csi1^C=UxPNPtgKflFUv2cy ziXQi4i2ui;xAO*{rTb3yS!;aa#Ph}fJ>nb>?w8g{yKkcV#eDiL#Myt)_&-%Z|L+C( zXULrE#eEU-5F*b0!^ZzP(c?Y`d3aa!DWm@k-7m7wnBigKRAkO_oH)mW`;euQhyN|0 z-$3_&>_21t_Yh|v+z+5#uZq5uuIqX!q5Ct|pU#X%xv)vnMTkY zZtrkZ;@!yl(?qa^>4NJoEHPdwTcq-o;*Xv&4*5sbT>}l~%a!dRnO5@gGN36Tpre*7>&(txW2s4HA_Cl|d z&nG@R$ohLb+joRJGu62r$?cQDj)d1m-R{eL>z0;agO`v*Z-RSlOC%m{54nB2_tAJe z_2T%pjjOk9EZpL48=LqGo6KdiKe~Bmblb+}hizaEUr)Qjss_67<{xP^=7RUHX`peF zIbj^`BOSr+SUmhlF_+=~(4#gGX)qanIUMd;-x>YgaDT)OXRqIEZttW~IiHR>w^q31 zJ^wB7-ucvHn^yF|ooj$F3!icOchY(kJHqCaFFpkQcghX`&Udyi*UzgjYyTqd0jTro zlEo&*7XNs8DY|dy(C2gQ)8&h8dQREm+iky-{_sB0Ft0vg>nN^Y*wV!&i2BAHi;thD zqWg%AVLtuDdK8 zYv!kN)*}Z+?4)5)^BF%zikrT_uOK;JgOV>T0YpX6_Y}0efqTM`i zw_GOgZlftao+50P{Tf++(r_IAb>dHmhF2}J&GYA)M}&Wx_+HuO)dAT?y_myH2}ix) zV@l6+iqO5N^qQX(&h`GOZ1ZYHwo&hp?9a*?^@5jEd0yD(>)xjO*(#j#@D0Vc3+Fs& z-Xk3KPDz=haMTMvr1adbL!#fS^qTJ%ZrgiK`S2#k#mjkFqh9c7;p{WwN!`y`;T-=y z#qpmAu#e`AGLMY*;{86%;?=z}i`dyj3u>apF-l_aG->dwYBTjrT%l^+PpK;|+ha9}WIidVDUq#>l@?yv1 zCdI$)N!-tn;(9zTqVIWmvE#8+xE+tp!jWgZH`*c`c?J&&=k})Dn!Jwz;pqR@jUMlro-}&!)519(Js!^sxACAH+Kcy6-!=Z=rKMg&tWULYJ06z{x8re> zaIW_|DsN4~InSE6DgS4cKBW9LPb&YzO5dmaH6IktdDG+ZfN*Xv$Af-8s{HAYGbQ_D zvPM4vKVQJ-l5nnfRK++!gk-Z$XIj>lo)c08UFjyUmN@Oj~g6a12JZg0x1$@^GD?;-Gl ze%ndMdAUgN5^l%i zLE&~ho)*sa9`jP;eohMKJZOGF`Rj3aN%?C&tNf2DfBMhx+=cx$FBQ&t)8lcKaLyaY zgMQv99C?e#{#se%Jc5S`_#}mMy|}mM0Q-cq{|Pr@?_)suYkolaGe?|wZ-)JkE1%QK zpAKdIL##>VuX*DwUST^PTNM8X<)2hskH;!{UxgPt9;=1h@z^FDdB%I+A>qg~cv3jG zH|5skee4yE{{ODqILf*4$9wB1jX(J7MvwQzPZ>SuV+jvk8?ZtcL*Ni`S zb(z;b>r*S-j>kKN+wsUh^5=!?{YP)p{cIJ^dDgr~`Rj3)RQ{UpQU2dm{zJ-N^I_qf zH$5Ilg>!p39`y5Z+JS3ds(c>{G z+{S})i07c_28=&=s({Za;hg91sXUw(&Ux1SnsBc74W*wE&Uw(hTz)6O{{O7>Rl?a{ z^VLd!O6ePwUh_@DIiA;)zDYR8qj|G%&hxO+cM9h`bNm<=1InKcIb*UvC~KT|@X-Q3 z3e=cNcd2wh6c6_mFVJiQjpQ3P+sa8(k>6dw zAAG5B#Dm|3lp8(xD&ZWD9>0ykZ9FIkfBcSQo$&{6E8v6U@WJm(BE|=NKsd)asq!`~ zoPEwHzF+xhJ}TU{>viSx1Lbo{`Di{Voa52saaQ?rz3Asl<@YLRFMjV*E*$3(e4TKP zQ~Nw1oa_Bp6=$>Z|B>P?%3t%O@@I}X@!l=_pH)8CUZ$rqM^Rp{rK@K&ym39ecJN>2cpsYK>z>% literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Ffi.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..ad8cf76e2a8894ce347e639dd647d2c7ad1380d6 GIT binary patch literal 7328 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 D&wQ?A literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..2eb16280b56a969852dd9e6b5355f11b43aa895a GIT binary patch literal 17344 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 Q0jVNKk`z50$g9!+0qG@t+DNSQt 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.hi new file mode 100644 index 0000000000000000000000000000000000000000..fc7a0e56bb108a547228ea3b052edaacaee495b1 GIT binary patch literal 17341 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 MNs1m0 Maybe ExecStatus +decodeExecStatus = \case + (0) -> Just EmptyQuery +{-# LINE 26 "library/Hasql/LibPq14/Mappings.hsc" #-} + (1) -> Just CommandOk +{-# LINE 27 "library/Hasql/LibPq14/Mappings.hsc" #-} + (2) -> Just TuplesOk +{-# LINE 28 "library/Hasql/LibPq14/Mappings.hsc" #-} + (3) -> Just CopyOut +{-# LINE 29 "library/Hasql/LibPq14/Mappings.hsc" #-} + (4) -> Just CopyIn +{-# LINE 30 "library/Hasql/LibPq14/Mappings.hsc" #-} + (8) -> Just CopyBoth +{-# LINE 31 "library/Hasql/LibPq14/Mappings.hsc" #-} + (5) -> Just BadResponse +{-# LINE 32 "library/Hasql/LibPq14/Mappings.hsc" #-} + (6) -> Just NonfatalError +{-# LINE 33 "library/Hasql/LibPq14/Mappings.hsc" #-} + (7) -> Just FatalError +{-# LINE 34 "library/Hasql/LibPq14/Mappings.hsc" #-} + (9) -> Just SingleTuple +{-# LINE 35 "library/Hasql/LibPq14/Mappings.hsc" #-} + (10) -> Just PipelineSync +{-# LINE 36 "library/Hasql/LibPq14/Mappings.hsc" #-} + (11) -> Just PipelineAbort +{-# LINE 37 "library/Hasql/LibPq14/Mappings.hsc" #-} + _ -> Nothing + +encodeExecStatus :: ExecStatus -> CInt +encodeExecStatus = \case + EmptyQuery -> 0 +{-# LINE 42 "library/Hasql/LibPq14/Mappings.hsc" #-} + CommandOk -> 1 +{-# LINE 43 "library/Hasql/LibPq14/Mappings.hsc" #-} + TuplesOk -> 2 +{-# LINE 44 "library/Hasql/LibPq14/Mappings.hsc" #-} + CopyOut -> 3 +{-# LINE 45 "library/Hasql/LibPq14/Mappings.hsc" #-} + CopyIn -> 4 +{-# LINE 46 "library/Hasql/LibPq14/Mappings.hsc" #-} + CopyBoth -> 8 +{-# LINE 47 "library/Hasql/LibPq14/Mappings.hsc" #-} + BadResponse -> 5 +{-# LINE 48 "library/Hasql/LibPq14/Mappings.hsc" #-} + NonfatalError -> 6 +{-# LINE 49 "library/Hasql/LibPq14/Mappings.hsc" #-} + FatalError -> 7 +{-# LINE 50 "library/Hasql/LibPq14/Mappings.hsc" #-} + SingleTuple -> 9 +{-# LINE 51 "library/Hasql/LibPq14/Mappings.hsc" #-} + PipelineSync -> 10 +{-# LINE 52 "library/Hasql/LibPq14/Mappings.hsc" #-} + PipelineAbort -> 11 +{-# LINE 53 "library/Hasql/LibPq14/Mappings.hsc" #-} + +data PipelineStatus + = PipelineOn + | PipelineOff + | PipelineAborted + deriving (Eq, Show) + +decodePipelineStatus :: CInt -> Maybe PipelineStatus +decodePipelineStatus = \case + (1) -> Just PipelineOn +{-# LINE 63 "library/Hasql/LibPq14/Mappings.hsc" #-} + (0) -> Just PipelineOff +{-# LINE 64 "library/Hasql/LibPq14/Mappings.hsc" #-} + (2) -> Just PipelineAborted +{-# LINE 65 "library/Hasql/LibPq14/Mappings.hsc" #-} + _ -> Nothing + +decodeBool :: CInt -> Maybe Bool +decodeBool = \case + 0 -> Just False + 1 -> Just True + _ -> Nothing diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/LibPq14/Mappings.o new file mode 100644 index 0000000000000000000000000000000000000000..8354281c43918a07817d0fc2fa926a44e3fb3698 GIT binary patch literal 41792 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_hi new file mode 100644 index 0000000000000000000000000000000000000000..7469104272d590dbb65d5cd42b9acf8c7d86d59b GIT binary patch literal 6430 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 BF_QoQ literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..f9495fb56304517eaaa2842b683704355e3558f5 GIT binary patch literal 1920 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline.o new file mode 100644 index 0000000000000000000000000000000000000000..f9495fb56304517eaaa2842b683704355e3558f5 GIT binary patch literal 1920 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 b!XL@L4p|FNq=}G9 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.dyn_o new file mode 100644 index 0000000000000000000000000000000000000000..57adbb509cbcf6fa74552336886594daff21e1ae GIT binary patch literal 226080 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi b/dist-newstyle/build/aarch64-linux/ghc-9.12.2/hasql-1.9.1.2/build/Hasql/Pipeline/Core.hi new file mode 100644 index 0000000000000000000000000000000000000000..b1e89c871b638b494a44fefc0fe06b286276cd8d GIT binary patch literal 15671 zcmcI~2YeIPmiN7qWo%>zFeN}Bfdo=s)_OCekw(g9UzSi3SONsY%WihRZ{KKU1lkzM zk>r41+0O+qz4s0VVyeMlFfG(zQ*2X=DF#fj>0nyGV9Iyy9Z8mKh41m+e)4bb+A6w=lubpe`<@+yKf`Z;b(-}+Y!PD zRgcSDwed+_;R`(d*4jIjd+yEop<>)mM<3LjPyI6W`tn0d7nE#Xgzwi@Ub`^IKK9UAVVtOa&gjd(+*Dyv1jy;(I@py%;`ad~Fdv zu%{qzP5Pv{DKR}&7M4dlE zoqvNme~dc+1L_=)48KJTix{pNAtR5BCKO{vf&~dyBz%H|e?-EkNcblt{0@Eg&*-x* z=(Eq!XI;@}-Oy*ioPy%)=*>ZBumcVL zFZ5j^8sbE*B;@)Yxjo43Mebze{sFZgN*33C7)tpgO8FB?`7=uS3;OT><6CPgPQxf2 zXOLt#Mx95%GZLOmct*i98lExmjD=?$JmcYkotOZxiSWduNq91bWC}^9l4Kf5rjuj_ zNoJB{7D;B4WDZH@l4Kr9=96RrNfwf15lI%4WC=!DcqvJiVYD3oNRn)fm=*A>gl82z ztKnG#4~LkwpnSS!tq~G(@bDE=AFoZ@Q1FNHm0MTbELpz|=8Zt)V-KX>ys>Q2qmO28 zJ6(7%cf(ZBT@<$t=kKpQv@>UX`6xVddDYU=eY;Lwr482Or7Q1@%sN*-^Egf)eQR}b z(d@A>8EBJ>*WJ53<6iELjDI_SVcz!at^3czRDrPpm#n$D^M=XPUM^)@o-jQ>uJx+pOr7EJwFuaE%WfxZCkGoKT?uC4KG_z{&Zo*^8-f0*o4#1 zZppb_Rx{dLwX*p9&F6RbeT=XM6`wmZD}VU2xui| zxol*5SG<1qvxiT98h4BzHRi_7lsB?pI*6`Wk=ianEZun_n#_RJrkd~dHK