module ProjectM36.Notifications where
import ProjectM36.Base
import ProjectM36.Error
import ProjectM36.RelationalExpression
import ProjectM36.StaticOptimizer
import qualified Data.Map as M
import Data.Either (isRight)
notificationChanges :: Notifications -> TransactionGraph -> DatabaseContext -> DatabaseContext -> Notifications
notificationChanges nots graph context1 context2 = M.filter notificationFilter nots
where
notificationFilter (Notification chExpr _ _) = oldChangeEval /= newChangeEval && isRight oldChangeEval
where
oldChangeEval = evalChangeExpr chExpr (mkRelationalExprEnv context1 graph)
newChangeEval = evalChangeExpr chExpr (mkRelationalExprEnv context2 graph)
evalChangeExpr :: RelationalExpr -> RelationalExprEnv -> Either RelationalError Relation
evalChangeExpr chExpr env =
optimizeAndEvalRelationalExpr env chExpr