{-# LANGUAGE Arrows #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE DataKinds #-}
module Opaleye.Operators
(
where_
, restrict
, restrictExists
, restrictNotExists
, (+)
, (-)
, (*)
, (/)
, fromInteger
, abs
, negate
, signum
, (.==)
, (./=)
, (.===)
, (./==)
, (.>)
, (.<)
, (.<=)
, (.>=)
, quot_
, rem_
, case_
, ifThenElse
, ifThenElseMany
, (.||)
, (.&&)
, not
, ors
, (.++)
, lower
, upper
, like
, ilike
, sqlLength
, in_
, inSelect
, SqlIsJson
, SqlJsonIndex
, PGJsonIndex
, (.->)
, (.->>)
, (.#>)
, (.#>>)
, (.@>)
, (.<@)
, (.?)
, (.?|)
, (.?&)
, JBOF.jsonBuildObject
, JBOF.jsonBuildObjectField
, JBOF.JSONBuildObjectFields
, emptyArray
, arrayAppend
, arrayPrepend
, arrayRemove
, arrayRemoveNulls
, singletonArray
, index
, arrayPosition
, sqlElem
, overlap
, liesWithin
, upperBound
, lowerBound
, (.<<)
, (.>>)
, (.&<)
, (.&>)
, (.-|-)
, timestamptzAtTimeZone
, dateOfTimestamp
, now
, IntervalNum
, addInterval
, minusInterval
, keepWhen
)
where
import qualified Control.Arrow as A
import qualified Data.Foldable as F hiding (null)
import qualified Data.List.NonEmpty as NEL
import Prelude hiding (not)
import qualified Opaleye.Exists as E
import qualified Opaleye.Field as F
import Opaleye.Internal.Column (Field_(Column), Field, FieldNullable,
Nullability(Nullable),
unsafeCase_,
unsafeIfThenElse, unsafeGt)
import qualified Opaleye.Internal.Column as C
import qualified Opaleye.Internal.JSONBuildObjectFields as JBOF
import Opaleye.Internal.QueryArr (SelectArr(QueryArr),
runSimpleQueryArr')
import qualified Opaleye.Internal.PrimQuery as PQ
import qualified Opaleye.Internal.Operators as O
import Opaleye.Internal.Helpers ((.:))
import qualified Opaleye.Lateral as L
import qualified Opaleye.Order as Ord
import qualified Opaleye.Select as S
import qualified Opaleye.SqlTypes as T
import qualified Opaleye.Column as Column
import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ
import qualified Data.Profunctor.Product.Default as D
where_ :: F.Field T.SqlBool -> S.Select ()
where_ :: Field SqlBool -> Select ()
where_ = forall i a. SelectArr i a -> i -> Select a
L.viaLateral SelectArr (Field SqlBool) ()
restrict
restrict :: S.SelectArr (F.Field T.SqlBool) ()
restrict :: SelectArr (Field SqlBool) ()
restrict = SelectArr (Field SqlBool) ()
O.restrict
restrictExists :: S.SelectArr a b -> S.SelectArr a ()
restrictExists :: forall a b. SelectArr a b -> SelectArr a ()
restrictExists SelectArr a b
criteria = forall a b. (a -> State Tag (b, PrimQueryArr)) -> SelectArr a b
QueryArr a -> StateT Tag Identity ((), PrimQueryArr)
f where
f :: a -> StateT Tag Identity ((), PrimQueryArr)
f a
a = do
(b
_, PrimQuery
existsQ) <- forall a b. QueryArr a b -> a -> State Tag (b, PrimQuery)
runSimpleQueryArr' SelectArr a b
criteria a
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((), SemijoinType -> PrimQuery -> PrimQueryArr
PQ.aSemijoin SemijoinType
PQ.Semi PrimQuery
existsQ)
restrictNotExists :: S.SelectArr a b -> S.SelectArr a ()
restrictNotExists :: forall a b. SelectArr a b -> SelectArr a ()
restrictNotExists SelectArr a b
criteria = forall a b. (a -> State Tag (b, PrimQueryArr)) -> SelectArr a b
QueryArr a -> StateT Tag Identity ((), PrimQueryArr)
f where
f :: a -> StateT Tag Identity ((), PrimQueryArr)
f a
a = do
(b
_, PrimQuery
existsQ) <- forall a b. QueryArr a b -> a -> State Tag (b, PrimQuery)
runSimpleQueryArr' SelectArr a b
criteria a
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((), SemijoinType -> PrimQuery -> PrimQueryArr
PQ.aSemijoin SemijoinType
PQ.Anti PrimQuery
existsQ)
infix 4 .==
(.==) :: Field a -> Field a -> F.Field T.SqlBool
.== :: forall a. Field a -> Field a -> Field SqlBool
(.==) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:==)
infix 4 ./=
(./=) :: Field a -> Field a -> F.Field T.SqlBool
./= :: forall a. Field a -> Field a -> Field SqlBool
(./=) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<>)
infix 4 .===
(.===) :: D.Default O.EqPP fields fields => fields -> fields -> F.Field T.SqlBool
.=== :: forall fields.
Default EqPP fields fields =>
fields -> fields -> Field SqlBool
(.===) = forall fields.
Default EqPP fields fields =>
fields -> fields -> Field SqlBool
(O..==)
infix 4 ./==
(./==) :: D.Default O.EqPP fields fields => fields -> fields -> F.Field T.SqlBool
./== :: forall fields.
Default EqPP fields fields =>
fields -> fields -> Field SqlBool
(./==) = Field SqlBool -> Field SqlBool
Opaleye.Operators.not forall r z a b. (r -> z) -> (a -> b -> r) -> a -> b -> z
.: forall fields.
Default EqPP fields fields =>
fields -> fields -> Field SqlBool
(O..==)
infix 4 .>
(.>) :: Ord.SqlOrd a => Field a -> Field a -> F.Field T.SqlBool
.> :: forall a. SqlOrd a => Field a -> Field a -> Field SqlBool
(.>) = forall (n :: Nullability) a (n' :: Nullability) pgBool.
Field_ n a -> Field_ n a -> Field_ n' pgBool
unsafeGt
infix 4 .<
(.<) :: Ord.SqlOrd a => Field a -> Field a -> F.Field T.SqlBool
.< :: forall a. SqlOrd a => Field a -> Field a -> Field SqlBool
(.<) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<)
infix 4 .<=
(.<=) :: Ord.SqlOrd a => Field a -> Field a -> F.Field T.SqlBool
.<= :: forall a. SqlOrd a => Field a -> Field a -> Field SqlBool
(.<=) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<=)
infix 4 .>=
(.>=) :: Ord.SqlOrd a => Field a -> Field a -> F.Field T.SqlBool
.>= :: forall a. SqlOrd a => Field a -> Field a -> Field SqlBool
(.>=) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:>=)
quot_ :: C.SqlIntegral a => Field a -> Field a -> Field a
quot_ :: forall a. SqlIntegral a => Field a -> Field a -> Field a
quot_ = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:/)
rem_ :: C.SqlIntegral a => Field a -> Field a -> Field a
rem_ :: forall a. SqlIntegral a => Field a -> Field a -> Field a
rem_ = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
HPQ.OpMod
case_ :: [(F.Field T.SqlBool, Field_ n a)] -> Field_ n a -> Field_ n a
case_ :: forall (n :: Nullability) a.
[(Field SqlBool, Field_ n a)] -> Field_ n a -> Field_ n a
case_ = forall (n :: Nullability) pgBool (n' :: Nullability) a.
[(Field_ n pgBool, Field_ n' a)] -> Field_ n' a -> Field_ n' a
unsafeCase_
ifThenElse :: F.Field T.SqlBool -> Field_ n a -> Field_ n a -> Field_ n a
ifThenElse :: forall (n :: Nullability) a.
Field SqlBool -> Field_ n a -> Field_ n a -> Field_ n a
ifThenElse = forall (n' :: Nullability) pgBool (n :: Nullability) a.
Field_ n' pgBool -> Field_ n a -> Field_ n a -> Field_ n a
unsafeIfThenElse
ifThenElseMany :: D.Default O.IfPP fields fields
=> F.Field T.SqlBool
-> fields
-> fields
-> fields
ifThenElseMany :: forall fields.
Default IfPP fields fields =>
Field SqlBool -> fields -> fields -> fields
ifThenElseMany = forall columns columns'.
IfPP columns columns'
-> Field SqlBool -> columns -> columns -> columns'
O.ifExplict forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
infixr 2 .||
(.||) :: F.Field T.SqlBool -> F.Field T.SqlBool -> F.Field T.SqlBool
.|| :: Field SqlBool -> Field SqlBool -> Field SqlBool
(.||) = Field SqlBool -> Field SqlBool -> Field SqlBool
(O..||)
infixr 3 .&&
(.&&) :: F.Field T.SqlBool -> F.Field T.SqlBool -> F.Field T.SqlBool
.&& :: Field SqlBool -> Field SqlBool -> Field SqlBool
(.&&) = Field SqlBool -> Field SqlBool -> Field SqlBool
(O..&&)
not :: F.Field T.SqlBool -> F.Field T.SqlBool
not :: Field SqlBool -> Field SqlBool
not = Field SqlBool -> Field SqlBool
O.not
ors :: F.Foldable f => f (F.Field T.SqlBool) -> F.Field T.SqlBool
ors :: forall (f :: * -> *).
Foldable f =>
f (Field SqlBool) -> Field SqlBool
ors = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' Field SqlBool -> Field SqlBool -> Field SqlBool
(.||) (Bool -> Field SqlBool
T.sqlBool Bool
False)
(.++) :: F.Field T.SqlText -> F.Field T.SqlText -> F.Field T.SqlText
.++ :: Field SqlText -> Field SqlText -> Field SqlText
(.++) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:||)
lower :: F.Field T.SqlText -> F.Field T.SqlText
lower :: Field SqlText -> Field SqlText
lower = forall (n :: Nullability) a (n' :: Nullability) b.
UnOp -> Field_ n a -> Field_ n' b
C.unOp UnOp
HPQ.OpLower
upper :: F.Field T.SqlText -> F.Field T.SqlText
upper :: Field SqlText -> Field SqlText
upper = forall (n :: Nullability) a (n' :: Nullability) b.
UnOp -> Field_ n a -> Field_ n' b
C.unOp UnOp
HPQ.OpUpper
like :: F.Field T.SqlText -> F.Field T.SqlText -> F.Field T.SqlBool
like :: Field SqlText -> Field SqlText -> Field SqlBool
like = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
HPQ.OpLike
ilike :: F.Field T.SqlText -> F.Field T.SqlText -> F.Field T.SqlBool
ilike :: Field SqlText -> Field SqlText -> Field SqlBool
ilike = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
HPQ.OpILike
sqlLength :: C.SqlString a => F.Field a -> F.Field T.SqlInt4
sqlLength :: forall a. SqlString a => Field a -> Field SqlInt4
sqlLength (Column PrimExpr
e) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column (Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"length" [PrimExpr
e])
in_ :: (Functor f, F.Foldable f) => f (Field a) -> Field a -> F.Field T.SqlBool
in_ :: forall (f :: * -> *) a.
(Functor f, Foldable f) =>
f (Field a) -> Field a -> Field SqlBool
in_ f (Field a)
fcas (Column PrimExpr
a) = case forall a. [a] -> Maybe (NonEmpty a)
NEL.nonEmpty (forall (t :: * -> *) a. Foldable t => t a -> [a]
F.toList f (Field a)
fcas) of
Maybe (NonEmpty (Field a))
Nothing -> Bool -> Field SqlBool
T.sqlBool Bool
False
Just NonEmpty (Field a)
xs -> forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column forall a b. (a -> b) -> a -> b
$ BinOp -> PrimExpr -> PrimExpr -> PrimExpr
HPQ.BinExpr BinOp
HPQ.OpIn PrimExpr
a (NonEmpty PrimExpr -> PrimExpr
HPQ.ListExpr (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall (n :: Nullability) a. Field_ n a -> PrimExpr
C.unColumn NonEmpty (Field a)
xs))
inSelect :: D.Default O.EqPP fields fields
=> fields -> S.Select fields -> S.Select (F.Field T.SqlBool)
inSelect :: forall fields.
Default EqPP fields fields =>
fields -> Select fields -> Select (Field SqlBool)
inSelect fields
c Select fields
q = forall a. Select a -> Select (Field SqlBool)
E.exists (forall a. (a -> Field SqlBool) -> SelectArr a a
keepWhen (fields
c forall fields.
Default EqPP fields fields =>
fields -> fields -> Field SqlBool
.===) forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
A.<<< Select fields
q)
class SqlIsJson json
instance SqlIsJson T.SqlJson
instance SqlIsJson T.SqlJsonb
class SqlJsonIndex a
type PGJsonIndex = SqlJsonIndex
instance SqlJsonIndex T.SqlInt4
instance SqlJsonIndex T.SqlInt8
instance SqlJsonIndex T.SqlText
infixl 8 .->
(.->) :: (SqlIsJson json, SqlJsonIndex k)
=> F.FieldNullable json
-> F.Field k
-> F.FieldNullable json
.-> :: forall json k.
(SqlIsJson json, SqlJsonIndex k) =>
FieldNullable json -> Field k -> FieldNullable json
(.->) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:->)
infixl 8 .->>
(.->>) :: (SqlIsJson json, SqlJsonIndex k)
=> F.FieldNullable json
-> F.Field k
-> F.FieldNullable T.SqlText
.->> :: forall json k.
(SqlIsJson json, SqlJsonIndex k) =>
FieldNullable json -> Field k -> FieldNullable SqlText
(.->>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:->>)
infixl 8 .#>
(.#>) :: (SqlIsJson json)
=> F.FieldNullable json
-> Field (T.SqlArray T.SqlText)
-> F.FieldNullable json
.#> :: forall json.
SqlIsJson json =>
FieldNullable json
-> Field (SqlArray SqlText) -> FieldNullable json
(.#>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:#>)
infixl 8 .#>>
(.#>>) :: (SqlIsJson json)
=> F.FieldNullable json
-> Field (T.SqlArray T.SqlText)
-> F.FieldNullable T.SqlText
.#>> :: forall json.
SqlIsJson json =>
FieldNullable json
-> Field (SqlArray SqlText) -> FieldNullable SqlText
(.#>>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:#>>)
infix 4 .@>
(.@>) :: F.Field T.SqlJsonb -> F.Field T.SqlJsonb -> F.Field T.SqlBool
.@> :: Field SqlJsonb -> Field SqlJsonb -> Field SqlBool
(.@>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:@>)
infix 4 .<@
(.<@) :: F.Field T.SqlJsonb -> F.Field T.SqlJsonb -> F.Field T.SqlBool
.<@ :: Field SqlJsonb -> Field SqlJsonb -> Field SqlBool
(.<@) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<@)
infix 4 .?
(.?) :: F.Field T.SqlJsonb -> F.Field T.SqlText -> F.Field T.SqlBool
.? :: Field SqlJsonb -> Field SqlText -> Field SqlBool
(.?) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:?)
infix 4 .?|
(.?|) :: F.Field T.SqlJsonb
-> Field (T.SqlArray T.SqlText)
-> F.Field T.SqlBool
.?| :: Field SqlJsonb -> Field (SqlArray SqlText) -> Field SqlBool
(.?|) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:?|)
infix 4 .?&
(.?&) :: F.Field T.SqlJsonb
-> Field (T.SqlArray T.SqlText)
-> F.Field T.SqlBool
.?& :: Field SqlJsonb -> Field (SqlArray SqlText) -> Field SqlBool
(.?&) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:?&)
emptyArray :: T.IsSqlType a => Field (T.SqlArray_ n a)
emptyArray :: forall a (n :: Nullability). IsSqlType a => Field (SqlArray_ n a)
emptyArray = forall b a (n :: Nullability).
IsSqlType b =>
(a -> Field_ n b) -> [a] -> Field (SqlArray_ n b)
T.sqlArray forall a. a -> a
id []
arrayAppend :: F.Field (T.SqlArray_ n a) -> F.Field (T.SqlArray_ n a) -> F.Field (T.SqlArray_ n a)
arrayAppend :: forall (n :: Nullability) a.
Field (SqlArray_ n a)
-> Field (SqlArray_ n a) -> Field (SqlArray_ n a)
arrayAppend = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:||)
arrayPrepend :: Field_ n a -> Field (T.SqlArray_ n a) -> Field (T.SqlArray_ n a)
arrayPrepend :: forall (n :: Nullability) a.
Field_ n a -> Field (SqlArray_ n a) -> Field (SqlArray_ n a)
arrayPrepend (Column PrimExpr
e) (Column PrimExpr
es) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column (Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"array_prepend" [PrimExpr
e, PrimExpr
es])
arrayRemove :: Field_ n a -> Field (T.SqlArray_ n a) -> Field (T.SqlArray_ n a)
arrayRemove :: forall (n :: Nullability) a.
Field_ n a -> Field (SqlArray_ n a) -> Field (SqlArray_ n a)
arrayRemove (Column PrimExpr
e) (Column PrimExpr
es) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column (Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"array_remove" [PrimExpr
es, PrimExpr
e])
arrayRemoveNulls :: Field (T.SqlArray_ Nullable a) -> Field (T.SqlArray a)
arrayRemoveNulls :: forall a. Field (SqlArray_ 'Nullable a) -> Field (SqlArray a)
arrayRemoveNulls = forall (n :: Nullability) a (n' :: Nullability) b.
Field_ n a -> Field_ n' b
Column.unsafeCoerceColumn forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nullability) a.
Field_ n a -> Field (SqlArray_ n a) -> Field (SqlArray_ n a)
arrayRemove forall a. FieldNullable a
F.null
singletonArray :: T.IsSqlType a => Field_ n a -> Field (T.SqlArray_ n a)
singletonArray :: forall a (n :: Nullability).
IsSqlType a =>
Field_ n a -> Field (SqlArray_ n a)
singletonArray Field_ n a
x = forall (n :: Nullability) a.
Field_ n a -> Field (SqlArray_ n a) -> Field (SqlArray_ n a)
arrayPrepend Field_ n a
x forall a (n :: Nullability). IsSqlType a => Field (SqlArray_ n a)
emptyArray
index :: (C.SqlIntegral n) => Field (T.SqlArray_ n' a) -> Field n -> FieldNullable a
index :: forall n (n' :: Nullability) a.
SqlIntegral n =>
Field (SqlArray_ n' a) -> Field n -> FieldNullable a
index (Column PrimExpr
a) (Column PrimExpr
b) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column (PrimExpr -> PrimExpr -> PrimExpr
HPQ.ArrayIndex PrimExpr
a PrimExpr
b)
arrayPosition :: F.Field (T.SqlArray_ n a)
-> F.Field_ n a
-> F.FieldNullable T.SqlInt4
arrayPosition :: forall (n :: Nullability) a.
Field (SqlArray_ n a) -> Field_ n a -> FieldNullable SqlInt4
arrayPosition (Column PrimExpr
fs) (Column PrimExpr
f') =
forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
C.Column (Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"array_position" [PrimExpr
fs , PrimExpr
f'])
sqlElem :: F.Field_ n a
-> F.Field (T.SqlArray_ n a)
-> F.Field T.SqlBool
sqlElem :: forall (n :: Nullability) a.
Field_ n a -> Field (SqlArray_ n a) -> Field SqlBool
sqlElem Field_ n a
f Field (SqlArray_ n a)
fs = (Field SqlBool -> Field SqlBool
O.not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. FieldNullable a -> Field SqlBool
F.isNull forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nullability) a.
Field (SqlArray_ n a) -> Field_ n a -> FieldNullable SqlInt4
arrayPosition Field (SqlArray_ n a)
fs) Field_ n a
f
overlap :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
overlap :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
overlap = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:&&)
liesWithin :: T.IsRangeType a => Field a -> Field (T.SqlRange a) -> F.Field T.SqlBool
liesWithin :: forall a.
IsRangeType a =>
Field a -> Field (SqlRange a) -> Field SqlBool
liesWithin = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<@)
upperBound :: T.IsRangeType a => Field (T.SqlRange a) -> FieldNullable a
upperBound :: forall a. IsRangeType a => Field (SqlRange a) -> FieldNullable a
upperBound (Column PrimExpr
range) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column forall a b. (a -> b) -> a -> b
$ Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"upper" [PrimExpr
range]
lowerBound :: T.IsRangeType a => Field (T.SqlRange a) -> FieldNullable a
lowerBound :: forall a. IsRangeType a => Field (SqlRange a) -> FieldNullable a
lowerBound (Column PrimExpr
range) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column forall a b. (a -> b) -> a -> b
$ Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"lower" [PrimExpr
range]
infix 4 .<<
(.<<) :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
.<< :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
(.<<) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:<<)
infix 4 .>>
(.>>) :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
.>> :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
(.>>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:>>)
infix 4 .&<
(.&<) :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
.&< :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
(.&<) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:&<)
infix 4 .&>
(.&>) :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
.&> :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
(.&>) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:&>)
infix 4 .-|-
(.-|-) :: Field (T.SqlRange a) -> Field (T.SqlRange a) -> F.Field T.SqlBool
.-|- :: forall a. Field (SqlRange a) -> Field (SqlRange a) -> Field SqlBool
(.-|-) = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:-|-)
timestamptzAtTimeZone :: F.Field T.SqlTimestamptz
-> F.Field T.SqlText
-> F.Field T.SqlTimestamp
timestamptzAtTimeZone :: Field SqlTimestamptz -> Field SqlText -> Field SqlTimestamp
timestamptzAtTimeZone = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
HPQ.OpAtTimeZone
dateOfTimestamp :: F.Field T.SqlTimestamp -> F.Field T.SqlDate
dateOfTimestamp :: Field SqlTimestamp -> Field SqlDate
dateOfTimestamp (Column PrimExpr
e) = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column (Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"date" [PrimExpr
e])
class IntervalNum from to | from -> to
instance IntervalNum T.SqlDate T.SqlTimestamp
instance IntervalNum T.SqlInterval T.SqlInterval
instance IntervalNum T.SqlTimestamp T.SqlTimestamp
instance IntervalNum T.SqlTimestamptz T.SqlTimestamptz
instance IntervalNum T.SqlTime T.SqlTime
addInterval :: IntervalNum from to => F.Field from -> F.Field T.SqlInterval -> F.Field to
addInterval :: forall from to.
IntervalNum from to =>
Field from -> Field SqlInterval -> Field to
addInterval = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:+)
minusInterval :: IntervalNum from to => F.Field from -> F.Field T.SqlInterval -> F.Field to
minusInterval :: forall from to.
IntervalNum from to =>
Field from -> Field SqlInterval -> Field to
minusInterval = forall (n :: Nullability) a (n' :: Nullability) b
(n'' :: Nullability) c.
BinOp -> Field_ n a -> Field_ n' b -> Field_ n'' c
C.binOp BinOp
(HPQ.:-)
{-# DEPRECATED keepWhen "Use 'where_' or 'restrict' instead. Will be removed in version 0.10." #-}
keepWhen :: (a -> F.Field T.SqlBool) -> S.SelectArr a a
keepWhen :: forall a. (a -> Field SqlBool) -> SelectArr a a
keepWhen a -> Field SqlBool
p = proc a
a -> do
SelectArr (Field SqlBool) ()
restrict -< a -> Field SqlBool
p a
a
forall (a :: * -> * -> *) b. Arrow a => a b b
A.returnA -< a
a
now :: F.Field T.SqlTimestamptz
now :: Field SqlTimestamptz
now = forall (n :: Nullability) sqlType. PrimExpr -> Field_ n sqlType
Column forall a b. (a -> b) -> a -> b
$ Name -> [PrimExpr] -> PrimExpr
HPQ.FunExpr Name
"now" []