11{-# LANGUAGE FlexibleInstances #-}
2+ {-# LANGUAGE OverloadedStrings #-}
23{-# LANGUAGE TypeFamilies #-}
34
45module Database.Esqueleto.Experimental.ToAliasReference
56 where
67
7- import Database.Esqueleto.Experimental.ToAlias
8+ import Data.Coerce
89import Database.Esqueleto.Internal.Internal hiding (From , from , on )
910import Database.Esqueleto.Internal.PersistentImport
1011
@@ -16,18 +17,21 @@ class ToAliasReference a where
1617 toAliasReference :: Ident -> a -> SqlQuery a
1718
1819instance ToAliasReference (SqlExpr (Value a )) where
19- toAliasReference aliasSource (EAliasedValue aliasIdent _) = pure $ EValueReference aliasSource ( \ _ -> aliasIdent )
20- toAliasReference _ v @ ( ERaw _ _) = toAlias v
21- toAliasReference _ v @ ( ECompositeKey _) = toAlias v
22- toAliasReference s ( EValueReference _ b) = pure $ EValueReference s b
20+ toAliasReference aliasSource (ERaw m _ )
21+ | Just alias <- sqlExprMetaAlias m = pure $ ERaw m{sqlExprMetaIsReference = True } $ \ _ info ->
22+ (useIdent info aliasSource <> " . " <> useIdent info alias, [] )
23+ toAliasReference _ e = pure e
2324
2425instance ToAliasReference (SqlExpr (Entity a )) where
25- toAliasReference aliasSource (EAliasedEntity ident _) = pure $ EAliasedEntityReference aliasSource ident
26- toAliasReference _ e@ (EEntity _) = toAlias e
27- toAliasReference s (EAliasedEntityReference _ b) = pure $ EAliasedEntityReference s b
26+ toAliasReference aliasSource (ERaw m _)
27+ | Just _ <- sqlExprMetaAlias m, False <- sqlExprMetaIsReference m =
28+ pure $ ERaw m{sqlExprMetaIsReference = True } $ \ _ info ->
29+ (useIdent info aliasSource, [] )
30+ toAliasReference _ e = pure e
2831
2932instance ToAliasReference (SqlExpr (Maybe (Entity a ))) where
30- toAliasReference s (EMaybe e) = EMaybe <$> toAliasReference s e
33+ toAliasReference aliasSource e =
34+ coerce <$> toAliasReference aliasSource (coerce e :: SqlExpr (Entity a ))
3135
3236
3337instance (ToAliasReference a , ToAliasReference b ) => ToAliasReference (a , b ) where
0 commit comments