Change aliased val to be legal value by waiting until expr materialization in select clause before adding AS <alias>
This commit is contained in:
parent
2ab733fbee
commit
2d09ae1fe8
@ -16,15 +16,11 @@ class ToAlias a where
|
|||||||
toAlias :: a -> SqlQuery a
|
toAlias :: a -> SqlQuery a
|
||||||
|
|
||||||
instance ToAlias (SqlExpr (Value a)) where
|
instance ToAlias (SqlExpr (Value a)) where
|
||||||
toAlias (ERaw m f) =
|
toAlias e@(ERaw m f)
|
||||||
case sqlExprMetaAlias m of
|
| Just _ <- sqlExprMetaAlias m, not (sqlExprMetaIsReference m) = pure e
|
||||||
Just _ -> pure $ ERaw m f
|
| otherwise = do
|
||||||
Nothing -> do
|
ident <- newIdentFor (DBName "v")
|
||||||
ident <- newIdentFor (DBName "v")
|
pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} f
|
||||||
pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} $ \_ info ->
|
|
||||||
let (b, v) = f Never info
|
|
||||||
in (b <> " AS " <> useIdent info ident, v)
|
|
||||||
|
|
||||||
|
|
||||||
instance ToAlias (SqlExpr (Entity a)) where
|
instance ToAlias (SqlExpr (Entity a)) where
|
||||||
toAlias (ERaw m f) = do
|
toAlias (ERaw m f) = do
|
||||||
|
|||||||
@ -3044,11 +3044,11 @@ instance PersistField a => SqlSelect (SqlExpr (Value a)) (Value a) where
|
|||||||
|
|
||||||
-- | Materialize a @SqlExpr (Value a)@.
|
-- | Materialize a @SqlExpr (Value a)@.
|
||||||
materializeExpr :: IdentInfo -> SqlExpr (Value a) -> (TLB.Builder, [PersistValue])
|
materializeExpr :: IdentInfo -> SqlExpr (Value a) -> (TLB.Builder, [PersistValue])
|
||||||
materializeExpr info v
|
materializeExpr info (ERaw m f)
|
||||||
| ERaw m _ <- v, Just f <- sqlExprMetaCompositeFields m =
|
| Just fields <- sqlExprMetaCompositeFields m = (uncommas $ fmap parens $ fields info, [])
|
||||||
let bs = f info
|
| Just alias <- sqlExprMetaAlias m
|
||||||
in (uncommas $ map (parensM Parens) bs, [])
|
, not (sqlExprMetaIsReference m) = first (<> " AS " <> useIdent info alias) (f Parens info)
|
||||||
| ERaw _ f <- v = f Parens info
|
| otherwise = f Parens info
|
||||||
|
|
||||||
|
|
||||||
-- | You may return tuples (up to 16-tuples) and tuples of tuples
|
-- | You may return tuples (up to 16-tuples) and tuples of tuples
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user