@@ -160,7 +160,7 @@ transactionGraphAddCommitTest = TestCase $ do
160 DisplayParseErrorResult _ _ -> assertFailure "displayparseerror?"
160 DisplayParseErrorResult _ _ -> assertFailure "displayparseerror?"
161 DisplayErrorResult err -> assertFailure (show err)
161 DisplayErrorResult err -> assertFailure (show err)
162 QuietSuccessResult -> do
162 QuietSuccessResult -> do
163− commit sessionId dbconn ForbidEmptyCommitOption >>= maybeFail
163+ commit sessionId dbconn >>= eitherFail
164 discon <- disconnectedTransaction_ sessionId dbconn
164 discon <- disconnectedTransaction_ sessionId dbconn
165 let context = Discon.concreteDatabaseContext discon
165 let context = Discon.concreteDatabaseContext discon
166 assertEqual "ensure x was added" (M.lookup "x" (relationVariables context)) (Just suppliersRel)
166 assertEqual "ensure x was added" (M.lookup "x" (relationVariables context)) (Just suppliersRel)
@@ -169,44 +169,35 @@ transactionRollbackTest :: Test
169transactionRollbackTest = TestCase $ do
169transactionRollbackTest = TestCase $ do
170 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
170 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
171 graph <- transactionGraph_ dbconn
171 graph <- transactionGraph_ dbconn
172− maybeErr <- executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ()))
172+ executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ())) >>= eitherFail
174− Just err -> assertFailure (show err)
176− rollback sessionId dbconn >>= maybeFail
173+ rollback sessionId dbconn >>= eitherFail
177− discon <- disconnectedTransaction_ sessionId dbconn
174+ discon <- disconnectedTransaction_ sessionId dbconn
178− graph' <- transactionGraph_ dbconn
175+ graph' <- transactionGraph_ dbconn
179− assertEqual "validate context" Nothing (M.lookup "x" (relationVariables (Discon.concreteDatabaseContext discon)))
176+ assertEqual "validate context" Nothing (M.lookup "x" (relationVariables (Discon.concreteDatabaseContext discon)))
180− let graphEq graphArg = S.map transactionId (transactionsForGraph graphArg)
177+ let graphEq graphArg = S.map transactionId (transactionsForGraph graphArg)
181− assertEqual "validate graph" (graphEq graph) (graphEq graph')
178+ assertEqual "validate graph" (graphEq graph) (graphEq graph')
183--commit a new transaction with "x" relation, jump to first transaction, verify that "x" is not present
180--commit a new transaction with "x" relation, jump to first transaction, verify that "x" is not present
184transactionJumpTest :: Test
181transactionJumpTest :: Test
185transactionJumpTest = TestCase $ do
182transactionJumpTest = TestCase $ do
186 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
183 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
187 (DisconnectedTransaction firstUUID _ _) <- disconnectedTransaction_ sessionId dbconn
184 (DisconnectedTransaction firstUUID _ _) <- disconnectedTransaction_ sessionId dbconn
188− maybeErr <- executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ()))
185+ executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ())) >>= eitherFail
190− Just err -> assertFailure (show err)
192− commit sessionId dbconn ForbidEmptyCommitOption >>= maybeFail
186+ commit sessionId dbconn >>= eitherFail
193− --perform the jump
187+ --perform the jump
194− maybeErr2 <- executeGraphExpr sessionId dbconn (JumpToTransaction firstUUID)
188+ executeGraphExpr sessionId dbconn (JumpToTransaction firstUUID) >>= eitherFail
196− Just err -> assertFailure (show err)
198− --check that the disconnected transaction does not include "x"
189+ --check that the disconnected transaction does not include "x"
199− discon <- disconnectedTransaction_ sessionId dbconn
190+ discon <- disconnectedTransaction_ sessionId dbconn
200− assertEqual "ensure x is not present" Nothing (M.lookup "x" (relationVariables (Discon.concreteDatabaseContext discon)))
191+ assertEqual "ensure x is not present" Nothing (M.lookup "x" (relationVariables (Discon.concreteDatabaseContext discon)))
201--branch from the first transaction and verify that there are two heads
192--branch from the first transaction and verify that there are two heads
202transactionBranchTest :: Test
193transactionBranchTest :: Test
203transactionBranchTest = TestCase $ do
194transactionBranchTest = TestCase $ do
204 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
195 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
205− mapM_ (\x -> x >>= maybeFail) [executeGraphExpr sessionId dbconn (Branch "test"),
196+ mapM_ (\x -> x >>= eitherFail) [executeGraphExpr sessionId dbconn (Branch "test"),
206− executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ())),
197+ executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "s" ())),
207− commit sessionId dbconn ForbidEmptyCommitOption,
198+ commit sessionId dbconn,
208− executeGraphExpr sessionId dbconn (JumpToHead "master"),
199+ executeGraphExpr sessionId dbconn (JumpToHead "master"),
209− executeDatabaseContextExpr sessionId dbconn (Assign "y" (RelationVariable "s" ()))
200+ executeDatabaseContextExpr sessionId dbconn (Assign "y" (RelationVariable "s" ()))
211 graph <- transactionGraph_ dbconn
202 graph <- transactionGraph_ dbconn
212 assertBool "master branch exists" $ isJust (transactionForHead "master" graph)
203 assertBool "master branch exists" $ isJust (transactionForHead "master" graph)
@@ -255,12 +246,11 @@ testNotification = TestCase $ do
255 let notifCallback mvar = \_ _ -> putMVar mvar ()
246 let notifCallback mvar = \_ _ -> putMVar mvar ()
256 relvarx = RelationVariable "x" ()
247 relvarx = RelationVariable "x" ()
257 (sess, conn) <- dateExamplesConnection (notifCallback notifmvar)
248 (sess, conn) <- dateExamplesConnection (notifCallback notifmvar)
258− let check' x = x >>= maybe (pure ()) (\err -> assertFailure (show err))
259− check' $ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationTrue))
249+ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationTrue)) >>= eitherFail
260− check' $ executeDatabaseContextExpr sess conn (AddNotification "test notification" relvarx relvarx)
250+ executeDatabaseContextExpr sess conn (AddNotification "test notification" relvarx relvarx) >>= eitherFail
261− check' $ commit sess conn ForbidEmptyCommitOption
251+ commit sess conn >>= eitherFail
262− check' $ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationFalse))
252+ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationFalse)) >>= eitherFail
263− check' $ commit sess conn ForbidEmptyCommitOption
253+ commit sess conn >>= eitherFail
264 takeMVar notifmvar
254 takeMVar notifmvar
266testTypeConstructors :: Test
256testTypeConstructors :: Test
@@ -360,13 +350,10 @@ testSchemaExpr = TestCase $ do
360 eLightProduct <- executeRelationalExpr sessionId dbconn (RelationVariable "light_product" ())
350 eLightProduct <- executeRelationalExpr sessionId dbconn (RelationVariable "light_product" ())
361 lightProduct <- assertEither eLightProduct
351 lightProduct <- assertEither eLightProduct
362 let restriction = NotPredicate (AtomExprPredicate (FunctionAtomExpr "gte" [NakedAtomExpr (IntAtom 17), AttributeAtomExpr "weight"] ()))
352 let restriction = NotPredicate (AtomExprPredicate (FunctionAtomExpr "gte" [NakedAtomExpr (IntAtom 17), AttributeAtomExpr "weight"] ()))
363− mErr <- setCurrentSchemaName sessionId dbconn Sess.defaultSchemaName
353+ setCurrentSchemaName sessionId dbconn Sess.defaultSchemaName >>= eitherFail
365− Just err -> assertFailure (show err)
367− eRestrictedProduct <- executeRelationalExpr sessionId dbconn (Restrict restriction (RelationVariable "p" ()))
354+ eRestrictedProduct <- executeRelationalExpr sessionId dbconn (Restrict restriction (RelationVariable "p" ()))
368− restrictedProduct <- assertEither eRestrictedProduct
355+ restrictedProduct <- assertEither eRestrictedProduct
369− assertEqual "light product" restrictedProduct lightProduct
356+ assertEqual "light product" restrictedProduct lightProduct
371assertEither :: (Show a) => Either a b -> IO b
358assertEither :: (Show a) => Either a b -> IO b
372assertEither x = case x of
359assertEither x = case x of
@@ -402,31 +389,25 @@ testFunctionalDependencies = TestCase $ do
402testEmptyCommits :: Test
389testEmptyCommits :: Test
403testEmptyCommits = TestCase $ do
390testEmptyCommits = TestCase $ do
404 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
391 (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
405− err1 <- executeGraphExpr sessionId dbconn (Commit ForbidEmptyCommitOption)
392+ dirty <- disconnectedTransactionIsDirty sessionId dbconn
406− assertEqual "no updates empty commit" (Just EmptyCommitError) err1
393+ assertEqual "no change not dirty" (Right False) dirty
394+ Right () <- commit sessionId dbconn
407 --insert no tuples
396 --insert no tuples
408− Nothing <- executeDatabaseContextExpr sessionId dbconn (Insert "s" (RelationVariable "s" ()))
397+ Right () <- executeDatabaseContextExpr sessionId dbconn (Insert "s" (RelationVariable "s" ()))
409− err2 <- executeGraphExpr sessionId dbconn (Commit ForbidEmptyCommitOption)
398+ dirty' <- disconnectedTransactionIsDirty sessionId dbconn
410− assertEqual "empty insert empty commit" (Just EmptyCommitError) err2
399+ assertEqual "empty insert empty commit" (Right False) dirty'
400+ Right () <- commit sessionId dbconn
411 --update no tuples
402 --update no tuples
412− Nothing <- executeDatabaseContextExpr sessionId dbconn (Update "s" (M.singleton "sname" (NakedAtomExpr (TextAtom "Bob"))) (AttributeEqualityPredicate "sname" (NakedAtomExpr (TextAtom "Mike"))))
403+ Right () <- executeDatabaseContextExpr sessionId dbconn (Update "s" (M.singleton "sname" (NakedAtomExpr (TextAtom "Bob"))) (AttributeEqualityPredicate "sname" (NakedAtomExpr (TextAtom "Mike"))))
413− err3 <- executeGraphExpr sessionId dbconn (Commit ForbidEmptyCommitOption)
404+ dirty'' <- disconnectedTransactionIsDirty sessionId dbconn
414− assertEqual "empty update empty commit" (Just EmptyCommitError) err3
405+ assertEqual "empty update empty commit" (Right False) dirty''
415− --delete no tuples
406+ Right () <- commit sessionId dbconn
416− Nothing <- executeDatabaseContextExpr sessionId dbconn (Delete "s" (AttributeEqualityPredicate "sname" (NakedAtomExpr (TextAtom "Mike"))))
417− err4 <- executeGraphExpr sessionId dbconn (Commit ForbidEmptyCommitOption)
418− assertEqual "empty delete empty commit" (Just EmptyCommitError) err4
420− --test allow empty commit option
408+ --delete no tuples
421− headId5 <- headTransactionId sessionId dbconn
409+ Right () <- executeDatabaseContextExpr sessionId dbconn (Delete "s" (AttributeEqualityPredicate "sname" (NakedAtomExpr (TextAtom "Mike"))))
422− err5 <- executeGraphExpr sessionId dbconn (Commit AllowEmptyCommitOption)
410+ dirty''' <- disconnectedTransactionIsDirty sessionId dbconn
423− assertEqual "allow empty commit" Nothing err5
411+ assertEqual "empty delete empty commit" (Right False) dirty'''
424− headId5' <- headTransactionId sessionId dbconn
412+
425− assertBool "different heads" (headId5 /= headId5')
427− --test ignore empty commit option
428− headId6 <- headTransactionId sessionId dbconn
429− err6 <- executeGraphExpr sessionId dbconn (Commit IgnoreEmptyCommitOption)
430− assertEqual "ignore empty commit" Nothing err6
431− headId6' <- headTransactionId sessionId dbconn
432− assertEqual "same heads" headId6 headId6'