algebra-sql-0.1.0.1: src/Database/Algebra/SQL/File.hs
-- | Provides file tools used for outputting and converting JSON plan
-- files.
module Database.Algebra.SQL.File where
import Control.Monad.Error.Class
import qualified Data.IntMap as IntMap
import System.FilePath
import System.Process
import qualified Database.Algebra.Dag as D
import Database.Algebra.Table.Render.Dot
import qualified Database.Algebra.Table.Render.JSON as JSON
import qualified Database.Algebra.SQL.Tile as T
readDagFromFile :: FilePath -> IO (Either String T.TADag)
readDagFromFile filename = case takeExtension filename of
".plan" -> do
-- FIXME This function is a mess, does an unchecked fromJust, which
-- easily fails.
(_, rootNodes, nodeMap) <- JSON.planFromFile filename
return $ return $ D.mkDag nodeMap rootNodes
format ->
return $ throwError $ "unkown file format '" ++ format ++ "'"
outputDot :: FilePath -> T.TADag -> IO ()
outputDot filename dag = do
writeFile filename result
putStrLn $ "Writing dot file to '" ++ filename ++ "'"
where result = renderTADot IntMap.empty (D.rootNodes dag) (D.nodeMap dag)
renderDot :: FilePath -> FilePath -> IO ()
renderDot dotPath pdfPath = do
putStrLn $ "Rendering dot file to '" ++ pdfPath ++ "'"
_ <- rawSystem "dot" ["-Tpdf", "-o", pdfPath, dotPath]
return ()