diff --git a/src/Database/Esqueleto/Experimental/ToAlias.hs b/src/Database/Esqueleto/Experimental/ToAlias.hs index 39f927a..4187f82 100644 --- a/src/Database/Esqueleto/Experimental/ToAlias.hs +++ b/src/Database/Esqueleto/Experimental/ToAlias.hs @@ -23,7 +23,7 @@ instance ToAlias (SqlExpr (Value a)) where ident <- newIdentFor (DBName "v") pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} $ \_ info -> let (b, v) = f Never info - in (b <> " AS " <> useIdent info ident, []) + in (b <> " AS " <> useIdent info ident, v) instance ToAlias (SqlExpr (Entity a)) where diff --git a/src/Database/Esqueleto/Experimental/ToAliasReference.hs b/src/Database/Esqueleto/Experimental/ToAliasReference.hs index f39a37d..c3f2d11 100644 --- a/src/Database/Esqueleto/Experimental/ToAliasReference.hs +++ b/src/Database/Esqueleto/Experimental/ToAliasReference.hs @@ -19,22 +19,22 @@ class ToAliasReference a where instance ToAliasReference (SqlExpr (Value a)) where toAliasReference aliasSource (ERaw m _) | Just alias <- sqlExprMetaAlias m = pure $ ERaw m $ \_ info -> - (useIdent info aliasSource <> "." <> useIdent info alias, []) + (useIdent info aliasSource <> "." <> useIdent info alias, []) toAliasReference _ e = pure e instance ToAliasReference (SqlExpr (Entity a)) where toAliasReference aliasSource (ERaw m _) | Just _ <- sqlExprMetaAlias m, False <- sqlExprMetaIsReference m = pure $ ERaw m{sqlExprMetaIsReference = True} $ \_ info -> - (useIdent info aliasSource, []) + (useIdent info aliasSource, []) toAliasReference _ e = pure e instance ToAliasReference (SqlExpr (Maybe (Entity a))) where -- FIXME: Code duplication because the compiler doesnt like half final encoding - toAliasReference aliasSource (ERaw m f) + toAliasReference aliasSource (ERaw m _) | Just _ <- sqlExprMetaAlias m, False <- sqlExprMetaIsReference m = pure $ ERaw m{sqlExprMetaIsReference = True} $ \_ info -> - (useIdent info aliasSource, []) + (useIdent info aliasSource, []) toAliasReference s e = pure e diff --git a/src/Database/Esqueleto/Internal/Internal.hs b/src/Database/Esqueleto/Internal/Internal.hs index 1f70874..0887c22 100644 --- a/src/Database/Esqueleto/Internal/Internal.hs +++ b/src/Database/Esqueleto/Internal/Internal.hs @@ -363,7 +363,9 @@ distinctOnOrderBy exprs act = act where toDistinctOn :: SqlExpr OrderBy -> SqlExpr DistinctOn - toDistinctOn = coerce + toDistinctOn (ERaw m f) = ERaw m $ \p info -> + let (b, vals) = f p info + in (TLB.fromLazyText $ head $ TL.splitOn " " $ TLB.toLazyText b, vals) -- | @ORDER BY random()@ clause. -- @@ -918,7 +920,11 @@ in_ :: PersistField typ => SqlExpr (Value typ) -> SqlExpr (ValueList typ) -> Sql ERaw noMeta $ \p info -> let (b1, vals1) = v Parens info (b2, vals2) = list Parens info - in (b1 <> " IN " <> b2, vals1 <> vals2) + in + if b2 == "()" then + ("FALSE", []) + else + (b1 <> " IN " <> b2, vals1 <> vals2) -- | @NOT IN@ operator. notIn :: PersistField typ => SqlExpr (Value typ) -> SqlExpr (ValueList typ) -> SqlExpr (Value Bool) @@ -3042,7 +3048,7 @@ materializeExpr info v | ERaw m _ <- v, Just f <- sqlExprMetaCompositeFields m = let bs = f info in (uncommas $ map (parensM Parens) bs, []) - | ERaw _ f <- v = f Never info + | ERaw _ f <- v = f Parens info -- | You may return tuples (up to 16-tuples) and tuples of tuples diff --git a/test/Common/Test.hs b/test/Common/Test.hs index 4f1fb4b..8eb157b 100644 --- a/test/Common/Test.hs +++ b/test/Common/Test.hs @@ -894,7 +894,6 @@ testSelectSubQuery run = describe "select subquery" $ do `Experimental.on` (\(l :& d) -> just (l ^. LordId) ==. d ?. DeedOwnerId) pure (lords, deeds) - liftIO . print =<< renderQuerySelect q ret <- select q liftIO $ ret `shouldMatchList` ((l3e, Nothing) : l1WithDeeds)