> {-# LANGUAGE OverloadedStrings #-}
> module Database.HsSqlPpp.Dialects.Ansi (ansiDialect) where
> import Database.HsSqlPpp.Internals.Dialect
> import Database.HsSqlPpp.Internals.Catalog.CatalogBuilder
> import Database.HsSqlPpp.Internals.Catalog.CatalogTypes
> import Database.HsSqlPpp.Dialects.BaseCatalog
> ansiDialect :: Dialect
> ansiDialect = Dialect
> {diName = "ansi"
> ,diSyntaxFlavour = Ansi
> ,diCanonicalTypeNames = [("char",["character"])
> ,("varchar",["char varying","character varying"])
> ,("clob",["character large object","char large object"])
> ,("nchar",["national character","national char"])
> ,("nvarchar",["national character varying"
> ,"national char varying"
> ,"nchar varying"])
> ,("nclob",["national character large object"
> ,"nchar large object"])
>
> ,("varbinary",["binary varying"])
> ,("blob",["binary large object"])
> ,("int",["integer"])
> ,("float",["double precision"])
> ]
> ,diTextTypes = ["char","varchar","clob","nchar","nvarchar","nclob"]
> ,diDatetimeTypes = ["date","time","timestamp","interval"]
> ,diNumberTypes = ["smallint","int","bigint","decimal","numeric","float","real"]
> ,namesForAnsiTypes = [("char","char")
> ,("varchar","varchar")
> ,("bigint","bigint")
> ,("boolean","boolean")
> ,("numeric","numeric")
> ,("int","int")
> ,("date","date")
> ,("time","time")
> ,("timestamp","timestamp")
> ]
> ,diDefaultCatalog = ansiCatalog
> }
> ansiCatalog :: Catalog
> ansiCatalog =
> (\l -> case l of
> Left x -> error $ show x
> Right e -> e) $
> flip updateCatalog emptyCatalog (
>
> [CatCreateScalarType "char"
> ,CatCreateScalarType "varchar"
> ,CatCreateScalarType "clob"
> ,CatCreateScalarType "nchar"
> ,CatCreateScalarType "nvarchar"
> ,CatCreateScalarType "nclob"
> ,CatCreateScalarType "binary"
> ,CatCreateScalarType "varbinary"
> ,CatCreateScalarType "blob"
> ,CatCreateScalarType "numeric"
> ,CatCreateScalarType "decimal"
> ,CatCreateScalarType "smallint"
> ,CatCreateScalarType "int"
> ,CatCreateScalarType "bigint"
> ,CatCreateScalarType "float"
> ,CatCreateScalarType "real"
> ,CatCreateScalarType "boolean"
> ,CatCreateScalarType "date"
> ,CatCreateScalarType "time"
> ,CatCreateScalarType "timestamp"
> ,CatCreateScalarType "interval"
> ]
what to do about these?
position
char_length
extract
substring
convert
translate
trim
overlay
nromalize
between
in
like
collate
> ++ [CatCreateFunction charLen [t] False "int"
> | t <- ["char","varchar","clob"
> ,"nchar","nvarchar","nclob"]
> , charLen <- ["char_length", "character_length", "octet_length"] ]
> ++ concat
>
> [ [CatCreatePrefixOp "+" n n
> ,CatCreatePrefixOp "-" n n]
> | n <- ["numeric","decimal","smallint","int","bigint"
> ,"float","real","interval"] ]
>
> ++ concat
> [ [ CatCreateBinaryOp "+" n n n
> ,CatCreateBinaryOp "-" n n n
> ,CatCreateBinaryOp "*" n n n
> ,CatCreateBinaryOp "/" n n n]
> | n <- ["numeric","decimal","smallint","int","bigint"
> ,"float","real"] ]
>
>
> ++ [CatCreateBinaryOp "||" s s s
> | s <- ["char","varchar","clob"
> ,"nchar","nvarchar", "nclob"
> ,"binary","varbinary","blob" ] ]
>
>
>
>
> ++ [CatCreateBinaryOp op t t "boolean"
> | op <- ["=","<>","<",">","<=",">="]
> , t <- ["char","varchar","clob"
> ,"nchar","nvarchar","nclob"
> ,"binary","varbinary","blob"
> ,"numeric","decimal"
> ,"smallint","int","bigint"
> ,"float","real"
> ,"boolean"
> ,"date","time","timestamp","interval"
> ] ]
>
> ++ [CatCreateFunction "abs" [t] False t
> | t <- ["numeric", "decimal", "smallint", "int", "bigint", "float","real"]]
> ++ [CatCreateFunction "mod" [t,t] False t
> | t <- ["numeric", "smallint", "int", "bigint"]]
> ++ [CatCreateFunction fn [t] False t
> | t <- ["float","real"]
> , fn <- ["ln","exp","pow","sqrt"] ]
> ++ [CatCreateFunction fn [t] False t
> | t <- ["float","real","numeric"]
> , fn <- ["floor","ceil","ceiling"] ]
> ++ [CatCreateFunction "width_bucket" [t,t,t,"numeric"] False "numeric"
> | t <- ["char","varchar","clob"
> ,"nchar","nvarchar","nclob"
> ,"binary","varbinary","blob"
> ,"numeric","decimal"
> ,"smallint","int","bigint"
> ,"float","real"
> ,"boolean"
> ,"date","time","timestamp","interval"
> ] ]
> ++ [CatCreateFunction fn [t] False t
> | t <- ["char","varchar","clob"
> ,"nchar","nvarchar","nclob"]
> , fn <- ["lower","upper"] ]
> ++ concat
> [ [ CatCreateBinaryOp "+" dt "interval" dt
> ,CatCreateBinaryOp "+" "interval" dt dt
> ,CatCreateBinaryOp "-" dt "interval" dt]
> | dt <- ["date","time","timestamp"]]
> ++ [CatCreateBinaryOp "+" "interval" "interval" "interval"
> ,CatCreateBinaryOp "-" "interval" "interval" "interval"]
quick and dirty to get tpch working
> ++
> [ CatCreateAggregate "sum" [ "numeric" ] "numeric"
> , CatCreateAggregate "sum" [ "smallint" ] "smallint"
>
> , CatCreateAggregate "sum" [ "int" ] "bigint"
> , CatCreateAggregate "sum" [ "bigint" ] "bigint"
> , CatCreateAggregate "avg" [ "numeric" ] "numeric"
> , CatCreateAggregate "max" [ "numeric" ] "numeric"
> , CatCreateAggregate "min" [ "numeric" ] "numeric"
> , CatCreateAggregate "count" [ "any" ] "bigint"]
> ++ [
>
>
>
> CatCreateCast "boolean" "int" ExplicitCastContext,
> CatCreateCast "boolean" "varchar" AssignmentCastContext,
> CatCreateCast "char" "int" ExplicitCastContext,
> CatCreateCast "char" "varchar" AssignmentCastContext,
> CatCreateCast "date" "timestamp" ImplicitCastContext,
> CatCreateCast "real" "float" ImplicitCastContext,
> CatCreateCast "real" "smallint" AssignmentCastContext,
> CatCreateCast "real" "int" AssignmentCastContext,
> CatCreateCast "real" "bigint" AssignmentCastContext,
> CatCreateCast "real" "numeric" AssignmentCastContext,
> CatCreateCast "float" "real" AssignmentCastContext,
> CatCreateCast "float" "smallint" AssignmentCastContext,
> CatCreateCast "float" "int" AssignmentCastContext,
> CatCreateCast "float" "bigint" AssignmentCastContext,
> CatCreateCast "float" "numeric" AssignmentCastContext,
> CatCreateCast "smallint" "real" ImplicitCastContext,
> CatCreateCast "smallint" "float" ImplicitCastContext,
> CatCreateCast "smallint" "int" ImplicitCastContext,
> CatCreateCast "smallint" "bigint" ImplicitCastContext,
> CatCreateCast "smallint" "numeric" ImplicitCastContext,
> CatCreateCast "int" "boolean" ExplicitCastContext,
> CatCreateCast "int" "char" ExplicitCastContext,
> CatCreateCast "int" "real" ImplicitCastContext,
> CatCreateCast "int" "float" ImplicitCastContext,
> CatCreateCast "int" "smallint" AssignmentCastContext,
> CatCreateCast "int" "bigint" ImplicitCastContext,
> CatCreateCast "int" "numeric" ImplicitCastContext,
> CatCreateCast "bigint" "real" ImplicitCastContext,
> CatCreateCast "bigint" "float" ImplicitCastContext,
> CatCreateCast "bigint" "smallint" AssignmentCastContext,
> CatCreateCast "bigint" "int" AssignmentCastContext,
> CatCreateCast "bigint" "numeric" ImplicitCastContext,
> CatCreateCast "interval" "interval" ImplicitCastContext,
> CatCreateCast "interval" "time" AssignmentCastContext,
> CatCreateCast "numeric" "real" ImplicitCastContext,
> CatCreateCast "numeric" "float" ImplicitCastContext,
> CatCreateCast "numeric" "smallint" AssignmentCastContext,
> CatCreateCast "numeric" "int" AssignmentCastContext,
> CatCreateCast "numeric" "bigint" AssignmentCastContext,
> CatCreateCast "numeric" "numeric" ImplicitCastContext,
> CatCreateCast "time" "interval" ImplicitCastContext,
> CatCreateCast "time" "time" ImplicitCastContext,
> CatCreateCast "timestamp" "date" AssignmentCastContext,
> CatCreateCast "timestamp" "time" AssignmentCastContext,
> CatCreateCast "timestamp" "timestamp" ImplicitCastContext,
> CatCreateCast "varchar" "char" AssignmentCastContext,
> CatCreateCast "varchar" "varchar" ImplicitCastContext,
> CatCreateTypeCategoryEntry "boolean" ("B", True),
> CatCreateTypeCategoryEntry "char" ("S", False),
> CatCreateTypeCategoryEntry "date" ("D", False),
> CatCreateTypeCategoryEntry "real" ("N", False),
> CatCreateTypeCategoryEntry "float" ("N", True),
> CatCreateTypeCategoryEntry "smallint" ("N", False),
> CatCreateTypeCategoryEntry "int" ("N", False),
> CatCreateTypeCategoryEntry "bigint" ("N", False),
> CatCreateTypeCategoryEntry "interval" ("T", True),
> CatCreateTypeCategoryEntry "numeric" ("N", False),
> CatCreateTypeCategoryEntry "time" ("D", False),
> CatCreateTypeCategoryEntry "timestamp" ("D", False),
> CatCreateTypeCategoryEntry "varchar" ("S", False)]
> ++ baseCatalog "boolean" "int" ["char","varchar","clob","nchar","nvarchar","nclob"]
> )