@@ -6,10 +6,12 @@ import ProjectM36.TupleSet
66import ProjectM36.Base
77import ProjectM36.Error
88import ProjectM36.Atom
9+import ProjectM36.Key
910import ProjectM36.AtomFunction
1011import qualified ProjectM36.Attribute as A
1112import qualified Data.Map as M
1213import qualified Data.HashSet as HS
14+import qualified Data.Set as S
1315import Control.Monad.State hiding (join)
1416import Data.Maybe
1517import Data.Either
@@ -124,7 +126,7 @@ basicDatabaseContext = DatabaseContext { inclusionDependencies = M.empty,
124126 }
125127
126128dateExamples :: DatabaseContext
127−dateExamples = DatabaseContext { inclusionDependencies = M.empty,
129+dateExamples = DatabaseContext { inclusionDependencies = dateIncDeps,
128130 relationVariables = M.union (relationVariables basicDatabaseContext) dateRelVars,
129131 atomFunctions = basicAtomFunctions}
130132 where
@@ -134,6 +136,11 @@ dateExamples = DatabaseContext { inclusionDependencies = M.empty,
134136 suppliers = suppliersRel
135137 products = productsRel
136138 supplierProducts = supplierProductsRel
139+ dateIncDeps = M.fromList [("S_pkey", simplePKey ["S#"] "S"),
140+ ("P_pkey", simplePKey ["P#"] "P"),
141+ ("SP_pkey", simplePKey ["S#", "P#"] "SP")
142+ ]
143+ simplePKey attrNames relvarName = inclusionDependencyForKey (AttributeNames $ S.fromList attrNames) (RelationVariable relvarName)
137144
138145suppliersRel :: Relation
139146suppliersRel = case mkRelationFromList attrs atomMatrix of
@@ -274,17 +281,20 @@ evalContextExpr (AddInclusionDependency newDepName newDep) = do
274281 let currDeps = inclusionDependencies currContext
275282 newDeps = M.insert newDepName newDep currDeps
276283 if M.member newDepName currDeps then
277− return $ Just (InclusionDepedencyNameInUseError newDepName)
284+ return $ Just (InclusionDependencyNameInUseError newDepName)
278285 else do
279286 put $ DatabaseContext newDeps (relationVariables currContext) (atomFunctions currContext)
280287 return Nothing
281−
288+
282289evalContextExpr (RemoveInclusionDependency depName) = do
283290 currContext <- get
284291 let currDeps = inclusionDependencies currContext
285292 newDeps = M.delete depName currDeps
286− put $ DatabaseContext newDeps (relationVariables currContext) (atomFunctions currContext)
287− return Nothing
293+ if M.notMember depName currDeps then
294+ return $ Just (InclusionDependencyNameNotInUseError depName)
295+ else do
296+ put $ DatabaseContext newDeps (relationVariables currContext) (atomFunctions currContext)
297+ return Nothing
288298
289299evalContextExpr (MultipleExpr exprs) = do
290300 --the multiple expressions must pass the same context around- not the old unmodified context