on request_timeout help sign in
29 lines 1.1 kB history raw
1module TutorialD.Interpreter.Import.CSV where
2import TutorialD.Interpreter.Import.Base
3import ProjectM36.Base
4import ProjectM36.Error
5import ProjectM36.Relation.Parse.CSV
6import qualified Data.ByteString.Lazy as BS
7import qualified Data.Text as T
8import Text.Megaparsec.Text
9import TutorialD.Interpreter.Base
10import Control.Exception
12importCSVRelation :: RelVarName -> Attributes -> FilePath -> IO (Either RelationalError DatabaseContextExpr)
13importCSVRelation relVarName attrs pathIn = do
14 --TODO: handle filesystem errors
15 csvData <- try (BS.readFile pathIn) :: IO (Either IOError BS.ByteString)
16 case csvData of
17 Left err -> return $ Left (ImportError $ T.pack (show err))
18 Right csvData' -> case csvAsRelation csvData' attrs of
19 Left err -> return $ Left (ParseError $ T.pack (show err))
20 Right csvRel -> return $ Right (Insert relVarName (ExistingRelation csvRel))
22importCSVP :: Parser RelVarDataImportOperator
23importCSVP = do
24 reserved ":importcsv"
25 path <- quotedString
26 spaceConsumer
27 relVarName <- identifier
28 return $ RelVarDataImportOperator relVarName (T.unpack path) importCSVRelation