{-# LANGUAGE BangPatterns, TypeFamilies, DataKinds, PolyKinds, TypeApplications, ScopedTypeVariables, ConstraintKinds, TypeOperators, GADTs, UndecidableInstances, StandaloneDeriving, FunctionalDependencies, FlexibleContexts, InstanceSigs, AllowAmbiguousTypes, DeriveAnyClass #-}
module IHP.QueryBuilder.Filter
( filterWhere
, filterWhereCaseInsensitive
, filterWhereNot
, filterWhereIn
, filterWhereInCaseInsensitive
, filterWhereIdIn
, filterWhereNotIn
, filterWhereLike
, filterWhereILike
, filterWhereMatches
, filterWhereIMatches
, filterWherePast
, filterWhereFuture
, filterWhereGreaterThan
, filterWhereLarger
, filterWhereGreaterThanOrEqualTo
, filterWhereAtLeast
, filterWhereLessThan
, filterWhereSmaller
, filterWhereLessThanOrEqualTo
, filterWhereAtMost
, filterWhereSql
, filterWhereJoinedTable
, filterWhereCaseInsensitiveJoinedTable
, filterWhereNotJoinedTable
, filterWhereInJoinedTable
, filterWhereNotInJoinedTable
, filterWhereLikeJoinedTable
, filterWhereILikeJoinedTable
, filterWhereMatchesJoinedTable
, filterWhereIMatchesJoinedTable
) where
import IHP.Prelude
import IHP.ModelSupport
import IHP.QueryBuilder.Types
import IHP.QueryBuilder.Compiler (negateFilterOperator)
import qualified Hasql.DynamicStatements.Snippet as Snippet
import Hasql.Implicits.Encoders (DefaultParamEncoder)
import IHP.Hasql.Encoders ()
import IHP.QueryBuilder.Compiler (qualifiedColumnName)
filterWhere :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhere :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhere (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhere #-}
filterWhereJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereJoinedTable #-}
filterWhereCaseInsensitiveJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereCaseInsensitiveJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereCaseInsensitiveJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"LOWER", applyRight :: Maybe Text
applyRight = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"LOWER" }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereCaseInsensitiveJoinedTable #-}
filterWhereNot :: forall name table model value. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, Table model) => (Proxy name, value) -> QueryBuilder table -> QueryBuilder table
filterWhereNot :: forall (name :: Symbol) (table :: Symbol) model value.
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
model ~ GetModelByTableName table, Table model) =>
(Proxy name, value) -> QueryBuilder table -> QueryBuilder table
filterWhereNot (Proxy name
name, value
value) QueryBuilder table
queryBuilder = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator -> FilterOperator
negateFilterOperator (value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value), value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
{-# INLINE filterWhereNot #-}
filterWhereNotJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereNotJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereNotJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator -> FilterOperator
negateFilterOperator (value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value), value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereNotJoinedTable #-}
filterWhereIn :: forall name table model value queryBuilderProvider (joinRegister :: Type). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIn :: forall (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) joinRegister.
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value],
DefaultParamEncoder value, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister,
EqOrIsOperator value, Table model) =>
(Proxy name, [value])
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIn (Proxy name
name, [value]
value) queryBuilderProvider table
queryBuilderProvider =
case [value] -> Maybe value
forall a. [a] -> Maybe a
head [value]
nullValues of
Maybe value
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
whereInQuery
Just value
nullValue ->
let
isNullValueExpr :: QueryBuilder table
isNullValueExpr = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
IsOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
nullValue), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
in
case [value] -> Maybe value
forall a. [a] -> Maybe a
head [value]
nonNullValues of
Just value
nonNullValue ->
QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder (QueryBuilder table -> queryBuilderProvider table)
-> QueryBuilder table -> queryBuilderProvider table
forall a b. (a -> b) -> a -> b
$ QueryBuilder table -> QueryBuilder table -> QueryBuilder table
forall (table :: Symbol).
QueryBuilder table -> QueryBuilder table -> QueryBuilder table
UnionQueryBuilder
(QueryBuilder table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol). QueryBuilder table -> QueryBuilder table
injectQueryBuilder QueryBuilder table
whereInQuery)
(QueryBuilder table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol). QueryBuilder table -> QueryBuilder table
injectQueryBuilder QueryBuilder table
isNullValueExpr)
Maybe value
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
isNullValueExpr
where
([value]
nonNullValues, [value]
nullValues) = [value]
value [value] -> ([value] -> ([value], [value])) -> ([value], [value])
forall a b. a -> (a -> b) -> b
|> (value -> Bool) -> [value] -> ([value], [value])
forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (\value
v -> value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
v FilterOperator -> FilterOperator -> Bool
forall a. Eq a => a -> a -> Bool
== FilterOperator
EqOp)
whereInQuery :: QueryBuilder table
whereInQuery = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
InOp, [value] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [value]
nonNullValues), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereIn #-}
filterWhereInCaseInsensitive :: forall name table model value queryBuilderProvider (joinRegister :: Type). ( KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [Text]) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereInCaseInsensitive :: forall (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) joinRegister.
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister,
EqOrIsOperator value, Table model) =>
(Proxy name, [Text])
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereInCaseInsensitive (Proxy name
name, [Text]
values) queryBuilderProvider table
queryBuilderProvider =
case [Text] -> Maybe Text
forall a. [a] -> Maybe a
head [Text]
nullValues of
Maybe Text
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
whereInQuery
Just Text
nullValue ->
let
isNullValueExpr :: QueryBuilder table
isNullValueExpr = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
IsOp, Text -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param Text
nullValue), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
in
case [Text] -> Maybe Text
forall a. [a] -> Maybe a
head [Text]
nonNullValues of
Just Text
_ ->
QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder (QueryBuilder table -> queryBuilderProvider table)
-> QueryBuilder table -> queryBuilderProvider table
forall a b. (a -> b) -> a -> b
$ QueryBuilder table -> QueryBuilder table -> QueryBuilder table
forall (table :: Symbol).
QueryBuilder table -> QueryBuilder table -> QueryBuilder table
UnionQueryBuilder
(QueryBuilder table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol). QueryBuilder table -> QueryBuilder table
injectQueryBuilder QueryBuilder table
whereInQuery)
(QueryBuilder table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol). QueryBuilder table -> QueryBuilder table
injectQueryBuilder QueryBuilder table
isNullValueExpr)
Maybe Text
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
isNullValueExpr
where
([Text]
nonNullValues, [Text]
nullValues) = [Text]
values [Text] -> ([Text] -> ([Text], [Text])) -> ([Text], [Text])
forall a b. a -> (a -> b) -> b
|> (Text -> Bool) -> [Text] -> ([Text], [Text])
forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (\Text
v -> Text -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator Text
v FilterOperator -> FilterOperator -> Bool
forall a. Eq a => a -> a -> Bool
== FilterOperator
EqOp)
lowerValues :: [Text]
lowerValues = (Text -> Text) -> [Text] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Text
toLower [Text]
nonNullValues
whereInQuery :: QueryBuilder table
whereInQuery = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
lowerColumnName, FilterOperator
InOp, [Text] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [Text]
lowerValues), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
lowerColumnName :: Text
lowerColumnName = Text
"LOWER(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
columnName Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
")"
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereInCaseInsensitive #-}
filterWhereInJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value],
HasField name model value, table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, [value])
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereInJoinedTable (Proxy name
name, [value]
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
InOp, [value] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [value]
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereInJoinedTable #-}
filterWhereNotIn :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereNotIn :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value],
DefaultParamEncoder value, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister,
EqOrIsOperator value) =>
(Proxy name, [value])
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereNotIn (Proxy name
_, []) queryBuilderProvider table
queryBuilder = queryBuilderProvider table
queryBuilder
filterWhereNotIn (Proxy name
name, [value]
value) queryBuilderProvider table
queryBuilderProvider =
case [value] -> Maybe value
forall a. [a] -> Maybe a
head [value]
nullValues of
Maybe value
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
whereNotInQuery
Just value
nullValue ->
case [value] -> Maybe value
forall a. [a] -> Maybe a
head [value]
nonNullValues of
Just value
nonNullValue -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { queryBuilder :: QueryBuilder table
queryBuilder = QueryBuilder table
whereNotInQuery, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
IsNotOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
nullValue), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
Maybe value
Nothing -> QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
IsNotOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
nullValue), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
([value]
nonNullValues, [value]
nullValues) = [value]
value [value] -> ([value] -> ([value], [value])) -> ([value], [value])
forall a b. a -> (a -> b) -> b
|> (value -> Bool) -> [value] -> ([value], [value])
forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (\value
v -> value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
v FilterOperator -> FilterOperator -> Bool
forall a. Eq a => a -> a -> Bool
== FilterOperator
EqOp)
whereNotInQuery :: QueryBuilder table
whereNotInQuery = FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
NotInOp, [value] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [value]
nonNullValues), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @table) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereNotIn #-}
filterWhereNotInJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereNotInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value],
HasField name model value, table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, [value])
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereNotInJoinedTable (Proxy name
_, []) queryBuilderProvider table'
queryBuilderProvider = queryBuilderProvider table'
queryBuilderProvider
filterWhereNotInJoinedTable (Proxy name
name, [value]
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
NotInOp, [value] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [value]
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereNotInJoinedTable #-}
filterWhereLike :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLike :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLike (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
LikeOp MatchSensitivity
CaseSensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereLike #-}
filterWhereLikeJoinedTable :: forall model name table value queryBuilderProvider joinRegister table'. (KnownSymbol name, KnownSymbol table, table ~ GetTableName model, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereLikeJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol name, KnownSymbol table, table ~ GetTableName model,
DefaultParamEncoder value, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereLikeJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
LikeOp MatchSensitivity
CaseSensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereLikeJoinedTable #-}
filterWhereILike :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereILike :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereILike (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
LikeOp MatchSensitivity
CaseInsensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereILike #-}
filterWhereILikeJoinedTable :: forall model table name table' model' value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, model' ~ GetModelByTableName table', HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereILikeJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol)
(table' :: Symbol) model' value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, table ~ GetTableName model,
model' ~ GetModelByTableName table',
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereILikeJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
LikeOp MatchSensitivity
CaseInsensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereILikeJoinedTable #-}
filterWhereMatches :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereMatches (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
MatchesOp MatchSensitivity
CaseSensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereMatches #-}
filterWhereMatchesJoinedTable :: forall model table name value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereMatchesJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
MatchesOp MatchSensitivity
CaseSensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereMatchesJoinedTable #-}
filterWhereIMatches :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIMatches (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
MatchesOp MatchSensitivity
CaseInsensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereIMatches #-}
filterWhereIMatchesJoinedTable :: forall model table name value queryBuilderProvider joinRegister table'. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereIMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k1)
(table' :: Symbol).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, table ~ GetTableName model,
HasQueryBuilder queryBuilderProvider joinRegister,
IsJoined model joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table' -> queryBuilderProvider table'
filterWhereIMatchesJoinedTable (Proxy name
name, value
value) queryBuilderProvider table'
queryBuilderProvider = QueryBuilder table' -> queryBuilderProvider table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder :: QueryBuilder table'
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, MatchSensitivity -> FilterOperator
MatchesOp MatchSensitivity
CaseInsensitive, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table'
queryBuilder = queryBuilderProvider table' -> QueryBuilder table'
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table'
queryBuilderProvider
{-# INLINE filterWhereIMatchesJoinedTable #-}
filterWherePast
:: ( KnownSymbol table
, KnownSymbol name
, HasField name (GetModelByTableName table) value
, HasQueryBuilder queryBuilderProvider joinRegister
, Table (GetModelByTableName table)
)
=> Proxy name -> queryBuilderProvider table -> queryBuilderProvider table
filterWherePast :: forall {k} (table :: Symbol) (name :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name,
HasField name (GetModelByTableName table) value,
HasQueryBuilder queryBuilderProvider joinRegister,
Table (GetModelByTableName table)) =>
Proxy name
-> queryBuilderProvider table -> queryBuilderProvider table
filterWherePast Proxy name
name = (Proxy name, Text)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, Text)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSql (Proxy name
name, Text
"<= NOW()")
{-# INLINE filterWherePast #-}
filterWhereFuture
:: ( KnownSymbol table
, KnownSymbol name
, HasField name (GetModelByTableName table) value
, HasQueryBuilder queryBuilderProvider joinRegister
, Table (GetModelByTableName table)
)
=> Proxy name -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereFuture :: forall {k} (table :: Symbol) (name :: Symbol) value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name,
HasField name (GetModelByTableName table) value,
HasQueryBuilder queryBuilderProvider joinRegister,
Table (GetModelByTableName table)) =>
Proxy name
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereFuture Proxy name
name = (Proxy name, Text)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, Text)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSql (Proxy name
name, Text
"> NOW()")
{-# INLINE filterWhereFuture #-}
filterWhereGreaterThan :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThan :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThan (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
GreaterThanOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereGreaterThan #-}
filterWhereLarger :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLarger :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLarger = (Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThan
{-# INLINE filterWhereLarger #-}
filterWhereGreaterThanOrEqualTo :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThanOrEqualTo (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
GreaterThanOrEqualToOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereGreaterThanOrEqualTo #-}
filterWhereAtLeast :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereAtLeast :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereAtLeast = (Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereGreaterThanOrEqualTo
{-# INLINE filterWhereAtLeast #-}
filterWhereLessThan :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThan :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThan (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
LessThanOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereLessThan #-}
filterWhereSmaller :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSmaller :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSmaller = (Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThan
{-# INLINE filterWhereSmaller #-}
filterWhereLessThanOrEqualTo :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThanOrEqualTo (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
LessThanOrEqualToOp, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereLessThanOrEqualTo #-}
filterWhereAtMost :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereAtMost :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereAtMost = (Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereLessThanOrEqualTo
{-# INLINE filterWhereAtMost #-}
filterWhereSql :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, Text) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSql :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, HasField name model value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, Text)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereSql (Proxy name
name, Text
sqlCondition) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, FilterOperator
SqlOp, Text -> Snippet
Snippet.sql Text
sqlCondition), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereSql #-}
filterWhereCaseInsensitive :: forall name table model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereCaseInsensitive :: forall {k} (name :: Symbol) (table :: Symbol) model value
(queryBuilderProvider :: Symbol -> *) (joinRegister :: k).
(KnownSymbol table, KnownSymbol name, DefaultParamEncoder value,
HasField name model value, EqOrIsOperator value,
model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister, Table model) =>
(Proxy name, value)
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereCaseInsensitive (Proxy name
name, value
value) queryBuilderProvider table
queryBuilderProvider = QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder FilterByQueryBuilder { QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (Text
columnName, value -> FilterOperator
forall value. EqOrIsOperator value => value -> FilterOperator
toEqOrIsOperator value
value, value -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param value
value), applyLeft :: Maybe Text
applyLeft = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"LOWER", applyRight :: Maybe Text
applyRight = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"LOWER" }
where
columnName :: Text
columnName = Text -> Text -> Text
qualifiedColumnName (forall record. Table record => Text
tableName @model) (forall (symbol :: Symbol). KnownSymbol symbol => Text
symbolToText @name)
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
{-# INLINE filterWhereCaseInsensitive #-}
filterWhereIdIn :: forall table model queryBuilderProvider (joinRegister :: Type). (KnownSymbol table, Table model, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIdIn :: forall (table :: Symbol) model
(queryBuilderProvider :: Symbol -> *) joinRegister.
(KnownSymbol table, Table model, model ~ GetModelByTableName table,
HasQueryBuilder queryBuilderProvider joinRegister,
DefaultParamEncoder [PrimaryKey (GetTableName model)]) =>
[Id model]
-> queryBuilderProvider table -> queryBuilderProvider table
filterWhereIdIn [Id model]
values queryBuilderProvider table
queryBuilderProvider =
let
rawPrimaryKeys :: [PrimaryKey (GetTableName model)]
rawPrimaryKeys = (Id model -> PrimaryKey (GetTableName model))
-> [Id model] -> [PrimaryKey (GetTableName model)]
forall a b. (a -> b) -> [a] -> [b]
map (\(Id PrimaryKey (GetTableName model)
pk) -> PrimaryKey (GetTableName model)
pk) [Id model]
values
queryBuilder :: QueryBuilder table
queryBuilder = queryBuilderProvider table -> QueryBuilder table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
queryBuilderProvider table -> QueryBuilder table
forall (table :: Symbol).
queryBuilderProvider table -> QueryBuilder table
getQueryBuilder queryBuilderProvider table
queryBuilderProvider
whereInQuery :: QueryBuilder table
whereInQuery = FilterByQueryBuilder {QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder :: QueryBuilder table
queryBuilder, queryFilter :: (Text, FilterOperator, Snippet)
queryFilter = (forall record. Table record => Text
primaryKeyConditionColumnSelector @model, FilterOperator
InOp, [PrimaryKey (GetTableName model)] -> Snippet
forall param. DefaultParamEncoder param => param -> Snippet
Snippet.param [PrimaryKey (GetTableName model)]
rawPrimaryKeys), applyLeft :: Maybe Text
applyLeft = Maybe Text
forall a. Maybe a
Nothing, applyRight :: Maybe Text
applyRight = Maybe Text
forall a. Maybe a
Nothing}
in
QueryBuilder table -> queryBuilderProvider table
forall {k} (queryBuilderProvider :: Symbol -> *)
(joinRegister :: k) (table :: Symbol).
HasQueryBuilder queryBuilderProvider joinRegister =>
QueryBuilder table -> queryBuilderProvider table
forall (table :: Symbol).
QueryBuilder table -> queryBuilderProvider table
injectQueryBuilder QueryBuilder table
whereInQuery
{-# INLINE filterWhereIdIn #-}