{-# LANGUAGE OverloadedStrings #-}
module Etl.Julius (
module RTable.Core
,ETLMappingExpr (..)
,ETLOpExpr (..)
,NamedMap (..)
,NamedResultName
,ColMappingExpr (..)
,ToColumn (..)
,ByFunction (..)
,OnRTable (..)
,TabExpr (..)
,RemoveSrcCol (..)
,ByPred (..)
,ByDelPred (..)
,SetColumns (..)
,ROpExpr(..)
,RelationalOp (..)
,FromRTable (..)
,Aggregate (..)
,AggOp (..)
,AsColumn (..)
,AggBy (..)
,GroupOnPred (..)
,TabLiteral (..)
,TabExprJoin (..)
,ByGenUnaryOperation (..)
,ByGenBinaryOperation (..)
,IntoClause (..)
,InsertSource (..)
,ValuesClause (..)
,TabSource (..)
,MergeInto (..)
,MergeSource (..)
,MergeMatchCondition (..)
,WhenMatched (..)
,UpdateColumns (..)
,evalJulius
,juliusToRTable
,runJulius
,eitherRunJulius
,juliusToResult
,runJuliusToResult
,eitherRunJuliusToResult
,runETL
,eitherRunETL
,takeNamedResult
,addSurrogateKeyJ
,appendRTableJ
,addSurrogateKey
,appendRTable
) where
import RTable.Core
import Etl.Internal.Core
import Data.Vector as V
import Control.Exception
import Control.DeepSeq as CDS
infixl 5 :->
infixl 5 :=>
data ETLMappingExpr =
EtlMapStart
| ETLMappingExpr :-> ETLOpExpr
| ETLMappingExpr :=> NamedMap
data ETLOpExpr = EtlC ColMappingExpr | EtlR ROpExpr
type NamedResultName = String
data NamedMap = NamedResult NamedResultName ETLOpExpr
data ColMappingExpr = Source [ColumnName] ToColumn | ColMappingEmpty
data ToColumn = Target [ColumnName] ByFunction
data ByFunction = By ColXForm OnRTable RemoveSrcCol ByPred
data OnRTable = On TabExpr
data RemoveSrcCol = RemoveSrc | DontRemoveSrc
data ByPred = FilterBy RPredicate
data ByDelPred = Where RPredicate
infixl 6 :.
data ROpExpr =
ROpStart
| ROpExpr :. RelationalOp
data RelationalOp =
Filter FromRTable ByPred
| Select [ColumnName] FromRTable
| Agg Aggregate
| GroupBy [ColumnName] Aggregate GroupOnPred
| Join TabLiteral TabExpr TabExprJoin
| LJoin TabLiteral TabExpr TabExprJoin
| RJoin TabLiteral TabExpr TabExprJoin
| FOJoin TabLiteral TabExpr TabExprJoin
| SemiJoin TabLiteral TabExpr TabExprJoin
| SemiJoinP TabExpr TabLiteral TabExprJoin
| AntiJoin TabLiteral TabExpr TabExprJoin
| AntiJoinP TabExpr TabLiteral TabExprJoin
| TabLiteral `Intersect` TabExpr
| TabLiteral `Union` TabExpr
| TabLiteral `UnionAll` TabExpr
| TabLiteral `Minus` TabExpr
| TabExpr `MinusP` TabLiteral
| GenUnaryOp OnRTable ByGenUnaryOperation
| GenBinaryOp TabLiteral TabExpr ByGenBinaryOperation
| OrderBy [(ColumnName, OrderingSpec)] FromRTable
| Delete FromRTable ByDelPred
| Update TabExpr SetColumns ByPred
| Insert IntoClause
| Upsert MergeInto
data IntoClause = Into TabExpr InsertSource
data InsertSource = Values ValuesClause | RTuples TabSource
data MergeInto = MergeInto TabExpr MergeSource
data MergeSource = Using TabSource MergeMatchCondition
data MergeMatchCondition = MergeOn RUpsertPredicate WhenMatched
data WhenMatched = WhenMatchedThen UpdateColumns
data UpdateColumns = UpdateCols [ColumnName] ByPred
data TabSource = TabSrc RTable
type ValuesClause = [(ColumnName, RDataType)]
data ByGenUnaryOperation = ByUnaryOp UnaryRTableOperation
data ByGenBinaryOperation = ByBinaryOp BinaryRTableOperation
data FromRTable = From TabExpr
data TabExpr = Tab RTable | Previous
data TabLiteral = TabL RTable
data TabExprJoin = JoinOn RJoinPredicate
data Aggregate = AggOn [AggOp] FromRTable
data AggOp =
Sum ColumnName AsColumn
| Count ColumnName AsColumn
| CountDist ColumnName AsColumn
| CountStar AsColumn
| Min ColumnName AsColumn
| Max ColumnName AsColumn
| Avg ColumnName AsColumn
| StrAgg ColumnName AsColumn Delimiter
| GenAgg ColumnName AsColumn AggBy
data AggBy = AggBy AggFunction
data AsColumn = As ColumnName
data GroupOnPred = GroupOn RGroupPredicate
data SetColumns = Set [(ColumnName, RDataType)]
myTransformation :: ColXForm
myTransformation :: ColXForm
myTransformation = ColXForm
forall a. HasCallStack => a
undefined
myTransformation2 :: ColXForm
myTransformation2 :: ColXForm
myTransformation2 = ColXForm
forall a. HasCallStack => a
undefined
myTable :: RTable
myTable :: RTable
myTable = RTable
forall a. HasCallStack => a
undefined
myTable2 :: RTable
myTable2 :: RTable
myTable2 = RTable
forall a. HasCallStack => a
undefined
myTable3 :: RTable
myTable3 :: RTable
myTable3 = RTable
forall a. HasCallStack => a
undefined
myTable4 :: RTable
myTable4 :: RTable
myTable4 = RTable
forall a. HasCallStack => a
undefined
myFpred :: RPredicate
myFpred :: RPredicate
myFpred = RPredicate
forall a. HasCallStack => a
undefined
myFpred2 :: RPredicate
myFpred2 :: RPredicate
myFpred2 = RPredicate
forall a. HasCallStack => a
undefined
myGpred :: RGroupPredicate
myGpred :: RGroupPredicate
myGpred = RGroupPredicate
forall a. HasCallStack => a
undefined
myJoinPred :: RJoinPredicate
myJoinPred :: RGroupPredicate
myJoinPred = RGroupPredicate
forall a. HasCallStack => a
undefined
myJoinPred2 :: RJoinPredicate
myJoinPred2 :: RGroupPredicate
myJoinPred2 = RGroupPredicate
forall a. HasCallStack => a
undefined
myJoinPred3 :: RJoinPredicate
myJoinPred3 :: RGroupPredicate
myJoinPred3 = RGroupPredicate
forall a. HasCallStack => a
undefined
myEtlExpr1 :: ETLMappingExpr
myEtlExpr1 = ETLMappingExpr
EtlMapStart
myEtlExpr2 :: ETLMappingExpr
myEtlExpr2 = ETLMappingExpr
EtlMapStart ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> ColMappingExpr -> ETLOpExpr
EtlC ColMappingExpr
ColMappingEmpty
myEtlExpr3 :: ETLMappingExpr
myEtlExpr3 = ETLMappingExpr
EtlMapStart ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> ROpExpr -> ETLOpExpr
EtlR ROpExpr
ROpStart
myEtlExpr4 :: ETLMappingExpr
myEtlExpr4 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (FromRTable -> ByPred -> RelationalOp
Filter (TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable) (ByPred -> RelationalOp) -> ByPred -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred))
myEtlExpr5 :: ETLMappingExpr
myEtlExpr5 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. ([ColumnName] -> FromRTable -> RelationalOp
Select [ColumnName
"col1", ColumnName
"col2", ColumnName
"col3"] (FromRTable -> RelationalOp) -> FromRTable -> RelationalOp
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable))
myEtlExpr51 :: ETLMappingExpr
myEtlExpr51 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (FromRTable -> ByPred -> RelationalOp
Filter (TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable) (ByPred -> RelationalOp) -> ByPred -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred)
ROpExpr -> RelationalOp -> ROpExpr
:. ([ColumnName] -> FromRTable -> RelationalOp
Select [ColumnName
"col1", ColumnName
"col2", ColumnName
"col3"] (FromRTable -> RelationalOp) -> FromRTable -> RelationalOp
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable))
myEtlExpr6 :: ETLMappingExpr
myEtlExpr6 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (Aggregate -> RelationalOp
Agg (Aggregate -> RelationalOp) -> Aggregate -> RelationalOp
forall a b. (a -> b) -> a -> b
$ [AggOp] -> FromRTable -> Aggregate
AggOn [ColumnName -> AsColumn -> AggOp
Sum ColumnName
"trgCol2" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"trgCol2Sum"] (FromRTable -> Aggregate) -> FromRTable -> Aggregate
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable))
myEtlExpr7 :: ETLMappingExpr
myEtlExpr7 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. ([ColumnName] -> Aggregate -> GroupOnPred -> RelationalOp
GroupBy [ColumnName
"col1", ColumnName
"col2", ColumnName
"col3"] ([AggOp] -> FromRTable -> Aggregate
AggOn [ColumnName -> AsColumn -> AggOp
Sum ColumnName
"col4" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"col4Sum", ColumnName -> AsColumn -> AggOp
Max ColumnName
"col4" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"col4Max"] (FromRTable -> Aggregate) -> FromRTable -> Aggregate
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From (TabExpr -> FromRTable) -> TabExpr -> FromRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable) (GroupOnPred -> RelationalOp) -> GroupOnPred -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> GroupOnPred
GroupOn RGroupPredicate
myGpred))
myEtlExpr8 :: ETLMappingExpr
myEtlExpr8 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (TabLiteral -> TabExpr -> TabExprJoin -> RelationalOp
Join (RTable -> TabLiteral
TabL RTable
myTable) (RTable -> TabExpr
Tab RTable
myTable2) (TabExprJoin -> RelationalOp) -> TabExprJoin -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> TabExprJoin
JoinOn RGroupPredicate
myJoinPred) )
myEtlExpr9 :: ETLMappingExpr
myEtlExpr9 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (TabLiteral -> TabExpr -> TabExprJoin -> RelationalOp
Join (RTable -> TabLiteral
TabL RTable
myTable) (RTable -> TabExpr
Tab RTable
myTable2) (TabExprJoin -> RelationalOp) -> TabExprJoin -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> TabExprJoin
JoinOn RGroupPredicate
myJoinPred)
ROpExpr -> RelationalOp -> ROpExpr
:. (TabLiteral -> TabExpr -> TabExprJoin -> RelationalOp
Join (RTable -> TabLiteral
TabL RTable
myTable3) TabExpr
Previous (TabExprJoin -> RelationalOp) -> TabExprJoin -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> TabExprJoin
JoinOn RGroupPredicate
myJoinPred2)
ROpExpr -> RelationalOp -> ROpExpr
:. (TabLiteral -> TabExpr -> TabExprJoin -> RelationalOp
Join (RTable -> TabLiteral
TabL RTable
myTable4) TabExpr
Previous (TabExprJoin -> RelationalOp) -> TabExprJoin -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> TabExprJoin
JoinOn RGroupPredicate
myJoinPred3))
myEtlExpr10 :: ETLMappingExpr
myEtlExpr10 = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (TabLiteral -> TabExpr -> RelationalOp
Union (RTable -> TabLiteral
TabL RTable
myTable) (RTable -> TabExpr
Tab RTable
myTable2)))
myEtlExpr :: ETLMappingExpr
myEtlExpr :: ETLMappingExpr
myEtlExpr = ETLMappingExpr
EtlMapStart
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ColMappingExpr -> ETLOpExpr
EtlC (ColMappingExpr -> ETLOpExpr) -> ColMappingExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ToColumn -> ColMappingExpr
Source [ColumnName
"srcCol"] (ToColumn -> ColMappingExpr) -> ToColumn -> ColMappingExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ByFunction -> ToColumn
Target [ColumnName
"trgCol"] (ByFunction -> ToColumn) -> ByFunction -> ToColumn
forall a b. (a -> b) -> a -> b
$ ColXForm -> OnRTable -> RemoveSrcCol -> ByPred -> ByFunction
By ColXForm
myTransformation (TabExpr -> OnRTable
On (TabExpr -> OnRTable) -> TabExpr -> OnRTable
forall a b. (a -> b) -> a -> b
$ RTable -> TabExpr
Tab RTable
myTable) RemoveSrcCol
DontRemoveSrc (ByPred -> ByFunction) -> ByPred -> ByFunction
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred2)
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$
ROpExpr
ROpStart
ROpExpr -> RelationalOp -> ROpExpr
:. (FromRTable -> ByPred -> RelationalOp
Filter (TabExpr -> FromRTable
From TabExpr
Previous) (ByPred -> RelationalOp) -> ByPred -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred)
ROpExpr -> RelationalOp -> ROpExpr
:. ([ColumnName] -> Aggregate -> GroupOnPred -> RelationalOp
GroupBy [ColumnName
"col1", ColumnName
"col2", ColumnName
"col3"] ([AggOp] -> FromRTable -> Aggregate
AggOn [ColumnName -> AsColumn -> AggOp
Sum ColumnName
"col4" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"col4Sum", ColumnName -> AsColumn -> AggOp
Max ColumnName
"col4" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"col4Max"] (FromRTable -> Aggregate) -> FromRTable -> Aggregate
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From TabExpr
Previous) (GroupOnPred -> RelationalOp) -> GroupOnPred -> RelationalOp
forall a b. (a -> b) -> a -> b
$ RGroupPredicate -> GroupOnPred
GroupOn RGroupPredicate
myGpred)
ROpExpr -> RelationalOp -> ROpExpr
:. ([ColumnName] -> FromRTable -> RelationalOp
Select [ColumnName
"col1", ColumnName
"col2", ColumnName
"col3", ColumnName
"col4Sum"] (FromRTable -> RelationalOp) -> FromRTable -> RelationalOp
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From TabExpr
Previous)
)
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ColMappingExpr -> ETLOpExpr
EtlC (ColMappingExpr -> ETLOpExpr) -> ColMappingExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ToColumn -> ColMappingExpr
Source [ColumnName
"tgrCol"] (ToColumn -> ColMappingExpr) -> ToColumn -> ColMappingExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ByFunction -> ToColumn
Target [ColumnName
"trgCol2"] (ByFunction -> ToColumn) -> ByFunction -> ToColumn
forall a b. (a -> b) -> a -> b
$ ColXForm -> OnRTable -> RemoveSrcCol -> ByPred -> ByFunction
By ColXForm
myTransformation (TabExpr -> OnRTable
On TabExpr
Previous) RemoveSrcCol
RemoveSrc (ByPred -> ByFunction) -> ByPred -> ByFunction
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred2)
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ROpExpr -> ETLOpExpr
EtlR (ROpExpr -> ETLOpExpr) -> ROpExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$ ROpExpr
ROpStart ROpExpr -> RelationalOp -> ROpExpr
:. (Aggregate -> RelationalOp
Agg (Aggregate -> RelationalOp) -> Aggregate -> RelationalOp
forall a b. (a -> b) -> a -> b
$ [AggOp] -> FromRTable -> Aggregate
AggOn [ColumnName -> AsColumn -> AggOp
Sum ColumnName
"trgCol2" (AsColumn -> AggOp) -> AsColumn -> AggOp
forall a b. (a -> b) -> a -> b
$ ColumnName -> AsColumn
As ColumnName
"trgCol2Sum"] (FromRTable -> Aggregate) -> FromRTable -> Aggregate
forall a b. (a -> b) -> a -> b
$ TabExpr -> FromRTable
From TabExpr
Previous))
ETLMappingExpr -> ETLOpExpr -> ETLMappingExpr
:-> (ColMappingExpr -> ETLOpExpr
EtlC (ColMappingExpr -> ETLOpExpr) -> ColMappingExpr -> ETLOpExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ToColumn -> ColMappingExpr
Source [ColumnName
"trgCol2Sum"] (ToColumn -> ColMappingExpr) -> ToColumn -> ColMappingExpr
forall a b. (a -> b) -> a -> b
$ [ColumnName] -> ByFunction -> ToColumn
Target [ColumnName
"newCol1", ColumnName
"newCol2"] (ByFunction -> ToColumn) -> ByFunction -> ToColumn
forall a b. (a -> b) -> a -> b
$ ColXForm -> OnRTable -> RemoveSrcCol -> ByPred -> ByFunction
By ColXForm
myTransformation2 (TabExpr -> OnRTable
On TabExpr
Previous) RemoveSrcCol
DontRemoveSrc (ByPred -> ByFunction) -> ByPred -> ByFunction
forall a b. (a -> b) -> a -> b
$ RPredicate -> ByPred
FilterBy RPredicate
myFpred2)
takeNamedResult ::
NamedResultName
-> ETLMappingExpr
-> ETLMappingExpr
takeNamedResult :: NamedResultName -> ETLMappingExpr -> ETLMappingExpr
takeNamedResult NamedResultName
_ ETLMappingExpr
EtlMapStart = ETLMappingExpr
EtlMapStart
takeNamedResult NamedResultName
rname (ETLMappingExpr
restExpression :-> ETLOpExpr
etlOpXpr) = NamedResultName -> ETLMappingExpr -> ETLMappingExpr
takeNamedResult NamedResultName
rname ETLMappingExpr
restExpression
takeNamedResult NamedResultName
rname (ETLMappingExpr
restExpression :=> NamedResult NamedResultName
n ETLOpExpr
etlOpXpr) =
if NamedResultName
rname NamedResultName -> NamedResultName -> Bool
forall a. Eq a => a -> a -> Bool
== NamedResultName
n
then (ETLMappingExpr
restExpression ETLMappingExpr -> NamedMap -> ETLMappingExpr
:=> NamedResultName -> ETLOpExpr -> NamedMap
NamedResult NamedResultName
n ETLOpExpr
etlOpXpr)
else NamedResultName -> ETLMappingExpr -> ETLMappingExpr
takeNamedResult NamedResultName
rname ETLMappingExpr
restExpression
evalJulius :: ETLMappingExpr -> ETLMapping
evalJulius :: ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
EtlMapStart = ETLMapping
ETLMapEmpty
evalJulius (ETLMappingExpr
restExpression :-> (EtlC ColMappingExpr
colMapExpression)) =
case ColMappingExpr
colMapExpression of
ColMappingExpr
ColMappingEmpty
-> ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLcOp :: RColMapping -> ETLOperation
ETLcOp {cmap :: RColMapping
cmap = RColMapping
ColMapEmpty} RTable
emptyRTable (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression)
Source [ColumnName]
srcColumns (Target [ColumnName]
trgColumns (By ColXForm
colXformation (On TabExpr
tabExpr) RemoveSrcCol
removeSource (FilterBy RPredicate
filterPred)))
-> let prevMapping :: ETLMapping
prevMapping = case TabExpr
tabExpr of
Tab RTable
tab -> RTable -> ETLMapping
rtabToETLMapping RTable
tab
TabExpr
Previous -> ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression
removeOption :: YesNo
removeOption = case RemoveSrcCol
removeSource of
RemoveSrcCol
RemoveSrc -> YesNo
Yes
RemoveSrcCol
DontRemoveSrc -> YesNo
No
in ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLcOp :: RColMapping -> ETLOperation
ETLcOp {cmap :: RColMapping
cmap = [ColumnName]
-> [ColumnName] -> ColXForm -> YesNo -> RPredicate -> RColMapping
createColMapping [ColumnName]
srcColumns [ColumnName]
trgColumns ColXForm
colXformation YesNo
removeOption RPredicate
filterPred}
RTable
emptyRTable
ETLMapping
prevMapping
evalJulius (ETLMappingExpr
restExpression :=> NamedResult NamedResultName
rname (EtlC ColMappingExpr
colMapExpression)) =
case ColMappingExpr
colMapExpression of
ColMappingExpr
ColMappingEmpty
-> ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLcOp :: RColMapping -> ETLOperation
ETLcOp {cmap :: RColMapping
cmap = RColMapping
ColMapEmpty} RTable
emptyRTable (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression)
Source [ColumnName]
srcColumns (Target [ColumnName]
trgColumns (By ColXForm
colXformation (On TabExpr
tabExpr) RemoveSrcCol
removeSource (FilterBy RPredicate
filterPred)))
-> let prevMapping :: ETLMapping
prevMapping = case TabExpr
tabExpr of
Tab RTable
tab -> RTable -> ETLMapping
rtabToETLMapping RTable
tab
TabExpr
Previous -> ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression
removeOption :: YesNo
removeOption = case RemoveSrcCol
removeSource of
RemoveSrcCol
RemoveSrc -> YesNo
Yes
RemoveSrcCol
DontRemoveSrc -> YesNo
No
in ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLcOp :: RColMapping -> ETLOperation
ETLcOp {cmap :: RColMapping
cmap = [ColumnName]
-> [ColumnName] -> ColXForm -> YesNo -> RPredicate -> RColMapping
createColMapping [ColumnName]
srcColumns [ColumnName]
trgColumns ColXForm
colXformation YesNo
removeOption RPredicate
filterPred}
RTable
emptyRTable
ETLMapping
prevMapping
evalJulius (ETLMappingExpr
restExpression :-> (EtlR ROpExpr
relOperExpression)) =
let (ROperation
roperation, TabExprEnhanced
leftTabExpr, TabExprEnhanced
rightTabExpr) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
relOperExpression
(ETLMapping
prevMapping, RTable
rightBranch) = case (TabExprEnhanced
leftTabExpr, TabExprEnhanced
rightTabExpr) of
(TXE (Tab RTable
tab1), TXE (Tab RTable
tab2)) -> (RTable -> ETLMapping
rtabToETLMapping RTable
tab1, RTable
tab2)
(TXE TabExpr
Previous, TXE (Tab RTable
tab)) -> (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression, RTable
tab)
(TXE (Tab RTable
tab), TabExprEnhanced
EmptyTab) -> (RTable -> ETLMapping
rtabToETLMapping RTable
tab, RTable
emptyRTable)
(TabExprEnhanced
EmptyTab, TXE (Tab RTable
tab)) -> (ETLMapping
ETLMapEmpty, RTable
tab)
(TXE TabExpr
Previous, TabExprEnhanced
EmptyTab) -> (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression, RTable
emptyRTable)
(TabExprEnhanced
_, TabExprEnhanced
_) -> (ETLMapping
ETLMapEmpty, RTable
emptyRTable)
in ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLrOp :: ROperation -> ETLOperation
ETLrOp {rop :: ROperation
rop = ROperation
roperation} RTable
rightBranch ETLMapping
prevMapping
evalJulius (ETLMappingExpr
restExpression :=> NamedResult NamedResultName
rname (EtlR ROpExpr
relOperExpression)) =
let (ROperation
roperation, TabExprEnhanced
leftTabExpr, TabExprEnhanced
rightTabExpr) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
relOperExpression
(ETLMapping
prevMapping, RTable
rightBranch) = case (TabExprEnhanced
leftTabExpr, TabExprEnhanced
rightTabExpr) of
(TXE (Tab RTable
tab1), TXE (Tab RTable
tab2)) -> (RTable -> ETLMapping
rtabToETLMapping RTable
tab1, RTable
tab2)
(TXE TabExpr
Previous, TXE (Tab RTable
tab)) -> (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression, RTable
tab)
(TXE (Tab RTable
tab), TabExprEnhanced
EmptyTab) -> (RTable -> ETLMapping
rtabToETLMapping RTable
tab, RTable
emptyRTable)
(TabExprEnhanced
EmptyTab, TXE (Tab RTable
tab)) -> (ETLMapping
ETLMapEmpty, RTable
tab)
(TXE TabExpr
Previous, TabExprEnhanced
EmptyTab) -> (ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
restExpression, RTable
emptyRTable)
(TabExprEnhanced
_, TabExprEnhanced
_) -> (ETLMapping
ETLMapEmpty, RTable
emptyRTable)
in ETLOperation -> RTable -> ETLMapping -> ETLMapping
connectETLMapLD ETLrOp :: ROperation -> ETLOperation
ETLrOp {rop :: ROperation
rop = ROperation
roperation} RTable
rightBranch ETLMapping
prevMapping
juliusToRTable :: ETLMappingExpr -> RTable
juliusToRTable :: ETLMappingExpr -> RTable
juliusToRTable = (ETLMappingExpr -> RTable) -> ETLMappingExpr -> RTable
forall a. NFData a => a -> a
CDS.force ((ETLMappingExpr -> RTable) -> ETLMappingExpr -> RTable)
-> (ETLMappingExpr -> RTable) -> ETLMappingExpr -> RTable
forall a b. (a -> b) -> a -> b
$ (ETLMapping -> RTable
etl (ETLMapping -> RTable)
-> (ETLMappingExpr -> ETLMapping) -> ETLMappingExpr -> RTable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ETLMappingExpr -> ETLMapping
evalJulius)
runJulius :: ETLMappingExpr -> IO RTable
runJulius :: ETLMappingExpr -> IO RTable
runJulius ETLMappingExpr
jul = RTable -> IO RTable
forall (m :: * -> *) a. Monad m => a -> m a
return (RTable -> IO RTable) -> RTable -> IO RTable
forall a b. NFData a => (a -> b) -> a -> b
$!! ETLMappingExpr -> RTable
juliusToRTable ETLMappingExpr
jul
eitherRunJulius :: Exception e => ETLMappingExpr -> IO (Either e RTable)
eitherRunJulius :: ETLMappingExpr -> IO (Either e RTable)
eitherRunJulius ETLMappingExpr
jul = IO RTable -> IO (Either e RTable)
forall e a. Exception e => IO a -> IO (Either e a)
try (IO RTable -> IO (Either e RTable))
-> IO RTable -> IO (Either e RTable)
forall a b. (a -> b) -> a -> b
$ ETLMappingExpr -> IO RTable
runJulius ETLMappingExpr
jul
juliusToResult :: ETLMappingExpr -> RTabResult
juliusToResult :: ETLMappingExpr -> RTabResult
juliusToResult = (ETLMappingExpr -> RTabResult) -> ETLMappingExpr -> RTabResult
forall a. NFData a => a -> a
CDS.force ((ETLMappingExpr -> RTabResult) -> ETLMappingExpr -> RTabResult)
-> (ETLMappingExpr -> RTabResult) -> ETLMappingExpr -> RTabResult
forall a b. (a -> b) -> a -> b
$ (ETLMapping -> RTabResult
etlRes (ETLMapping -> RTabResult)
-> (ETLMappingExpr -> ETLMapping) -> ETLMappingExpr -> RTabResult
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ETLMappingExpr -> ETLMapping
evalJulius)
runJuliusToResult :: ETLMappingExpr -> IO RTabResult
runJuliusToResult :: ETLMappingExpr -> IO RTabResult
runJuliusToResult ETLMappingExpr
jul = RTabResult -> IO RTabResult
forall (m :: * -> *) a. Monad m => a -> m a
return (RTabResult -> IO RTabResult) -> RTabResult -> IO RTabResult
forall a b. (a -> b) -> a -> b
$ ETLMappingExpr -> RTabResult
juliusToResult ETLMappingExpr
jul
eitherRunJuliusToResult :: Exception e => ETLMappingExpr -> IO (Either e RTabResult)
eitherRunJuliusToResult :: ETLMappingExpr -> IO (Either e RTabResult)
eitherRunJuliusToResult ETLMappingExpr
jul = IO RTabResult -> IO (Either e RTabResult)
forall e a. Exception e => IO a -> IO (Either e a)
try (IO RTabResult -> IO (Either e RTabResult))
-> IO RTabResult -> IO (Either e RTabResult)
forall a b. (a -> b) -> a -> b
$ ETLMappingExpr -> IO RTabResult
runJuliusToResult ETLMappingExpr
jul
runETL :: ([RTable] -> [RTable]) -> [RTable] -> IO [RTable]
runETL :: ([RTable] -> [RTable]) -> [RTable] -> IO [RTable]
runETL [RTable] -> [RTable]
etlf [RTable]
inRTabs = [RTable] -> IO [RTable]
forall (m :: * -> *) a. Monad m => a -> m a
return ([RTable] -> IO [RTable]) -> [RTable] -> IO [RTable]
forall a b. NFData a => (a -> b) -> a -> b
$!! [RTable] -> [RTable]
etlf [RTable]
inRTabs
eitherRunETL :: Exception e => ([RTable] -> [RTable]) -> [RTable] -> IO (Either e [RTable])
eitherRunETL :: ([RTable] -> [RTable]) -> [RTable] -> IO (Either e [RTable])
eitherRunETL [RTable] -> [RTable]
etlf [RTable]
inRTabs = IO [RTable] -> IO (Either e [RTable])
forall e a. Exception e => IO a -> IO (Either e a)
try (IO [RTable] -> IO (Either e [RTable]))
-> IO [RTable] -> IO (Either e [RTable])
forall a b. (a -> b) -> a -> b
$ (([RTable] -> [RTable]) -> [RTable] -> IO [RTable]
runETL [RTable] -> [RTable]
etlf [RTable]
inRTabs)
data TabExprEnhanced = TXE TabExpr | EmptyTab
evalROpExpr :: ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr :: ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
ROpStart = (ROperation
ROperationEmpty, TabExprEnhanced
EmptyTab, TabExprEnhanced
EmptyTab)
evalROpExpr (ROpExpr
restExpression :. RelationalOp
rop) =
case RelationalOp
rop of
Filter (From TabExpr
tabExpr) (FilterBy RPredicate
filterPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RPredicate -> UnaryRTableOperation
f RPredicate
filterPred
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Select [ColumnName]
colNameList (From TabExpr
tabExpr) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = [ColumnName] -> UnaryRTableOperation
p [ColumnName]
colNameList
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Agg (AggOn [AggOp]
aggOpList (From TabExpr
tabExpr)) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = [RAggOperation] -> UnaryRTableOperation
rAgg ([RAggOperation] -> UnaryRTableOperation)
-> [RAggOperation] -> UnaryRTableOperation
forall a b. (a -> b) -> a -> b
$ [AggOp] -> [RAggOperation]
aggOpExprToAggOp [AggOp]
aggOpList
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
GroupBy [ColumnName]
colNameList (AggOn [AggOp]
aggOpList (From TabExpr
tabExpr)) (GroupOn RGroupPredicate
grpPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate
-> [RAggOperation] -> [ColumnName] -> UnaryRTableOperation
rG RGroupPredicate
grpPred ([AggOp] -> [RAggOperation]
aggOpExprToAggOp [AggOp]
aggOpList) [ColumnName]
colNameList
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
OrderBy [(ColumnName, OrderingSpec)]
colOrderingSpecList (From TabExpr
tabExpr) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = [(ColumnName, OrderingSpec)] -> UnaryRTableOperation
rO [(ColumnName, OrderingSpec)]
colOrderingSpecList
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Join (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
iJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
LJoin (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
lJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
RJoin (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
rJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
FOJoin (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
foJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
SemiJoin (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
sJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
SemiJoinP TabExpr
tabExpr (TabL RTable
tabl) (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = ((RTable -> UnaryRTableOperation) -> RTable -> UnaryRTableOperation
forall a b c. (a -> b -> c) -> b -> a -> c
flip (RGroupPredicate -> RTable -> UnaryRTableOperation
sJ RGroupPredicate
joinPred)) RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
AntiJoin (TabL RTable
tabl) TabExpr
tabExpr (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RGroupPredicate -> RTable -> UnaryRTableOperation
aJ RGroupPredicate
joinPred RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
AntiJoinP TabExpr
tabExpr (TabL RTable
tabl) (JoinOn RGroupPredicate
joinPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = ((RTable -> UnaryRTableOperation) -> RTable -> UnaryRTableOperation
forall a b c. (a -> b -> c) -> b -> a -> c
flip (RGroupPredicate -> RTable -> UnaryRTableOperation
aJ RGroupPredicate
joinPred)) RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Intersect (TabL RTable
tabl) TabExpr
tabExpr ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
i RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Union (TabL RTable
tabl) TabExpr
tabExpr ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
u RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
UnionAll (TabL RTable
tabl) TabExpr
tabExpr ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
runUnionAll RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Minus (TabL RTable
tabl) TabExpr
tabExpr ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
d RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
MinusP TabExpr
tabExpr (TabL RTable
tabl) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = ((RTable -> UnaryRTableOperation) -> RTable -> UnaryRTableOperation
forall a b c. (a -> b -> c) -> b -> a -> c
flip RTable -> UnaryRTableOperation
d) RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
GenUnaryOp (On TabExpr
tabExpr) (ByUnaryOp UnaryRTableOperation
unRTabOp) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = UnaryRTableOperation
unRTabOp
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
GenBinaryOp (TabL RTable
tabl) TabExpr
tabExpr (ByBinaryOp RTable -> UnaryRTableOperation
binRTabOp) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
binRTabOp RTable
tabl
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Delete (From TabExpr
tabExpr) (Where RPredicate
deletePred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RPredicate -> UnaryRTableOperation
deleteRTab RPredicate
deletePred
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Update TabExpr
tabExpr (Set [(ColumnName, RDataType)]
colValuePairs) (FilterBy RPredicate
filterPred) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = [(ColumnName, RDataType)] -> RPredicate -> UnaryRTableOperation
updateRTab [(ColumnName, RDataType)]
colValuePairs RPredicate
filterPred
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Insert (Into TabExpr
tabExpr (Values [(ColumnName, RDataType)]
colValuePairs)) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTuple -> UnaryRTableOperation
insertAppendRTab ([(ColumnName, RDataType)] -> RTuple
createRTuple [(ColumnName, RDataType)]
colValuePairs)
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Insert (Into TabExpr
tabExpr (RTuples (TabSrc RTable
rtabsrc))) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable -> UnaryRTableOperation
insertRTabToRTab RTable
rtabsrc
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
Upsert (
MergeInto TabExpr
tabExpr (
Using (TabSrc RTable
srcTab) (
MergeOn RUpsertPredicate
upsPred (
WhenMatchedThen (
UpdateCols [ColumnName]
cols (FilterBy RPredicate
fpred)
)
)
)
)
) ->
let
currfunc :: UnaryRTableOperation
currfunc :: UnaryRTableOperation
currfunc = RTable
-> RUpsertPredicate
-> [ColumnName]
-> RPredicate
-> UnaryRTableOperation
upsertRTab RTable
srcTab RUpsertPredicate
upsPred [ColumnName]
cols RPredicate
fpred
(ROperation
prevOperation, TabExprEnhanced
prevTXEleft, TabExprEnhanced
prevTXEright) = ROpExpr -> (ROperation, TabExprEnhanced, TabExprEnhanced)
evalROpExpr ROpExpr
restExpression
in case ROperation
prevOperation of
RCombinedOp {rcombOp :: ROperation -> UnaryRTableOperation
rcombOp = UnaryRTableOperation
prevfunc} -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnaryRTableOperation
prevfunc}, TabExprEnhanced
prevTXEleft, TabExprEnhanced
EmptyTab)
ROperation
ROperationEmpty -> (RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp {rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
currfunc}, TabExpr -> TabExprEnhanced
TXE TabExpr
tabExpr, TabExprEnhanced
EmptyTab)
aggOpExprToAggOp :: [AggOp] -> [RAggOperation]
aggOpExprToAggOp :: [AggOp] -> [RAggOperation]
aggOpExprToAggOp [] = []
aggOpExprToAggOp (AggOp
aggopExpr : [AggOp]
rest) =
let aggop :: RAggOperation
aggop = case AggOp
aggopExpr of
Sum ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggSum ColumnName
srcCol ColumnName
trgCol)
Count ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggCount ColumnName
srcCol ColumnName
trgCol)
CountDist ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggCountDist ColumnName
srcCol ColumnName
trgCol)
CountStar (As ColumnName
trgCol) -> (ColumnName -> RAggOperation
raggCountStar ColumnName
trgCol)
Min ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggMin ColumnName
srcCol ColumnName
trgCol)
Max ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggMax ColumnName
srcCol ColumnName
trgCol)
Avg ColumnName
srcCol (As ColumnName
trgCol) -> (ColumnName -> ColumnName -> RAggOperation
raggAvg ColumnName
srcCol ColumnName
trgCol)
StrAgg ColumnName
srcCol (As ColumnName
trgCol) NamedResultName
delimiter -> (ColumnName -> ColumnName -> NamedResultName -> RAggOperation
raggStrAgg ColumnName
srcCol ColumnName
trgCol NamedResultName
delimiter)
GenAgg ColumnName
srcCol (As ColumnName
trgCol) (AggBy AggFunction
aggf) -> (AggFunction -> ColumnName -> ColumnName -> RAggOperation
raggGenericAgg AggFunction
aggf ColumnName
srcCol ColumnName
trgCol)
in RAggOperation
aggop RAggOperation -> [RAggOperation] -> [RAggOperation]
forall a. a -> [a] -> [a]
: ([AggOp] -> [RAggOperation]
aggOpExprToAggOp [AggOp]
rest)
finalRTable :: RTable
finalRTable = ETLMapping -> RTable
etl (ETLMapping -> RTable) -> ETLMapping -> RTable
forall a b. (a -> b) -> a -> b
$ ETLMappingExpr -> ETLMapping
evalJulius ETLMappingExpr
myEtlExpr
addSurrogateKey :: Integral a =>
ColumnName
-> a
-> ETLOperation
addSurrogateKey :: ColumnName -> a -> ETLOperation
addSurrogateKey ColumnName
cname a
initVal =
let combOp :: ROperation
combOp = RCombinedOp :: UnaryRTableOperation -> ROperation
RCombinedOp { rcombOp :: UnaryRTableOperation
rcombOp = UnaryRTableOperation
updateSKvalue UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ColumnName -> RDataType -> UnaryRTableOperation
addColumn ColumnName
cname (Integer -> RDataType
RInt (a -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
initVal))) }
where
updateSKvalue :: RTable -> RTable
updateSKvalue :: UnaryRTableOperation
updateSKvalue RTable
rt =
let indexedRTab :: Vector (Int, RTuple)
indexedRTab = RTable -> Vector (Int, RTuple)
forall a. Vector a -> Vector (Int, a)
V.indexed RTable
rt
in (RTuple -> (Int, RTuple) -> RTuple)
-> RTable -> Vector (Int, RTuple) -> RTable
forall a b c. (a -> b -> c) -> Vector a -> Vector b -> Vector c
V.zipWith (\RTuple
tupsrc (Int
val, RTuple
_) -> ColumnName -> RDataType -> RTuple -> RTuple
upsertRTuple ColumnName
cname (Integer -> RDataType
RInt (a -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
initVal) RDataType -> RDataType -> RDataType
forall a. Num a => a -> a -> a
+ Integer -> RDataType
RInt (Int -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
val)) RTuple
tupsrc ) RTable
rt Vector (Int, RTuple)
indexedRTab
in ROperation -> ETLOperation
ETLrOp ROperation
combOp
addSurrogateKeyJ :: Integral a
=> ColumnName
-> a
-> RTable
-> RTable
addSurrogateKeyJ :: ColumnName -> a -> UnaryRTableOperation
addSurrogateKeyJ ColumnName
cname a
initVal =
UnaryRTableOperation
updateSKvalue UnaryRTableOperation
-> UnaryRTableOperation -> UnaryRTableOperation
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ColumnName -> RDataType -> UnaryRTableOperation
addColumn ColumnName
cname (Integer -> RDataType
RInt (a -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
initVal)))
where
updateSKvalue :: RTable -> RTable
updateSKvalue :: UnaryRTableOperation
updateSKvalue RTable
rt =
let indexedRTab :: Vector (Int, RTuple)
indexedRTab = RTable -> Vector (Int, RTuple)
forall a. Vector a -> Vector (Int, a)
V.indexed RTable
rt
in (RTuple -> (Int, RTuple) -> RTuple)
-> RTable -> Vector (Int, RTuple) -> RTable
forall a b c. (a -> b -> c) -> Vector a -> Vector b -> Vector c
V.zipWith (\RTuple
tupsrc (Int
val, RTuple
_) -> ColumnName -> RDataType -> RTuple -> RTuple
upsertRTuple ColumnName
cname (Integer -> RDataType
RInt (a -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
initVal) RDataType -> RDataType -> RDataType
forall a. Num a => a -> a -> a
+ Integer -> RDataType
RInt (Int -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
val)) RTuple
tupsrc ) RTable
rt Vector (Int, RTuple)
indexedRTab
appendRTable ::
ETLOperation
appendRTable :: ETLOperation
appendRTable =
let binOp :: ROperation
binOp = RBinOp :: (RTable -> UnaryRTableOperation) -> ROperation
RBinOp { rbinOp :: RTable -> UnaryRTableOperation
rbinOp = (RTable -> UnaryRTableOperation) -> RTable -> UnaryRTableOperation
forall a b c. (a -> b -> c) -> b -> a -> c
flip RTable -> UnaryRTableOperation
forall a. Vector a -> Vector a -> Vector a
(V.++) }
in ROperation -> ETLOperation
ETLrOp ROperation
binOp
appendRTableJ ::
RTable
-> RTable
-> RTable
appendRTableJ :: RTable -> UnaryRTableOperation
appendRTableJ = RTable -> UnaryRTableOperation
forall a. Vector a -> Vector a -> Vector a
(V.++)