@@ -9,6 +9,7 @@ import ProjectM36.Tuple
9import ProjectM36.TupleSet
9import ProjectM36.TupleSet
10import ProjectM36.Error
10import ProjectM36.Error
11import ProjectM36.Base
11import ProjectM36.Base
12+import qualified ProjectM36.Base as Base
12import ProjectM36.TransactionGraph
13import ProjectM36.TransactionGraph
13import ProjectM36.Client
14import ProjectM36.Client
14import ProjectM36.Atom
15import ProjectM36.Atom
@@ -24,6 +25,7 @@ import Data.Text (Text)
24import Data.Time.Clock (UTCTime(..))
25import Data.Time.Clock (UTCTime(..))
25import Data.Time.Calendar (fromGregorian)
26import Data.Time.Calendar (fromGregorian)
26import Data.Interval (interval, Interval, Extended(Finite))
27import Data.Interval (interval, Interval, Extended(Finite))
28+import Control.Concurrent.STM
28main :: IO ()
30main :: IO ()
@@ -131,7 +133,7 @@ transactionGraphBasicTest = TestCase $ do
131transactionGraphAddCommitTest :: Test
133transactionGraphAddCommitTest :: Test
132transactionGraphAddCommitTest = TestCase $ do
134transactionGraphAddCommitTest = TestCase $ do
133 dbconn <- dateExamplesConnection
135 dbconn <- dateExamplesConnection
134− case parseTutorialD dbconn "x:=S" of
136+ case parseTutorialD "x:=S" of
135 Left err -> assertFailure (show err)
137 Left err -> assertFailure (show err)
136 Right parsed -> do
138 Right parsed -> do
137 result <- evalTutorialD dbconn parsed
139 result <- evalTutorialD dbconn parsed
@@ -218,17 +220,35 @@ simpleJoinTest = TestCase $ assertTutdEqual dateExamples joinedRel "x:=S join SP
218 [stringAtom "London", intAtom 200, stringAtom "P4", stringAtom "S1", stringAtom "Smith", intAtom 20],
220 [stringAtom "London", intAtom 200, stringAtom "P4", stringAtom "S1", stringAtom "Smith", intAtom 20],
219 [stringAtom "London", intAtom 200, stringAtom "P2", stringAtom "S4", stringAtom "Clark", intAtom 20]
221 [stringAtom "London", intAtom 200, stringAtom "P2", stringAtom "S4", stringAtom "Clark", intAtom 20]
223+transactionGraph :: Connection -> IO TransactionGraph
224+transactionGraph (InProcessConnection _ tvar) = atomically $ do
225+ (_, graph) <- readTVar tvar
227+transactionGraph _ = error "remote connection used"
229+disconnectedTransaction :: Connection -> IO DisconnectedTransaction
230+disconnectedTransaction (InProcessConnection _ tvar) = atomically $ do
231+ (discon, _) <- readTVar tvar
233+disconnectedTransaction _ = error "remote connection used"
236+inclusionDependencies :: Connection -> M.Map IncDepName InclusionDependency
237+inclusionDependencies (InProcessConnection (DisconnectedTransaction _ context)) = inclusionDependencies context
238+inclusionDependencies _ = error "remote connection used"
222dateExamplesConnection :: IO (Connection)
241dateExamplesConnection :: IO (Connection)
223dateExamplesConnection = do
242dateExamplesConnection = do
224 dbconn <- connectProjectM36 (InProcessConnectionInfo NoPersistence)
243 dbconn <- connectProjectM36 (InProcessConnectionInfo NoPersistence)
244+ let incDeps = Base.inclusionDependencies dateExamples
225 case dbconn of
245 case dbconn of
226 Left err -> do
246 Left err -> do
227 hPutStrLn stderr (show err)
247 hPutStrLn stderr (show err)
228 exitFailure
248 exitFailure
229 Right conn -> do
249 Right conn -> do
230 mapM_ (\(rvName,rvRel) -> executeDatabaseContextExpr conn (Assign rvName (ExistingRelation rvRel))) (M.toList (relationVariables dateExamples))
250 mapM_ (\(rvName,rvRel) -> executeDatabaseContextExpr conn (Assign rvName (ExistingRelation rvRel))) (M.toList (relationVariables dateExamples))
231− mapM_ (\(idName,incDep) -> executeDatabaseContextExpr conn (AddInclusionDependency idName incDep)) (M.toList (inclusionDependencies dateExamples))
251+ mapM_ (\(idName,incDep) -> executeDatabaseContextExpr conn (AddInclusionDependency idName incDep)) (M.toList incDeps)
232 --skipping atom functions for now- there are no atom function manipulation operators yet
252 --skipping atom functions for now- there are no atom function manipulation operators yet
233 commit conn >>= maybeFail
253 commit conn >>= maybeFail
234 return conn
254 return conn