diff --git a/src/Database/Esqueleto/Experimental/ToAlias.hs b/src/Database/Esqueleto/Experimental/ToAlias.hs index 4187f82..4a85143 100644 --- a/src/Database/Esqueleto/Experimental/ToAlias.hs +++ b/src/Database/Esqueleto/Experimental/ToAlias.hs @@ -16,15 +16,11 @@ class ToAlias a where toAlias :: a -> SqlQuery a instance ToAlias (SqlExpr (Value a)) where - toAlias (ERaw m f) = - case sqlExprMetaAlias m of - Just _ -> pure $ ERaw m f - Nothing -> do - ident <- newIdentFor (DBName "v") - pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} $ \_ info -> - let (b, v) = f Never info - in (b <> " AS " <> useIdent info ident, v) - + toAlias e@(ERaw m f) + | Just _ <- sqlExprMetaAlias m, not (sqlExprMetaIsReference m) = pure e + | otherwise = do + ident <- newIdentFor (DBName "v") + pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} f instance ToAlias (SqlExpr (Entity a)) where toAlias (ERaw m f) = do diff --git a/src/Database/Esqueleto/Internal/Internal.hs b/src/Database/Esqueleto/Internal/Internal.hs index 0887c22..96c6bce 100644 --- a/src/Database/Esqueleto/Internal/Internal.hs +++ b/src/Database/Esqueleto/Internal/Internal.hs @@ -3044,11 +3044,11 @@ instance PersistField a => SqlSelect (SqlExpr (Value a)) (Value a) where -- | Materialize a @SqlExpr (Value a)@. materializeExpr :: IdentInfo -> SqlExpr (Value a) -> (TLB.Builder, [PersistValue]) -materializeExpr info v - | ERaw m _ <- v, Just f <- sqlExprMetaCompositeFields m = - let bs = f info - in (uncommas $ map (parensM Parens) bs, []) - | ERaw _ f <- v = f Parens info +materializeExpr info (ERaw m f) + | Just fields <- sqlExprMetaCompositeFields m = (uncommas $ fmap parens $ fields info, []) + | Just alias <- sqlExprMetaAlias m + , not (sqlExprMetaIsReference m) = first (<> " AS " <> useIdent info alias) (f Parens info) + | otherwise = f Parens info -- | You may return tuples (up to 16-tuples) and tuples of tuples