Safe Haskell | None |
---|---|
Language | Haskell98 |
This module provides mechanism for flexible and typesafe usage of plain data values and fields. The expressions can used in conditions and right part of Update statement. Example:
StringField ==. "abc" &&. NumberField >. (0 :: Int) ||. MaybeField ==. (Nothing :: Maybe String) ||. MaybeField ==. Just "def"
Note that polymorphic values like numbers or Nothing must have a type annotation. Comparison operators specific for SQL such as IN and LIKE are defined in Database.Groundhog.Generic.Sql.Functions.
- class Expression db r a where
- toExpr :: a -> UntypedExpr db r
- class Unifiable a b
- class (Expression db r a, PersistField a') => ExpressionOf db r a a' | a -> a'
- (=.) :: (Assignable f a', ProjectionDb f db, ProjectionRestriction f r, Expression db r b, Unifiable f b) => f -> b -> Update db r
- (&&.) :: Cond db r -> Cond db r -> Cond db r
- (||.) :: Cond db r -> Cond db r -> Cond db r
- (==.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- (/=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- (<.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- (<=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- (>.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- (>=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r
- isFieldNothing :: (Expression db r f, Projection f (Maybe a), PrimitivePersistField (Maybe a), Unifiable f (Maybe a)) => f -> Cond db r
- liftExpr :: ExpressionOf db r a a' => a -> Expr db r a'
- toArith :: ExpressionOf db r a a' => a -> Expr db r a'
Documentation
class Expression db r a where Source
Instances of this type can be converted to UntypedExpr
. It is useful for uniform manipulation over fields, constant values, etc.
toExpr :: a -> UntypedExpr db r Source
PurePersistField a => Expression db r a | |
(PersistEntity v, DbDescriptor db, IsUniqueKey k, (~) * k (Key v (Unique u)), (~) * (RestrictionHolder v c) r') => Expression db r' (u (UniqueMarker v)) | |
((~) * db' db, (~) * r' r) => Expression db' r' (Cond db r) | |
(EntityConstr v c, DbDescriptor db, (~) * (RestrictionHolder v c) r') => Expression db r' (AutoKeyField v c) | |
(EntityConstr v c, DbDescriptor db, PersistField a, (~) * (RestrictionHolder v c) r') => Expression db r' (Field v c a) | |
(PersistField a, (~) * db' db, (~) * r' r) => Expression db' r' (Expr db r a) | |
(EntityConstr v c, DbDescriptor db, PersistField a, (~) * db' db, (~) * (RestrictionHolder v c) r') => Expression db' r' (SubField db v c a) |
class (Expression db r a, PersistField a') => ExpressionOf db r a a' | a -> a' Source
This helper class can make type signatures more concise
(Expression db r a, Normalize HTrue a (flag, a'), PersistField a') => ExpressionOf db r a a' |
(=.) :: (Assignable f a', ProjectionDb f db, ProjectionRestriction f r, Expression db r b, Unifiable f b) => f -> b -> Update db r infixr 3 Source
Update field
(==.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
(/=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
(<.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
(<=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
(>.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
(>=.) :: (Expression db r a, Expression db r b, Unifiable a b) => a -> b -> Cond db r infix 4 Source
isFieldNothing :: (Expression db r f, Projection f (Maybe a), PrimitivePersistField (Maybe a), Unifiable f (Maybe a)) => f -> Cond db r Source
This function more limited than (==.), but has better type inference.
If you want to compare your value to Nothing with (==.)
operator, you have to write the types explicitly myExpr ==. (Nothing :: Maybe Int)
.
TODO: restrict db r
liftExpr :: ExpressionOf db r a a' => a -> Expr db r a' Source
Converts value to Expr
. It can help to pass values of different types into functions which expect arguments of the same type, like (+).
toArith :: ExpressionOf db r a a' => a -> Expr db r a' Source
Deprecated: Please use liftExpr instead
It is kept for compatibility with older Groundhog versions and can be replaced with "liftExpr".