> {-# LANGUAGE OverloadedStrings #-} > module Database.HsSqlPpp.Tests.TypeChecking.CaseExpressions > (caseExpressions) where > > import Database.HsSqlPpp.Tests.TestTypes > import Database.HsSqlPpp.Internals.TypesInternal hiding (mkTypeExtra,mkTypeExtraNN) > --import Database.HsSqlPpp.Types > import Database.HsSqlPpp.Dialect > > > caseExpressions :: Item > caseExpressions = > Group "case expressions" [ > e "case\n\ > \ when true then 1\n\ > \end" $ Right typeInt > ,e "case\n\ > \ when 1=2 then 'stuff'\n\ > \ when 2=3 then 'blah'\n\ > \ else 'test'\n\ > \end" $ Right UnknownType > ,e "case\n\ > \ when 1=2 then 'stuff'\n\ > \ when 2=3 then 'blah'\n\ > \ else 'test'::text\n\ > \end" $ Right $ ScalarType "text" > ,e "case\n\ > \ when 1=2 then 'stuff'\n\ > \ when true=3 then 'blah'\n\ > \ else 'test'\n\ > \end" $ Left [NoMatchingOperator "=" [typeBool,typeInt]] > ,e "case\n\ > \ when 1=2 then true\n\ > \ when 2=3 then false\n\ > \ else 1\n\ > \end" $ Left [IncompatibleTypeSet [typeBool > ,typeBool > ,typeInt]] > ,e "case\n\ > \ when 1=2 then false\n\ > \ when 2=3 then 1\n\ > \ else true\n\ > \end" $ Left [IncompatibleTypeSet [typeBool > ,typeInt > ,typeBool]] > ,e "case 1 when 2 then 3 else 4 end" $ Right typeInt > ,e "case 1 when true then 3 else 4 end" > $ Left [IncompatibleTypeSet [ScalarType "int4" > ,ScalarType "bool"]] > ,e "case 1 when 2 then true else false end" $ Right typeBool > ,e "case 1 when 2 then 3 else false end" > $ Left [IncompatibleTypeSet [ScalarType "int4" > ,ScalarType "bool"]] > ] > where > e = TCScalExpr (diDefaultCatalog postgresDialect) emptyEnvironment > defaultTypeCheckFlags {tcfDialect = postgresDialect} > typeInt = ScalarType "int4" > typeBool = ScalarType "bool"