Revert "Revert "custom primary keys (not composite, yet) supported on projections""
This reverts commit 761ef03b03.
This commit is contained in:
parent
761ef03b03
commit
1f80074b6e
@ -8,6 +8,7 @@
|
|||||||
, OverloadedStrings
|
, OverloadedStrings
|
||||||
, UndecidableInstances
|
, UndecidableInstances
|
||||||
, ScopedTypeVariables
|
, ScopedTypeVariables
|
||||||
|
, InstanceSigs
|
||||||
#-}
|
#-}
|
||||||
-- | This is an internal module, anything exported by this module
|
-- | This is an internal module, anything exported by this module
|
||||||
-- may change without a major version bump. Please use only
|
-- may change without a major version bump. Please use only
|
||||||
@ -60,7 +61,8 @@ import Data.Monoid (Monoid(..), (<>))
|
|||||||
import Data.Proxy (Proxy(..))
|
import Data.Proxy (Proxy(..))
|
||||||
import Database.Esqueleto.Internal.PersistentImport
|
import Database.Esqueleto.Internal.PersistentImport
|
||||||
import Database.Persist.Sql.Util (
|
import Database.Persist.Sql.Util (
|
||||||
entityColumnNames, entityColumnCount, parseEntityValues)
|
entityColumnNames, entityColumnCount, parseEntityValues, isIdField
|
||||||
|
, hasCompositeKey)
|
||||||
import qualified Control.Monad.Trans.State as S
|
import qualified Control.Monad.Trans.State as S
|
||||||
import qualified Control.Monad.Trans.Writer as W
|
import qualified Control.Monad.Trans.Writer as W
|
||||||
import qualified Data.Conduit as C
|
import qualified Data.Conduit as C
|
||||||
@ -336,8 +338,16 @@ instance Esqueleto SqlQuery SqlExpr SqlBackend where
|
|||||||
sub_select = sub SELECT
|
sub_select = sub SELECT
|
||||||
sub_selectDistinct = sub SELECT_DISTINCT
|
sub_selectDistinct = sub SELECT_DISTINCT
|
||||||
|
|
||||||
EEntity ident ^. field =
|
(^.) :: forall val typ. (PersistEntity val, PersistField typ) =>
|
||||||
ERaw Never $ \info -> (useIdent info ident <> ("." <> fieldName info field), [])
|
SqlExpr (Entity val) -> EntityField val typ -> SqlExpr (Value typ)
|
||||||
|
EEntity ident ^. field
|
||||||
|
| isIdField field && hasCompositeKey ed
|
||||||
|
= ERaw Parens $
|
||||||
|
\info@(conn,_) -> (uncommas (map (\a -> useIdent info ident <> "." <> TLB.fromText (connEscapeName conn (fieldDB a))) (compositeFields pdef)), [])
|
||||||
|
| otherwise = ERaw Never $ \info -> (useIdent info ident <> ("." <> fieldName info field), [])
|
||||||
|
where
|
||||||
|
ed = entityDef $ getEntityVal $ (Proxy :: Proxy (SqlExpr (Entity val)))
|
||||||
|
Just pdef = entityPrimary ed
|
||||||
|
|
||||||
EMaybe r ?. field = maybelize (r ^. field)
|
EMaybe r ?. field = maybelize (r ^. field)
|
||||||
where
|
where
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user