Add ToBaseId
This commit is contained in:
parent
17b9c3be9a
commit
970deabfc2
@ -52,7 +52,7 @@ module Database.Esqueleto
|
|||||||
, subList_select, subList_selectDistinct, valList, justList
|
, subList_select, subList_selectDistinct, valList, justList
|
||||||
, in_, notIn, exists, notExists
|
, in_, notIn, exists, notExists
|
||||||
, set, (=.), (+=.), (-=.), (*=.), (/=.)
|
, set, (=.), (+=.), (-=.), (*=.), (/=.)
|
||||||
, case_ )
|
, case_, toBaseId)
|
||||||
, when_
|
, when_
|
||||||
, then_
|
, then_
|
||||||
, else_
|
, else_
|
||||||
|
|||||||
@ -32,6 +32,7 @@ module Database.Esqueleto.Internal.Language
|
|||||||
, Insertion
|
, Insertion
|
||||||
, LockingKind(..)
|
, LockingKind(..)
|
||||||
, SqlString
|
, SqlString
|
||||||
|
, ToBaseId(..)
|
||||||
-- * The guts
|
-- * The guts
|
||||||
, JoinKind(..)
|
, JoinKind(..)
|
||||||
, IsJoinKind(..)
|
, IsJoinKind(..)
|
||||||
@ -555,6 +556,42 @@ class (Functor query, Applicative query, Monad query) =>
|
|||||||
-- /Since: 2.1.2/
|
-- /Since: 2.1.2/
|
||||||
case_ :: PersistField a => [(expr (Value Bool), expr (Value a))] -> expr (Value a) -> expr (Value a)
|
case_ :: PersistField a => [(expr (Value Bool), expr (Value a))] -> expr (Value a) -> expr (Value a)
|
||||||
|
|
||||||
|
-- | Convert an entity's key into another entity's.
|
||||||
|
--
|
||||||
|
-- This function is to be used when you change an entity's @Id@ to be
|
||||||
|
-- that of another entity. For example:
|
||||||
|
--
|
||||||
|
-- @
|
||||||
|
-- Bar
|
||||||
|
-- barNum Int
|
||||||
|
-- Foo
|
||||||
|
-- Id BarId
|
||||||
|
-- fooNum Int
|
||||||
|
-- @
|
||||||
|
--
|
||||||
|
-- For this example, declare:
|
||||||
|
--
|
||||||
|
-- @
|
||||||
|
-- instance ToBaseId Foo where
|
||||||
|
-- type BaseEnt Foo = Bar
|
||||||
|
-- toBaseIdWitness = FooKey
|
||||||
|
-- @
|
||||||
|
--
|
||||||
|
-- Now you're able to write queries such as:
|
||||||
|
--
|
||||||
|
-- @
|
||||||
|
-- 'select' $
|
||||||
|
-- 'from' $ \(bar `'InnerJoin`` foo) -> do
|
||||||
|
-- 'on' ('toBaseId' (foo '^.' FooId) '==.' bar '^.' BarId)
|
||||||
|
-- return (bar, foo)
|
||||||
|
-- @
|
||||||
|
--
|
||||||
|
-- Note: this function may be unsafe to use in conditions not like the
|
||||||
|
-- one of the example above.
|
||||||
|
--
|
||||||
|
-- /Since: 2.4.3/
|
||||||
|
toBaseId :: ToBaseId ent => expr (Value (Key ent)) -> expr (Value (Key (BaseEnt ent)))
|
||||||
|
|
||||||
{-# DEPRECATED sub_selectDistinct "Since 2.2.4: use 'sub_select' and 'distinct'." #-}
|
{-# DEPRECATED sub_selectDistinct "Since 2.2.4: use 'sub_select' and 'distinct'." #-}
|
||||||
{-# DEPRECATED subList_selectDistinct "Since 2.2.4: use 'subList_select' and 'distinct'." #-}
|
{-# DEPRECATED subList_selectDistinct "Since 2.2.4: use 'subList_select' and 'distinct'." #-}
|
||||||
|
|
||||||
@ -837,6 +874,12 @@ instance SqlString Html where
|
|||||||
-- | /Since: 2.4.0/
|
-- | /Since: 2.4.0/
|
||||||
instance SqlString a => SqlString (Maybe a) where
|
instance SqlString a => SqlString (Maybe a) where
|
||||||
|
|
||||||
|
-- | Class that enables one to use 'toBaseId' to convert an entity's
|
||||||
|
-- key on a query into another (cf. 'toBaseId').
|
||||||
|
class ToBaseId ent where
|
||||||
|
type BaseEnt ent :: *
|
||||||
|
toBaseIdWitness :: Key (BaseEnt ent) -> Key ent
|
||||||
|
|
||||||
|
|
||||||
-- | @FROM@ clause: bring entities into scope.
|
-- | @FROM@ clause: bring entities into scope.
|
||||||
--
|
--
|
||||||
|
|||||||
@ -524,6 +524,8 @@ instance Esqueleto SqlQuery SqlExpr SqlBackend where
|
|||||||
(EInsert _ _) <&> (ECompositeKey _) = unexpectedCompositeKeyError "(<&>)"
|
(EInsert _ _) <&> (ECompositeKey _) = unexpectedCompositeKeyError "(<&>)"
|
||||||
|
|
||||||
case_ = unsafeSqlCase
|
case_ = unsafeSqlCase
|
||||||
|
toBaseId = veryUnsafeCoerceSqlExprValue
|
||||||
|
|
||||||
|
|
||||||
instance ToSomeValues SqlExpr (SqlExpr (Value a)) where
|
instance ToSomeValues SqlExpr (SqlExpr (Value a)) where
|
||||||
toSomeValues a = [SomeValue a]
|
toSomeValues a = [SomeValue a]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user