module Rel8.Statement.Using
( ppFrom
, ppUsing
)
where
import Prelude
import Text.PrettyPrint ( Doc, (<+>), parens, text )
import Rel8.Query ( Query )
import Rel8.Schema.Table ( TableSchema(..), ppTable )
import Rel8.Statement.Select ( Optimized(..), ppPrimSelect )
ppFrom :: Query a -> Maybe (Doc, a)
ppFrom :: Query a -> Maybe (Doc, a)
ppFrom = String -> Query a -> Maybe (Doc, a)
forall a. String -> Query a -> Maybe (Doc, a)
ppJoin String
"FROM"
ppUsing :: Query a -> Maybe (Doc, a)
ppUsing :: Query a -> Maybe (Doc, a)
ppUsing = String -> Query a -> Maybe (Doc, a)
forall a. String -> Query a -> Maybe (Doc, a)
ppJoin String
"USING"
ppJoin :: String -> Query a -> Maybe (Doc, a)
ppJoin :: String -> Query a -> Maybe (Doc, a)
ppJoin String
clause Query a
join = do
Doc
doc <- case Optimized Doc
ofrom of
Optimized Doc
Empty -> Maybe Doc
forall a. Maybe a
Nothing
Optimized Doc
Unit -> Doc -> Maybe Doc
forall a. a -> Maybe a
Just Doc
forall a. Monoid a => a
mempty
Optimized Doc
doc -> Doc -> Maybe Doc
forall a. a -> Maybe a
Just (Doc -> Maybe Doc) -> Doc -> Maybe Doc
forall a b. (a -> b) -> a -> b
$ String -> Doc
text String
clause Doc -> Doc -> Doc
<+> Doc -> Doc
parens Doc
doc Doc -> Doc -> Doc
<+> TableSchema () -> Doc
forall a. TableSchema a -> Doc
ppTable TableSchema ()
alias
(Doc, a) -> Maybe (Doc, a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc
doc, a
a)
where
alias :: TableSchema ()
alias = TableSchema :: forall names. String -> Maybe String -> names -> TableSchema names
TableSchema {name :: String
name = String
"T1", schema :: Maybe String
schema = Maybe String
forall a. Maybe a
Nothing, columns :: ()
columns = ()}
(Optimized Doc
ofrom, a
a) = Query a -> (Optimized Doc, a)
forall a. Query a -> (Optimized Doc, a)
ppPrimSelect Query a
join