    -----------------------------------------------------------
    -- |
    -- Module      :  Database.HaskellDB.Sql.SQLite
    -- Copyright   :  Bjorn Bringert 2006
    -- License     :  BSD-style
    --
    -- Maintainer  :  haskelldb-users@lists.sourceforge.net
    -- Stability   :  experimental
    -- Portability :  non-portable
    --
    -- SQL generation for SQLite.
    -- See <http://www.sqlite.org/lang.html> for documentation.
    --
    -----------------------------------------------------------
    module Database.HaskellDB.Sql.SQLite (generator) where

    import Database.HaskellDB.Sql.Default
    import Database.HaskellDB.Sql.Generate
    import Database.HaskellDB.PrimQuery

    generator :: SqlGenerator
    generator = (mkSqlGenerator generator)
                {
                 sqlLiteral = literal
                }

    literal :: Literal -> String
    literal (StringLit s)   = quote s
    literal DefaultLit      = "NULL"
    literal (BoolLit True)  = "1"
    literal (BoolLit False) = "0"
    literal l = defaultSqlLiteral generator l

    {-
    From http://www.sqlite.org/lang_expr.html

    "A string constant is formed by enclosing the string in single quotes (').
    A single quote within the string can be encoded by putting two single quotes
    in a row - as in Pascal. C-style escapes using the backslash character
    are not supported because they are not standard SQL."
    -}
    quote :: String -> String
    quote s = "'" ++ concatMap escape s ++ "'"

    escape :: Char -> String
    escape '\'' = "''"
    escape c = [c]