@@ -18,6 +18,7 @@ module ProjectM36.Client
1818 planForDatabaseContextExpr,
1919 processPersistence,
2020 transactionGraphAsRelation,
21+ relationVariablesAsRelation,
2122 headName,
2223 remoteDBLookupName,
2324 defaultServerPort,
@@ -35,6 +36,7 @@ module ProjectM36.Client
3536 createSessionAtHead,
3637 closeSession,
3738 addClientNode,
39+ RelationCardinality(..),
3840 TransactionGraphOperator(..),
3941 Atomable,
4042 NodeId(..),
@@ -62,6 +64,7 @@ import ProjectM36.Persist (DiskSync(..))
6264import ProjectM36.Notifications
6365import ProjectM36.Server.RemoteCallTypes
6466import ProjectM36.Relation (typesAsRelation)
67+import qualified ProjectM36.Relation as R
6568import Network.Transport.TCP (createTransport, defaultTCPParameters, encodeEndPointAddress)
6669import Control.Distributed.Process.Node (newLocalNode, initRemoteTable, runProcess, LocalNode, forkProcess)
6770import Control.Distributed.Process.Extras.Internal.Types (whereisRemote)
@@ -483,6 +486,16 @@ transactionGraphAsRelation sessionId (InProcessConnection _ _ sessions tvar) = d
483486
484487transactionGraphAsRelation sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveTransactionGraph sessionId)
485488
489+relationVariablesAsRelation :: SessionId -> Connection -> IO (Either RelationalError Relation)
490+relationVariablesAsRelation sessionId (InProcessConnection _ _ sessions _) = do
491+ atomically $ do
492+ eSession <- sessionForSessionId sessionId sessions
493+ case eSession of
494+ Left err -> pure (Left err)
495+ Right (Session (DisconnectedTransaction _ context)) -> pure $ R.relationVariablesAsRelation (relationVariables context)
496+
497+relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _ _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
498+
486499-- | Returns the UUID for the connection's disconnected transaction committed parent transaction.
487500headTransactionUUID :: SessionId -> Connection -> IO (Maybe UUID)
488501headTransactionUUID sessionId (InProcessConnection _ _ sessions _) = do