Merge pull request #54 from tlaitinen/master

unsafeSqlExtractSubField to support EXTRACT subfield FROM field-syntax
This commit is contained in:
Felipe Lessa 2014-04-02 11:39:23 -03:00
commit 3ed5930063

View File

@ -30,6 +30,7 @@ module Database.Esqueleto.Internal.Sql
, unsafeSqlBinOp
, unsafeSqlValue
, unsafeSqlFunction
, unsafeSqlExtractSubField
, UnsafeSqlFunctionArgument
, rawSelectSource
, runSource
@ -479,6 +480,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
@ -503,6 +515,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!