on request_timeout help sign in
28 lines 1.1 kB history raw
1module TutorialD.Interpreter.Export.CSV where
2import ProjectM36.Relation.Show.CSV
3import TutorialD.Interpreter.Export.Base
4import TutorialD.Interpreter.RelationalExpr
5import TutorialD.Interpreter.Base
6import ProjectM36.Base
7import ProjectM36.Error
8import Text.Megaparsec.Text
9import qualified Data.ByteString.Lazy as BS
10import Control.Exception (try)
11import qualified Data.Text as T
13exportCSVP :: Parser RelVarDataExportOperator
14exportCSVP = do
15 reserved ":exportcsv"
16 exportExpr <- relExprP
17 path <- quotedString
18 return $ RelVarDataExportOperator exportExpr (T.unpack path) exportRelationCSV
20exportRelationCSV :: RelVarDataExportOperator -> Relation -> IO (Maybe RelationalError)
21exportRelationCSV (RelVarDataExportOperator _ pathOut _) rel = do
22 case relationAsCSV rel of
23 Left err -> return $ Just err
24 Right csvData -> do
25 writeResult <- try (BS.writeFile pathOut csvData) :: IO (Either IOError ())
26 case writeResult of
27 Left err -> return $ Just (ExportError $ T.pack (show err))
28 Right _ -> return Nothing