beam-core-0.9.2.1: Type-safe, feature-complete SQL query and manipulation interface for Haskell
Safe Haskell None
Language Haskell2010

Database.Beam.Query.CustomSQL

Description

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

The customExpr_ function

class IsCustomExprFn fn res | res -> fn where Source #

Methods

customExpr_ :: fn -> res Source #

Type-inference help

valueExpr_ :: QExpr be s a -> QExpr be s a Source #

Force a QGenExpr to be typed as a value expression (a QExpr ). Useful for getting around type-inference errors with supplying the entire type.

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.

Associated Types

data CustomSqlSyntax syntax :: Type Source #

Methods

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.