Merge pull request #96 from harporoeder/master

Add unsafeSqlCastAs
This commit is contained in:
Chris Allen 2018-07-15 12:05:31 -05:00 committed by GitHub
commit eb76fdef92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -33,6 +33,7 @@ module Database.Esqueleto.Internal.Sql
, unsafeSqlBinOp
, unsafeSqlBinOpComposite
, unsafeSqlValue
, unsafeSqlCastAs
, unsafeSqlFunction
, unsafeSqlExtractSubField
, UnsafeSqlFunctionArgument
@ -101,6 +102,7 @@ data CompositeKeyError =
| FoldHelpError
| SqlCaseError
| SqlBinOpError
| SqlCastAsError
| MakeOnClauseError
| MakeExcError
| MakeSetError
@ -765,6 +767,14 @@ unsafeSqlFunctionParens name arg =
uncommas' $ map (\(ERaw p f) -> first (parensM p) (f info)) $ toArgList arg
in (name <> parens argsTLB, argsVals)
-- | (Internal) An explicit SQL type cast using CAST(value as type).
-- See 'unsafeSqlBinOp' for warnings.
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 )
unsafeSqlCastAs _ (ECompositeKey _) = throw (CompositeKeyErr SqlCastAsError)
class UnsafeSqlFunctionArgument a where
toArgList :: a -> [SqlExpr (Value ())]