packages feed

typedquery-0.1.0.0: src/Database/TypedQuery/SQL.hs

module Database.TypedQuery.SQL where

import Text.Parsec
import Text.Parsec.Token
import Text.Parsec.Language
import Prelude

sql :: TokenParser st
sql = makeTokenParser sqlDef

sqlExpr :: TokenParser st
sqlExpr = makeTokenParser sqlDefExpr

sqlExpr2 :: TokenParser st
sqlExpr2 = makeTokenParser sqlDefExpr2

sqlStyle :: LanguageDef st
sqlStyle = emptyDef
                { commentStart   = "/*"
                , commentEnd     = "*/"
                , commentLine    = "-- #"
                , nestedComments = True
                , identStart     = letter
                , identLetter    = alphaNum <|> oneOf "_.[]"
                , opStart        = opLetter sqlStyle
                , opLetter       = oneOf "$%&*+./<=>?@\\^|-~()"
                , reservedOpNames= []
                , reservedNames  = []
                , caseSensitive  = False
                }

sqlStyleCS :: LanguageDef st
sqlStyleCS = sqlStyle {
       caseSensitive  = True
       }

sqlDefExpr :: LanguageDef st
sqlDefExpr = sqlStyleCS
       { identLetter    = alphaNum <|> oneOf "_.[]"
       , reservedNames  = [ "as", "AS", "As", "aS"
                   , "from", "FROM", "fROM", "From"
                   ]
}

sqlDefExpr2 :: LanguageDef st
sqlDefExpr2 = sqlStyleCS
       { identLetter    = alphaNum <|> oneOf "_.[]"
       , reservedNames  = [ "as", "AS", "As", "aS"
                          , "from", "FROM", "fROM", "From"
                          ]
       }

sqlDef :: LanguageDef st
sqlDef = sqlStyle
                { reservedOpNames= ["=","\\","|","<",">","+","-","*","@",">=","<="]
                , reservedNames  = ["AS", "LEFT", "FROM", "SELECT", "INSERT", "DISTINCT", "UNIQUE"
                                   , "CONCAT", "CONCAT_WS", "NOW", "COUNT", "CASE", "WHEN", "THEN", "IF", "ELSE", "NULL"
                                   , "CONVERT_TZ","GROUP_CONCAT", "SUM", "JOIN", "END", "DATE", "TIME_TO_SEC", "TIMEDIFF"
                                   , "AVG", "MIN", "MAX", "GROUP", "BY", "LIMIT", "ORDER"
                                   , "IFNULL", "IN"]
                }