@@ -10,6 +10,12 @@ import System.FilePath
10import System.Directory
10import System.Directory
11import qualified Data.Text as T
11import qualified Data.Text as T
12import Control.Monad
12import Control.Monad
13+import ProjectM36.RelationalExpression (basicAtomFunctions)
15+getDirectoryNames :: FilePath -> IO [FilePath]
16+getDirectoryNames path = do
17+ subpaths <- getDirectoryContents path
18+ return $ filter (\n -> n `notElem` ["..", "."]) subpaths
14tempTransactionDir :: FilePath -> U.UUID -> FilePath
20tempTransactionDir :: FilePath -> U.UUID -> FilePath
15tempTransactionDir dbdir transUUID = dbdir </> "." ++ U.toString transUUID
21tempTransactionDir dbdir transUUID = dbdir </> "." ++ U.toString transUUID
@@ -18,16 +24,16 @@ transactionDir :: FilePath -> U.UUID -> FilePath
18transactionDir dbdir transUUID = dbdir </> U.toString transUUID
24transactionDir dbdir transUUID = dbdir </> U.toString transUUID
20transactionInfoPath :: FilePath -> FilePath
26transactionInfoPath :: FilePath -> FilePath
21−transactionInfoPath = (</>) "info"
27+transactionInfoPath transdir = transdir </> "info"
23relvarsDir :: FilePath -> FilePath
29relvarsDir :: FilePath -> FilePath
24−relvarsDir = (</>) "relvars"
30+relvarsDir transdir = transdir </> "relvars"
26incDepsDir :: FilePath -> FilePath
32incDepsDir :: FilePath -> FilePath
27−incDepsDir = (</>) "incdeps"
33+incDepsDir transdir = transdir </> "incdeps"
29atomFuncsDir :: FilePath -> FilePath
35atomFuncsDir :: FilePath -> FilePath
30−atomFuncsDir = (</>) "atomfuncs"
36+atomFuncsDir transdir = transdir </> "atomfuncs"
32readTransaction :: FilePath -> U.UUID -> IO (Either PersistenceError Transaction)
38readTransaction :: FilePath -> U.UUID -> IO (Either PersistenceError Transaction)
33readTransaction dbdir transUUID = do
39readTransaction dbdir transUUID = do
@@ -39,7 +45,8 @@ readTransaction dbdir transUUID = do
39 relvars <- readRelVars transDir
45 relvars <- readRelVars transDir
40 transInfo <- liftM B.decode $ BS.readFile (transactionInfoPath transDir)
46 transInfo <- liftM B.decode $ BS.readFile (transactionInfoPath transDir)
41 incDeps <- readIncDeps transDir
47 incDeps <- readIncDeps transDir
42− atomFuncs <- readAtomFuncs transDir
48+ --atomFuncs <- readAtomFuncs transDir -- not yet supported since there is no bytecode to serialize yet
49+ let atomFuncs = basicAtomFunctions
43 let newContext = DatabaseContext { inclusionDependencies = incDeps,
50 let newContext = DatabaseContext { inclusionDependencies = incDeps,
44 relationVariables = relvars,
51 relationVariables = relvars,
45 atomFunctions = atomFuncs }
52 atomFunctions = atomFuncs }
@@ -75,19 +82,19 @@ writeRelVars transDir relvars = mapM_ (writeRelVar transDir) $ M.toList relvars
75readRelVars :: FilePath -> IO (M.Map RelVarName Relation)
82readRelVars :: FilePath -> IO (M.Map RelVarName Relation)
76readRelVars transDir = do
83readRelVars transDir = do
77 let relvarsPath = relvarsDir transDir
84 let relvarsPath = relvarsDir transDir
78− relvarNames <- getDirectoryContents relvarsPath
85+ relvarNames <- getDirectoryNames relvarsPath
79 relvars <- mapM (\name -> do
86 relvars <- mapM (\name -> do
80 rel <- liftM B.decode $ BS.readFile (relvarsPath </> name)
87 rel <- liftM B.decode $ BS.readFile (relvarsPath </> name)
81 return (T.pack name, rel)) relvarNames
88 return (T.pack name, rel)) relvarNames
82 return $ M.fromList relvars
89 return $ M.fromList relvars
84writeAtomFuncs :: FilePath -> AtomFunctions -> IO ()
91writeAtomFuncs :: FilePath -> AtomFunctions -> IO ()
85−writeAtomFuncs transDir funcs = mapM_ (writeAtomFunc (atomFuncsDir transDir)) $ HS.toList funcs
92+writeAtomFuncs transDir funcs = mapM_ (writeAtomFunc transDir) $ HS.toList funcs
87--all the atom functions are in one file (???)
94--all the atom functions are in one file (???)
88readAtomFuncs :: FilePath -> IO (AtomFunctions)
95readAtomFuncs :: FilePath -> IO (AtomFunctions)
89readAtomFuncs transDir = do
96readAtomFuncs transDir = do
90− funcNames <- getDirectoryContents (incDepsDir transDir)
97+ funcNames <- getDirectoryNames (atomFuncsDir transDir)
91 funcs <- mapM (readAtomFunc transDir) (map T.pack funcNames)
98 funcs <- mapM (readAtomFunc transDir) (map T.pack funcNames)
92 return $ HS.fromList funcs
99 return $ HS.fromList funcs
@@ -119,6 +126,6 @@ readIncDep transDir incdepName = do
119readIncDeps :: FilePath -> IO (M.Map IncDepName InclusionDependency)
126readIncDeps :: FilePath -> IO (M.Map IncDepName InclusionDependency)
120readIncDeps transDir = do
127readIncDeps transDir = do
121 let incDepsPath = incDepsDir transDir
128 let incDepsPath = incDepsDir transDir
122− incDepNames <- getDirectoryContents incDepsPath
129+ incDepNames <- getDirectoryNames incDepsPath
123 incDeps <- mapM (readIncDep transDir) (map T.pack incDepNames)
130 incDeps <- mapM (readIncDep transDir) (map T.pack incDepNames)
124 return $ M.fromList incDeps
131 return $ M.fromList incDeps