module DeleteParser (
DeleteExpr(..),
deleteExpr,
makeDelete, evaluateDelete ) where
import Text.Parsec.String (Parser)
import Text.ParserCombinators.Parsec.Char
import Text.ParserCombinators.Parsec.Combinator
import Text.Parsec (parse , ParseError , try)
import Control.Applicative ((<*),(<$>), (*>), (<|>),(<$),(<*>))
import Control.Monad
import qualified Text.ParserCombinators.Parsec.Expr as E
import Data.Maybe ()
import Funcs
import ExpressionParser
import Database
data DeleteExpr = Delete
{ dTname :: ValueExpr
, dWhere :: ValueExpr
} deriving(Eq,Show)
makeDelete :: DeleteExpr
makeDelete = Delete {dTname = Iden ""
,dWhere = BoolLit False
}
tableName :: Parser ValueExpr
tableName = keyword_ "delete" *> keyword_ "from" *> iden []
whereClause :: Parser ValueExpr
whereClause = keyword_ "where" *> valueExpr []
deleteExpr :: Parser DeleteExpr
deleteExpr = Delete <$> tableName <*> whereClause
eval :: ValueExpr -> String
eval (Iden s) = s
evaluateDelete:: Either ParseError DeleteExpr -> Maybe Database -> Maybe Database
evaluateDelete (Right expr) db = delete (Right (dWhere expr)) db (eval (dTname expr))