rel8-1.5.0.0: src/Rel8/Query/Function.hs
{-# language FlexibleContexts #-}
{-# language MonoLocalBinds #-}
module Rel8.Query.Function
( queryFunction
)
where
-- base
import Prelude
-- opaleye
import qualified Opaleye.Internal.Operators as Opaleye
-- rel8
import Rel8.Expr (Expr)
import Rel8.Expr.Function (Arguments, primFunction)
import Rel8.Query (Query)
import Rel8.Query.Opaleye (fromOpaleye)
import Rel8.Schema.QualifiedName (QualifiedName)
import Rel8.Table (Table)
import Rel8.Table.Opaleye (castTable, relExprPP)
-- | Select each row from a function that returns a relation. This is
-- equivalent to @FROM function(input)@.
queryFunction :: (Arguments input, Table Expr output)
=> QualifiedName -> input -> Query output
queryFunction name input = fmap castTable $ fromOpaleye $
Opaleye.relationValuedExprExplicit relExprPP (const expr)
where
expr = primFunction name input