hssqlppp-0.6.0: tests/Database/HsSqlPpp/Tests/TestTypes.lhs
> module Database.HsSqlPpp.Tests.TestTypes (
> defaultParseFlags
> ,defaultTypeCheckFlags
> ,Dialect(..)
> ,ParseFlags(..)
> ,TypeCheckFlags(..)
> ,Item(..)
> --,defaultTemplate1Catalog
> --,ansiCatalog
> ,emptyEnvironment
> ,makeCatalog
> ,hackCanonicalizeEnvTypeNames
> ) where
> import Database.HsSqlPpp.Syntax
> import Database.HsSqlPpp.Lex (Token)
> --import Database.HsSqlPpp.Annotation
> --import qualified Data.Text as T
> --import Data.Text (Text)
> import qualified Data.Text.Lazy as L
> --import Control.Arrow
> --import Test.HUnit
> --import Test.Framework.Providers.HUnit
> --import Test.Framework
> --import Data.List
> import Data.Generics.Uniplate.Data
> import Database.HsSqlPpp.Parse
> import Database.HsSqlPpp.TypeCheck
> --import Database.HsSqlPpp.Annotation
> import Database.HsSqlPpp.Catalog
> import Database.HsSqlPpp.Dialect
> --import Database.HsSqlPpp.Ast hiding (App)
> import Database.HsSqlPpp.Types
> --import Database.HsSqlPpp.Pretty
> -- import Database.HsSqlPpp.Utility
> --import Database.HsSqlPpp.Internals.TypeChecking.Environment
> --import Text.Show.Pretty
> --import Debug.Trace
> --import Database.HsSqlPpp.Tests.TestUtils
> --import Control.Monad
> --import Database.HsSqlPpp.Utils.GroomUtils
> --import qualified Data.Text.Lazy as L
> import Database.HsSqlPpp.Internals.TypeChecking.TypeConversion.TypeConversion2
> import Data.Data
> data Item = Group String [Item]
> | ParseScalarExpr ParseFlags L.Text ScalarExpr
> | ParseStmts ParseFlags L.Text [Statement]
> | ParseProcSql ParseFlags L.Text [Statement]
> | ParseQueryExpr ParseFlags L.Text QueryExpr
> | Lex Dialect L.Text [Token]
> | TCScalExpr Catalog Environment TypeCheckFlags
> L.Text (Either [TypeError] Type)
> | TCQueryExpr Catalog TypeCheckFlags
> L.Text (Either [TypeError] Type)
> | TCStatements Catalog TypeCheckFlags
> L.Text (Maybe [TypeError])
> | InsertQueryExpr [CatalogUpdate] L.Text (Either [TypeError] Type)
> | RewriteQueryExpr TypeCheckFlags [CatalogUpdate] L.Text L.Text
> | ImpCastsScalar TypeCheckFlags L.Text L.Text
> -- todo: combine this with tcscalexpr
> | ScalarExprExtra Dialect Catalog Environment L.Text (Either [TypeError] TypeExtra)
> | MatchApp Dialect Catalog [NameComponent]
> [(TypeExtra, Maybe LitArg)]
> (Either [TypeError] ([TypeExtra],TypeExtra))
> | Custom String (IO ())
> makeCatalog :: Dialect -> [CatalogUpdate] -> Catalog
> makeCatalog d cus =
> either (error . show) id
> $ updateCatalog (hackCanonicalizeEnvTypeNames d cus) $ diDefaultCatalog d
This takes a type name and canonicalizes it, first by trying to see if
it is the ansi type name and the dialect uses a different name for
that type, and then checks to see if this is a built in alias of a
type for that dialect and gets the canonical name instead.
> hackCanonicalizeEnvTypeNames :: Data a => Dialect -> a -> a
> hackCanonicalizeEnvTypeNames d = transformBi $ \a -> case a of
> s -> maybe (canonicalizeTypeName d s) id $ ansiTypeNameToDialect d s