@@ -32,6 +32,7 @@ module ProjectM36.Client
3232 setCurrentSchemaName,
3333 transactionGraphAsRelation,
3434 relationVariablesAsRelation,
35+ ProjectM36.Client.atomFunctionsAsRelation,
3536 disconnectedTransactionIsDirty,
3637 headName,
3738 remoteDBLookupName,
@@ -98,7 +99,7 @@ import ProjectM36.Base hiding (inclusionDependencies) --defined in this module a
9899import qualified ProjectM36.Base as B
99100import ProjectM36.Error
100101import ProjectM36.Atomable
101−import ProjectM36.AtomFunction
102+import ProjectM36.AtomFunction as AF
102103import ProjectM36.StaticOptimizer
103104import ProjectM36.Key
104105import qualified ProjectM36.IsomorphicSchema as Schema
@@ -910,7 +911,20 @@ relationVariablesAsRelation sessionId (InProcessConnection conf) = do
910911 Left err -> pure (Left err)
911912 Right relvars -> pure $ R.relationVariablesAsRelation relvars
912913
913−relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
914+relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
915+
916+-- | Returns the names and types of the atom functions in the current 'Session'.
917+atomFunctionsAsRelation :: SessionId -> Connection -> IO (Either RelationalError Relation)
918+atomFunctionsAsRelation sessionId (InProcessConnection conf) = do
919+ let sessions = ipSessions conf
920+ atomically $ do
921+ eSession <- sessionAndSchema sessionId sessions
922+ case eSession of
923+ Left err -> pure (Left err)
924+ Right (session, _) -> do
925+ pure (AF.atomFunctionsAsRelation (atomFunctions (concreteDatabaseContext session)))
926+
927+atomFunctionsAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveAtomFunctionSummary sessionId)
914928
915929-- | Returns the transaction id for the connection's disconnected transaction committed parent transaction.
916930headTransactionId :: SessionId -> Connection -> IO (Either RelationalError TransactionId)