packages feed

pg-store 0.4.2 → 0.4.3

raw patch · 12 files changed

+149/−159 lines, 12 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Database.PostgreSQL.Store: parseEntity :: (Entity a, Generic a, GEntity (Rep a)) => RowParser (GEntityWidth (Rep a)) a
+ Database.PostgreSQL.Store: parseEntity :: (Entity a, Generic a, GEntity (Rep a), Width a ~ GEntityWidth (Rep a)) => RowParser (Width a) a
- Database.PostgreSQL.Store.Entity: parseEntity :: (Entity a, Generic a, GEntity (Rep a)) => RowParser (GEntityWidth (Rep a)) a
+ Database.PostgreSQL.Store.Entity: parseEntity :: (Entity a, Generic a, GEntity (Rep a), Width a ~ GEntityWidth (Rep a)) => RowParser (Width a) a

Files

pg-store.cabal view
@@ -1,5 +1,5 @@ name:                pg-store-version:             0.4.2+version:             0.4.3 category:            Database synopsis:            Simple storage interface to PostgreSQL description:         Simple storage interface to PostgreSQL
src/Database/PostgreSQL/Store.hs view
@@ -48,11 +48,11 @@ 	RowErrorDetail (..) ) where -import           Database.PostgreSQL.Store.Types-import           Database.PostgreSQL.Store.Query-import           Database.PostgreSQL.Store.Table import           Database.PostgreSQL.Store.Entity-import           Database.PostgreSQL.Store.RowParser import           Database.PostgreSQL.Store.Errand+import           Database.PostgreSQL.Store.Query+import           Database.PostgreSQL.Store.RowParser+import           Database.PostgreSQL.Store.Table+import           Database.PostgreSQL.Store.Types -import qualified Database.PostgreSQL.LibPQ as P+import qualified Database.PostgreSQL.LibPQ           as P
src/Database/PostgreSQL/Store/Entity.hs view
@@ -1,16 +1,15 @@-{-# LANGUAGE OverloadedStrings,-             ConstraintKinds,-             DataKinds,-             DefaultSignatures,-             FlexibleContexts,-             FlexibleInstances,-             ScopedTypeVariables,-             TypeFamilies,-             TypeOperators,-             TypeApplications,-             TypeSynonymInstances,-             UndecidableInstances-#-}+{-# LANGUAGE ConstraintKinds      #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE DefaultSignatures    #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE OverloadedStrings    #-}+{-# LANGUAGE ScopedTypeVariables  #-}+{-# LANGUAGE TypeApplications     #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE UndecidableInstances #-}  -- | -- Module:     Database.PostgreSQL.Store.Entity@@ -43,38 +42,36 @@ 	GenericEntity ) where -import           GHC.Generics (Meta (..))-import           GHC.TypeLits hiding (Text)+import           GHC.Generics                            (Meta (..))+import           GHC.TypeLits                            hiding (Text)  import           Control.Applicative -import           Data.Int-import           Data.Word+import qualified Data.Aeson                              as A+import           Data.Attoparsec.ByteString+import           Data.Attoparsec.ByteString.Char8        (decimal, double, scientific, signed,+                                                          skipSpace) import           Data.Bits+import qualified Data.ByteString                         as B+import qualified Data.ByteString.Builder                 as B+import qualified Data.ByteString.Lazy                    as BL+import           Data.Int import           Data.Proxy+import           Data.Scientific                         (FPFormat (Fixed), Scientific,+                                                          formatScientific) import           Data.Semigroup-import           Data.Scientific (Scientific, formatScientific, FPFormat (Fixed))+import qualified Data.Text                               as T+import qualified Data.Text.Encoding                      as T+import qualified Data.Text.Lazy                          as TL+import           Data.Word import           Numeric.Natural -import qualified Data.Aeson              as A--import           Data.Attoparsec.ByteString-import           Data.Attoparsec.ByteString.Char8 (signed, decimal, double, scientific, skipSpace)--import qualified Data.ByteString         as B-import qualified Data.ByteString.Builder as B-import qualified Data.ByteString.Lazy    as BL--import qualified Data.Text               as T-import qualified Data.Text.Encoding      as T-import qualified Data.Text.Lazy          as TL--import           Database.PostgreSQL.Store.Types-import           Database.PostgreSQL.Store.Tuple import           Database.PostgreSQL.Store.Generics-import           Database.PostgreSQL.Store.Utilities-import           Database.PostgreSQL.Store.RowParser import           Database.PostgreSQL.Store.Query.Builder+import           Database.PostgreSQL.Store.RowParser+import           Database.PostgreSQL.Store.Tuple+import           Database.PostgreSQL.Store.Types+import           Database.PostgreSQL.Store.Utilities  -- | Generic record entity class (KnownNat (GRecordWidth rec)) => GEntityRecord (rec :: KRecord) where@@ -170,7 +167,6 @@ class (KnownNat (Width a)) => Entity a where 	-- | Number of values of which the entity consists 	type Width a :: Nat- 	type Width a = GEntityWidth (Rep a)  	-- | Embed the entity into the query.@@ -182,8 +178,8 @@ 	-- | Retrieve an instance of @a@ from the result set. 	parseEntity :: RowParser (Width a) a -	default parseEntity :: (Generic a, GEntity (Rep a))-	                    => RowParser (GEntityWidth (Rep a)) a+	default parseEntity :: (Generic a, GEntity (Rep a), Width a ~ GEntityWidth (Rep a))+	                    => RowParser (Width a) a 	parseEntity = parseGeneric  -- | Embed an entity into the query.
src/Database/PostgreSQL/Store/Errand.hs view
@@ -1,16 +1,14 @@-{-# LANGUAGE OverloadedStrings,-             GeneralizedNewtypeDeriving,-             TypeApplications,-             TypeFamilies,-             ScopedTypeVariables,-             MultiParamTypeClasses,-             FunctionalDependencies,-             UndecidableInstances,-             FlexibleInstances,-             FlexibleContexts,-             TypeSynonymInstances,-             DataKinds,-             QuasiQuotes #-}+{-# LANGUAGE DataKinds                  #-}+{-# LANGUAGE FlexibleContexts           #-}+{-# LANGUAGE FlexibleInstances          #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses      #-}+{-# LANGUAGE OverloadedStrings          #-}+{-# LANGUAGE QuasiQuotes                #-}+{-# LANGUAGE ScopedTypeVariables        #-}+{-# LANGUAGE TypeFamilies               #-}+{-# LANGUAGE TypeSynonymInstances       #-}+{-# LANGUAGE UndecidableInstances       #-}  -- | -- Module:     Database.PostgreSQL.Store.Errand@@ -50,23 +48,20 @@ import           GHC.TypeLits  import           Control.Applicative-import           Control.Monad.Trans import           Control.Monad.Except import           Control.Monad.Reader -import           Data.Maybe--import qualified Data.ByteString           as B- import           Data.Attoparsec.ByteString.Char8+import qualified Data.ByteString                     as B+import           Data.Maybe -import qualified Database.PostgreSQL.LibPQ as P+import qualified Database.PostgreSQL.LibPQ           as P -import           Database.PostgreSQL.Store.Types-import           Database.PostgreSQL.Store.Tuple import           Database.PostgreSQL.Store.Entity-import           Database.PostgreSQL.Store.RowParser import           Database.PostgreSQL.Store.Query+import           Database.PostgreSQL.Store.RowParser+import           Database.PostgreSQL.Store.Tuple+import           Database.PostgreSQL.Store.Types  -- | Error during errand data ErrandError@@ -141,7 +136,7 @@  -- | Counts the rows that have been affected by a query. countAffectedRows :: P.Result -> Errand Int-countAffectedRows res = do+countAffectedRows res = 	fmap (\ numTuples -> fromMaybe 0 (numTuples >>= maybeResult . endResult . parse decimal)) 	     (liftIO (P.cmdTuples res)) 	where@@ -160,14 +155,19 @@ 	-- | Execute the query described in @q x@ and pass its 'P.Result' to the given function. 	executeWith :: (P.Result -> Errand r) -> q x -> ErrandResult q r +-- |+acceptResult :: IO (Maybe P.Result) -> Errand P.Result+acceptResult action = do+	mbRes <- liftIO action+	res <- transformResult mbRes+	res <$ validateResult res+ instance ErrandQuery Statement r where 	type ErrandResult Statement r = Errand r  	executeWith end (Statement stmt) = do 		con <- Errand ask-		mbRes <- liftIO (P.execParams con stmt [] P.Text)-		res <- transformResult mbRes-		validateResult res+		res <- acceptResult (P.execParams con stmt [] P.Text) 		end res  instance ErrandQuery Query r where@@ -175,9 +175,7 @@  	executeWith end (Query stmt params) = do 		con <- Errand ask-		mbRes <- liftIO (P.execParams con stmt params P.Text)-		res <- transformResult mbRes-		validateResult res+		res <- acceptResult (P.execParams con stmt params P.Text) 		end res  instance (WithTuple ts (Errand r)) => ErrandQuery (PrepQuery ts) r where
src/Database/PostgreSQL/Store/Generics.hs view
@@ -1,14 +1,13 @@-{-# LANGUAGE ConstraintKinds,-             DataKinds,-             FlexibleContexts,-             FlexibleInstances,-             GADTs,-             StandaloneDeriving,-             TypeFamilies,-             TypeOperators,-             TypeSynonymInstances,-             UndecidableInstances-#-}+{-# LANGUAGE ConstraintKinds      #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE GADTs                #-}+{-# LANGUAGE StandaloneDeriving   #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE UndecidableInstances #-}  -- | -- Module:     Database.PostgreSQL.Store.Generics
src/Database/PostgreSQL/Store/Query/Builder.hs view
@@ -1,8 +1,9 @@-{-# LANGUAGE ExistentialQuantification,-             TypeOperators,-             TypeApplications,-             ScopedTypeVariables,-             DataKinds #-}+{-# LANGUAGE DataKinds                 #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE MultiParamTypeClasses     #-}+{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE TypeApplications          #-}+{-# LANGUAGE TypeOperators             #-}  -- | -- Module:     Database.PostgreSQL.Store.Query.Builder@@ -36,18 +37,16 @@ 	withParam9 ) where -import           Data.Semigroup-+import qualified Data.ByteString                     as B+import           Data.Hashable import           Data.List+import           Data.Semigroup import           Data.String import           Data.Tagged-import           Data.Hashable -import qualified Data.ByteString as B-+import           Database.PostgreSQL.Store.Tuple import           Database.PostgreSQL.Store.Types import           Database.PostgreSQL.Store.Utilities-import           Database.PostgreSQL.Store.Tuple  -- | Generator for queries, its type parameter hints the type needed to generate the attached values data QueryGenerator a
src/Database/PostgreSQL/Store/Query/TH.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE TemplateHaskell, OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell   #-}  -- | -- Module:     Database.PostgreSQL.Store.Query.TH@@ -110,25 +111,26 @@ 	pgPrepQuery ) where +import           Language.Haskell.Meta.Parse import           Language.Haskell.TH import           Language.Haskell.TH.Quote-import           Language.Haskell.Meta.Parse  import           Control.Applicative -import           Data.Tagged-import           Data.List-import           Data.Char+import qualified Blaze.ByteString.Builder                as B+import qualified Blaze.ByteString.Builder.Char.Utf8      as B+ import           Data.Attoparsec.Text-import qualified Data.ByteString                    as B-import qualified Blaze.ByteString.Builder           as B-import qualified Blaze.ByteString.Builder.Char.Utf8 as B-import qualified Data.Text                          as T+import qualified Data.ByteString                         as B+import           Data.Char+import           Data.List+import           Data.Tagged+import qualified Data.Text                               as T -import           Database.PostgreSQL.Store.Utilities import           Database.PostgreSQL.Store.Entity-import           Database.PostgreSQL.Store.Table import           Database.PostgreSQL.Store.Query.Builder+import           Database.PostgreSQL.Store.Table+import           Database.PostgreSQL.Store.Utilities  -- | Name valueName :: Parser String
src/Database/PostgreSQL/Store/RowParser.hs view
@@ -1,9 +1,9 @@-{-# LANGUAGE DataKinds,-             RankNTypes,-             KindSignatures,-             TypeOperators,-             TypeApplications,-             ScopedTypeVariables #-}+{-# LANGUAGE DataKinds           #-}+{-# LANGUAGE KindSignatures      #-}+{-# LANGUAGE RankNTypes          #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications    #-}+{-# LANGUAGE TypeOperators       #-}  -- | -- Module:     Database.PostgreSQL.Store.RowParser@@ -39,12 +39,12 @@  import           Control.Monad.Except +import qualified Data.ByteString                 as B import           Data.Proxy-import qualified Data.ByteString as B  import           Database.PostgreSQL.Store.Types -import qualified Database.PostgreSQL.LibPQ as P+import qualified Database.PostgreSQL.LibPQ       as P  -- | Location of an error data RowErrorLocation = RowErrorLocation P.Column P.Row@@ -115,7 +115,7 @@ -- | Just like the '(<*>)' operator. (<*>$) :: forall a v b w. (KnownNat v)        => RowParser v (a -> b) -> RowParser w a -> RowParser (v + w) b-pf <*>$ px = pf >>=$ \ f -> (\ x -> f x) <$> px+pf <*>$ px = pf >>=$ (<$> px)  -- | Skip a number of columns. skipColumns :: RowParser n ()@@ -138,7 +138,7 @@  -- | Retrieve a column's type and content. retrieveColumn :: RowParser 1 (Oid, Maybe B.ByteString)-retrieveColumn = processContent (\ a b -> Just (a, b))+retrieveColumn = processContent (curry Just)  -- | Retrieve a column's content. retrieveContent :: RowParser 1 B.ByteString
src/Database/PostgreSQL/Store/Table.hs view
@@ -1,17 +1,15 @@-{-# LANGUAGE OverloadedStrings,-             ConstraintKinds,-             DataKinds,-             FlexibleContexts,-             FlexibleInstances,-             TypeFamilies,-             TypeOperators,-             TypeSynonymInstances,-             UndecidableInstances,-             ScopedTypeVariables,-             QuasiQuotes,-             DefaultSignatures,-             TypeApplications-#-}+{-# LANGUAGE ConstraintKinds      #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE DefaultSignatures    #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE OverloadedStrings    #-}+{-# LANGUAGE ScopedTypeVariables  #-}+{-# LANGUAGE TypeApplications     #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE UndecidableInstances #-}  -- | -- Module:     Database.PostgreSQL.Store.Table@@ -46,15 +44,14 @@ import           GHC.Generics import           GHC.TypeLits +import qualified Data.ByteString                         as B import           Data.Kind import           Data.Proxy import           Data.Tagged -import qualified Data.ByteString as B- import           Database.PostgreSQL.Store.Entity-import           Database.PostgreSQL.Store.Utilities import           Database.PostgreSQL.Store.Query.Builder+import           Database.PostgreSQL.Store.Utilities  -- | Type-level description of a record data KColumns
src/Database/PostgreSQL/Store/Tuple.hs view
@@ -1,20 +1,18 @@-{-# LANGUAGE GADTs,-             TypeFamilies,-             TypeOperators,-             TypeApplications,-             ScopedTypeVariables,-             MultiParamTypeClasses,-             RankNTypes,-             DataKinds,-             PolyKinds,-             ConstraintKinds,-             FlexibleContexts,-             FlexibleInstances,-             UndecidableInstances,-             FunctionalDependencies,-             BangPatterns,-             StandaloneDeriving-#-}+{-# LANGUAGE BangPatterns           #-}+{-# LANGUAGE ConstraintKinds        #-}+{-# LANGUAGE DataKinds              #-}+{-# LANGUAGE FlexibleContexts       #-}+{-# LANGUAGE FlexibleInstances      #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GADTs                  #-}+{-# LANGUAGE MultiParamTypeClasses  #-}+{-# LANGUAGE PolyKinds              #-}+{-# LANGUAGE RankNTypes             #-}+{-# LANGUAGE ScopedTypeVariables    #-}+{-# LANGUAGE TypeApplications       #-}+{-# LANGUAGE TypeFamilies           #-}+{-# LANGUAGE TypeOperators          #-}+{-# LANGUAGE UndecidableInstances   #-}  -- | -- Module:     Database.PostgreSQL.Store.Tuple@@ -45,16 +43,16 @@  import GHC.TypeLits -import Data.List import Data.Kind+import Data.List import Data.Tagged +infixl 5 |>+ -- | Append a single element to the end of a list. type family (|>) (x :: [a]) (y :: a) :: [a] where 	'[]       |> y = '[y]-	(x ': xs) |> y = x ': (xs |> y)--infixl 5 |>+	(x : xs) |> y = x : (xs |> y)  -- | Generic product type data Tuple (ts :: [Type]) where
src/Database/PostgreSQL/Store/Types.hs view
@@ -16,13 +16,13 @@ 	Format ) where -import           Text.Show.Functions ()+import           Text.Show.Functions             () -import qualified Data.ByteString as B+import qualified Data.ByteString                 as B  import           Database.PostgreSQL.Store.Tuple -import           Database.PostgreSQL.LibPQ (Oid (..), Format (Text))+import           Database.PostgreSQL.LibPQ       (Format (Text), Oid (..))  -- | SQL statement newtype Statement a = Statement B.ByteString
src/Database/PostgreSQL/Store/Utilities.hs view
@@ -15,13 +15,14 @@ import           Language.Haskell.TH import           Language.Haskell.TH.Syntax -import qualified Data.ByteString                    as B import qualified Blaze.ByteString.Builder           as B import qualified Blaze.ByteString.Builder.Char.Utf8 as B++import qualified Data.ByteString                    as B import qualified Data.Text                          as T import qualified Data.Text.Encoding                 as T -import           Text.Read (readMaybe)+import           Text.Read                          (readMaybe)  -- | Show as 'ByteString' showByteString :: (Show a) => a -> B.ByteString