{-# language FlexibleContexts #-}
{-# language MonoLocalBinds #-}

module Rel8.Query.Each
  ( each
  )
where

-- base
import Prelude

-- opaleye
import qualified Opaleye.Table as Opaleye

-- rel8
import Rel8.Query ( Query )
import Rel8.Query.Opaleye ( fromOpaleye )
import Rel8.Schema.Name ( Selects )
import Rel8.Schema.Table ( TableSchema )
import Rel8.Table.Cols ( fromCols, toCols )
import Rel8.Table.Opaleye ( table, unpackspec )


-- | Select each row from a table definition. This is equivalent to @FROM
-- table@.
each :: Selects names exprs => TableSchema names -> Query exprs
each :: TableSchema names -> Query exprs
each =
  (Cols Expr (Columns exprs) -> exprs)
-> Query (Cols Expr (Columns exprs)) -> Query exprs
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Cols Expr (Columns exprs) -> exprs
forall (context :: * -> *) a.
Table context a =>
Cols context (Columns a) -> a
fromCols (Query (Cols Expr (Columns exprs)) -> Query exprs)
-> (TableSchema names -> Query (Cols Expr (Columns exprs)))
-> TableSchema names
-> Query exprs
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  Select (Cols Expr (Columns exprs))
-> Query (Cols Expr (Columns exprs))
forall a. Select a -> Query a
fromOpaleye (Select (Cols Expr (Columns exprs))
 -> Query (Cols Expr (Columns exprs)))
-> (TableSchema names -> Select (Cols Expr (Columns exprs)))
-> TableSchema names
-> Query (Cols Expr (Columns exprs))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  Unpackspec (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
-> Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
-> Select (Cols Expr (Columns exprs))
forall tablefields fields a.
Unpackspec tablefields fields
-> Table a tablefields -> Select fields
Opaleye.selectTableExplicit Unpackspec (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
forall a. Table Expr a => Unpackspec a a
unpackspec (Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
 -> Select (Cols Expr (Columns exprs)))
-> (TableSchema names
    -> Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs)))
-> TableSchema names
-> Select (Cols Expr (Columns exprs))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  TableSchema (Cols Name (Columns exprs))
-> Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
forall names exprs.
Selects names exprs =>
TableSchema names -> Table exprs exprs
table (TableSchema (Cols Name (Columns exprs))
 -> Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs)))
-> (TableSchema names -> TableSchema (Cols Name (Columns exprs)))
-> TableSchema names
-> Table (Cols Expr (Columns exprs)) (Cols Expr (Columns exprs))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  (names -> Cols Name (Columns exprs))
-> TableSchema names -> TableSchema (Cols Name (Columns exprs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap names -> Cols Name (Columns exprs)
forall (context :: * -> *) a.
Table context a =>
a -> Cols context (Columns a)
toCols