Safe Haskell | None |
---|---|
Language | Haskell98 |
This module defines the functions which are used only for backends creation.
Synopsis
- renderCond :: SqlDb db => RenderConfig -> Cond db r -> Maybe (RenderS db r)
- defaultShowPrim :: PersistValue -> String
- renderOrders :: SqlDb db => RenderConfig -> [Order db r] -> RenderS db r
- renderUpdates :: SqlDb db => RenderConfig -> [Update db r] -> Maybe (RenderS db r)
- renderFields :: StringLike s => (s -> s) -> [(String, DbType)] -> s
- renderChain :: RenderConfig -> FieldChain -> [Utf8] -> [Utf8]
- renderExpr :: SqlDb db => RenderConfig -> UntypedExpr db r -> RenderS db r
- renderExprPriority :: SqlDb db => RenderConfig -> Int -> UntypedExpr db r -> RenderS db r
- renderExprExtended :: SqlDb db => RenderConfig -> Int -> UntypedExpr db r -> [RenderS db r]
- renderPersistValue :: PersistValue -> RenderS db r
- mkExprWithConf :: (SqlDb db, PersistField a) => (RenderConfig -> Int -> Expr db r a) -> Expr db r a
- prerenderExpr :: forall db r a. (SqlDb db, PersistField a) => RenderConfig -> Expr db r a -> Expr db r a
- intercalateS :: StringLike s => s -> [s] -> s
- commasJoin :: StringLike s => [s] -> s
- flatten :: StringLike s => (s -> s) -> (String, DbType) -> [s] -> [s]
- data RenderS db r = RenderS {
- getQuery :: Utf8
- getValues :: [PersistValue] -> [PersistValue]
- newtype Utf8 = Utf8 Builder
- fromUtf8 :: Utf8 -> ByteString
- newtype RenderConfig = RenderConfig {}
- class (Semigroup a, Monoid a, IsString a) => StringLike a where
- fromString :: IsString a => String -> a
- (<>) :: Semigroup a => a -> a -> a
- function :: SqlDb db => String -> [UntypedExpr db r] -> Snippet db r
- operator :: (SqlDb db, Expression db r a, Expression db r b) => Int -> String -> a -> b -> Snippet db r
- parens :: Int -> Int -> RenderS db r -> RenderS db r
- mkExpr :: forall db r a. (SqlDb db, PersistField a) => Snippet db r -> Expr db r a
- newtype Snippet db r = Snippet (RenderConfig -> Int -> [RenderS db r])
- class (DbDescriptor db, QueryRaw db ~ Snippet db) => SqlDb db where
- append :: (ExpressionOf db r a String, ExpressionOf db r b String) => a -> b -> Expr db r String
- signum' :: (ExpressionOf db r x a, Num a) => x -> Expr db r a
- quotRem' :: (ExpressionOf db r x a, ExpressionOf db r y a, Integral a) => x -> y -> (Expr db r a, Expr db r a)
- equalsOperator :: RenderS db r -> RenderS db r -> RenderS db r
- notEqualsOperator :: RenderS db r -> RenderS db r -> RenderS db r
- class SqlDb db => FloatingSqlDb db where
- log' :: (ExpressionOf db r x a, Floating a) => x -> Expr db r a
- logBase' :: (ExpressionOf db r b a, ExpressionOf db r x a, Floating a) => b -> x -> Expr db r a
- tableName :: StringLike s => (s -> s) -> EntityDef -> ConstructorDef -> s
- mainTableName :: StringLike s => (s -> s) -> EntityDef -> s
SQL rendering utilities
renderCond :: SqlDb db => RenderConfig -> Cond db r -> Maybe (RenderS db r) Source #
Renders conditions for SQL backend. Returns Nothing if the fields don't have any columns.
defaultShowPrim :: PersistValue -> String Source #
renderOrders :: SqlDb db => RenderConfig -> [Order db r] -> RenderS db r Source #
renderUpdates :: SqlDb db => RenderConfig -> [Update db r] -> Maybe (RenderS db r) Source #
renderFields :: StringLike s => (s -> s) -> [(String, DbType)] -> s Source #
renderChain :: RenderConfig -> FieldChain -> [Utf8] -> [Utf8] Source #
renderExpr :: SqlDb db => RenderConfig -> UntypedExpr db r -> RenderS db r Source #
renderExprPriority :: SqlDb db => RenderConfig -> Int -> UntypedExpr db r -> RenderS db r Source #
renderExprExtended :: SqlDb db => RenderConfig -> Int -> UntypedExpr db r -> [RenderS db r] Source #
renderPersistValue :: PersistValue -> RenderS db r Source #
mkExprWithConf :: (SqlDb db, PersistField a) => (RenderConfig -> Int -> Expr db r a) -> Expr db r a Source #
Helps creating an expression which depends on render configuration. It can be used in pair with prerenderExpr
.
myExpr x = mkExprWithConf $ conf _ -> let
x' = prerenderExpr conf x
in x' + x' * x'
@
prerenderExpr :: forall db r a. (SqlDb db, PersistField a) => RenderConfig -> Expr db r a -> Expr db r a Source #
If we reuse complex expression several times, prerendering it saves time. RenderConfig
can be obtained with mkExprWithConf
intercalateS :: StringLike s => s -> [s] -> s Source #
commasJoin :: StringLike s => [s] -> s Source #
RenderS | |
|
fromUtf8 :: Utf8 -> ByteString Source #
newtype RenderConfig Source #
class (Semigroup a, Monoid a, IsString a) => StringLike a where Source #
Instances
StringLike String Source # | |
StringLike Utf8 Source # | |
StringLike (RenderS db r) Source # | |
fromString :: IsString a => String -> a #
operator :: (SqlDb db, Expression db r a, Expression db r b) => Int -> String -> a -> b -> Snippet db r Source #
Escape function, priority of the outer operator. The result is a list for the embedded data which may expand to several RenderS.
Snippet (RenderConfig -> Int -> [RenderS db r]) |
class (DbDescriptor db, QueryRaw db ~ Snippet db) => SqlDb db where Source #
This class distinguishes databases which support SQL-specific expressions. It contains ad hoc members for features whose syntax differs across the databases.
append :: (ExpressionOf db r a String, ExpressionOf db r b String) => a -> b -> Expr db r String Source #
signum' :: (ExpressionOf db r x a, Num a) => x -> Expr db r a Source #
quotRem' :: (ExpressionOf db r x a, ExpressionOf db r y a, Integral a) => x -> y -> (Expr db r a, Expr db r a) Source #
equalsOperator :: RenderS db r -> RenderS db r -> RenderS db r Source #
notEqualsOperator :: RenderS db r -> RenderS db r -> RenderS db r Source #
class SqlDb db => FloatingSqlDb db where Source #
This class distinguishes databases which support trigonometry and other math functions. For example, PostgreSQL has them but Sqlite does not. It contains ad hoc members for features whose syntax differs across the databases.
log' :: (ExpressionOf db r x a, Floating a) => x -> Expr db r a Source #
Natural logarithm
logBase' :: (ExpressionOf db r b a, ExpressionOf db r x a, Floating a) => b -> x -> Expr db r a Source #
tableName :: StringLike s => (s -> s) -> EntityDef -> ConstructorDef -> s Source #
Returns escaped table name optionally qualified with schema
mainTableName :: StringLike s => (s -> s) -> EntityDef -> s Source #
Returns escaped main table name optionally qualified with schema