{-| 
This package provides a convenient interface to construct Table Algebra
plans that can be dealt with by Pathfinder
(http://www-db.informatik.uni-tuebingen.de/research/pathfinder). 
A describtion of the algebra can be found at: 
http://dbworld.informatik.uni-tuebingen.de/projects/pathfinder/wiki/Logical_Algebra
This module only provides a subset of the complete algebra.
-}

module Database.Ferry.Algebra (
    AlgPlan,
    union, attach, proj, getLoop, rownum, rownum', eqJoin, rank, eqTJoin, distinct, rowrank, cast, difference, aggr,
    select, posSelect, dbTable, notC, cross, oper, emptyTable, tag, litTable, litTable',
    withBinding, withContext, getGamma, fromGam, 
    nat, int, bool, double, string,
    natT, intT, surT, boolT, doubleT, stringT,
    SortDir(..), AggrType(..),
    Column(..), Columns, 
    ATy(..), AVal(),
    SchemaInfos, KeyInfos, AlgNode, GraphM, Gam,
    initLoop, runGraph, ProjPair, ProjInf,
    module Database.Ferry.Algebra.Monadic.Create)where

import Database.Ferry.Algebra.Data.Algebra
import Database.Ferry.Algebra.Data.Create
import Database.Ferry.Algebra.Data.GraphBuilder
import Database.Ferry.Algebra.Monadic.Create