module ProjectM36.DatabaseContextFunctionUtils where
import ProjectM36.RelationalExpression
import ProjectM36.Base
import ProjectM36.DatabaseContextFunctionError
import ProjectM36.Error
import ProjectM36.StaticOptimizer

executeDatabaseContextExpr :: DatabaseContextExpr -> TransactionId -> TransactionGraph -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext
executeDatabaseContextExpr :: DatabaseContextExpr
-> TransactionId
-> TransactionGraph
-> DatabaseContext
-> Either DatabaseContextFunctionError DatabaseContext
executeDatabaseContextExpr DatabaseContextExpr
expr TransactionId
transId TransactionGraph
graph DatabaseContext
context' =
  case Either RelationalError DatabaseContextEvalState
run of
    Right DatabaseContextEvalState
st -> forall (f :: * -> *) a. Applicative f => a -> f a
pure (DatabaseContextEvalState -> DatabaseContext
dbc_context DatabaseContextEvalState
st)
    Left RelationalError
err -> forall a. HasCallStack => [Char] -> a
error (forall a. Show a => a -> [Char]
show RelationalError
err)
  where
    env :: DatabaseContextEvalEnv
env = TransactionId -> TransactionGraph -> DatabaseContextEvalEnv
mkDatabaseContextEvalEnv TransactionId
transId TransactionGraph
graph
    run :: Either RelationalError DatabaseContextEvalState
run = DatabaseContext
-> DatabaseContextEvalEnv
-> DatabaseContextEvalMonad ()
-> Either RelationalError DatabaseContextEvalState
runDatabaseContextEvalMonad DatabaseContext
context' DatabaseContextEvalEnv
env (Bool -> DatabaseContextExpr -> DatabaseContextEvalMonad ()
optimizeAndEvalDatabaseContextExpr Bool
True DatabaseContextExpr
expr)
  
executeRelationalExpr :: RelationalExpr -> DatabaseContext -> TransactionGraph -> Either RelationalError Relation
executeRelationalExpr :: RelationalExpr
-> DatabaseContext
-> TransactionGraph
-> Either RelationalError Relation
executeRelationalExpr RelationalExpr
expr DatabaseContext
context TransactionGraph
graph =
  Either RelationalError Relation
run
  where
    env :: RelationalExprEnv
env = DatabaseContext -> TransactionGraph -> RelationalExprEnv
mkRelationalExprEnv DatabaseContext
context TransactionGraph
graph
    run :: Either RelationalError Relation
run = RelationalExprEnv
-> RelationalExpr -> Either RelationalError Relation
optimizeAndEvalRelationalExpr RelationalExprEnv
env RelationalExpr
expr