Safe Haskell | None |
---|---|
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.