@@ -22,7 +22,7 @@ import Data.Either (lefts, rights, isRight)
2222
2323--operators which manipulate a transaction graph
2424data TransactionGraphOperator = JumpToHead HeadName |
25− JumpToTransaction U.UUID |
25+ JumpToTransaction TransactionId |
2626 Branch HeadName |
2727 MergeTransactions MergeStrategy HeadName HeadName |
2828 Commit |
@@ -32,11 +32,11 @@ data TransactionGraphOperator = JumpToHead HeadName |
3232data ROTransactionGraphOperator = ShowGraph
3333
3434
35−bootstrapTransactionGraph :: U.UUID -> DatabaseContext -> TransactionGraph
36−bootstrapTransactionGraph freshUUID context = TransactionGraph bootstrapHeads bootstrapTransactions
35+bootstrapTransactionGraph :: TransactionId -> DatabaseContext -> TransactionGraph
36+bootstrapTransactionGraph freshId context = TransactionGraph bootstrapHeads bootstrapTransactions
3737 where
3838 bootstrapHeads = M.singleton "master" freshTransaction
39− freshTransaction = Transaction freshUUID (TransactionInfo U.nil S.empty) context
39+ freshTransaction = Transaction freshId (TransactionInfo U.nil S.empty) context
4040 bootstrapTransactions = S.singleton freshTransaction
4141
4242emptyTransactionGraph :: TransactionGraph
@@ -53,56 +53,56 @@ headNameForTransaction transaction (TransactionGraph heads _) = if M.null matchi
5353 where
5454 matchingTrans = M.filter (transaction ==) heads
5555
56−transactionForUUID :: U.UUID -> TransactionGraph -> Either RelationalError Transaction
57−transactionForUUID uuid graph = if uuid == U.nil then
56+transactionForId :: TransactionId -> TransactionGraph -> Either RelationalError Transaction
57+transactionForId tid graph = if tid == U.nil then
5858 Left RootTransactionTraversalError
5959 else if S.null matchingTrans then
60− Left $ NoSuchTransactionError uuid
60+ Left $ NoSuchTransactionError tid
6161 else
6262 Right $ head (S.toList matchingTrans)
6363 where
64− matchingTrans = S.filter (\(Transaction uuidMatch _ _) -> uuidMatch == uuid) (transactionsForGraph graph)
64+ matchingTrans = S.filter (\(Transaction idMatch _ _) -> idMatch == tid) (transactionsForGraph graph)
6565
66−transactionsForUUIDs :: S.Set U.UUID -> TransactionGraph -> Either RelationalError (S.Set Transaction)
67−transactionsForUUIDs uuidSet graph = do
68− transList <- forM (S.toList uuidSet) ((flip transactionForUUID) graph)
66+transactionsForIds :: S.Set TransactionId -> TransactionGraph -> Either RelationalError (S.Set Transaction)
67+transactionsForIds idSet graph = do
68+ transList <- forM (S.toList idSet) ((flip transactionForId) graph)
6969 return (S.fromList transList)
7070
7171isRootTransaction :: Transaction -> TransactionGraph -> Bool
72−isRootTransaction (Transaction _ (TransactionInfo pUUID _) _) _ = U.null pUUID
72+isRootTransaction (Transaction _ (TransactionInfo pId _) _) _ = U.null pId
7373isRootTransaction (Transaction _ (MergeTransactionInfo _ _ _) _) _ = False
7474
7575-- the first transaction has no parent - all other do have parents- merges have two parents
7676parentTransactions :: Transaction -> TransactionGraph -> Either RelationalError (S.Set Transaction)
77−parentTransactions (Transaction _ (TransactionInfo pUUID _) _) graph = do
78− trans <- transactionForUUID pUUID graph
77+parentTransactions (Transaction _ (TransactionInfo pId _) _) graph = do
78+ trans <- transactionForId pId graph
7979 return (S.singleton trans)
8080
81−parentTransactions (Transaction _ (MergeTransactionInfo pUUID1 pUUID2 _) _ ) graph = transactionsForUUIDs (S.fromList [pUUID1, pUUID2]) graph
81+parentTransactions (Transaction _ (MergeTransactionInfo pId1 pId2 _) _ ) graph = transactionsForIds (S.fromList [pId1, pId2]) graph
8282
8383
8484childTransactions :: Transaction -> TransactionGraph -> Either RelationalError (S.Set Transaction)
85−childTransactions (Transaction _ (TransactionInfo _ children) _) = transactionsForUUIDs children
86−childTransactions (Transaction _ (MergeTransactionInfo _ _ children) _) = transactionsForUUIDs children
85+childTransactions (Transaction _ (TransactionInfo _ children) _) = transactionsForIds children
86+childTransactions (Transaction _ (MergeTransactionInfo _ _ children) _) = transactionsForIds children
8787
8888-- create a new commit and add it to the heads
8989-- technically, the new head could be added to an existing commit, but by adding a new commit, the new head is unambiguously linked to a new commit (with a context indentical to its parent)
90−addBranch :: U.UUID -> HeadName -> U.UUID -> TransactionGraph -> Either RelationalError (Transaction, TransactionGraph)
91−addBranch newUUID newBranchName branchPointId graph = do
92− parentTrans <- transactionForUUID branchPointId graph
93− let newTrans = Transaction newUUID (TransactionInfo branchPointId S.empty) (transactionContext parentTrans)
90+addBranch :: TransactionId -> HeadName -> TransactionId -> TransactionGraph -> Either RelationalError (Transaction, TransactionGraph)
91+addBranch newId newBranchName branchPointId graph = do
92+ parentTrans <- transactionForId branchPointId graph
93+ let newTrans = Transaction newId (TransactionInfo branchPointId S.empty) (transactionContext parentTrans)
9494 addTransactionToGraph newBranchName newTrans graph
9595
9696--adds a disconnected transaction to a transaction graph at some head
97−addDisconnectedTransaction :: U.UUID -> HeadName -> DisconnectedTransaction -> TransactionGraph -> Either RelationalError (Transaction, TransactionGraph)
98−addDisconnectedTransaction newUUID headName (DisconnectedTransaction parentUUID context) graph = addTransactionToGraph headName (Transaction newUUID (TransactionInfo parentUUID S.empty) context) graph
97+addDisconnectedTransaction :: TransactionId -> HeadName -> DisconnectedTransaction -> TransactionGraph -> Either RelationalError (Transaction, TransactionGraph)
98+addDisconnectedTransaction newId headName (DisconnectedTransaction parentId context) graph = addTransactionToGraph headName (Transaction newId (TransactionInfo parentId S.empty) context) graph
9999
100100addTransactionToGraph :: HeadName -> Transaction -> TransactionGraph -> Either RelationalError (Transaction, TransactionGraph)
101101addTransactionToGraph headName newTrans graph = do
102102 let parentIds = transactionParentIds newTrans
103103 childIds = transactionChildIds newTrans
104− newId = transactionUUID newTrans
105− validateIds ids = mapM (\i -> transactionForUUID i graph) (S.toList ids)
104+ newId = transactionId newTrans
105+ validateIds ids = mapM (\i -> transactionForId i graph) (S.toList ids)
106106 addChildTransaction trans = transactionSetChildren trans (S.insert newId (transactionChildIds trans))
107107 --validate that the parent transactions are in the graph
108108 _ <- validateIds parentIds
@@ -110,13 +110,13 @@ addTransactionToGraph headName newTrans graph = do
110110 --if the headName already exists, ensure that it refers to a parent
111111 case transactionForHead headName graph of
112112 Nothing -> pure () -- any headName is OK
113− Just trans -> when (S.notMember (transactionUUID trans) parentIds) (Left (HeadNameSwitchingHeadProhibitedError headName))
113+ Just trans -> when (S.notMember (transactionId trans) parentIds) (Left (HeadNameSwitchingHeadProhibitedError headName))
114114 --validate that the transaction has no children
115115 when (not (S.null childIds)) (Left $ NewTransactionMayNotHaveChildrenError newId)
116116 --validate that the trasaction's id is unique
117− when (isRight (transactionForUUID newId graph)) (Left (TransactionIdInUseError newId))
117+ when (isRight (transactionForId newId graph)) (Left (TransactionIdInUseError newId))
118118 --update the parent transactions to point to the new transaction
119− parents <- mapM (\tid -> transactionForUUID tid graph) (S.toList parentIds)
119+ parents <- mapM (\tid -> transactionForId tid graph) (S.toList parentIds)
120120 let updatedParents = S.map addChildTransaction (S.fromList parents)
121121 updatedTransSet = S.insert newTrans (S.union updatedParents (transactionsForGraph graph))
122122 updatedHeads = M.insert headName newTrans (transactionHeadsForGraph graph)
@@ -124,115 +124,116 @@ addTransactionToGraph headName newTrans graph = do
124124
125125validateGraph :: TransactionGraph -> Maybe [RelationalError]
126126validateGraph graph@(TransactionGraph _ transSet) = do
127− --check that all UUIDs are unique in the graph
128− --uuids = map transactionUUID transSet
127+ --check that all transaction ids are unique in the graph
128+ --FINISH ME!
129+ --uuids = map transactionId transSet
129130 --check that all heads appear in the transSet
130131 --check that all forward and backward links are in place
131132 _ <- mapM (walkParentTransactions S.empty graph) (S.toList transSet)
132133 mapM (walkChildTransactions S.empty graph) (S.toList transSet)
133134
134135--verify that all parent links exist and that all children exist
135−--maybe verify that all parents end at UUID nil and all children end at leaves
136−walkParentTransactions :: S.Set U.UUID -> TransactionGraph -> Transaction -> Maybe RelationalError
136+--maybe verify that all parents end at transaction id nil and all children end at leaves
137+walkParentTransactions :: S.Set TransactionId -> TransactionGraph -> Transaction -> Maybe RelationalError
137138walkParentTransactions seenTransSet graph trans =
138− let transUUID = transactionUUID trans in
139− if transUUID == U.nil then
139+ let transId = transactionId trans in
140+ if transId == U.nil then
140141 Nothing
141− else if S.member transUUID seenTransSet then
142− Just $ TransactionGraphCycleError transUUID
142+ else if S.member transId seenTransSet then
143+ Just $ TransactionGraphCycleError transId
143144 else
144145 let parentTransSetOrError = parentTransactions trans graph in
145146 case parentTransSetOrError of
146147 Left err -> Just err
147148 Right parentTransSet -> do
148− walk <- mapM (walkParentTransactions (S.insert transUUID seenTransSet) graph) (S.toList parentTransSet)
149+ walk <- mapM (walkParentTransactions (S.insert transId seenTransSet) graph) (S.toList parentTransSet)
149150 case walk of
150151 err:_ -> Just err
151152 _ -> Nothing
152153
153154--refactor: needless duplication in these two functions
154−walkChildTransactions :: S.Set U.UUID -> TransactionGraph -> Transaction -> Maybe RelationalError
155+walkChildTransactions :: S.Set TransactionId -> TransactionGraph -> Transaction -> Maybe RelationalError
155156walkChildTransactions seenTransSet graph trans =
156− let transUUID = transactionUUID trans in
157+ let transId = transactionId trans in
157158 if childTransactions trans graph == Right S.empty then
158159 Nothing
159− else if S.member transUUID seenTransSet then
160− Just $ TransactionGraphCycleError transUUID
160+ else if S.member transId seenTransSet then
161+ Just $ TransactionGraphCycleError transId
161162 else
162163 let childTransSetOrError = childTransactions trans graph in
163164 case childTransSetOrError of
164165 Left err -> Just err
165166 Right childTransSet -> do
166− walk <- mapM (walkChildTransactions (S.insert transUUID seenTransSet) graph) (S.toList childTransSet)
167+ walk <- mapM (walkChildTransactions (S.insert transId seenTransSet) graph) (S.toList childTransSet)
167168 case walk of
168169 err:_ -> Just err
169170 _ -> Nothing
170171
171172-- returns the new "current" transaction, updated graph, and tutorial d result
172173-- the current transaction is not part of the transaction graph until it is committed
173−evalGraphOp :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> TransactionGraphOperator -> Either RelationalError (DisconnectedTransaction, TransactionGraph)
174+evalGraphOp :: TransactionId -> DisconnectedTransaction -> TransactionGraph -> TransactionGraphOperator -> Either RelationalError (DisconnectedTransaction, TransactionGraph)
174175
175176--affects only disconncted transaction
176−evalGraphOp _ _ graph (JumpToTransaction jumpUUID) = case transactionForUUID jumpUUID graph of
177+evalGraphOp _ _ graph (JumpToTransaction jumpId) = case transactionForId jumpId graph of
177178 Left err -> Left err
178179 Right parentTrans -> Right (newTrans, graph)
179180 where
180− newTrans = DisconnectedTransaction jumpUUID (transactionContext parentTrans)
181+ newTrans = DisconnectedTransaction jumpId (transactionContext parentTrans)
181182
182183-- switch from one head to another
183184-- affects only disconnectedtransaction
184185evalGraphOp _ _ graph (JumpToHead headName) =
185186 case transactionForHead headName graph of
186− Just newHeadTransaction -> let disconnectedTrans = newDisconnectedTransaction (transactionUUID newHeadTransaction) (transactionContext newHeadTransaction) in
187+ Just newHeadTransaction -> let disconnectedTrans = newDisconnectedTransaction (transactionId newHeadTransaction) (transactionContext newHeadTransaction) in
187188 Right (disconnectedTrans, graph)
188189 Nothing -> Left $ NoSuchHeadNameError headName
189190-- add new head pointing to branchPoint
190191-- repoint the disconnected transaction to the new branch commit (with a potentially different disconnected context)
191192-- affects transactiongraph and the disconnectedtransaction is recreated based off the branch
192193 {-
193−evalGraphOp newUUID discon@(DisconnectedTransaction parentUUID disconContext) graph (Branch newBranchName) = case transactionForUUID parentUUID graph of
194+evalGraphOp newId discon@(DisconnectedTransaction parentId disconContext) graph (Branch newBranchName) = case transactionForId parentId graph of
194195 Nothing -> (discon, graph, DisplayErrorResult "Failed to find parent transaction.")
195196 Just parentTrans -> case addBranch newBranchName parentTrans graph of
196197 Nothing -> (discon, graph, DisplayErrorResult "Failed to add branch.")
197198 Just newGraph -> (newDiscon, newGraph, DisplayResult "Branched.")
198199 where
199− newDiscon = DisconnectedTransaction (transactionUUID parentTrans) disconContext
200+ newDiscon = DisconnectedTransaction (transactionId parentTrans) disconContext
200201-}
201202
202203-- create a new commit and add it to the heads
203204-- technically, the new head could be added to an existing commit, but by adding a new commit, the new head is unambiguously linked to a new commit (with a context indentical to its parent)
204−evalGraphOp newUUID (DisconnectedTransaction parentUUID disconContext) graph (Branch newBranchName) = case addBranch newUUID newBranchName parentUUID graph of
205+evalGraphOp newId (DisconnectedTransaction parentId disconContext) graph (Branch newBranchName) = case addBranch newId newBranchName parentId graph of
205206 Left err -> Left err
206207 Right (_, newGraph) -> Right (newDiscon, newGraph)
207208 where
208− newDiscon = DisconnectedTransaction newUUID disconContext
209+ newDiscon = DisconnectedTransaction newId disconContext
209210
210211-- add the disconnected transaction to the graph
211212-- affects graph and disconnectedtransaction- the new disconnectedtransaction's parent is the freshly committed transaction
212−evalGraphOp newTransUUID discon@(DisconnectedTransaction parentUUID context) graph Commit = case transactionForUUID parentUUID graph of
213+evalGraphOp newTransId discon@(DisconnectedTransaction parentId context) graph Commit = case transactionForId parentId graph of
213214 Left err -> Left err
214215 Right parentTransaction -> case headNameForTransaction parentTransaction graph of
215− Nothing -> Left $ TransactionIsNotAHeadError parentUUID
216+ Nothing -> Left $ TransactionIsNotAHeadError parentId
216217 Just headName -> case maybeUpdatedGraph of
217218 Left err-> Left err
218219 Right (_, updatedGraph) -> Right (newDisconnectedTrans, updatedGraph)
219220 where
220− newDisconnectedTrans = newDisconnectedTransaction newTransUUID context
221− maybeUpdatedGraph = addDisconnectedTransaction newTransUUID headName discon graph
221+ newDisconnectedTrans = newDisconnectedTransaction newTransId context
222+ maybeUpdatedGraph = addDisconnectedTransaction newTransId headName discon graph
222223
223224-- refresh the disconnected transaction, return the same graph
224−evalGraphOp _ (DisconnectedTransaction parentUUID _) graph Rollback = case transactionForUUID parentUUID graph of
225+evalGraphOp _ (DisconnectedTransaction parentId _) graph Rollback = case transactionForId parentId graph of
225226 Left err -> Left err
226227 Right parentTransaction -> Right (newDiscon, graph)
227228 where
228− newDiscon = newDisconnectedTransaction parentUUID (transactionContext parentTransaction)
229+ newDiscon = newDisconnectedTransaction parentId (transactionContext parentTransaction)
229230
230231-- a successful merge should remove a head
231−evalGraphOp newUUID (DisconnectedTransaction parentUUID _) graph (MergeTransactions mergeStrategy headNameA headNameB) = mergeTransactions newUUID parentUUID mergeStrategy (headNameA, headNameB) graph
232+evalGraphOp newId (DisconnectedTransaction parentId _) graph (MergeTransactions mergeStrategy headNameA headNameB) = mergeTransactions newId parentId mergeStrategy (headNameA, headNameB) graph
232233
233234--present a transaction graph as a relation showing the uuids, parentuuids, and flag for the current location of the disconnected transaction
234235graphAsRelation :: DisconnectedTransaction -> TransactionGraph -> Either RelationalError Relation
235−graphAsRelation (DisconnectedTransaction parentUUID _) graph@(TransactionGraph _ transSet) = do
236+graphAsRelation (DisconnectedTransaction parentId _) graph@(TransactionGraph _ transSet) = do
236237 tupleMatrix <- mapM tupleGenerator (S.toList transSet)
237238 mkRelationFromList attrs tupleMatrix
238239 where
@@ -244,9 +245,9 @@ graphAsRelation (DisconnectedTransaction parentUUID _) graph@(TransactionGraph _
244245 parentAttributes = A.attributesFromList [Attribute "id" textAtomType]
245246 tupleGenerator transaction = case transactionParentsRelation transaction graph of
246247 Left err -> Left err
247− Right parentTransRel -> Right [Atom $ T.pack $ show (transactionUUID transaction),
248+ Right parentTransRel -> Right [Atom $ T.pack $ show (transactionId transaction),
248249 Atom parentTransRel,
249− Atom $ parentUUID == transactionUUID transaction,
250+ Atom $ parentId == transactionId transaction,
250251 Atom $ case headNameForTransaction transaction graph of
251252 Just headName -> headName
252253 Nothing -> ""
@@ -262,7 +263,7 @@ transactionParentsRelation trans graph = do
262263 mkRelationFromTuples attrs tuples
263264 where
264265 attrs = A.attributesFromList [Attribute "id" textAtomType]
265− trans2tuple trans2 = mkRelationTuple attrs $ V.singleton (Atom (T.pack (show $ transactionUUID trans2)))
266+ trans2tuple trans2 = mkRelationTuple attrs $ V.singleton (Atom (T.pack (show $ transactionId trans2)))
266267
267268{-
268269--display transaction graph as relation
@@ -273,16 +274,16 @@ evalROGraphOp discon graph ShowGraph = do
273274-}
274275
275276-- | Execute the merge strategy against the transactions, returning a new transaction which can be then added to the transaction graph
276−createMergeTransaction :: U.UUID -> MergeStrategy -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
277−createMergeTransaction newUUID (SelectedBranchMergeStrategy selectedBranch) graph t2@(trans1, trans2) = do
277+createMergeTransaction :: TransactionId -> MergeStrategy -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
278+createMergeTransaction newId (SelectedBranchMergeStrategy selectedBranch) graph t2@(trans1, trans2) = do
278279 selectedTrans <- validateHeadName selectedBranch graph t2
279− pure $ Transaction newUUID (MergeTransactionInfo (transactionUUID trans1) (transactionUUID trans2) S.empty) (transactionContext selectedTrans)
280+ pure $ Transaction newId (MergeTransactionInfo (transactionId trans1) (transactionId trans2) S.empty) (transactionContext selectedTrans)
280281
281282-- merge functions, relvars, individually
282−createMergeTransaction newUUID strat@UnionMergeStrategy graph t2 = createUnionMergeTransaction newUUID strat graph t2
283+createMergeTransaction newId strat@UnionMergeStrategy graph t2 = createUnionMergeTransaction newId strat graph t2
283284
284285-- merge function, relvars, but, on error, just take the component from the preferred branch
285−createMergeTransaction newUUID strat@(UnionPreferMergeStrategy _) graph t2 = createUnionMergeTransaction newUUID strat graph t2
286+createMergeTransaction newId strat@(UnionPreferMergeStrategy _) graph t2 = createUnionMergeTransaction newId strat graph t2
286287
287288-- | Returns the correct Transaction for the branch name in the graph and ensures that it is one of the two transaction arguments in the tuple.
288289validateHeadName :: HeadName -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
@@ -297,13 +298,13 @@ validateHeadName headName graph (t1, t2) = do
297298-- Algorithm: start at one transaction and work backwards up the parents. If there is a node we have not yet visited as a child, then walk that up to its head. If that branch contains the goal transaction, then we have completed a valid subgraph traversal.
298299subGraphOfFirstCommonAncestor :: TransactionGraph -> TransactionHeads -> Transaction -> Transaction -> S.Set Transaction -> Either RelationalError TransactionGraph
299300subGraphOfFirstCommonAncestor origGraph resultHeads currentTrans goalTrans traverseSet = do
300− let currentid = transactionUUID currentTrans
301− goalid = transactionUUID goalTrans
301+ let currentid = transactionId currentTrans
302+ goalid = transactionId goalTrans
302303 if currentTrans == goalTrans then
303304 Right (TransactionGraph resultHeads traverseSet) -- add filter
304305 --catch root transaction to improve error?
305306 else do
306− currentTransChildren <- liftM S.fromList $ mapM (flip transactionForUUID origGraph) (S.toList (transactionChildIds currentTrans))
307+ currentTransChildren <- liftM S.fromList $ mapM (flip transactionForId origGraph) (S.toList (transactionChildIds currentTrans))
307308 let searchChildren = S.difference (S.insert currentTrans traverseSet) currentTransChildren
308309 searchChild start = pathToTransaction origGraph start goalTrans (S.insert currentTrans traverseSet)
309310 childSearches = map searchChild (S.toList searchChildren)
@@ -322,17 +323,17 @@ subGraphOfFirstCommonAncestor origGraph resultHeads currentTrans goalTrans trave
322323 else -- we found a path
323324 Right (TransactionGraph resultHeads (S.unions (traverseSet : pathsFound)))
324325 where
325− oneParent (Transaction _ (TransactionInfo parentId _) _) = transactionForUUID parentId origGraph
326− oneParent (Transaction _ (MergeTransactionInfo parentId _ _) _) = transactionForUUID parentId origGraph
326+ oneParent (Transaction _ (TransactionInfo parentId _) _) = transactionForId parentId origGraph
327+ oneParent (Transaction _ (MergeTransactionInfo parentId _ _) _) = transactionForId parentId origGraph
327328
328329-- | Search from a past graph point to all following heads for a specific transaction. If found, return the transaction path, otherwise a RelationalError.
329330pathToTransaction :: TransactionGraph -> Transaction -> Transaction -> S.Set Transaction -> Either RelationalError (S.Set Transaction)
330331pathToTransaction graph currentTransaction targetTransaction accumTransSet = do
331− let targetId = transactionUUID targetTransaction
332− if transactionUUID targetTransaction == transactionUUID currentTransaction then do
332+ let targetId = transactionId targetTransaction
333+ if transactionId targetTransaction == transactionId currentTransaction then do
333334 Right accumTransSet
334335 else do
335− currentTransChildren <- mapM (flip transactionForUUID graph) (S.toList (transactionChildIds currentTransaction))
336+ currentTransChildren <- mapM (flip transactionForId graph) (S.toList (transactionChildIds currentTransaction))
336337 if length currentTransChildren == 0 then
337338 Left (FailedToFindTransactionError targetId)
338339 else do
@@ -346,53 +347,53 @@ pathToTransaction graph currentTransaction targetTransaction accumTransSet = do
346347 else --we have some paths!
347348 Right (S.unions paths)
348349
349−mergeTransactions :: U.UUID -> U.UUID -> MergeStrategy -> (HeadName, HeadName) -> TransactionGraph -> Either RelationalError (DisconnectedTransaction, TransactionGraph)
350−mergeTransactions newUUID parentUUID mergeStrategy (headNameA, headNameB) graph = do
350+mergeTransactions :: TransactionId -> TransactionId -> MergeStrategy -> (HeadName, HeadName) -> TransactionGraph -> Either RelationalError (DisconnectedTransaction, TransactionGraph)
351+mergeTransactions newId parentId mergeStrategy (headNameA, headNameB) graph = do
351352 let transactionForHeadErr name = case transactionForHead name graph of
352353 Nothing -> Left (NoSuchHeadNameError name)
353354 Just t -> Right t
354355 transA <- transactionForHeadErr headNameA
355356 transB <- transactionForHeadErr headNameB
356− disconParent <- transactionForUUID parentUUID graph
357+ disconParent <- transactionForId parentId graph
357358 let subHeads = M.filterWithKey (\k _ -> elem k [headNameA, headNameB]) (transactionHeadsForGraph graph)
358359 subGraph <- subGraphOfFirstCommonAncestor graph subHeads transA transB S.empty
359360 subGraph' <- filterSubGraph subGraph subHeads
360− case createMergeTransaction newUUID mergeStrategy subGraph' (transA, transB) of
361+ case createMergeTransaction newId mergeStrategy subGraph' (transA, transB) of
361362 Left err -> Left (MergeTransactionError err)
362363 Right mergedTrans -> case headNameForTransaction disconParent graph of
363− Nothing -> Left (TransactionIsNotAHeadError parentUUID)
364+ Nothing -> Left (TransactionIsNotAHeadError parentId)
364365 Just headName -> do
365366 (newTrans, newGraph) <- addTransactionToGraph headName mergedTrans graph
366367 let newGraph' = TransactionGraph (transactionHeadsForGraph newGraph) (transactionsForGraph newGraph)
367− newDiscon = newDisconnectedTransaction newUUID (transactionContext newTrans)
368+ newDiscon = newDisconnectedTransaction newId (transactionContext newTrans)
368369 pure (newDiscon, newGraph')
369370
370371--TEMPORARY COPY/PASTE
371372showTransactionStructureX :: Transaction -> TransactionGraph -> String
372−showTransactionStructureX trans graph = headInfo ++ " " ++ show (transactionUUID trans) ++ " " ++ parentTransactionsInfo
373+showTransactionStructureX trans graph = headInfo ++ " " ++ show (transactionId trans) ++ " " ++ parentTransactionsInfo
373374 where
374375 headInfo = maybe "" show (headNameForTransaction trans graph)
375376 parentTransactionsInfo = if isRootTransaction trans graph then "root" else case parentTransactions trans graph of
376377 Left err -> show err
377− Right parentTransSet -> concat $ S.toList $ S.map (show . transactionUUID) parentTransSet
378+ Right parentTransSet -> concat $ S.toList $ S.map (show . transactionId) parentTransSet
378379
379380showGraphStructureX :: TransactionGraph -> String
380381showGraphStructureX graph@(TransactionGraph heads transSet) = headsInfo ++ S.foldr folder "" transSet
381382 where
382383 folder trans acc = acc ++ showTransactionStructureX trans graph ++ "\n"
383− headsInfo = show $ M.map transactionUUID heads
384+ headsInfo = show $ M.map transactionId heads
384385
385386-- | After splicing out a subgraph, run it through this function to remove references to transactions which are not in the subgraph.
386387filterSubGraph :: TransactionGraph -> TransactionHeads -> Either RelationalError TransactionGraph
387388filterSubGraph graph heads = Right $ TransactionGraph newHeads newTransSet
388389 where
389− validIds = S.map transactionUUID (transactionsForGraph graph)
390+ validIds = S.map transactionId (transactionsForGraph graph)
390391 newTransSet = S.map (filterTransaction validIds) (transactionsForGraph graph)
391392 newHeads = M.map (filterTransaction validIds) heads
392393
393394--helper function for commonalities in union merge
394−createUnionMergeTransaction :: U.UUID -> MergeStrategy -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
395−createUnionMergeTransaction newUUID strategy graph (t1,t2) = do
395+createUnionMergeTransaction :: TransactionId -> MergeStrategy -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
396+createUnionMergeTransaction newId strategy graph (t1,t2) = do
396397 let contextA = transactionContext t1
397398 contextB = transactionContext t2
398399
@@ -409,4 +410,4 @@ createUnionMergeTransaction newUUID strategy graph (t1,t2) = do
409410 atomFuncs <- unionMergeAtomFunctions preference (atomFunctions contextA) (atomFunctions contextB)
410411 notifs <- unionMergeMaps preference (notifications contextA) (notifications contextB)
411412 types <- unionMergeTypeConstructorMapping preference (typeConstructorMapping contextA) (typeConstructorMapping contextB)
412− pure (Transaction newUUID (MergeTransactionInfo (transactionUUID t1) (transactionUUID t2) S.empty) (DatabaseContext incDeps relVars atomFuncs notifs types))
413+ pure (Transaction newId (MergeTransactionInfo (transactionId t1) (transactionId t2) S.empty) (DatabaseContext incDeps relVars atomFuncs notifs types))