packages feed

relational-query 0.11.0.0 → 0.11.1.0

raw patch · 7 files changed

+131/−26 lines, 7 filesdep ~names-thPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: names-th

API changes (from Hackage documentation)

- Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.Clock.UTC.UTCTime
- Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.LocalTime.LocalTime
- Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.LocalTime.ZonedTime
- Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.TimeOfDay.TimeOfDay
- Database.Relational.Sequence: Sequence :: Table s -> (s -> i) -> Pi s i -> Sequence s i
- Database.Relational.Sequence: [seqExtract] :: Sequence s i -> s -> i
- Database.Relational.Sequence: [seqKey] :: Sequence s i -> Pi s i
- Database.Relational.Sequence: [seqTable] :: Sequence s i -> Table s
- Database.Relational.Sequence: fromTable :: Binding r s i => Table r -> Sequence s i
+ Database.Relational.Compat: infixl 4 |*|
+ Database.Relational.Config: chunksInsertSize :: Config -> Int
+ Database.Relational.Config: defaultNameConfig :: NameConfig
+ Database.Relational.Config: disableOverloadedProjection :: Config -> Bool
+ Database.Relational.Config: disableSpecializedProjection :: Config -> Bool
+ Database.Relational.Config: identifierQuotation :: Config -> IdentifierQuotation
+ Database.Relational.Config: nameConfig :: Config -> NameConfig
+ Database.Relational.Config: normalizedTableName :: Config -> Bool
+ Database.Relational.Config: productUnitSupport :: Config -> ProductUnitSupport
+ Database.Relational.Config: schemaNameMode :: Config -> SchemaNameMode
+ Database.Relational.Config: verboseAsCompilerWarning :: Config -> Bool
+ Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.Clock.Internal.UTCTime.UTCTime
+ Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.Internal.LocalTime.LocalTime
+ Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay
+ Database.Relational.Pure: instance Database.Relational.ProjectableClass.ShowConstantTermsSQL Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
+ Database.Relational.Sequence: binding :: (Binding r s i, HasConstraintKey Primary r i) => SeqBinding r s i
+ Database.Relational.Sequence: boundKey :: SeqBinding r s i -> Pi r i
+ Database.Relational.Sequence: boundSequence :: SeqBinding r s i -> Sequence s i
+ Database.Relational.Sequence: boundTable :: SeqBinding r s i -> Table r
+ Database.Relational.Sequence: data SeqBinding r s i
+ Database.Relational.Sequence: primaryBinding :: (TableDerivable r, SequenceDerivable s i, HasConstraintKey Primary r i) => SeqBinding r s i
+ Database.Relational.Sequence: seqExtract :: Sequence s i -> s -> i
+ Database.Relational.Sequence: seqKey :: Sequence s i -> Pi s i
+ Database.Relational.Sequence: seqTable :: Sequence s i -> Table s
+ Database.Relational.Sequence: unsafeSpecifyBinding :: (TableDerivable r, SequenceDerivable s i) => Pi r i -> SeqBinding r s i
- Database.Relational.Compat: (|*|) :: ProductIsoApplicative f => forall a b. f (a -> b) -> f a -> f b
+ Database.Relational.Compat: (|*|) :: ProductIsoApplicative f => forall a b. () => f (a -> b) -> f a -> f b
- Database.Relational.ProjectableClass: class ShowConstantTermsSQL a where showConstantTermsSQL' = gShowConstantTermsSQL . from
+ Database.Relational.ProjectableClass: class ShowConstantTermsSQL a
- Database.Relational.Sequence: class (TableDerivable r, SequenceDerivable s i) => Binding r s i | r -> s where fromTable = const derivedSequence
+ Database.Relational.Sequence: class (TableDerivable r, SequenceDerivable s i) => Binding r s i | r -> s

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ <!-- -*- Markdown -*- --> +## 0.11.1.0++- add compatibility module  Database.Relational.Query.TH for upgrading from 0.9.+ ## 0.11.0.0  - same as 0.10.1.1. re-versioned for TH incompatibility against 0.10.0.@@ -10,7 +14,7 @@  ## 0.10.1.0 -- define projections with overloaded-labels.+- define projections with overloaded-labels. -- Thanks for Ryan Mulligan - add a portable sequence number operation.  ## 0.10.0.0
relational-query.cabal view
@@ -1,5 +1,5 @@ name:                relational-query-version:             0.11.0.0+version:             0.11.1.0 synopsis:            Typeful, Modular, Relational, algebraic query engine description:         This package contiains typeful relation structure and                      relational-algebraic query building DSL which can@@ -70,9 +70,11 @@                        Database.Relational.Derives                        Database.Relational.TH +                       -- definitions and namespaces compatible with <= 0.9                        Database.Relational.Compat                        Database.Relational.Query                        Database.Relational.Query.Arrow+                       Database.Relational.Query.TH                         -- for GHC version equal or more than 8.0                        Database.Relational.OverloadedProjection
src/Database/Relational/Config.hs view
@@ -16,4 +16,4 @@ import Database.Relational.Internal.Config   (NameConfig (..),    ProductUnitSupport (..), SchemaNameMode (..), IdentifierQuotation (..),-   Config (..), defaultConfig,)+   Config (..), defaultConfig, defaultNameConfig)
src/Database/Relational/Internal/Config.hs view
@@ -9,18 +9,27 @@ -- -- This module defines configuration datatype used in query products. module Database.Relational.Internal.Config (+  Config,++  defaultConfig,++  {- field labels of 'Config' type.+     To avoid haddock bug ( https://github.com/haskell/haddock/issues/456 ),+     they are not listed in Config ( ... ). -}+  productUnitSupport,+  chunksInsertSize,+  schemaNameMode,+  normalizedTableName,+  verboseAsCompilerWarning,+  disableOverloadedProjection,+  disableSpecializedProjection,+  identifierQuotation,+  nameConfig,+   NameConfig (..),+  defaultNameConfig,+   ProductUnitSupport (..), SchemaNameMode (..), IdentifierQuotation (..),-  Config ( productUnitSupport-         , chunksInsertSize-         , schemaNameMode-         , normalizedTableName-         , verboseAsCompilerWarning-         , disableOverloadedProjection-         , disableSpecializedProjection-         , identifierQuotation-         , nameConfig),-  defaultConfig,   ) where  import Language.Haskell.TH.Name.CamelCase (VarName, varCamelcaseName)@@ -31,12 +40,24 @@ data NameConfig =   NameConfig   { recordConfig       ::  RecordTH.NameConfig+  -- ^ Configurations related to the names of generated record types+  --   and their field labels.   , relationVarName    ::  String -> String -> VarName+  -- ^ Function to build the name of 'Database.Relational.Monad.BaseType.Relation' representing the table.+  --   The first argument is the scheme name, and second argument is the table name.   }  instance Show NameConfig where   show = const "<NameConfig>" +-- | Default implementation of 'NameConfig' type.+defaultNameConfig :: NameConfig+defaultNameConfig =+  NameConfig+  { recordConfig    = RecordTH.defaultNameConfig+  , relationVarName = const varCamelcaseName+  }+ -- | Unit of product is supported or not. data ProductUnitSupport = PUSupported | PUNotSupported  deriving Show @@ -56,14 +77,39 @@   , chunksInsertSize             ::  !Int   , schemaNameMode               ::  !SchemaNameMode   , normalizedTableName          ::  !Bool+  -- ^ If True, schema names become uppercase, and table names become lowercase.   , verboseAsCompilerWarning     ::  !Bool+  -- ^ If True, more detailed logs are printed when generating record types from schema.   , disableOverloadedProjection  ::  !Bool+  -- ^ If True, instance of 'Database.Relational.OverloadedProjection.HasProjection' for each column is NOT generated.   , disableSpecializedProjection ::  !Bool+  -- ^ If True, 'Database.Relational.Pi.Pi' for each column is NOT generated.   , identifierQuotation          ::  !IdentifierQuotation   , nameConfig                   ::  !NameConfig   } deriving Show --- | Default configuration.+-- | Default configuration of 'Config'.+--   To change some behaviour of relational-query,+--   use record update syntax:+--+-- @+--   defaultConfig+--     { productUnitSupport            =  'PUSupported'+--     , chunksInsertSize              =  256+--     , schemaNameMode                =  'SchemaQualified'+--     , normalizedTableName           =  True+--     , verboseAsCompilerWarning      =  False+--     , disableOverloadedProjection   =  False+--     , disableSpecializedProjection  =  False+--     , identifierQuotation           =  'NoQuotation'+--     , nameConfig                    =+--        defaultNameConfig+--        { recordConfig     =  'RecordTH.defaultNameConfig'+--        , relationVarName  =  \\schema table -> 'varCamelcaseName' $ table ++ "_" ++ scheme+--        -- ^ append the table name after the schema name. e.g. "schemaTable"+--        }+--     }+-- @ defaultConfig :: Config defaultConfig =   Config { productUnitSupport            =  PUSupported@@ -74,7 +120,5 @@          , disableOverloadedProjection   =  False          , disableSpecializedProjection  =  False          , identifierQuotation           =  NoQuotation-         , nameConfig                    =  NameConfig { recordConfig     =  RecordTH.defaultNameConfig-                                                       , relationVarName  =  const varCamelcaseName-                                                   }+         , nameConfig                    =  defaultNameConfig          }
+ src/Database/Relational/Query/TH.hs view
@@ -0,0 +1,17 @@+-- |+-- Module      : Database.Relational.Query.TH+-- Copyright   : 2018 Kei Hibino+-- License     : BSD3+--+-- Maintainer  : ex8k.hibino@gmail.com+-- Stability   : experimental+-- Portability : unknown+--+-- This module contains backword compatibility interface of+-- relational-query <= 0.9.*+module Database.Relational.Query.TH+  {-# DEPRECATED "Should switch namespace to Database.Relational.TH" #-}+  ( module Database.Relational.TH+  ) where++import Database.Relational.TH
src/Database/Relational/Sequence.hs view
@@ -1,10 +1,11 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE DefaultSignatures #-}  -- | -- Module      : Database.Relational.Sequence--- Copyright   : 2017 Kei Hibino+-- Copyright   : 2017-2018 Kei Hibino -- License     : BSD3 -- -- Maintainer  : ex8k.hibino@gmail.com@@ -13,9 +14,12 @@ -- -- This module provides structures about sequence tables. module Database.Relational.Sequence (-  Sequence (..), seqRelation,+  Sequence, seqTable, seqExtract, seqKey, seqRelation,   unsafeSpecifySequence, +  SeqBinding, boundTable, boundKey, boundSequence,+  unsafeSpecifyBinding, primaryBinding,+   SequenceDerivable (..),    Binding (..), fromRelation,@@ -34,6 +38,8 @@ import Database.Relational.Monad.Trans.Assigning ((<-#)) import Database.Relational.Table (TableDerivable, derivedTable, Table) import Database.Relational.Pi (Pi)+import Database.Relational.Constraint+  (HasConstraintKey (..), Key, Primary, projectionKey) import Database.Relational.Projectable ((.<=.), value, unitPlaceHolder, (!)) import Database.Relational.ProjectableClass (ShowConstantTermsSQL) import Database.Relational.Relation (tableOf)@@ -42,12 +48,14 @@ import Database.Relational.Type (Update, typedUpdate)  --- | Basic record to express sequence table+-- | Basic record to express sequence-table.+--   actual sequence-table is a table which has only one column+--   of integer type. data Sequence s i =   Sequence-  { seqTable :: Table s-  , seqExtract :: s -> i-  , seqKey :: Pi s i+  { seqTable    :: Table s   -- ^ actual sequence-table+  , seqExtract  :: s -> i    -- ^ sequence number selector for sequence record+  , seqKey      :: Pi s i    -- ^ sequence number projection for sequence record   }  -- | Unsafely specify sequence table.@@ -62,11 +70,38 @@ class TableDerivable s => SequenceDerivable s i | s -> i where   derivedSequence :: Sequence s i +-- | Record to express binding between normal-table and sequence-table.+data SeqBinding r s i =+  SeqBinding+  { boundTable     :: Table r       -- ^ normal-table bound to sequence-table+  , boundKey       :: Pi r i        -- ^ sequence key projection for bound record+  , boundSequence  :: Sequence s i  -- ^ sequence table record+  }++-- | Unsafely specify binding between normal-table and sequence-table.+unsafeSpecifyBinding :: (TableDerivable r, SequenceDerivable s i)+                     => Pi r i -> SeqBinding r s i+unsafeSpecifyBinding k = SeqBinding derivedTable k derivedSequence++-- | Derive binding using primary key.+primaryBinding :: (TableDerivable r, SequenceDerivable s i,+                   HasConstraintKey Primary r i)+               => SeqBinding r s i+primaryBinding = unsafeSpecifyBinding $ primaryKey constraintKey+  where+    primaryKey :: Key Primary r ct -> Pi r ct+    primaryKey = projectionKey+ -- | Derivation rule for binding between 'Table' and 'Sequence' class (TableDerivable r, SequenceDerivable s i)       => Binding r s i | r -> s  where-  fromTable :: Table r -> Sequence s i-  fromTable = const derivedSequence+  binding :: SeqBinding r s i++  default binding :: HasConstraintKey Primary r i => SeqBinding r s i+  binding = primaryBinding++fromTable :: Binding r s i => Table r -> Sequence s i+fromTable = const derivedSequence  -- | Derive 'Sequence' from corresponding 'Relation' fromRelation :: Binding r s i
src/Database/Relational/TH.hs view
@@ -77,7 +77,7 @@ import Language.Haskell.TH.Compat.Reify (unVarI) import Language.Haskell.TH.Name.CamelCase   (VarName, varName, ConName (ConName), conName,-   varNameWithPrefix, varCamelcaseName, toVarExp, toTypeCon)+   varCamelcaseName, toVarExp, toTypeCon) import Language.Haskell.TH.Lib.Extra (simpleValD, maybeD, integralE)  import Database.Record.TH@@ -258,6 +258,9 @@ quote NoQuotation   s = s quote (Quotation q) s = q : (escape s) ++ q : []   where escape = (>>= (\c -> if c == q then [q, q] else [c]))++varNameWithPrefix :: String -> String -> VarName+varNameWithPrefix n p = varCamelcaseName $ p ++ "_" ++ n  derivationVarNameDefault :: String -> VarName derivationVarNameDefault =  (`varNameWithPrefix` "derivationFrom")