diff --git a/src/Database/Esqueleto/Internal/Sql.hs b/src/Database/Esqueleto/Internal/Sql.hs index 528d140..63c801c 100644 --- a/src/Database/Esqueleto/Internal/Sql.hs +++ b/src/Database/Esqueleto/Internal/Sql.hs @@ -33,6 +33,7 @@ module Database.Esqueleto.Internal.Sql , unsafeSqlBinOp , unsafeSqlBinOpComposite , unsafeSqlValue + , unsafeSqlCastAs , unsafeSqlFunction , unsafeSqlExtractSubField , UnsafeSqlFunctionArgument @@ -766,6 +767,13 @@ unsafeSqlFunctionParens name arg = in (name <> parens argsTLB, argsVals) +-- | explicit cast using CAST(value as type) +unsafeSqlCastAs :: T.Text -> SqlExpr (Value a) -> SqlExpr (Value b) +unsafeSqlCastAs t (ERaw p f) = + ERaw Never $ \info -> + let (b, v) = f info + in ("CAST" <> parens ( parensM p b <> " AS " <> TLB.fromText t), v ) + class UnsafeSqlFunctionArgument a where toArgList :: a -> [SqlExpr (Value ())] instance (a ~ Value b) => UnsafeSqlFunctionArgument (SqlExpr a) where