unsafeSqlExtractSubField to support EXTRACT subfield FROM field-syntax

This commit is contained in:
Tero Laitinen 2014-04-02 17:30:28 +03:00
parent f3ff39e898
commit 69b4be6e37

View File

@ -29,6 +29,7 @@ module Database.Esqueleto.Internal.Sql
, unsafeSqlBinOp
, unsafeSqlValue
, unsafeSqlFunction
, unsafeSqlExtractSubField
, UnsafeSqlFunctionArgument
, rawSelectSource
, runSource
@ -475,6 +476,17 @@ unsafeSqlFunction name arg =
uncommas' $ map (\(ERaw _ f) -> f info) $ toArgList arg
in (name <> parens argsTLB, argsVals)
-- | (Internal) An unsafe SQL function to extract a subfield from a compound
-- field, e.g. datetime. See 'unsafeSqlBinOp' for warnings.
unsafeSqlExtractSubField :: UnsafeSqlFunctionArgument a =>
TLB.Builder -> a -> SqlExpr (Value b)
unsafeSqlExtractSubField subField arg =
ERaw Never $ \info ->
let (argsTLB, argsVals) =
uncommas' $ map (\(ERaw _ f) -> f info) $ toArgList arg
in ("EXTRACT" <> parens (subField <> " FROM " <> argsTLB), argsVals)
class UnsafeSqlFunctionArgument a where
toArgList :: a -> [SqlExpr (Value ())]
instance (a ~ Value b) => UnsafeSqlFunctionArgument (SqlExpr a) where
@ -499,6 +511,7 @@ instance ( UnsafeSqlFunctionArgument a
toArgList = toArgList . from4
-- | (Internal) Coerce a value's type from 'SqlExpr (Value a)' to
-- 'SqlExpr (Value b)'. You should /not/ use this function
-- unless you know what you're doing!