Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Allows the creation of custom SQL expressions from arbitrary string-like values.
Simply write a polymorphic function with an arbitrary number of arguments,
all of the same type, and returns a value of the same type. The type will
have instances of Monoid
and IsString
.
For example, to implement a function MYFUNC
that takes three arguments
myFuncImpl :: (Monoid a, IsString a) => a -> a -> a -> a
Then, apply customExpr_
to your function. This will result in a function
with the same arity, that takes in and returns QGenExpr
s instead of
generic a
s.
The returned function is polymorphic in the types of SQL expressions it
will accept, but you can give it a more specific signature. For example, to
mandate that we receive two Int32
s and a Text
and return a Bool
.
myFunc_ :: QGenExpr e ctxt s Int32 -> QGenExpr e ctxt s Int32 -> QGenExpr e ctxt s T.Text -> QGenExpr e ctxt s Bool myFunc_ = customExpr_ myFuncImpl
Semantically, the expression builder function (myFuncImpl
in this case)
is called with arguments representing SQL expressions, that, when
evaluated, will evaluate to the result of the expressions supplied as
arguments to customExpr_
. See the section on
https://haskell-beam.github.io/beam/user-guide/extensibility/extensibility
in the user guide for example usage.
Synopsis
- class IsCustomExprFn fn res | res -> fn where
- customExpr_ :: fn -> res
- valueExpr_ :: QExpr be s a -> QExpr be s a
- agg_ :: QAgg be s a -> QAgg be s a
- class (Monoid (CustomSqlSyntax syntax), Semigroup (CustomSqlSyntax syntax), IsString (CustomSqlSyntax syntax)) => IsCustomSqlSyntax syntax where
- data CustomSqlSyntax syntax :: Type
- customExprSyntax :: CustomSqlSyntax syntax -> syntax
- renderSyntax :: syntax -> CustomSqlSyntax syntax
The customExpr_
function
class IsCustomExprFn fn res | res -> fn where Source #
customExpr_ :: fn -> res Source #
Type-inference help
valueExpr_ :: QExpr be s a -> QExpr be s a Source #
agg_ :: QAgg be s a -> QAgg be s a Source #
Force a QGenExpr
to be typed as an aggregate. Useful for defining custom
aggregates for use in aggregate_
.
For backends
class (Monoid (CustomSqlSyntax syntax), Semigroup (CustomSqlSyntax syntax), IsString (CustomSqlSyntax syntax)) => IsCustomSqlSyntax syntax where Source #
A type-class for expression syntaxes that can embed custom expressions.
data CustomSqlSyntax syntax :: Type Source #
customExprSyntax :: CustomSqlSyntax syntax -> syntax Source #
Given an arbitrary string-like expression, produce a syntax
that represents the
ByteString
as a SQL expression.
renderSyntax :: syntax -> CustomSqlSyntax syntax Source #
Given an arbitrary syntax
, produce a string-like value that corresponds to
how that syntax would look when rendered in the backend.