packages feed

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