esqueleto-3.6.0.0: src/Database/Esqueleto/Experimental/ToAlias.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Database.Esqueleto.Experimental.ToAlias
where
import Database.Esqueleto.Internal.Internal hiding (From, from, on)
import Database.Esqueleto.Internal.PersistentImport
-- Tedious tuple magic
class ToAlias a where
toAlias :: a -> SqlQuery a
instance ToAlias (SqlExpr (Value a)) where
toAlias e@(ERaw m f)
| Just _ <- sqlExprMetaAlias m = pure e
| otherwise = do
ident <- newIdentFor (DBName "v")
pure $ ERaw noMeta{sqlExprMetaAlias = Just ident} f
instance ToAlias (SqlExpr (Entity a)) where
toAlias e@(ERaw m f)
| Just _ <- sqlExprMetaAlias m = pure e
| otherwise = do
ident <- newIdentFor (DBName "v")
pure $ ERaw m{sqlExprMetaIsReference = False, sqlExprMetaAlias = Just ident} f
instance ToAlias (SqlExpr (Maybe (Entity a))) where
-- FIXME: Code duplication because the compiler doesnt like half final encoding
toAlias e@(ERaw m f)
| Just _ <- sqlExprMetaAlias m = pure e
| otherwise = do
ident <- newIdentFor (DBName "v")
pure $ ERaw m{sqlExprMetaIsReference = False, sqlExprMetaAlias = Just ident} f
instance (ToAlias a, ToAlias b) => ToAlias (a,b) where
toAlias (a,b) = (,) <$> toAlias a <*> toAlias b
instance ( ToAlias a
, ToAlias b
, ToAlias c
) => ToAlias (a,b,c) where
toAlias x = to3 <$> (toAlias $ from3 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
) => ToAlias (a,b,c,d) where
toAlias x = to4 <$> (toAlias $ from4 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
) => ToAlias (a,b,c,d,e) where
toAlias x = to5 <$> (toAlias $ from5 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
) => ToAlias (a,b,c,d,e,f) where
toAlias x = to6 <$> (toAlias $ from6 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
) => ToAlias (a,b,c,d,e,f,g) where
toAlias x = to7 <$> (toAlias $ from7 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
) => ToAlias (a,b,c,d,e,f,g,h) where
toAlias x = to8 <$> (toAlias $ from8 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
) => ToAlias (a,b,c,d,e,f,g,h,i) where
toAlias x = to9 <$> (toAlias $ from9 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
) => ToAlias (a,b,c,d,e,f,g,h,i,j) where
toAlias x = to10 <$> (toAlias $ from10 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k) where
toAlias x = to11 <$> (toAlias $ from11 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
, ToAlias l
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k,l) where
toAlias x = to12 <$> (toAlias $ from12 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
, ToAlias l
, ToAlias m
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k,l,m) where
toAlias x = to13 <$> (toAlias $ from13 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
, ToAlias l
, ToAlias m
, ToAlias n
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
toAlias x = to14 <$> (toAlias $ from14 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
, ToAlias l
, ToAlias m
, ToAlias n
, ToAlias o
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
toAlias x = to15 <$> (toAlias $ from15 x)
instance ( ToAlias a
, ToAlias b
, ToAlias c
, ToAlias d
, ToAlias e
, ToAlias f
, ToAlias g
, ToAlias h
, ToAlias i
, ToAlias j
, ToAlias k
, ToAlias l
, ToAlias m
, ToAlias n
, ToAlias o
, ToAlias p
) => ToAlias (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where
toAlias x = to16 <$> (toAlias $ from16 x)