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
|
||||
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user