relational-query 0.11.2.0 → 0.11.3.0
raw patch · 6 files changed
+77/−42 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a, Database.Record.Persistable.PersistableWidth b) => Database.Relational.OverloadedProjection.HasProjection "snd" (a, b) b
- Database.Relational.OverloadedInstances: instance Database.Record.Persistable.PersistableWidth a => Database.Relational.OverloadedProjection.HasProjection "fst" (a, b) a
+ Database.Relational.Derives: primarySelect :: HasConstraintKey Primary a p => Relation () a -> Relation p a
+ Database.Relational.Derives: uniqueSelect :: PersistableWidth p => Key Unique a p -> Relation () a -> Relation p a
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2, a3) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2, a3) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2, a3) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3) => Database.Relational.OverloadedProjection.HasProjection "pi2" (a1, a2, a3) a3
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2, a3) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2, a3, a4) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2, a3, a4) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2, a3, a4) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "pi2" (a1, a2, a3, a4) a3
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "pi3" (a1, a2, a3, a4) a4
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2, a3, a4) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2, a3, a4, a5) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2, a3, a4, a5) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2, a3, a4, a5) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "pi2" (a1, a2, a3, a4, a5) a3
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "pi3" (a1, a2, a3, a4, a5) a4
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "pi4" (a1, a2, a3, a4, a5) a5
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2, a3, a4, a5) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2, a3, a4, a5, a6) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2, a3, a4, a5, a6) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2, a3, a4, a5, a6) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi2" (a1, a2, a3, a4, a5, a6) a3
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi3" (a1, a2, a3, a4, a5, a6) a4
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi4" (a1, a2, a3, a4, a5, a6) a5
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "pi5" (a1, a2, a3, a4, a5, a6) a6
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2, a3, a4, a5, a6) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "fst" (a1, a2, a3, a4, a5, a6, a7) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi0" (a1, a2, a3, a4, a5, a6, a7) a1
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi1" (a1, a2, a3, a4, a5, a6, a7) a2
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi2" (a1, a2, a3, a4, a5, a6, a7) a3
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi3" (a1, a2, a3, a4, a5, a6, a7) a4
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi4" (a1, a2, a3, a4, a5, a6, a7) a5
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi5" (a1, a2, a3, a4, a5, a6, a7) a6
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "pi6" (a1, a2, a3, a4, a5, a6, a7) a7
+ Database.Relational.OverloadedInstances: instance (Database.Record.Persistable.PersistableWidth a1, Database.Record.Persistable.PersistableWidth a2, Database.Record.Persistable.PersistableWidth a3, Database.Record.Persistable.PersistableWidth a4, Database.Record.Persistable.PersistableWidth a5, Database.Record.Persistable.PersistableWidth a6, Database.Record.Persistable.PersistableWidth a7) => Database.Relational.OverloadedProjection.HasProjection "snd" (a1, a2, a3, a4, a5, a6, a7) a2
Files
- ChangeLog.md +5/−0
- relational-query.cabal +2/−2
- src/Database/Relational/Derives.hs +34/−16
- src/Database/Relational/InternalTH/Overloaded.hs +28/−5
- src/Database/Relational/OverloadedInstances.hs +0/−10
- src/Database/Relational/TH.hs +8/−9
ChangeLog.md view
@@ -1,5 +1,10 @@ <!-- -*- Markdown -*- --> +## 0.11.3.0++- add some overloaded projection instances for tuple types.+- add #primary overloaded projection instance.+ ## 0.11.2.0 - add insertValueList API.
relational-query.cabal view
@@ -1,5 +1,5 @@ name: relational-query-version: 0.11.2.0+version: 0.11.3.0 synopsis: Typeful, Modular, Relational, algebraic query engine description: This package contiains typeful relation structure and relational-algebraic query building DSL which can@@ -14,7 +14,7 @@ license-file: LICENSE author: Kei Hibino maintainer: ex8k.hibino@gmail.com-copyright: Copyright (c) 2013-2017 Kei Hibino+copyright: Copyright (c) 2013-2018 Kei Hibino category: Database build-type: Simple cabal-version: >=1.10
src/Database/Relational/Derives.hs view
@@ -14,9 +14,8 @@ -- * Query derivation specifiedKey, - unique,-- primary', primary,+ uniqueSelect,+ primarySelect, -- * Update derivation updateByConstraintKey,@@ -25,7 +24,11 @@ updateValuesWithKey, -- * Derived objects from table- derivedUniqueRelation+ derivedUniqueRelation,++ -- * Deprecated+ unique,+ primary', primary, ) where import Database.Record (PersistableWidth, ToSql)@@ -50,22 +53,31 @@ -- | Query restricted with specified key. specifiedKey :: PersistableWidth p- => Pi a p -- ^ Unique key proof object which record type is 'a' and key type is 'p'.- -> Relation () a -- ^ 'Relation' to add restriction.- -> Relation p a -- ^ Result restricted 'Relation'+ => Pi a p -- ^ Projection path+ -> Relation () a -- ^ 'Relation' to add restriction.+ -> Relation p a -- ^ Result restricted 'Relation' specifiedKey key rel = relation' $ do q <- query rel (param, ()) <- placeholder (\ph -> wheres $ Record.wpi (relationWidth rel) q key .=. ph) return (param, q) -- | Query restricted with specified unique key.+uniqueSelect :: PersistableWidth p+ => Key Unique a p -- ^ Unique key proof object which record type is 'a' and key type is 'p'.+ -> Relation () a -- ^ 'Relation' to add restriction.+ -> Relation p a -- ^ Result restricted 'Relation'+uniqueSelect = specifiedKey . projectionKey++{-# DEPRECATED unique "use `uniqueSelect` instead of this." #-}+-- | Deprecated. unique :: PersistableWidth p- => Key Unique a p -- ^ Unique key proof object which record type is 'a' and key type is 'p'.- -> Relation () a -- ^ 'Relation' to add restriction.- -> Relation p a -- ^ Result restricted 'Relation'-unique = specifiedKey . projectionKey+ => Key Unique a p+ -> Relation () a+ -> Relation p a+unique = uniqueSelect --- | Query restricted with specified primary key.+{-# DEPRECATED primary' "use `primarySelect` instead of this." #-}+-- | Deprecated. primary' :: PersistableWidth p => Key Primary a p -- ^ Primary key proof object which record type is 'a' and key type is 'p'. -> Relation () a -- ^ 'Relation' to add restriction.@@ -73,11 +85,17 @@ primary' = specifiedKey . projectionKey -- | Query restricted with inferred primary key.-primary :: HasConstraintKey Primary a p- => Relation () a -- ^ 'Relation' to add restriction.- -> Relation p a -- ^ Result restricted 'Relation'-primary = primary' constraintKey+primarySelect :: HasConstraintKey Primary a p+ => Relation () a -- ^ 'Relation' to add restriction.+ -> Relation p a -- ^ Result restricted 'Relation'+primarySelect = primary' constraintKey +{-# DEPRECATED primary "use `primarySelect` instead of this." #-}+-- | Deprecated.+primary :: HasConstraintKey Primary a p+ => Relation () a+ -> Relation p a+primary = primarySelect -- | Convert from Haskell type `r` into SQL value `q` list expected by update form like --
src/Database/Relational/InternalTH/Overloaded.hs view
@@ -1,9 +1,10 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE DataKinds #-} -- | -- Module : Database.Relational.InternalTH.Overloaded--- Copyright : 2017 Kei Hibino+-- Copyright : 2017-2018 Kei Hibino -- License : BSD3 -- -- Maintainer : ex8k.hibino@gmail.com@@ -15,12 +16,13 @@ monomorphicProjection, polymorphicProjections, tupleProjection,+ definePrimaryHasProjection, ) where #if __GLASGOW_HASKELL__ >= 800 import Language.Haskell.TH (Name, mkName, Q, TypeQ, Dec, instanceD, funD, classP,- appT, tupleT, varT, litT, strTyLit, clause, normalB)+ appT, tupleT, varT, litT, strTyLit, clause, normalB, listE) import Language.Haskell.TH.Lib.Extra (integralE) import Language.Haskell.TH.Name.CamelCase (ConName, conName, toVarExp, toTypeCon)@@ -32,6 +34,7 @@ import Database.Record.TH (columnOffsetsVarNameDefault) import Database.Relational.Pi.Unsafe (definePi)+import Database.Relational.Constraint (unsafeDefineConstraintKey, projectionKey) import Database.Relational.OverloadedProjection (HasProjection (projection)) #else import Language.Haskell.TH (Name, mkName, Q, TypeQ, appT, tupleT, varT, Dec)@@ -89,11 +92,16 @@ -- | Projection templates for tuple type. tupleProjection :: Int -> Q [Dec]-tupleProjection n =- polymorphicProjections tyRec avs sels cts+tupleProjection n = do+ p <- polymorphicProjections tyRec avs ["fst", "snd"] cts+ q <- polymorphicProjections tyRec avs sels cts+ r <- polymorphicProjections tyRec avs oldSels cts -- DEPRECATED. drop in 0.12.0+ return $ p ++ q ++ r where- sels = [ "tuplePi" ++ show n ++ "_" ++ show i+ sels = [ "pi" ++ show i | i <- [ 0 .. n - 1] ]+ oldSels = [ "tuplePi" ++ show n ++ "_" ++ show i+ | i <- [ 0 .. n - 1] ] ((avs, cts), tyRec) = tupleN tupleN :: (([Name], [TypeQ]), TypeQ) --- same as tupleN of InternalTH.Base, merge after dropping GHC 7.x@@ -101,3 +109,18 @@ where ns = [ mkName $ "a" ++ show j | j <- [1 .. n] ] vs = map varT ns++-- | Projection template for primary key.+definePrimaryHasProjection :: TypeQ -- ^ Record type+ -> TypeQ -- ^ Key type+ -> [Int] -- ^ Indexes specifies key+ -> Q [Dec] -- ^ Result 'HasProjection' declaration+#if __GLASGOW_HASKELL__ >= 800+definePrimaryHasProjection recType colType indexes =+ [d| instance HasProjection "primary" $recType $colType where+ projection _ = projectionKey+ $ unsafeDefineConstraintKey $(listE [integralE ix | ix <- indexes])+ |]+#else+definePrimaryHasProjection _ _ _ = [d| |]+#endif
src/Database/Relational/OverloadedInstances.hs view
@@ -33,13 +33,3 @@ $(concat <$> mapM tupleProjection [2 .. 7]) -- Generic instances of tuple types are generated from 2 to 7 in GHC.Generics.--#if __GLASGOW_HASKELL__ >= 800-instance PersistableWidth a =>- HasProjection "fst" (a, b) a where- projection _ = definePi 0--instance (PersistableWidth a, PersistableWidth b) =>- HasProjection "snd" (a, b) b where- projection _ = definePi $ runPersistableRecordWidth (persistableWidth :: PersistableRecordWidth b)-#endif
src/Database/Relational/TH.hs view
@@ -92,7 +92,7 @@ schemaNameMode, nameConfig, identifierQuotation), relationalQuerySQL, Query, relationalQuery, KeyUpdate, Insert, insert, InsertQuery, insertQuery,- HasConstraintKey(constraintKey), Primary, NotNull, primary, primaryUpdate)+ HasConstraintKey(constraintKey), Primary, NotNull, primarySelect, primaryUpdate) import Database.Relational.InternalTH.Base (defineTuplePi, defineRecordProjections) import Database.Relational.Scalar (defineScalarDegree)@@ -112,12 +112,10 @@ -> TypeQ -- ^ Key type -> [Int] -- ^ Indexes specifies key -> Q [Dec] -- ^ Result 'HasConstraintKey' declaration-defineHasConstraintKeyInstance constraint recType colType indexes = do- -- kc <- defineHasColumnConstraintInstance constraint recType index- ck <- [d| instance HasConstraintKey $constraint $recType $colType where- constraintKey = unsafeDefineConstraintKey $(listE [integralE ix | ix <- indexes])- |]- return ck+defineHasConstraintKeyInstance constraint recType colType indexes =+ [d| instance HasConstraintKey $constraint $recType $colType where+ constraintKey = unsafeDefineConstraintKey $(listE [integralE ix | ix <- indexes])+ |] -- | Rule template to infer primary key. defineHasPrimaryKeyInstance :: TypeQ -- ^ Record type@@ -127,7 +125,8 @@ defineHasPrimaryKeyInstance recType colType indexes = do kc <- Record.defineHasPrimaryKeyInstance recType indexes ck <- defineHasConstraintKeyInstance [t| Primary |] recType colType indexes- return $ kc ++ ck+ pp <- Overloaded.definePrimaryHasProjection recType colType indexes+ return $ kc ++ ck ++ pp -- | Rule template to infer primary key. defineHasPrimaryKeyInstanceWithConfig :: Config -- ^ configuration parameters@@ -344,7 +343,7 @@ let toDef = varName toDef' simpleValD toDef [t| Query $paramType $recType |]- [| relationalQuery (primary $relE) |]+ [| relationalQuery (primarySelect $relE) |] -- | Template of derived primary 'Update'. definePrimaryUpdate :: VarName -- ^ Variable name of result declaration