Merge pull request #54 from tlaitinen/master
unsafeSqlExtractSubField to support EXTRACT subfield FROM field-syntax
This commit is contained in:
commit
3ed5930063
@ -30,6 +30,7 @@ module Database.Esqueleto.Internal.Sql
|
|||||||
, unsafeSqlBinOp
|
, unsafeSqlBinOp
|
||||||
, unsafeSqlValue
|
, unsafeSqlValue
|
||||||
, unsafeSqlFunction
|
, unsafeSqlFunction
|
||||||
|
, unsafeSqlExtractSubField
|
||||||
, UnsafeSqlFunctionArgument
|
, UnsafeSqlFunctionArgument
|
||||||
, rawSelectSource
|
, rawSelectSource
|
||||||
, runSource
|
, runSource
|
||||||
@ -479,6 +480,17 @@ unsafeSqlFunction name arg =
|
|||||||
uncommas' $ map (\(ERaw _ f) -> f info) $ toArgList arg
|
uncommas' $ map (\(ERaw _ f) -> f info) $ toArgList arg
|
||||||
in (name <> parens argsTLB, argsVals)
|
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
|
class UnsafeSqlFunctionArgument a where
|
||||||
toArgList :: a -> [SqlExpr (Value ())]
|
toArgList :: a -> [SqlExpr (Value ())]
|
||||||
instance (a ~ Value b) => UnsafeSqlFunctionArgument (SqlExpr a) where
|
instance (a ~ Value b) => UnsafeSqlFunctionArgument (SqlExpr a) where
|
||||||
@ -503,6 +515,7 @@ instance ( UnsafeSqlFunctionArgument a
|
|||||||
toArgList = toArgList . from4
|
toArgList = toArgList . from4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- | (Internal) Coerce a value's type from 'SqlExpr (Value a)' to
|
-- | (Internal) Coerce a value's type from 'SqlExpr (Value a)' to
|
||||||
-- 'SqlExpr (Value b)'. You should /not/ use this function
|
-- 'SqlExpr (Value b)'. You should /not/ use this function
|
||||||
-- unless you know what you're doing!
|
-- unless you know what you're doing!
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user