haskelldb-0.12: src/Database/HaskellDB/Sql.hs
-----------------------------------------------------------
-- |
-- Module : SQL
-- Copyright : Daan Leijen (c) 1999, daan@cs.uu.nl
-- HWT Group (c) 2003, haskelldb-users@lists.sourceforge.net
-- License : BSD-style
--
-- Maintainer : haskelldb-users@lists.sourceforge.net
-- Stability : experimental
-- Portability : non-portable
--
-- A data type for SQL.
--
-----------------------------------------------------------
module Database.HaskellDB.Sql (
SqlTable,
SqlColumn,
SqlOrder(..),
SqlType(..),
SqlSelect(..),
SqlUpdate(..),
SqlDelete(..),
SqlInsert(..),
SqlCreate(..),
SqlDrop(..),
SqlExpr(..),
newSelect
) where
-----------------------------------------------------------
-- * SQL data type
-----------------------------------------------------------
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 type for SQL SELECT statements.
data SqlSelect = SqlSelect {
options :: [String], -- ^ DISTINCT, ALL etc.
attrs :: [(SqlColumn,SqlExpr)], -- ^ result
tables :: [(SqlTable,SqlSelect)], -- ^ FROM
criteria :: [SqlExpr], -- ^ WHERE
groupby :: [(SqlColumn,SqlExpr)], -- ^ GROUP BY
orderby :: [(SqlExpr,SqlOrder)], -- ^ ORDER BY
extra :: [String] -- ^ TOP n, etc.
}
| SqlBin String SqlSelect SqlSelect -- ^ Binary relational operator
| SqlTable SqlTable -- ^ Select a whole table.
| SqlEmpty -- ^ Empty select.
deriving Show
-- | Expressions in SQL statements.
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 type for SQL UPDATE statements.
data SqlUpdate = SqlUpdate SqlTable [(SqlColumn,SqlExpr)] [SqlExpr]
-- | Data type for SQL DELETE statements.
data SqlDelete = SqlDelete SqlTable [SqlExpr]
-- | Data type for SQL INSERT statements.
data SqlInsert = SqlInsert SqlTable [SqlColumn] [SqlExpr]
| SqlInsertQuery SqlTable [SqlColumn] SqlSelect
-- | Data type for SQL CREATE statements.
data SqlCreate = SqlCreateDB String -- ^ Create a database
| SqlCreateTable SqlTable [(SqlColumn,(SqlType,Bool))] -- ^ Create a table.
-- | Data type representing the SQL DROP statement.
data SqlDrop = SqlDropDB String -- ^ Delete a database
| SqlDropTable SqlTable -- ^ Delete a table named SqlTable
newSelect :: SqlSelect
newSelect = SqlSelect {
options = [],
attrs = [],
tables = [],
criteria = [],
groupby = [],
orderby = [],
extra = []
}