project-m36-0.1: src/lib/ProjectM36/DatabaseContext.hs
module ProjectM36.DatabaseContext where
import ProjectM36.Base
import qualified Data.Map as M
import qualified Data.HashSet as HS
import ProjectM36.DataTypes.Basic
import ProjectM36.AtomFunctions.Basic
import ProjectM36.DatabaseContextFunction
import ProjectM36.Relation
empty :: DatabaseContext
empty = DatabaseContext { inclusionDependencies = M.empty,
relationVariables = M.empty,
notifications = M.empty,
atomFunctions = HS.empty,
dbcFunctions = HS.empty,
typeConstructorMapping = [] }
-- | convert an existing database context into its constituent expression.
databaseContextAsDatabaseContextExpr :: DatabaseContext -> DatabaseContextExpr
databaseContextAsDatabaseContextExpr context = MultipleExpr $ relVarsExprs ++ incDepsExprs ++ funcsExprs
where
relVarsExprs = map (\(name, rel) -> Assign name (ExistingRelation rel)) (M.toList (relationVariables context))
incDepsExprs :: [DatabaseContextExpr]
incDepsExprs = map (\(name, dep) -> AddInclusionDependency name dep) (M.toList (inclusionDependencies context))
funcsExprs = [] -- map (\func -> ) (HS.toList funcs) -- there are no databaseExprs to add atom functions yet
basicDatabaseContext :: DatabaseContext
basicDatabaseContext = DatabaseContext { inclusionDependencies = M.empty,
relationVariables = M.fromList [("true", relationTrue),
("false", relationFalse)],
atomFunctions = basicAtomFunctions,
dbcFunctions = basicDatabaseContextFunctions,
notifications = M.empty,
typeConstructorMapping = basicTypeConstructorMapping
}