content: -----------------------------------------------------------
  -- |
  -- Module      :  Database.HaskellDB.Sql.Generate
  -- 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
  -- 
  -- The type of SQL generators.
  -- 
  -----------------------------------------------------------
  module Database.HaskellDB.Sql.Generate (SqlGenerator(..)) where
  
  import Database.HaskellDB.PrimQuery
  import Database.HaskellDB.FieldType
  import Database.HaskellDB.Sql
  
  
  data SqlGenerator = SqlGenerator 
      {
       sqlQuery       :: PrimQuery -> SqlSelect,
       sqlUpdate      :: TableName -> [PrimExpr] -> Assoc -> SqlUpdate,
       sqlDelete      :: TableName -> [PrimExpr] -> SqlDelete,
       sqlInsert      :: TableName -> Assoc -> SqlInsert,
       sqlInsertQuery :: TableName -> PrimQuery -> SqlInsert,
       sqlCreateDB    :: String -> SqlCreate,
       sqlCreateTable :: TableName -> [(Attribute,FieldDesc)] -> SqlCreate,
       sqlDropDB      :: String -> SqlDrop,
       sqlDropTable   :: TableName -> SqlDrop,
  
       sqlEmpty       :: SqlSelect,
       sqlTable       :: TableName -> Scheme -> SqlSelect,
       sqlProject     :: Assoc -> SqlSelect -> SqlSelect,
       -- | Ensures non-aggregate expressions in the select are included in
       -- group by clause.
       sqlGroup       :: Assoc -> SqlSelect -> SqlSelect,
       sqlRestrict    :: PrimExpr -> SqlSelect -> SqlSelect,
       sqlBinary      :: RelOp -> SqlSelect -> SqlSelect -> SqlSelect,
       sqlSpecial     :: SpecialOp -> SqlSelect -> SqlSelect,
  
       sqlExpr        :: PrimExpr -> SqlExpr,
       sqlLiteral     :: Literal -> String,
       sqlType        :: FieldType -> SqlType,
       -- | Turn a string into a quoted string. Quote characters
       -- and any escaping are handled by this function.
       sqlQuote       :: String -> String
      }
  