Skip to content

Commit eb76fde

Browse files
authored
Merge pull request #96 from harporoeder/master
Add unsafeSqlCastAs
2 parents b91e0ad + 2e16c72 commit eb76fde

File tree

1 file changed

+10
-0
lines changed
  • src/Database/Esqueleto/Internal

1 file changed

+10
-0
lines changed

src/Database/Esqueleto/Internal/Sql.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ module Database.Esqueleto.Internal.Sql
3333
, unsafeSqlBinOp
3434
, unsafeSqlBinOpComposite
3535
, unsafeSqlValue
36+
, unsafeSqlCastAs
3637
, unsafeSqlFunction
3738
, unsafeSqlExtractSubField
3839
, UnsafeSqlFunctionArgument
@@ -101,6 +102,7 @@ data CompositeKeyError =
101102
| FoldHelpError
102103
| SqlCaseError
103104
| SqlBinOpError
105+
| SqlCastAsError
104106
| MakeOnClauseError
105107
| MakeExcError
106108
| MakeSetError
@@ -765,6 +767,14 @@ unsafeSqlFunctionParens name arg =
765767
uncommas' $ map (\(ERaw p f) -> first (parensM p) (f info)) $ toArgList arg
766768
in (name <> parens argsTLB, argsVals)
767769

770+
-- | (Internal) An explicit SQL type cast using CAST(value as type).
771+
-- See 'unsafeSqlBinOp' for warnings.
772+
unsafeSqlCastAs :: T.Text -> SqlExpr (Value a) -> SqlExpr (Value b)
773+
unsafeSqlCastAs t (ERaw p f) =
774+
ERaw Never $ \info ->
775+
let (b, v) = f info
776+
in ("CAST" <> parens ( parensM p b <> " AS " <> TLB.fromText t), v )
777+
unsafeSqlCastAs _ (ECompositeKey _) = throw (CompositeKeyErr SqlCastAsError)
768778

769779
class UnsafeSqlFunctionArgument a where
770780
toArgList :: a -> [SqlExpr (Value ())]

0 commit comments

Comments
 (0)