on 18f736a help sign in
29 lines 1.2 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 hiding (quotedString)
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 -> TypeConstructorMapping -> Attributes -> FilePath -> IO (Either RelationalError DatabaseContextExpr)
13importCSVRelation relVarName tConsMap 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 attrs tConsMap csvData' 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