@@ -64,6 +64,8 @@ import Control.Monad.State
6464import qualified ProjectM36.RelationalExpression as RE
6565import ProjectM36.DatabaseContext (basicDatabaseContext)
6666import ProjectM36.TransactionGraph
67+import qualified ProjectM36.Transaction as Trans
68+import qualified ProjectM36.DisconnectedTransaction as DTrans
6769import ProjectM36.TransactionGraph.Persist
6870import ProjectM36.Attribute hiding (atomTypes)
6971import ProjectM36.TransGraphRelationalExpression (TransGraphRelationalExpr, evalTransGraphRelationalExpr)
@@ -90,6 +92,7 @@ import Control.Distributed.Process.Serializable (Serializable)
9092--import Control.Distributed.Process.Debug
9193import qualified STMContainers.Map as STMMap
9294import qualified STMContainers.Set as STMSet
95+import qualified ProjectM36.Session as Sess
9396import ProjectM36.Session
9497import ProjectM36.Sessions
9598import ListT
@@ -279,7 +282,7 @@ createSessionAtCommit_ commitId newSessionId (InProcessConnection _ _ sessions g
279282 case transactionForId commitId graph of
280283 Left err -> pure (Left err)
281284 Right transaction -> do
282− let freshDiscon = DisconnectedTransaction commitId (transactionContext transaction)
285+ let freshDiscon = DisconnectedTransaction commitId (Trans.schemas transaction)
283286 keyDuplication <- STMMap.lookup newSessionId sessions
284287 case keyDuplication of
285288 Just _ -> pure $ Left (SessionIdInUseError newSessionId)
@@ -361,7 +364,7 @@ executeRelationalExpr sessionId (InProcessConnection _ _ sessions _ _) expr = ex
361364 eSession <- sessionForSessionId sessionId sessions
362365 case eSession of
363366 Left err -> pure $ Left err
364− Right (Session (DisconnectedTransaction _ context)) -> case evalState (RE.evalRelationalExpr expr) context of
367+ Right (Session discon) -> case evalState (RE.evalRelationalExpr expr) (DTrans.concreteDatabaseContext discon) of
365368 Left err -> pure (Left err)
366369 Right rel -> pure (force (Right rel)) -- this is necessary so that any undefined/error exceptions are spit out here
367370executeRelationalExpr sessionId conn@(RemoteProcessConnection _ _) relExpr = remoteCall conn (ExecuteRelationalExpr sessionId relExpr)
@@ -373,10 +376,11 @@ executeDatabaseContextExpr sessionId (InProcessConnection _ _ sessions _ _) expr
373376 case eSession of
374377 Left err -> pure $ Just err
375378 Right session -> do
376− case runState (RE.evalContextExpr expr) (sessionContext session) of
379+ case runState (RE.evalContextExpr expr) (Sess.concreteDatabaseContext session) of
377380 (Just err,_) -> return $ Just err
378381 (Nothing, context') -> do
379− let newDiscon = DisconnectedTransaction (sessionParentId session) context'
382+ let newDiscon = DisconnectedTransaction (Sess.parentId session) newSchemas
383+ newSchemas = Schemas context' (Sess.subschemas session)
380384 newSession = Session newDiscon
381385 STMMap.insert newSession sessionId sessions
382386 pure Nothing
@@ -391,11 +395,12 @@ executeDatabaseContextIOExpr sessionId (InProcessConnection _ _ sessions _ scrip
391395 case eSession of
392396 Left err -> pure $ Just err
393397 Right session -> do
394− res <- RE.evalDatabaseContextIOExpr scriptSession (sessionContext session) expr
398+ res <- RE.evalDatabaseContextIOExpr scriptSession (Sess.concreteDatabaseContext session) expr
395399 case res of
396400 Left err -> pure (Just err)
397401 Right context' -> do
398− let newDiscon = DisconnectedTransaction (sessionParentId session) context'
402+ let newDiscon = DisconnectedTransaction (Sess.parentId session) newSchemas
403+ newSchemas = Schemas context' (Sess.subschemas session)
399404 newSession = Session newDiscon
400405 atomically $ STMMap.insert newSession sessionId sessions
401406 pure Nothing
@@ -434,16 +439,16 @@ executeGraphExpr sessionId (InProcessConnection strat clientNodes sessions graph
434439 oldGraph <- readTVar graphTvar
435440 case eSession of
436441 Left err -> pure (Left err)
437− Right (Session (DisconnectedTransaction parentId currentContext)) -> do
442+ Right session -> do
438443 eGraph <- executeGraphExprSTM_ freshId sessionId sessions graphExpr graphTvar
439444 case eGraph of
440445 Left err -> pure (Left err)
441446 Right newGraph -> do
442447 if graphExpr == Commit then
443− case transactionForId parentId oldGraph of
448+ case transactionForId (Sess.parentId session) oldGraph of
444449 Left err -> pure $ Left err
445− Right (Transaction _ _ previousContext) -> do
446− (evaldNots, nodes) <- executeCommitExprSTM_ previousContext currentContext clientNodes
450+ Right previousTrans -> do
451+ (evaldNots, nodes) <- executeCommitExprSTM_ (Trans.concreteDatabaseContext previousTrans) (Sess.concreteDatabaseContext session) clientNodes
447452 nodesToNotify <- toList (STMSet.stream nodes)
448453 pure $ Right (evaldNots, nodesToNotify, newGraph)
449454 else
@@ -512,7 +517,7 @@ typeForRelationalExprSTM sessionId (InProcessConnection _ _ sessions _ _) relExp
512517 eSession <- sessionForSessionId sessionId sessions
513518 case eSession of
514519 Left err -> pure $ Left err
515− Right session -> pure $ evalState (RE.typeForRelationalExpr relExpr) (sessionContext session)
520+ Right session -> pure $ evalState (RE.typeForRelationalExpr relExpr) (Sess.concreteDatabaseContext session)
516521
517522typeForRelationalExprSTM _ _ _ = error "typeForRelationalExprSTM called on non-local connection"
518523
@@ -523,7 +528,7 @@ inclusionDependencies sessionId (InProcessConnection _ _ sessions _ _) = do
523528 eSession <- sessionForSessionId sessionId sessions
524529 case eSession of
525530 Left err -> pure $ Left err
526− Right session -> pure $ Right (B.inclusionDependencies (sessionContext session))
531+ Right session -> pure $ Right (B.inclusionDependencies (Sess.concreteDatabaseContext session))
527532
528533inclusionDependencies sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveInclusionDependencies sessionId)
529534
@@ -534,7 +539,7 @@ planForDatabaseContextExpr sessionId (InProcessConnection _ _ sessions _ _) dbEx
534539 eSession <- sessionForSessionId sessionId sessions
535540 case eSession of
536541 Left err -> pure $ Left err
537− Right session -> pure $ evalState (applyStaticDatabaseOptimization dbExpr) (sessionContext session)
542+ Right session -> pure $ evalState (applyStaticDatabaseOptimization dbExpr) (Sess.concreteDatabaseContext session)
538543planForDatabaseContextExpr sessionId conn@(RemoteProcessConnection _ _) dbExpr = remoteCall conn (RetrievePlanForDatabaseContextExpr sessionId dbExpr)
539544
540545-- | Return a relation which represents the current state of the global transaction graph. The attributes are
@@ -560,7 +565,7 @@ relationVariablesAsRelation sessionId (InProcessConnection _ _ sessions _ _) = d
560565 eSession <- sessionForSessionId sessionId sessions
561566 case eSession of
562567 Left err -> pure (Left err)
563− Right (Session (DisconnectedTransaction _ context)) -> pure $ R.relationVariablesAsRelation (relationVariables context)
568+ Right session -> pure $ R.relationVariablesAsRelation (relationVariables (Sess.concreteDatabaseContext session))
564569
565570relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
566571
@@ -571,7 +576,7 @@ headTransactionId sessionId (InProcessConnection _ _ sessions _ _) = do
571576 eSession <- sessionForSessionId sessionId sessions
572577 case eSession of
573578 Left _ -> pure Nothing
574− Right session -> pure $ Just (sessionParentId session)
579+ Right session -> pure $ Just (Sess.parentId session)
575580headTransactionId sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveHeadTransactionId sessionId)
576581
577582headNameSTM_ :: SessionId -> Sessions -> TVar TransactionGraph -> STM (Maybe HeadName)
@@ -580,7 +585,7 @@ headNameSTM_ sessionId sessions graphTvar = do
580585 eSession <- sessionForSessionId sessionId sessions
581586 case eSession of
582587 Left _ -> pure $ Nothing
583− Right session -> pure $ case transactionForId (sessionParentId session) graph of
588+ Right session -> pure $ case transactionForId (Sess.parentId session) graph of
584589 Left _ -> Nothing
585590 Right parentTrans -> headNameForTransaction parentTrans graph
586591
@@ -596,8 +601,8 @@ atomTypesAsRelation sessionId (InProcessConnection _ _ sessions _ _) = do
596601 eSession <- sessionForSessionId sessionId sessions
597602 case eSession of
598603 Left err -> pure (Left err)
599− Right (Session (DisconnectedTransaction _ context)) -> do
600− case typesAsRelation (typeConstructorMapping context) of
604+ Right session -> do
605+ case typesAsRelation (typeConstructorMapping (Sess.concreteDatabaseContext session)) of
601606 Left err -> pure (Left err)
602607 Right rel -> pure (Right rel)
603608atomTypesAsRelation sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveAtomTypesAsRelation sessionId)