@@ -57,25 +57,26 @@ freshDatabaseState context = DatabaseStateElems {
5757 } --future work: propagate return accumulator
5858
5959-- we need to pass around a higher level RelationTuple and Attributes in order to solve #52
60−data RelationalExprStateElems = RelationalExprStateTupleElems
61− DatabaseContext
62− TransactionGraph
63− Maybe (Either RelationTuple Attributes)
60+data RelationalExprStateElems = RelationalExprStateTupleElems {
61+ elems_context :: DatabaseContext,
62+ elems_graph :: TransactionGraph,
63+ elems_extra :: Maybe (Either RelationTuple Attributes) }
6464
65+{-
6566data RelationalExprStateElems = RelationalExprStateTupleElems DatabaseContext RelationTuple | -- used when fully evaluating a relexpr
6667 RelationalExprStateAttrsElems DatabaseContext Attributes | --used when evaluating the type of a relexpr
6768 RelationalExprStateElems DatabaseContext --used by default at the top level of evaluation
68−
69+ -}
70+
6971instance Show RelationalExprStateElems where
70− show (RelationalExprStateTupleElems _ tup) = "RelationalExprStateTupleElems " ++ show tup
71− show (RelationalExprStateAttrsElems _ attrs) = "RelationalExprStateAttrsElems" ++ show attrs
72− show (RelationalExprStateElems _) = "RelationalExprStateElems"
73−
72+ show e@RelationalExprStateTupleElems{..} = "RelationalExprStateTupleElems " ++ show (elems_extra e)
73+
7474mkRelationalExprState :: DatabaseContext -> RelationalExprStateElems
7575mkRelationalExprState = RelationalExprStateElems
7676
7777mergeTuplesIntoRelationalExprState :: 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
7980mergeTuplesIntoRelationalExprState _ st@(RelationalExprStateAttrsElems _ _) = st
8081mergeTuplesIntoRelationalExprState tupIn (RelationalExprStateTupleElems ctx existingTuple) = let mergedTupMap = M.union (tupleToMap tupIn) (tupleToMap existingTuple) in
8182 RelationalExprStateTupleElems ctx (mkRelationTupleFromMap mergedTupMap)