@@ -8,6 +8,7 @@ import RelationalError
8import RelationExpr
8import RelationExpr
9import RelationTerm
9import RelationTerm
10import RelationalTransaction
10import RelationalTransaction
11+import RelationalTransactionShow
11import Text.Parsec
12import Text.Parsec
12import Text.Parsec.String
13import Text.Parsec.String
13import Text.Parsec.Expr
14import Text.Parsec.Expr
@@ -25,6 +26,21 @@ import System.Directory (getHomeDirectory)
25import qualified Data.UUID as U
26import qualified Data.UUID as U
26import Data.UUID.V4 (nextRandom)
27import Data.UUID.V4 (nextRandom)
30+List of Tutorial D operators:
31+show relation expression type :: relexpr -> context -> opresult
32+show relvar :: relvar name -> context -> opresult
34+show graph :: graph -> DisconnectedTransaction -> opresult
35+show constraints :: context -> opresult
36+jump to head :: head name -> graph -> DisconnectedTransaction (graph unchanged)
37+jump to UUID :: uuid -> graph -> DisconnectedTransaction (graph unchanged)
38+branch :: uuid -> branch name -> graph -> (DisconnectedTransation, graph)
39+commit :: uuid -> DisconnectedTransaction -> graph -> (DisconnectedTransaction, graph)
40+rollback :: DisconnectedTransaction -> graph -> (DisconnectedTransaction, graph)
28lexer :: Token.TokenParser ()
44lexer :: Token.TokenParser ()
29lexer = Token.makeTokenParser tutD
45lexer = Token.makeTokenParser tutD
30 where tutD = emptyDef {
46 where tutD = emptyDef {
@@ -260,6 +276,7 @@ data GraphOperator where
260 Branch :: HeadName -> GraphOperator
276 Branch :: HeadName -> GraphOperator
261 Commit :: GraphOperator
277 Commit :: GraphOperator
262 Rollback :: GraphOperator
278 Rollback :: GraphOperator
279+ ShowGraph :: GraphOperator
263 deriving (Show)
280 deriving (Show)
265typeP :: Parser ContextOperator
282typeP :: Parser ContextOperator
@@ -270,7 +287,7 @@ typeP = do
271showRelP :: Parser ContextOperator
288showRelP :: Parser ContextOperator
272showRelP = do
289showRelP = do
273− reservedOp ":show"
290+ reservedOp ":showExpr"
274 expr <- relExpr
291 expr <- relExpr
275 return $ ShowRelation expr
292 return $ ShowRelation expr
@@ -313,12 +330,18 @@ rollbackTransactionP = do
313 reservedOp ":rollback"
330 reservedOp ":rollback"
314 return $ Rollback
331 return $ Rollback
333+showGraphP :: Parser GraphOperator
335+ reservedOp ":showGraph"
316transactionGraphOps = do
338transactionGraphOps = do
317 jumpToHeadP
339 jumpToHeadP
318 <|> jumpToTransactionP
340 <|> jumpToTransactionP
319 <|> branchTransactionP
341 <|> branchTransactionP
320 <|> commitTransactionP
342 <|> commitTransactionP
321 <|> rollbackTransactionP
343 <|> rollbackTransactionP
323contextOps :: Parser ContextOperator
346contextOps :: Parser ContextOperator
324contextOps = typeP
347contextOps = typeP
@@ -341,6 +364,7 @@ showRelationAttributes rel = "{" ++ concat (L.intersperse ", " $ map showAttribu
341data TutorialDOperatorResult = QuitResult |
364data TutorialDOperatorResult = QuitResult |
342 DisplayResult String |
365 DisplayResult String |
343 DisplayErrorResult String |
366 DisplayErrorResult String |
367+ QuietSuccessResult |
344 NoActionResult
368 NoActionResult
346evalContextOp :: DatabaseContext -> ContextOperator -> TutorialDOperatorResult
370evalContextOp :: DatabaseContext -> ContextOperator -> TutorialDOperatorResult
@@ -366,12 +390,12 @@ evalContextOp context (Quit) = QuitResult
367-- returns the new "current" transaction, updated graph, and tutorial d result
391-- returns the new "current" transaction, updated graph, and tutorial d result
368-- the current transaction is not part of the transaction graph until it is committed
392-- the current transaction is not part of the transaction graph until it is committed
369−evalGraphOp :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> GraphOperator -> Either RelationalError (DisconnectedTransaction, TransactionGraph)
393+evalGraphOp :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> GraphOperator -> Either RelationalError (DisconnectedTransaction, TransactionGraph, TutorialDOperatorResult)
371--affects only disconncted transaction
395--affects only disconncted transaction
372evalGraphOp newUUID trans graph (JumpToTransaction jumpUUID) = case transactionForUUID jumpUUID graph of
396evalGraphOp newUUID trans graph (JumpToTransaction jumpUUID) = case transactionForUUID jumpUUID graph of
373 Left err -> Left err
397 Left err -> Left err
374− Right parentTrans -> Right (newTrans, graph)
398+ Right parentTrans -> Right (newTrans, graph, QuietSuccessResult)
376 newTrans = DisconnectedTransaction jumpUUID (transactionContext parentTrans)
400 newTrans = DisconnectedTransaction jumpUUID (transactionContext parentTrans)
@@ -380,7 +404,7 @@ evalGraphOp newUUID trans graph (JumpToTransaction jumpUUID) = case transactionF
380evalGraphOp newUUID currentTransaction graph (JumpToHead headName) =
404evalGraphOp newUUID currentTransaction graph (JumpToHead headName) =
381 case transactionForHead headName graph of
405 case transactionForHead headName graph of
382 Just newHeadTransaction -> let disconnectedTrans = newDisconnectedTransaction (transactionUUID newHeadTransaction) (transactionContext newHeadTransaction) in
406 Just newHeadTransaction -> let disconnectedTrans = newDisconnectedTransaction (transactionUUID newHeadTransaction) (transactionContext newHeadTransaction) in
383− Right (disconnectedTrans, graph)
407+ Right (disconnectedTrans, graph, QuietSuccessResult)
384 Nothing -> Left $ NoSuchHeadNameError headName
408 Nothing -> Left $ NoSuchHeadNameError headName
385-- add new head pointing to branchPoint
409-- add new head pointing to branchPoint
386-- repoint the disconnected transaction to the new branch commit (with a potentially different disconnected context)
410-- repoint the disconnected transaction to the new branch commit (with a potentially different disconnected context)
@@ -401,7 +425,7 @@ evalGraphOp newUUID discon@(DisconnectedTransaction parentUUID disconContext) gr
401 Left err -> Left err
425 Left err -> Left err
402 Right parentTrans -> case addBranch newUUID newBranchName parentTrans graph of
426 Right parentTrans -> case addBranch newUUID newBranchName parentTrans graph of
403 Left err -> Left err
427 Left err -> Left err
404− Right (newTrans, newGraph) -> Right (newDiscon, newGraph)
428+ Right (newTrans, newGraph) -> Right (newDiscon, newGraph, QuietSuccessResult)
406 newDiscon = DisconnectedTransaction newUUID disconContext
430 newDiscon = DisconnectedTransaction newUUID disconContext
@@ -413,18 +437,23 @@ evalGraphOp newTransUUID discon@(DisconnectedTransaction parentUUID context) gra
413 Nothing -> Left $ TransactionIsNotAHeadError parentUUID
437 Nothing -> Left $ TransactionIsNotAHeadError parentUUID
414 Just headName -> case maybeUpdatedGraph of
438 Just headName -> case maybeUpdatedGraph of
415 Left err-> Left err
439 Left err-> Left err
416− Right (_, updatedGraph) -> Right (newDisconnectedTrans, updatedGraph)
440+ Right (_, updatedGraph) -> Right (newDisconnectedTrans, updatedGraph, QuietSuccessResult)
418 newDisconnectedTrans = newDisconnectedTransaction newTransUUID context
442 newDisconnectedTrans = newDisconnectedTransaction newTransUUID context
419 --parentTransaction = transactionForUUID parentUUID graph
443 --parentTransaction = transactionForUUID parentUUID graph
420 maybeUpdatedGraph = addDisconnectedTransaction newTransUUID headName discon graph
444 maybeUpdatedGraph = addDisconnectedTransaction newTransUUID headName discon graph
422-- refresh the disconnected transaction, return the same graph
446-- refresh the disconnected transaction, return the same graph
423−evalGraphOp newTransUUID discon@(DisconnectedTransaction parentUUID _) graph Rollback = case transactionForUUID parentUUID graph of
447+evalGraphOp _ discon@(DisconnectedTransaction parentUUID _) graph Rollback = case transactionForUUID parentUUID graph of
424 Left err -> Left err
448 Left err -> Left err
425− Right parentTransaction -> Right (newDiscon, graph)
449+ Right parentTransaction -> Right (newDiscon, graph, QuietSuccessResult)
427 newDiscon = newDisconnectedTransaction parentUUID (transactionContext parentTransaction)
451 newDiscon = newDisconnectedTransaction parentUUID (transactionContext parentTransaction)
453+--display transaction graph as relation
454+evalGraphOp _ discon graph ShowGraph = do
455+ graphStr <- graphAsRelation discon graph
456+ return (discon, graph, DisplayResult $ showRelation graphStr)
429--shouldn't this be Either RelationalError DatabaseContext?
458--shouldn't this be Either RelationalError DatabaseContext?
430interpret :: DatabaseContext -> String -> (Maybe RelationalError, DatabaseContext)
459interpret :: DatabaseContext -> String -> (Maybe RelationalError, DatabaseContext)
@@ -440,7 +469,7 @@ interpretOps newUUID trans@(DisconnectedTransaction parentUUID context) transGra
440 Left contextOp -> (trans, transGraph, (evalContextOp context contextOp))
469 Left contextOp -> (trans, transGraph, (evalContextOp context contextOp))
441 Right graphOp -> case evalGraphOp newUUID trans transGraph graphOp of
470 Right graphOp -> case evalGraphOp newUUID trans transGraph graphOp of
442 Left err -> (trans, transGraph, DisplayErrorResult $ show err)
471 Left err -> (trans, transGraph, DisplayErrorResult $ show err)
443− Right (newDiscon, newGraph) -> (newDiscon, newGraph, DisplayResult "Done.")
472+ Right (newDiscon, newGraph, result) -> (newDiscon, newGraph, result)
445promptText :: DisconnectedTransaction -> TransactionGraph -> String
474promptText :: DisconnectedTransaction -> TransactionGraph -> String
446promptText (DisconnectedTransaction parentUUID _) graph = "TutorialD (" ++ transInfo ++ "): "
475promptText (DisconnectedTransaction parentUUID _) graph = "TutorialD (" ++ transInfo ++ "): "