{-# language FlexibleContexts #-}
{-# language MonoLocalBinds #-}
module Rel8.Statement.View
( createView
, createOrReplaceView
)
where
import Prelude
import qualified Hasql.Decoders as Hasql
import qualified Hasql.Encoders as Hasql
import qualified Hasql.Statement as Hasql
import Rel8.Query ( Query )
import Rel8.Schema.Name ( Selects )
import Rel8.Schema.Table ( TableSchema )
import Rel8.Statement.Insert ( ppInto )
import Rel8.Statement.Select ( ppSelect )
import Text.PrettyPrint ( Doc, (<+>), ($$), text )
import qualified Data.Text as Text
import Data.Text.Encoding ( encodeUtf8 )
data CreateView = Create | CreateOrReplace
createView :: Selects names exprs
=> TableSchema names -> Query exprs -> Hasql.Statement () ()
createView :: forall names exprs.
Selects names exprs =>
TableSchema names -> Query exprs -> Statement () ()
createView =
forall names exprs.
Selects names exprs =>
CreateView -> TableSchema names -> Query exprs -> Statement () ()
createViewGeneric CreateView
Create
createOrReplaceView :: Selects names exprs
=> TableSchema names -> Query exprs -> Hasql.Statement () ()
createOrReplaceView :: forall names exprs.
Selects names exprs =>
TableSchema names -> Query exprs -> Statement () ()
createOrReplaceView =
forall names exprs.
Selects names exprs =>
CreateView -> TableSchema names -> Query exprs -> Statement () ()
createViewGeneric CreateView
CreateOrReplace
createViewGeneric :: Selects names exprs
=> CreateView -> TableSchema names -> Query exprs -> Hasql.Statement () ()
createViewGeneric :: forall names exprs.
Selects names exprs =>
CreateView -> TableSchema names -> Query exprs -> Statement () ()
createViewGeneric CreateView
replace TableSchema names
schema Query exprs
query =
forall a b.
ByteString -> Params a -> Result b -> Bool -> Statement a b
Hasql.Statement ByteString
bytes Params ()
params Result ()
decode Bool
prepare
where
bytes :: ByteString
bytes = Text -> ByteString
encodeUtf8 (String -> Text
Text.pack String
sql)
params :: Params ()
params = Params ()
Hasql.noParams
decode :: Result ()
decode = Result ()
Hasql.noResult
prepare :: Bool
prepare = Bool
False
sql :: String
sql = forall a. Show a => a -> String
show Doc
doc
doc :: Doc
doc = forall names exprs.
Selects names exprs =>
TableSchema names -> Query exprs -> CreateView -> Doc
ppCreateView TableSchema names
schema Query exprs
query CreateView
replace
ppCreateView :: Selects names exprs
=> TableSchema names -> Query exprs -> CreateView -> Doc
ppCreateView :: forall names exprs.
Selects names exprs =>
TableSchema names -> Query exprs -> CreateView -> Doc
ppCreateView TableSchema names
schema Query exprs
query CreateView
replace =
CreateView -> Doc
createOrReplace CreateView
replace Doc -> Doc -> Doc
<+>
forall a. Table Name a => TableSchema a -> Doc
ppInto TableSchema names
schema Doc -> Doc -> Doc
$$
String -> Doc
text String
"AS" Doc -> Doc -> Doc
<+>
forall a. Table Expr a => Query a -> Doc
ppSelect Query exprs
query
where
createOrReplace :: CreateView -> Doc
createOrReplace CreateView
Create = String -> Doc
text String
"CREATE VIEW"
createOrReplace CreateView
CreateOrReplace = String -> Doc
text String
"CREATE OR REPLACE VIEW"