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 :: Notifications
-> TransactionGraph
-> DatabaseContext
-> DatabaseContext
-> Notifications
notificationChanges Notifications
nots TransactionGraph
graph DatabaseContext
context1 DatabaseContext
context2 = (Notification -> Bool) -> Notifications -> Notifications
forall a k. (a -> Bool) -> Map k a -> Map k a
M.filter Notification -> Bool
notificationFilter Notifications
nots
where
notificationFilter :: Notification -> Bool
notificationFilter (Notification RelationalExpr
chExpr RelationalExpr
_ RelationalExpr
_) = Either RelationalError Relation
oldChangeEval Either RelationalError Relation
-> Either RelationalError Relation -> Bool
forall a. Eq a => a -> a -> Bool
/= Either RelationalError Relation
newChangeEval Bool -> Bool -> Bool
&& Either RelationalError Relation -> Bool
forall a b. Either a b -> Bool
isRight Either RelationalError Relation
oldChangeEval
where
oldChangeEval :: Either RelationalError Relation
oldChangeEval = RelationalExpr
-> RelationalExprEnv -> Either RelationalError Relation
evalChangeExpr RelationalExpr
chExpr (DatabaseContext -> TransactionGraph -> RelationalExprEnv
mkRelationalExprEnv DatabaseContext
context1 TransactionGraph
graph)
newChangeEval :: Either RelationalError Relation
newChangeEval = RelationalExpr
-> RelationalExprEnv -> Either RelationalError Relation
evalChangeExpr RelationalExpr
chExpr (DatabaseContext -> TransactionGraph -> RelationalExprEnv
mkRelationalExprEnv DatabaseContext
context2 TransactionGraph
graph)
evalChangeExpr :: RelationalExpr -> RelationalExprEnv -> Either RelationalError Relation
evalChangeExpr :: RelationalExpr
-> RelationalExprEnv -> Either RelationalError Relation
evalChangeExpr RelationalExpr
chExpr RelationalExprEnv
env =
RelationalExprEnv
-> RelationalExpr -> Either RelationalError Relation
optimizeAndEvalRelationalExpr RelationalExprEnv
env RelationalExpr
chExpr