@@ -57,25 +57,26 @@ freshDatabaseState context = DatabaseStateElems {
57 } --future work: propagate return accumulator
57 } --future work: propagate return accumulator
59-- we need to pass around a higher level RelationTuple and Attributes in order to solve #52
59-- we need to pass around a higher level RelationTuple and Attributes in order to solve #52
60−data RelationalExprStateElems = RelationalExprStateTupleElems
60+data RelationalExprStateElems = RelationalExprStateTupleElems {
61− DatabaseContext
61+ elems_context :: DatabaseContext,
62− TransactionGraph
62+ elems_graph :: TransactionGraph,
63− Maybe (Either RelationTuple Attributes)
63+ elems_extra :: Maybe (Either RelationTuple Attributes) }
65data RelationalExprStateElems = RelationalExprStateTupleElems DatabaseContext RelationTuple | -- used when fully evaluating a relexpr
66data RelationalExprStateElems = RelationalExprStateTupleElems DatabaseContext RelationTuple | -- used when fully evaluating a relexpr
66 RelationalExprStateAttrsElems DatabaseContext Attributes | --used when evaluating the type of a relexpr
67 RelationalExprStateAttrsElems DatabaseContext Attributes | --used when evaluating the type of a relexpr
67 RelationalExprStateElems DatabaseContext --used by default at the top level of evaluation
68 RelationalExprStateElems DatabaseContext --used by default at the top level of evaluation
69instance Show RelationalExprStateElems where
71instance Show RelationalExprStateElems where
70− show (RelationalExprStateTupleElems _ tup) = "RelationalExprStateTupleElems " ++ show tup
72+ show e@RelationalExprStateTupleElems{..} = "RelationalExprStateTupleElems " ++ show (elems_extra e)
71− show (RelationalExprStateAttrsElems _ attrs) = "RelationalExprStateAttrsElems" ++ show attrs
73+
72− show (RelationalExprStateElems _) = "RelationalExprStateElems"
74mkRelationalExprState :: DatabaseContext -> RelationalExprStateElems
74mkRelationalExprState :: DatabaseContext -> RelationalExprStateElems
75mkRelationalExprState = RelationalExprStateElems
75mkRelationalExprState = RelationalExprStateElems
77mergeTuplesIntoRelationalExprState :: RelationTuple -> RelationalExprStateElems -> RelationalExprStateElems
77mergeTuplesIntoRelationalExprState :: RelationTuple -> RelationalExprStateElems -> RelationalExprStateElems
78−mergeTuplesIntoRelationalExprState tupIn (RelationalExprStateElems ctx) = RelationalExprStateTupleElems ctx tupIn
78+mergeTuplesIntoRelationalExprState tupIn e@RelationalExprStateElems{..} =
79+ e{elems_extra = <$> elems_extra e } RelationalExprStateTupleElems ctx tupIn
79mergeTuplesIntoRelationalExprState _ st@(RelationalExprStateAttrsElems _ _) = st
80mergeTuplesIntoRelationalExprState _ st@(RelationalExprStateAttrsElems _ _) = st
80mergeTuplesIntoRelationalExprState tupIn (RelationalExprStateTupleElems ctx existingTuple) = let mergedTupMap = M.union (tupleToMap tupIn) (tupleToMap existingTuple) in
81mergeTuplesIntoRelationalExprState tupIn (RelationalExprStateTupleElems ctx existingTuple) = let mergedTupMap = M.union (tupleToMap tupIn) (tupleToMap existingTuple) in
81 RelationalExprStateTupleElems ctx (mkRelationTupleFromMap mergedTupMap)
82 RelationalExprStateTupleElems ctx (mkRelationTupleFromMap mergedTupMap)