@@ -25,6 +25,7 @@ module ProjectM36.Client
2525 typeForRelationalExpr,
2626 inclusionDependencies,
2727 ProjectM36.Client.typeConstructorMapping,
28+ ProjectM36.Client.databaseContextFunctionsAsRelation,
2829 planForDatabaseContextExpr,
2930 currentSchemaName,
3031 SchemaName,
@@ -32,6 +33,7 @@ module ProjectM36.Client
3233 setCurrentSchemaName,
3334 transactionGraphAsRelation,
3435 relationVariablesAsRelation,
36+ ProjectM36.Client.atomFunctionsAsRelation,
3537 disconnectedTransactionIsDirty,
3638 headName,
3739 remoteDBLookupName,
@@ -98,9 +100,10 @@ import ProjectM36.Base hiding (inclusionDependencies) --defined in this module a
98100import qualified ProjectM36.Base as B
99101import ProjectM36.Error
100102import ProjectM36.Atomable
101−import ProjectM36.AtomFunction
103+import ProjectM36.AtomFunction as AF
102104import ProjectM36.StaticOptimizer
103105import ProjectM36.Key
106+import ProjectM36.DatabaseContextFunction as DCF
104107import qualified ProjectM36.IsomorphicSchema as Schema
105108import Control.Monad.State
106109import Control.Monad.Trans.Reader
@@ -910,7 +913,32 @@ relationVariablesAsRelation sessionId (InProcessConnection conf) = do
910913 Left err -> pure (Left err)
911914 Right relvars -> pure $ R.relationVariablesAsRelation relvars
912915
913−relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
916+relationVariablesAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveRelationVariableSummary sessionId)
917+
918+-- | Returns the names and types of the atom functions in the current 'Session'.
919+atomFunctionsAsRelation :: SessionId -> Connection -> IO (Either RelationalError Relation)
920+atomFunctionsAsRelation sessionId (InProcessConnection conf) = do
921+ let sessions = ipSessions conf
922+ atomically $ do
923+ eSession <- sessionAndSchema sessionId sessions
924+ case eSession of
925+ Left err -> pure (Left err)
926+ Right (session, _) ->
927+ pure (AF.atomFunctionsAsRelation (atomFunctions (concreteDatabaseContext session)))
928+
929+atomFunctionsAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveAtomFunctionSummary sessionId)
930+
931+databaseContextFunctionsAsRelation :: SessionId -> Connection -> IO (Either RelationalError Relation)
932+databaseContextFunctionsAsRelation sessionId (InProcessConnection conf) = do
933+ let sessions = ipSessions conf
934+ atomically $ do
935+ eSession <- sessionAndSchema sessionId sessions
936+ case eSession of
937+ Left err -> pure (Left err)
938+ Right (session, _) ->
939+ pure (DCF.databaseContextFunctionsAsRelation (dbcFunctions (concreteDatabaseContext session)))
940+
941+databaseContextFunctionsAsRelation sessionId conn@(RemoteProcessConnection _) = remoteCall conn (RetrieveDatabaseContextFunctionSummary sessionId)
914942
915943-- | Returns the transaction id for the connection's disconnected transaction committed parent transaction.
916944headTransactionId :: SessionId -> Connection -> IO (Either RelationalError TransactionId)