Copyright | (c) Eitan Chatav 2017 |
---|---|
Maintainer | [email protected] |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Squeal.PostgreSQL.Expression
Description
Squeal expressions are the atoms used to build statements.
- newtype Expression (relations :: RelationsType) (grouping :: Grouping) (params :: [NullityType]) (ty :: NullityType) = UnsafeExpression {}
- class (PGTyped (PGTypeOf ty), KnownNat n) => HasParameter (n :: Nat) (params :: [NullityType]) (ty :: NullityType) | n params -> ty where
- null_ :: Expression relations grouping params (Null ty)
- unNull :: Expression relations grouping params (NotNull ty) -> Expression relations grouping params (Null ty)
- coalesce :: [Expression relations grouping params (Null ty)] -> Expression relations grouping params (NotNull ty) -> Expression relations grouping params (NotNull ty)
- fromNull :: Expression relations grouping params (NotNull ty) -> Expression relations grouping params (Null ty) -> Expression relations grouping params (NotNull ty)
- isNull :: Expression relations grouping params (Null ty) -> Condition relations grouping params
- isn'tNull :: Expression relations grouping params (Null ty) -> Condition relations grouping params
- matchNull :: Expression relations grouping params nullty -> (Expression relations grouping params (NotNull ty) -> Expression relations grouping params nullty) -> Expression relations grouping params (Null ty) -> Expression relations grouping params nullty
- nullIf :: Expression relations grouping params (NotNull ty) -> Expression relations grouping params (NotNull ty) -> Expression relations grouping params (Null ty)
- array :: [Expression relations grouping params (Null ty)] -> Expression relations grouping params (nullity (PGvararray ty))
- unsafeBinaryOp :: ByteString -> Expression relations grouping params ty0 -> Expression relations grouping params ty1 -> Expression relations grouping params ty2
- unsafeUnaryOp :: ByteString -> Expression relations grouping params ty0 -> Expression relations grouping params ty1
- unsafeFunction :: ByteString -> Expression relations grouping params xty -> Expression relations grouping params yty
- atan2_ :: PGFloating float => Expression relations grouping params (nullity float) -> Expression relations grouping params (nullity float) -> Expression relations grouping params (nullity float)
- cast :: TypeExpression (NoDef :=> Null ty1) -> Expression relations grouping params (nullity ty0) -> Expression relations grouping params (nullity ty1)
- quot_ :: PGIntegral int => Expression relations grouping params (nullity int) -> Expression relations grouping params (nullity int) -> Expression relations grouping params (nullity int)
- rem_ :: PGIntegral int => Expression relations grouping params (nullity int) -> Expression relations grouping params (nullity int) -> Expression relations grouping params (nullity int)
- trunc :: PGFloating frac => Expression relations grouping params (nullity frac) -> Expression relations grouping params (nullity frac)
- round_ :: PGFloating frac => Expression relations grouping params (nullity frac) -> Expression relations grouping params (nullity frac)
- ceiling_ :: PGFloating frac => Expression relations grouping params (nullity frac) -> Expression relations grouping params (nullity frac)
- greatest :: Expression relations grouping params nullty -> [Expression relations grouping params nullty] -> Expression relations grouping params nullty
- least :: Expression relations grouping params nullty -> [Expression relations grouping params nullty] -> Expression relations grouping params nullty
- type Condition relations grouping params = Expression relations grouping params (NotNull PGbool)
- true :: Condition relations grouping params
- false :: Condition relations grouping params
- not_ :: Condition relations grouping params -> Condition relations grouping params
- (.&&) :: Condition relations grouping params -> Condition relations grouping params -> Condition relations grouping params
- (.||) :: Condition relations grouping params -> Condition relations grouping params -> Condition relations grouping params
- caseWhenThenElse :: [(Condition relations grouping params, Expression relations grouping params ty)] -> Expression relations grouping params ty -> Expression relations grouping params ty
- ifThenElse :: Condition relations grouping params -> Expression relations grouping params ty -> Expression relations grouping params ty -> Expression relations grouping params ty
- (.==) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- (./=) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- (.>=) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- (.<) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- (.<=) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- (.>) :: Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity ty) -> Expression relations grouping params (nullity PGbool)
- currentDate :: Expression relations grouping params (nullity PGdate)
- currentTime :: Expression relations grouping params (nullity PGtimetz)
- currentTimestamp :: Expression relations grouping params (nullity PGtimestamptz)
- localTime :: Expression relations grouping params (nullity PGtime)
- localTimestamp :: Expression relations grouping params (nullity PGtimestamp)
- lower :: Expression relations grouping params (nullity PGtext) -> Expression relations grouping params (nullity PGtext)
- upper :: Expression relations grouping params (nullity PGtext) -> Expression relations grouping params (nullity PGtext)
- charLength :: Expression relations grouping params (nullity PGtext) -> Expression relations grouping params (nullity PGint4)
- like :: Expression relations grouping params (nullity PGtext) -> Expression relations grouping params (nullity PGtext) -> Expression relations grouping params (nullity PGbool)
- unsafeAggregate :: ByteString -> Expression relations Ungrouped params xty -> Expression relations (Grouped bys) params yty
- unsafeAggregateDistinct :: ByteString -> Expression relations Ungrouped params xty -> Expression relations (Grouped bys) params yty
- sum_ :: PGNum ty => Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- sumDistinct :: PGNum ty => Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- class PGAvg ty avg | ty -> avg where
- bitAnd :: PGIntegral int => Expression relations Ungrouped params (nullity int) -> Expression relations (Grouped bys) params (nullity int)
- bitOr :: PGIntegral int => Expression relations Ungrouped params (nullity int) -> Expression relations (Grouped bys) params (nullity int)
- boolAnd :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- boolOr :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- bitAndDistinct :: PGIntegral int => Expression relations Ungrouped params (nullity int) -> Expression relations (Grouped bys) params (nullity int)
- bitOrDistinct :: PGIntegral int => Expression relations Ungrouped params (nullity int) -> Expression relations (Grouped bys) params (nullity int)
- boolAndDistinct :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- boolOrDistinct :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- countStar :: Expression relations (Grouped bys) params (NotNull PGint8)
- count :: Expression relations Ungrouped params ty -> Expression relations (Grouped bys) params (NotNull PGint8)
- countDistinct :: Expression relations Ungrouped params ty -> Expression relations (Grouped bys) params (NotNull PGint8)
- every :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- everyDistinct :: Expression relations Ungrouped params (nullity PGbool) -> Expression relations (Grouped bys) params (nullity PGbool)
- max_ :: Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- maxDistinct :: Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- min_ :: Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- minDistinct :: Expression relations Ungrouped params (nullity ty) -> Expression relations (Grouped bys) params (nullity ty)
- newtype Table (schema :: TablesType) (columns :: RelationType) = UnsafeTable {}
- newtype TypeExpression (ty :: ColumnType) = UnsafeTypeExpression {}
- class PGTyped (ty :: PGType) where
- bool :: TypeExpression (NoDef :=> Null PGbool)
- int2 :: TypeExpression (NoDef :=> Null PGint2)
- smallint :: TypeExpression (NoDef :=> Null PGint2)
- int4 :: TypeExpression (NoDef :=> Null PGint4)
- int :: TypeExpression (NoDef :=> Null PGint4)
- integer :: TypeExpression (NoDef :=> Null PGint4)
- int8 :: TypeExpression (NoDef :=> Null PGint8)
- bigint :: TypeExpression (NoDef :=> Null PGint8)
- numeric :: TypeExpression (NoDef :=> Null PGnumeric)
- float4 :: TypeExpression (NoDef :=> Null PGfloat4)
- real :: TypeExpression (NoDef :=> Null PGfloat4)
- float8 :: TypeExpression (NoDef :=> Null PGfloat8)
- doublePrecision :: TypeExpression (NoDef :=> Null PGfloat8)
- serial2 :: TypeExpression (Def :=> NotNull PGint2)
- smallserial :: TypeExpression (Def :=> NotNull PGint2)
- serial4 :: TypeExpression (Def :=> NotNull PGint4)
- serial :: TypeExpression (Def :=> NotNull PGint4)
- serial8 :: TypeExpression (Def :=> NotNull PGint8)
- bigserial :: TypeExpression (Def :=> NotNull PGint8)
- text :: TypeExpression (NoDef :=> Null PGtext)
- char :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGchar n))
- character :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGchar n))
- varchar :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGvarchar n))
- characterVarying :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGvarchar n))
- bytea :: TypeExpression (NoDef :=> Null PGbytea)
- timestamp :: TypeExpression (NoDef :=> Null PGtimestamp)
- timestampWithTimeZone :: TypeExpression (NoDef :=> Null PGtimestamptz)
- date :: TypeExpression (NoDef :=> Null PGdate)
- time :: TypeExpression (NoDef :=> Null PGtime)
- timeWithTimeZone :: TypeExpression (NoDef :=> Null PGtimetz)
- interval :: TypeExpression (NoDef :=> Null PGinterval)
- uuid :: TypeExpression (NoDef :=> Null PGuuid)
- inet :: TypeExpression (NoDef :=> Null PGinet)
- json :: TypeExpression (NoDef :=> Null PGjson)
- jsonb :: TypeExpression (NoDef :=> Null PGjsonb)
- vararray :: TypeExpression (NoDef :=> Null pg) -> TypeExpression (NoDef :=> Null (PGvararray pg))
- fixarray :: KnownNat n => proxy n -> TypeExpression (NoDef :=> Null pg) -> TypeExpression (NoDef :=> Null (PGfixarray n pg))
- notNull :: TypeExpression (def :=> Null ty) -> TypeExpression (def :=> NotNull ty)
- default_ :: Expression '[] Ungrouped '[] ty -> TypeExpression (NoDef :=> ty) -> TypeExpression (Def :=> ty)
- (&) :: a -> (a -> b) -> b
- data NP k (a :: k -> *) (b :: [k]) :: forall k. (k -> *) -> [k] -> * where
Expression
newtype Expression (relations :: RelationsType) (grouping :: Grouping) (params :: [NullityType]) (ty :: NullityType) Source #
Expression
s are used in a variety of contexts,
such as in the target list of the select
command,
as new column values in insertRow
or
update
,
or in search Condition
s in a number of commands.
The expression syntax allows the calculation of values from primitive expression using arithmetic, logical, and other operations.
Constructors
UnsafeExpression | |
Fields |
Instances
(Has [(Symbol, NullityType)] relation relations columns, Has NullityType column columns ty, GroupedBy [(Symbol, Symbol)] relation column bys) => IsQualified relation column (Expression relations (Grouped bys) params ty) Source # | |
(Has [(Symbol, NullityType)] relation relations columns, Has NullityType column columns ty) => IsQualified relation column (Expression relations Ungrouped params ty) Source # | |
(HasUnique [(Symbol, NullityType)] relation relations columns, Has NullityType column columns ty, GroupedBy [(Symbol, Symbol)] relation column bys) => IsLabel column (Expression relations (Grouped bys) params ty) Source # | |
(HasUnique [(Symbol, NullityType)] relation relations columns, Has NullityType column columns ty) => IsLabel column (Expression relations Ungrouped params ty) Source # | |
Eq (Expression relations grouping params ty) Source # | |
(PGNum ty, PGFloating ty) => Floating (Expression relations grouping params (nullity ty)) Source # | |
(PGNum ty, PGFloating ty) => Fractional (Expression relations grouping params (nullity ty)) Source # | |
PGNum ty => Num (Expression relations grouping params (nullity ty)) Source # | |
Ord (Expression relations grouping params ty) Source # | |
Show (Expression relations grouping params ty) Source # | |
IsString (Expression relations grouping params (nullity PGtext)) Source # | |
Generic (Expression relations grouping params ty) Source # | |
Monoid (Expression relations grouping params (nullity PGtext)) Source # | |
Monoid (Expression relations grouping params (nullity (PGvararray ty))) Source # | |
NFData (Expression relations grouping params ty) Source # | |
type Rep (Expression relations grouping params ty) Source # | |
class (PGTyped (PGTypeOf ty), KnownNat n) => HasParameter (n :: Nat) (params :: [NullityType]) (ty :: NullityType) | n params -> ty where Source #
A HasParameter
constraint is used to indicate a value that is
supplied externally to a SQL statement.
manipulateParams
,
queryParams
and
traversePrepared
support specifying data values
separately from the SQL command string, in which case param
s are used to
refer to the out-of-line data values.
Methods
param :: Expression relations grouping params ty Source #
Instances
(KnownNat n, HasParameter ((-) n 1) params ty) => HasParameter n ((:) NullityType ty' params) ty Source # | |
PGTyped (PGTypeOf ty1) => HasParameter 1 ((:) NullityType ty1 tys) ty1 Source # | |
Null
null_ :: Expression relations grouping params (Null ty) Source #
analagous to Nothing
>>>
renderExpression $ null_
"NULL"
Arguments
:: Expression relations grouping params (NotNull ty) | not |
-> Expression relations grouping params (Null ty) |
analagous to Just
>>>
renderExpression $ unNull true
"TRUE"
Arguments
:: [Expression relations grouping params (Null ty)] |
|
-> Expression relations grouping params (NotNull ty) |
|
-> Expression relations grouping params (NotNull ty) |
return the leftmost value which is not NULL
>>>
renderExpression $ coalesce [null_, unNull true] false
"COALESCE(NULL, TRUE, FALSE)"
Arguments
:: Expression relations grouping params (NotNull ty) | what to convert |
-> Expression relations grouping params (Null ty) | |
-> Expression relations grouping params (NotNull ty) |
analagous to fromMaybe
using COALESCE
>>>
renderExpression $ fromNull true null_
"COALESCE(NULL, TRUE)"
Arguments
:: Expression relations grouping params (Null ty) | possibly |
-> Condition relations grouping params |
>>>
renderExpression $ null_ & isNull
"NULL IS NULL"
Arguments
:: Expression relations grouping params (Null ty) | possibly |
-> Condition relations grouping params |
>>>
renderExpression $ null_ & isn'tNull
"NULL IS NOT NULL"
Arguments
:: Expression relations grouping params nullty | what to convert |
-> (Expression relations grouping params (NotNull ty) -> Expression relations grouping params nullty) | function to perform when |
-> Expression relations grouping params (Null ty) | |
-> Expression relations grouping params nullty |
analagous to maybe
using IS NULL
>>>
renderExpression $ matchNull true not_ null_
"CASE WHEN NULL IS NULL THEN TRUE ELSE (NOT NULL) END"
Arguments
:: Expression relations grouping params (NotNull ty) |
|
-> Expression relations grouping params (NotNull ty) |
|
-> Expression relations grouping params (Null ty) |
Arrays
Arguments
:: [Expression relations grouping params (Null ty)] | array elements |
-> Expression relations grouping params (nullity (PGvararray ty)) |
>>>
renderExpression $ array [null_, unNull false, unNull true]
"ARRAY[NULL, FALSE, TRUE]"
Functions
Arguments
:: ByteString | operator |
-> Expression relations grouping params ty0 | |
-> Expression relations grouping params ty1 | |
-> Expression relations grouping params ty2 |
>>>
renderExpression $ unsafeBinaryOp "OR" true false
"(TRUE OR FALSE)"
Arguments
:: ByteString | operator |
-> Expression relations grouping params ty0 | |
-> Expression relations grouping params ty1 |
>>>
renderExpression $ unsafeUnaryOp "NOT" true
"(NOT TRUE)"
Arguments
:: ByteString | function |
-> Expression relations grouping params xty | |
-> Expression relations grouping params yty |
>>>
renderExpression $ unsafeFunction "f" true
"f(TRUE)"
Arguments
:: PGFloating float | |
=> Expression relations grouping params (nullity float) | numerator |
-> Expression relations grouping params (nullity float) | denominator |
-> Expression relations grouping params (nullity float) |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGfloat4) expression = atan2_ pi 2 in renderExpression expression :} "atan2(pi(), 2)"
Arguments
:: TypeExpression (NoDef :=> Null ty1) | type to cast as |
-> Expression relations grouping params (nullity ty0) | value to convert |
-> Expression relations grouping params (nullity ty1) |
>>>
renderExpression $ true & cast int4
"(TRUE :: int4)"
Arguments
:: PGIntegral int | |
=> Expression relations grouping params (nullity int) | numerator |
-> Expression relations grouping params (nullity int) | denominator |
-> Expression relations grouping params (nullity int) |
integer division, truncates the result
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGint2) expression = 5 `quot_` 2 in renderExpression expression :} "(5 / 2)"
Arguments
:: PGIntegral int | |
=> Expression relations grouping params (nullity int) | numerator |
-> Expression relations grouping params (nullity int) | denominator |
-> Expression relations grouping params (nullity int) |
remainder upon integer division
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGint2) expression = 5 `rem_` 2 in renderExpression expression :} "(5 % 2)"
Arguments
:: PGFloating frac | |
=> Expression relations grouping params (nullity frac) | fractional number |
-> Expression relations grouping params (nullity frac) |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGfloat4) expression = trunc pi in renderExpression expression :} "trunc(pi())"
Arguments
:: PGFloating frac | |
=> Expression relations grouping params (nullity frac) | fractional number |
-> Expression relations grouping params (nullity frac) |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGfloat4) expression = round_ pi in renderExpression expression :} "round(pi())"
Arguments
:: PGFloating frac | |
=> Expression relations grouping params (nullity frac) | fractional number |
-> Expression relations grouping params (nullity frac) |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGfloat4) expression = ceiling_ pi in renderExpression expression :} "ceiling(pi())"
Arguments
:: Expression relations grouping params nullty | needs at least 1 argument |
-> [Expression relations grouping params nullty] | or more |
-> Expression relations grouping params nullty |
>>>
renderExpression @_ @_ @'[_] $ greatest currentTimestamp [param @1]
"GREATEST(CURRENT_TIMESTAMP, ($1 :: timestamp with time zone))"
Arguments
:: Expression relations grouping params nullty | needs at least 1 argument |
-> [Expression relations grouping params nullty] | or more |
-> Expression relations grouping params nullty |
>>>
renderExpression $ least currentTimestamp [null_]
"LEAST(CURRENT_TIMESTAMP, NULL)"
Conditions
type Condition relations grouping params = Expression relations grouping params (NotNull PGbool) Source #
A Condition
is a boolean valued Expression
. While SQL allows
conditions to have NULL
, Squeal instead chooses to disallow NULL
,
forcing one to handle the case of NULL
explicitly to produce
a Condition
.
not_ :: Condition relations grouping params -> Condition relations grouping params Source #
>>>
renderExpression $ not_ true
"(NOT TRUE)"
(.&&) :: Condition relations grouping params -> Condition relations grouping params -> Condition relations grouping params Source #
>>>
renderExpression $ true .&& false
"(TRUE AND FALSE)"
(.||) :: Condition relations grouping params -> Condition relations grouping params -> Condition relations grouping params Source #
>>>
renderExpression $ true .|| false
"(TRUE OR FALSE)"
Arguments
:: [(Condition relations grouping params, Expression relations grouping params ty)] | whens and thens |
-> Expression relations grouping params ty | else |
-> Expression relations grouping params ty |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGint2) expression = caseWhenThenElse [(true, 1), (false, 2)] 3 in renderExpression expression :} "CASE WHEN TRUE THEN 1 WHEN FALSE THEN 2 ELSE 3 END"
Arguments
:: Condition relations grouping params | |
-> Expression relations grouping params ty | then |
-> Expression relations grouping params ty | else |
-> Expression relations grouping params ty |
>>>
:{
let expression :: Expression relations grouping params (nullity 'PGint2) expression = ifThenElse true 1 0 in renderExpression expression :} "CASE WHEN TRUE THEN 1 ELSE 0 END"
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
>>>
renderExpression $ unNull true ./= null_
"(TRUE <> NULL)"
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
>>>
renderExpression $ unNull true .>= null_
"(TRUE >= NULL)"
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
>>>
renderExpression $ unNull true .< null_
"(TRUE < NULL)"
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
>>>
renderExpression $ unNull true .<= null_
"(TRUE <= NULL)"
Arguments
:: Expression relations grouping params (nullity ty) | lhs |
-> Expression relations grouping params (nullity ty) | rhs |
-> Expression relations grouping params (nullity PGbool) |
>>>
renderExpression $ unNull true .> null_
"(TRUE > NULL)"
Time
currentDate :: Expression relations grouping params (nullity PGdate) Source #
>>>
renderExpression currentDate
"CURRENT_DATE"
currentTime :: Expression relations grouping params (nullity PGtimetz) Source #
>>>
renderExpression currentTime
"CURRENT_TIME"
currentTimestamp :: Expression relations grouping params (nullity PGtimestamptz) Source #
>>>
renderExpression currentTimestamp
"CURRENT_TIMESTAMP"
localTime :: Expression relations grouping params (nullity PGtime) Source #
>>>
renderExpression localTime
"LOCALTIME"
localTimestamp :: Expression relations grouping params (nullity PGtimestamp) Source #
>>>
renderExpression localTimestamp
"LOCALTIMESTAMP"
Text
Arguments
:: Expression relations grouping params (nullity PGtext) | string to lower case |
-> Expression relations grouping params (nullity PGtext) |
>>>
renderExpression $ lower "ARRRGGG"
"lower(E'ARRRGGG')"
Arguments
:: Expression relations grouping params (nullity PGtext) | string to upper case |
-> Expression relations grouping params (nullity PGtext) |
>>>
renderExpression $ upper "eeee"
"upper(E'eeee')"
Arguments
:: Expression relations grouping params (nullity PGtext) | string to measure |
-> Expression relations grouping params (nullity PGint4) |
>>>
renderExpression $ charLength "four"
"char_length(E'four')"
Arguments
:: Expression relations grouping params (nullity PGtext) | string |
-> Expression relations grouping params (nullity PGtext) | pattern |
-> Expression relations grouping params (nullity PGbool) |
The like
expression returns true if the string
matches
the supplied pattern
. If pattern
does not contain percent signs
or underscores, then the pattern only represents the string itself;
in that case like
acts like the equals operator. An underscore (_)
in pattern stands for (matches) any single character; a percent sign (%)
matches any sequence of zero or more characters.
>>>
renderExpression $ "abc" `like` "a%"
"(E'abc' LIKE E'a%')"
Aggregation
Arguments
:: ByteString | aggregate function |
-> Expression relations Ungrouped params xty | |
-> Expression relations (Grouped bys) params yty |
escape hatch to define aggregate functions
unsafeAggregateDistinct Source #
Arguments
:: ByteString | aggregate function |
-> Expression relations Ungrouped params xty | |
-> Expression relations (Grouped bys) params yty |
escape hatch to define aggregate functions over distinct values
Arguments
:: PGNum ty | |
=> Expression relations Ungrouped params (nullity ty) | what to sum |
-> Expression relations (Grouped bys) params (nullity ty) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: 'Null 'PGnumeric]] ('Grouped bys) params ('Null 'PGnumeric) expression = sum_ #col in renderExpression expression :} "sum(\"col\")"
Arguments
:: PGNum ty | |
=> Expression relations Ungrouped params (nullity ty) | what to sum |
-> Expression relations (Grouped bys) params (nullity ty) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGnumeric]] ('Grouped bys) params (nullity 'PGnumeric) expression = sumDistinct #col in renderExpression expression :} "sum(DISTINCT \"col\")"
class PGAvg ty avg | ty -> avg where Source #
Methods
Arguments
:: Expression relations Ungrouped params (nullity ty) | what to average |
-> Expression relations (Grouped bys) params (nullity avg) |
Arguments
:: PGIntegral int | |
=> Expression relations Ungrouped params (nullity int) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity int) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGint4]] (Grouped bys) params (nullity 'PGint4) expression = bitAnd #col in renderExpression expression :} "bit_and(\"col\")"
Arguments
:: PGIntegral int | |
=> Expression relations Ungrouped params (nullity int) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity int) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGint4]] (Grouped bys) params (nullity 'PGint4) expression = bitOr #col in renderExpression expression :} "bit_or(\"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = boolAnd #col in renderExpression expression :} "bool_and(\"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = boolOr #col in renderExpression expression :} "bool_or(\"col\")"
Arguments
:: PGIntegral int | |
=> Expression relations Ungrouped params (nullity int) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity int) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGint4]] (Grouped bys) params (nullity 'PGint4) expression = bitAndDistinct #col in renderExpression expression :} "bit_and(DISTINCT \"col\")"
Arguments
:: PGIntegral int | |
=> Expression relations Ungrouped params (nullity int) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity int) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGint4]] (Grouped bys) params (nullity 'PGint4) expression = bitOrDistinct #col in renderExpression expression :} "bit_or(DISTINCT \"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = boolAndDistinct #col in renderExpression expression :} "bool_and(DISTINCT \"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = boolOrDistinct #col in renderExpression expression :} "bool_or(DISTINCT \"col\")"
countStar :: Expression relations (Grouped bys) params (NotNull PGint8) Source #
A special aggregation that does not require an input
>>>
renderExpression countStar
"count(*)"
Arguments
:: Expression relations Ungrouped params ty | what to count |
-> Expression relations (Grouped bys) params (NotNull PGint8) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity ty]] (Grouped bys) params ('NotNull 'PGint8) expression = count #col in renderExpression expression :} "count(\"col\")"
Arguments
:: Expression relations Ungrouped params ty | what to count |
-> Expression relations (Grouped bys) params (NotNull PGint8) |
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity ty]] (Grouped bys) params ('NotNull 'PGint8) expression = countDistinct #col in renderExpression expression :} "count(DISTINCT \"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
synonym for boolAnd
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = every #col in renderExpression expression :} "every(\"col\")"
Arguments
:: Expression relations Ungrouped params (nullity PGbool) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity PGbool) |
synonym for boolAndDistinct
>>>
:{
let expression :: Expression '[tab ::: '["col" ::: nullity 'PGbool]] (Grouped bys) params (nullity 'PGbool) expression = everyDistinct #col in renderExpression expression :} "every(DISTINCT \"col\")"
Arguments
:: Expression relations Ungrouped params (nullity ty) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity ty) |
minimum and maximum aggregation
Arguments
:: Expression relations Ungrouped params (nullity ty) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity ty) |
minimum and maximum aggregation
Arguments
:: Expression relations Ungrouped params (nullity ty) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity ty) |
minimum and maximum aggregation
Arguments
:: Expression relations Ungrouped params (nullity ty) | what to aggregate |
-> Expression relations (Grouped bys) params (nullity ty) |
minimum and maximum aggregation
Tables
newtype Table (schema :: TablesType) (columns :: RelationType) Source #
A Table
from a table expression is a way
to call a table reference by its alias.
Constructors
UnsafeTable | |
Fields |
Instances
(Has TableType alias schema table, (~) RelationType relation (ColumnsToRelation (TableToColumns table))) => IsLabel alias (Table schema relation) Source # | |
Eq (Table schema columns) Source # | |
Ord (Table schema columns) Source # | |
Show (Table schema columns) Source # | |
Generic (Table schema columns) Source # | |
NFData (Table schema columns) Source # | |
type Rep (Table schema columns) Source # | |
Types
newtype TypeExpression (ty :: ColumnType) Source #
TypeExpression
s are used in cast
s and createTable
commands.
Constructors
UnsafeTypeExpression | |
Fields |
Instances
Eq (TypeExpression ty) Source # | |
Ord (TypeExpression ty) Source # | |
Show (TypeExpression ty) Source # | |
Generic (TypeExpression ty) Source # | |
NFData (TypeExpression ty) Source # | |
type Rep (TypeExpression ty) Source # | |
class PGTyped (ty :: PGType) where Source #
Minimal complete definition
Instances
PGTyped PGbool Source # | |
PGTyped PGint2 Source # | |
PGTyped PGint4 Source # | |
PGTyped PGint8 Source # | |
PGTyped PGnumeric Source # | |
PGTyped PGfloat4 Source # | |
PGTyped PGfloat8 Source # | |
PGTyped PGtext Source # | |
PGTyped PGbytea Source # | |
PGTyped PGtimestamp Source # | |
PGTyped PGtimestamptz Source # | |
PGTyped PGdate Source # | |
PGTyped PGtime Source # | |
PGTyped PGtimetz Source # | |
PGTyped PGinterval Source # | |
PGTyped PGuuid Source # | |
PGTyped PGjson Source # | |
PGTyped PGjsonb Source # | |
(KnownNat n, (<=) 1 n) => PGTyped (PGchar n) Source # | |
(KnownNat n, (<=) 1 n) => PGTyped (PGvarchar n) Source # | |
PGTyped ty => PGTyped (PGvararray ty) Source # | |
(KnownNat n, PGTyped ty) => PGTyped (PGfixarray n ty) Source # | |
float4 :: TypeExpression (NoDef :=> Null PGfloat4) Source #
single precision floating-point number (4 bytes)
real :: TypeExpression (NoDef :=> Null PGfloat4) Source #
single precision floating-point number (4 bytes)
float8 :: TypeExpression (NoDef :=> Null PGfloat8) Source #
double precision floating-point number (8 bytes)
doublePrecision :: TypeExpression (NoDef :=> Null PGfloat8) Source #
double precision floating-point number (8 bytes)
serial2 :: TypeExpression (Def :=> NotNull PGint2) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint2
smallserial :: TypeExpression (Def :=> NotNull PGint2) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint2
serial4 :: TypeExpression (Def :=> NotNull PGint4) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint4
serial :: TypeExpression (Def :=> NotNull PGint4) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint4
serial8 :: TypeExpression (Def :=> NotNull PGint8) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint8
bigserial :: TypeExpression (Def :=> NotNull PGint8) Source #
not a true type, but merely a notational convenience for creating
unique identifier columns with type `PGint8
char :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGchar n)) Source #
fixed-length character string
character :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGchar n)) Source #
fixed-length character string
varchar :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGvarchar n)) Source #
variable-length character string
characterVarying :: (KnownNat n, 1 <= n) => proxy n -> TypeExpression (NoDef :=> Null (PGvarchar n)) Source #
variable-length character string
timestamp :: TypeExpression (NoDef :=> Null PGtimestamp) Source #
date and time (no time zone)
timestampWithTimeZone :: TypeExpression (NoDef :=> Null PGtimestamptz) Source #
date and time, including time zone
timeWithTimeZone :: TypeExpression (NoDef :=> Null PGtimetz) Source #
time of day, including time zone
interval :: TypeExpression (NoDef :=> Null PGinterval) Source #
time span
vararray :: TypeExpression (NoDef :=> Null pg) -> TypeExpression (NoDef :=> Null (PGvararray pg)) Source #
variable length array
fixarray :: KnownNat n => proxy n -> TypeExpression (NoDef :=> Null pg) -> TypeExpression (NoDef :=> Null (PGfixarray n pg)) Source #
fixed length array
>>>
renderTypeExpression (fixarray (Proxy @2) json)
"json[2]"
notNull :: TypeExpression (def :=> Null ty) -> TypeExpression (def :=> NotNull ty) Source #
used in createTable
commands as a column constraint to ensure
NULL
is not present
default_ :: Expression '[] Ungrouped '[] ty -> TypeExpression (NoDef :=> ty) -> TypeExpression (Def :=> ty) Source #
used in createTable
commands as a column constraint to give a default
Re-export
data NP k (a :: k -> *) (b :: [k]) :: forall k. (k -> *) -> [k] -> * where #
An n-ary product.
The product is parameterized by a type constructor f
and
indexed by a type-level list xs
. The length of the list
determines the number of elements in the product, and if the
i
-th element of the list is of type x
, then the i
-th
element of the product is of type f x
.
The constructor names are chosen to resemble the names of the list constructors.
Two common instantiations of f
are the identity functor I
and the constant functor K
. For I
, the product becomes a
heterogeneous list, where the type-level list describes the
types of its components. For
, the product becomes a
homogeneous list, where the contents of the type-level list are
ignored, but its length still specifies the number of elements.K
a
In the context of the SOP approach to generic programming, an n-ary product describes the structure of the arguments of a single data constructor.
Examples:
I 'x' :* I True :* Nil :: NP I '[ Char, Bool ] K 0 :* K 1 :* Nil :: NP (K Int) '[ Char, Bool ] Just 'x' :* Nothing :* Nil :: NP Maybe '[ Char, Bool ]
Instances
HTrans k1 [k1] k2 [k2] (NP k1) (NP k2) | |
HPure k [k] (NP k) | |
HAp k [k] (NP k) | |
HCollapse k [k] (NP k) | |
HTraverse_ k [k] (NP k) | |
HSequence k [k] (NP k) | |
All k (Compose * k Eq f) xs => Eq (NP k f xs) | |
(All k (Compose * k Eq f) xs, All k (Compose * k Ord f) xs) => Ord (NP k f xs) | |
All k (Compose * k Show f) xs => Show (NP k f xs) | |
All k (Compose * k NFData f) xs => NFData (NP k f xs) | Since: 0.2.5.0 |
type AllZipN k [k] a b [a] [b] (NP k) c | |
type Same k1 [k1] k2 [k2] (NP k1) | |
type Prod k [k] (NP k) | |
type UnProd k [k] (NP k) | |
type SListIN k [k] (NP k) | |
type CollapseTo k [k] (NP k) a | |
type AllN k [k] (NP k) c | |