module Database.HaskellDB.Sql (
SqlTable,
SqlColumn,
SqlOrder(..),
SqlType(..),
SqlSelect(..),
SqlUpdate(..),
SqlDelete(..),
SqlInsert(..),
SqlCreate(..),
SqlDrop(..),
SqlExpr(..),
newSelect
) where
type SqlTable = String
type SqlColumn = String
data SqlOrder = SqlAsc | SqlDesc
deriving Show
data SqlType = SqlType String
| SqlType1 String Int
| SqlType2 String Int Int
deriving Show
data SqlSelect = SqlSelect {
options :: [String],
attrs :: [(SqlColumn,SqlExpr)],
tables :: [(SqlTable,SqlSelect)],
criteria :: [SqlExpr],
groupby :: [(SqlColumn,SqlExpr)],
orderby :: [(SqlExpr,SqlOrder)],
extra :: [String]
}
| SqlBin String SqlSelect SqlSelect
| SqlTable SqlTable
| SqlEmpty
deriving Show
data SqlExpr = ColumnSqlExpr SqlColumn
| BinSqlExpr String SqlExpr SqlExpr
| PrefixSqlExpr String SqlExpr
| PostfixSqlExpr String SqlExpr
| FunSqlExpr String [SqlExpr]
| ConstSqlExpr String
| CaseSqlExpr [(SqlExpr,SqlExpr)] SqlExpr
| ListSqlExpr [SqlExpr]
| ExistsSqlExpr SqlSelect
deriving Show
data SqlUpdate = SqlUpdate SqlTable [(SqlColumn,SqlExpr)] [SqlExpr]
data SqlDelete = SqlDelete SqlTable [SqlExpr]
data SqlInsert = SqlInsert SqlTable [SqlColumn] [SqlExpr]
| SqlInsertQuery SqlTable [SqlColumn] SqlSelect
data SqlCreate = SqlCreateDB String
| SqlCreateTable SqlTable [(SqlColumn,(SqlType,Bool))]
data SqlDrop = SqlDropDB String
| SqlDropTable SqlTable
newSelect :: SqlSelect
newSelect = SqlSelect {
options = [],
attrs = [],
tables = [],
criteria = [],
groupby = [],
orderby = [],
extra = []
}