{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
module Opaleye.Table (
                      table,
                      tableWithSchema,
                      T.Table,
                      T.tableField,
                      T.optionalTableField,
                      T.requiredTableField,
                      T.InferrableTableField,
                      
                      selectTable,
                      
                      TableFields,
                      
                      selectTableExplicit,
                      
                      T.readOnlyTableField,
                     ) where
import qualified Opaleye.Internal.QueryArr as Q
import qualified Opaleye.Internal.Table as T
import           Opaleye.Internal.Table (Table, TableFields)
import qualified Opaleye.Internal.Tag as Tag
import qualified Opaleye.Internal.Unpackspec as U
import qualified Opaleye.Select                  as S
import qualified Data.Profunctor.Product.Default as D
selectTable :: D.Default U.Unpackspec fields fields
            => Table a fields
            
            -> S.Select fields
selectTable :: forall fields a.
Default Unpackspec fields fields =>
Table a fields -> Select fields
selectTable = forall tablefields fields a.
Unpackspec tablefields fields
-> Table a tablefields -> Select fields
selectTableExplicit forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
table :: String
      
      -> TableFields writeFields viewFields
      -> Table writeFields viewFields
table :: forall writeFields viewFields.
String
-> TableFields writeFields viewFields
-> Table writeFields viewFields
table = forall writeFields viewFields.
String
-> TableFields writeFields viewFields
-> Table writeFields viewFields
T.Table
tableWithSchema :: String
                
                -> String
                
                -> TableFields writeFields viewFields
                -> Table writeFields viewFields
tableWithSchema :: forall writeFields viewFields.
String
-> String
-> TableFields writeFields viewFields
-> Table writeFields viewFields
tableWithSchema = forall writeFields viewFields.
String
-> String
-> TableFields writeFields viewFields
-> Table writeFields viewFields
T.TableWithSchema
selectTableExplicit :: U.Unpackspec tablefields fields
                    
                    -> Table a tablefields
                    
                    -> S.Select fields
selectTableExplicit :: forall tablefields fields a.
Unpackspec tablefields fields
-> Table a tablefields -> Select fields
selectTableExplicit Unpackspec tablefields fields
cm Table a tablefields
table' = forall a. State Tag (a, PrimQuery) -> Query a
Q.productQueryArr forall a b. (a -> b) -> a -> b
$ do
  Tag
t0 <- State Tag Tag
Tag.fresh
  let (fields
retwires, PrimQuery
primQ) = forall viewColumns columns writeColumns.
Unpackspec viewColumns columns
-> Table writeColumns viewColumns -> Tag -> (columns, PrimQuery)
T.queryTable Unpackspec tablefields fields
cm Table a tablefields
table' Tag
t0
  forall (f :: * -> *) a. Applicative f => a -> f a
pure (fields
retwires, PrimQuery
primQ)