1module ProjectM36.Session where
4import qualified Data.Map as M
9--the persistence of a session is as long as the life of the database (not serialized to disk)
10-- sessions are not associated with connections and have separate lifetimes
11-- | Represents a pointer into the database's transaction graph which the 'DatabaseContextExpr's can then modify subsequently be committed to extend the transaction graph. The session contains staged (uncommitted) database changes as well as the means to switch between isomorphic schemas.
12data Session = Session DisconnectedTransaction SchemaName
14defaultSchemaName :: SchemaName
15defaultSchemaName = "main"
17disconnectedTransaction :: Session -> DisconnectedTransaction
18disconnectedTransaction (Session discon _) = discon
20isDirty :: Session -> DirtyFlag
21isDirty (Session (DisconnectedTransaction _ _ dirtyFlag) _) = dirtyFlag
23concreteDatabaseContext :: Session -> DatabaseContext
24concreteDatabaseContext (Session (DisconnectedTransaction _ (Schemas context _) _) _) = context
26parentId :: Session -> TransactionId
27parentId (Session (DisconnectedTransaction parentUUID _ _) _) = parentUUID
29subschemas :: Session -> Subschemas
30subschemas (Session (DisconnectedTransaction _ (Schemas _ s) _) _) = s
32schemas :: Session -> Schemas
33schemas (Session (DisconnectedTransaction _ s _) _) = s
35schemaName :: Session -> SchemaName
36schemaName (Session _ s) = s
38setSchemaName :: SchemaName -> Session -> Either RelationalError Session
39setSchemaName sname session = if sname == defaultSchemaName || M.member sname (subschemas session) then
40 pure (Session (disconnectedTransaction session) sname)
42 Left (SubschemaNameNotInUseError sname)
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