1module ProjectM36.Server.EntryPoints where
2import ProjectM36.Base hiding (inclusionDependencies)
3import ProjectM36.IsomorphicSchema
4import ProjectM36.Client as C
6import Control.Distributed.Process (Process, ProcessId)
7import Control.Distributed.Process.ManagedProcess (ProcessReply)
8import Control.Distributed.Process.ManagedProcess.Server (reply)
9import Control.Distributed.Process.Async (async, task, waitCancelTimeout, AsyncResult(..))
10import Control.Distributed.Process.Serializable (Serializable)
11import Control.Monad.IO.Class (liftIO)
13import Control.Concurrent (threadDelay)
15timeoutOrDie :: Serializable a => Timeout -> IO a -> Process (Either ServerError a)
16timeoutOrDie micros act =
18 liftIO act >>= \x -> pure (Right x)
20 asyncUnit <- async (task (liftIO act))
21 asyncRes <- waitCancelTimeout micros asyncUnit
23 AsyncDone x -> pure (Right x)
24 AsyncCancelled -> pure (Left RequestTimeoutError)
25 AsyncFailed reason -> pure (Left (ProcessDiedError (show reason)))
26 AsyncLinkFailed reason -> pure (Left (ProcessDiedError (show reason)))
27 AsyncPending -> pure (Left (ProcessDiedError "process pending"))
31type Reply a = Process (ProcessReply (Either ServerError a) Connection)
33handleExecuteRelationalExpr :: Timeout -> SessionId -> Connection -> RelationalExpr -> Reply (Either RelationalError Relation)
34handleExecuteRelationalExpr ti sessionId conn expr = do
35 ret <- timeoutOrDie ti (executeRelationalExpr sessionId conn expr)
38handleExecuteDatabaseContextExpr :: Timeout -> SessionId -> Connection -> DatabaseContextExpr -> Reply (Either RelationalError ())
39handleExecuteDatabaseContextExpr ti sessionId conn dbexpr = do
40 ret <- timeoutOrDie ti (executeDatabaseContextExpr sessionId conn dbexpr)
43handleExecuteDatabaseContextIOExpr :: Timeout -> SessionId -> Connection -> DatabaseContextIOExpr -> Reply (Either RelationalError ())
44handleExecuteDatabaseContextIOExpr ti sessionId conn dbexpr = do
45 ret <- timeoutOrDie ti (executeDatabaseContextIOExpr sessionId conn dbexpr)
48handleExecuteHeadName :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError HeadName)
49handleExecuteHeadName ti sessionId conn = do
50 ret <- timeoutOrDie ti (headName sessionId conn)
53handleLogin :: Timeout -> Connection -> ProcessId -> Reply Bool
54handleLogin ti conn newClientProcessId = do
55 ret <- timeoutOrDie ti (addClientNode conn newClientProcessId)
57 Right () -> reply (Right True) conn
58 Left err -> reply (Left err) conn
60handleExecuteGraphExpr :: Timeout -> SessionId -> Connection -> TransactionGraphOperator -> Reply (Either RelationalError ())
61handleExecuteGraphExpr ti sessionId conn graphExpr = do
62 ret <- timeoutOrDie ti (executeGraphExpr sessionId conn graphExpr)
65handleExecuteTransGraphRelationalExpr :: Timeout -> SessionId -> Connection -> TransGraphRelationalExpr -> Reply (Either RelationalError Relation)
66handleExecuteTransGraphRelationalExpr ti sessionId conn graphExpr = do
67 ret <- timeoutOrDie ti (executeTransGraphRelationalExpr sessionId conn graphExpr)
70handleExecuteTypeForRelationalExpr :: Timeout -> SessionId -> Connection -> RelationalExpr -> Reply (Either RelationalError Relation)
71handleExecuteTypeForRelationalExpr ti sessionId conn relExpr = do
72 ret <- timeoutOrDie ti (typeForRelationalExpr sessionId conn relExpr)
75handleRetrieveInclusionDependencies :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError (Map IncDepName InclusionDependency))
76handleRetrieveInclusionDependencies ti sessionId conn = do
77 ret <- timeoutOrDie ti (inclusionDependencies sessionId conn)
80handleRetrievePlanForDatabaseContextExpr :: Timeout -> SessionId -> Connection -> DatabaseContextExpr -> Reply (Either RelationalError DatabaseContextExpr)
81handleRetrievePlanForDatabaseContextExpr ti sessionId conn dbExpr = do
82 ret <- timeoutOrDie ti (planForDatabaseContextExpr sessionId conn dbExpr)
85handleRetrieveTransactionGraph :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError Relation)
86handleRetrieveTransactionGraph ti sessionId conn = do
87 ret <- timeoutOrDie ti (transactionGraphAsRelation sessionId conn)
90handleRetrieveHeadTransactionId :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError TransactionId)
91handleRetrieveHeadTransactionId ti sessionId conn = do
92 ret <- timeoutOrDie ti (headTransactionId sessionId conn)
95handleCreateSessionAtCommit :: Timeout -> Connection -> TransactionId -> Reply (Either RelationalError SessionId)
96handleCreateSessionAtCommit ti conn commitId = do
97 ret <- timeoutOrDie ti (createSessionAtCommit conn commitId)
100handleCreateSessionAtHead :: Timeout -> Connection -> HeadName -> Reply (Either RelationalError SessionId)
101handleCreateSessionAtHead ti conn headn = do
102 ret <- timeoutOrDie ti (createSessionAtHead conn headn)
105handleCloseSession :: Timeout -> SessionId -> Connection -> Reply ()
106handleCloseSession ti sessionId conn = do
107 ret <- timeoutOrDie ti (closeSession sessionId conn)
109 Right () -> reply (Right ()) conn
110 Left err -> reply (Left err) conn
112handleRetrieveAtomTypesAsRelation :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError Relation)
113handleRetrieveAtomTypesAsRelation ti sessionId conn = do
114 ret <- timeoutOrDie ti (atomTypesAsRelation sessionId conn)
117-- | Returns a relation which lists the names of relvars in the current session as well as its types.
118handleRetrieveRelationVariableSummary :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError Relation)
119handleRetrieveRelationVariableSummary ti sessionId conn = do
120 ret <- timeoutOrDie ti (relationVariablesAsRelation sessionId conn)
123handleRetrieveCurrentSchemaName :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError SchemaName)
124handleRetrieveCurrentSchemaName ti sessionId conn = do
125 ret <- timeoutOrDie ti (currentSchemaName sessionId conn)
128handleExecuteSchemaExpr :: Timeout -> SessionId -> Connection -> SchemaExpr -> Reply (Either RelationalError ())
129handleExecuteSchemaExpr ti sessionId conn schemaExpr = do
130 ret <- timeoutOrDie ti (executeSchemaExpr sessionId conn schemaExpr)
133handleLogout :: Timeout -> Connection -> Reply Bool
135 --liftIO $ closeRemote_ conn
138handleTestTimeout :: Timeout -> SessionId -> Connection -> Reply Bool
139handleTestTimeout ti _ conn = do
140 ret <- timeoutOrDie ti (threadDelay 100000 >> pure True)
143handleRetrieveSessionIsDirty :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError Bool)
144handleRetrieveSessionIsDirty ti sessionId conn = do
145 ret <- timeoutOrDie ti (disconnectedTransactionIsDirty sessionId conn)
148handleExecuteAutoMergeToHead :: Timeout -> SessionId -> Connection -> MergeStrategy -> HeadName -> Reply (Either RelationalError ())
149handleExecuteAutoMergeToHead ti sessionId conn strat headName' = do
150 ret <- timeoutOrDie ti (autoMergeToHead sessionId conn strat headName')
153handleRetrieveTypeConstructorMapping :: Timeout -> SessionId -> Connection -> Reply (Either RelationalError TypeConstructorMapping)
154handleRetrieveTypeConstructorMapping ti sessionId conn = do
155 ret <- timeoutOrDie ti (C.typeConstructorMapping sessionId conn)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list