module ProjectM36.DatabaseContextFunctionUtils where
import ProjectM36.RelationalExpression
import ProjectM36.Base
import ProjectM36.DatabaseContextFunctionError
import ProjectM36.Error
import Control.Monad.State
import Control.Monad.Trans.Reader

executeDatabaseContextExpr :: DatabaseContextExpr -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext
executeDatabaseContextExpr expr context = case runState (evalDatabaseContextExpr expr) (freshDatabaseState context) of
  (Right (), (context', _, _)) -> pure context'
  (Left err, _) -> error (show err)

executeRelationalExpr :: RelationalExpr -> DatabaseContext -> Either RelationalError Relation
executeRelationalExpr expr context = runReader (evalRelationalExpr expr) (mkRelationalExprState context)