| Copyright | (c) digitally induced GmbH 2020 |
|---|---|
| Safe Haskell | None |
| Language | GHC2021 |
IHP.QueryBuilder.Types
Description
Synopsis
- data QueryBuilder (table :: Symbol)
- = NewQueryBuilder {
- selectFrom :: !Text
- columns :: ![Text]
- | DistinctQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- | DistinctOnQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- distinctOnColumn :: !Text
- | FilterByQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- queryFilter :: !(Text, FilterOperator, Snippet)
- applyLeft :: !(Maybe Text)
- applyRight :: !(Maybe Text)
- | OrderByQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- queryOrderByClause :: !OrderByClause
- | LimitQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- queryLimit :: !Int
- | OffsetQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- queryOffset :: !Int
- | UnionQueryBuilder {
- firstQueryBuilder :: !(QueryBuilder table)
- secondQueryBuilder :: !(QueryBuilder table)
- | JoinQueryBuilder {
- queryBuilder :: !(QueryBuilder table)
- joinData :: Join
- = NewQueryBuilder {
- data SQLQuery = SQLQuery {
- queryIndex :: !(Maybe Text)
- selectFrom :: !Text
- distinctClause :: !Bool
- distinctOnClause :: !(Maybe Text)
- whereCondition :: !(Maybe Condition)
- joins :: ![Join]
- orderByClause :: ![OrderByClause]
- limitClause :: !(Maybe Int)
- offsetClause :: !(Maybe Int)
- columns :: ![Text]
- data Condition
- = ColumnCondition !Text !FilterOperator !Snippet !(Maybe Text) !(Maybe Text)
- | OrCondition !Condition !Condition
- | AndCondition !Condition !Condition
- data Join = Join {
- table :: Text
- tableJoinColumn :: Text
- otherJoinColumn :: Text
- data OrderByClause = OrderByClause {}
- data OrderByDirection
- data FilterOperator
- data MatchSensitivity
- data NoJoins
- data EmptyModelList
- data ConsModelList (model :: k) (models :: k1)
- class ModelList (a :: k)
- class IsJoined (a :: k) (b :: k1)
- newtype JoinQueryBuilderWrapper (joinRegister :: k) (table :: Symbol) = JoinQueryBuilderWrapper (QueryBuilder table)
- newtype NoJoinQueryBuilderWrapper (table :: Symbol) = NoJoinQueryBuilderWrapper (QueryBuilder table)
- newtype LabeledQueryBuilderWrapper (foreignTable :: k) (indexColumn :: k1) (indexValue :: k2) (table :: Symbol) = LabeledQueryBuilderWrapper (QueryBuilder table)
- class HasQueryBuilder (queryBuilderProvider :: Symbol -> Type) (joinRegister :: k) | queryBuilderProvider -> joinRegister where
- getQueryBuilder :: forall (table :: Symbol). queryBuilderProvider table -> QueryBuilder table
- injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> queryBuilderProvider table
- getQueryIndex :: forall (table :: Symbol). queryBuilderProvider table -> Maybe Text
- class DefaultScope (table :: Symbol) where
- defaultScope :: QueryBuilder table -> QueryBuilder table
- class EqOrIsOperator value where
- toEqOrIsOperator :: value -> FilterOperator
- class FilterPrimaryKey (table :: Symbol) where
- filterWhereId :: Id' table -> QueryBuilder table -> QueryBuilder table
Core Types
data QueryBuilder (table :: Symbol) Source #
The main QueryBuilder data type, representing different query operations
Constructors
| NewQueryBuilder | |
Fields
| |
| DistinctQueryBuilder | |
Fields
| |
| DistinctOnQueryBuilder | |
Fields
| |
| FilterByQueryBuilder | |
Fields
| |
| OrderByQueryBuilder | |
Fields
| |
| LimitQueryBuilder | |
Fields
| |
| OffsetQueryBuilder | |
Fields
| |
| UnionQueryBuilder | |
Fields
| |
| JoinQueryBuilder | |
Fields
| |
Instances
Represents a complete SQL query after building
Constructors
| SQLQuery | |
Fields
| |
Instances
| Show SQLQuery Source # | |
| SetField "distinctClause" SQLQuery Bool Source # | |
| SetField "selectFrom" SQLQuery Text Source # | |
| SetField "distinctOnClause" SQLQuery (Maybe Text) Source # | |
| SetField "limitClause" SQLQuery (Maybe Int) Source # | |
| SetField "offsetClause" SQLQuery (Maybe Int) Source # | |
| SetField "orderByClause" SQLQuery [OrderByClause] Source # | |
Defined in IHP.QueryBuilder.Types | |
| SetField "queryIndex" SQLQuery (Maybe Text) Source # | |
| SetField "whereCondition" SQLQuery (Maybe Condition) Source # | |
Represents a WHERE condition
Constructors
| ColumnCondition !Text !FilterOperator !Snippet !(Maybe Text) !(Maybe Text) | |
| OrCondition !Condition !Condition | |
| AndCondition !Condition !Condition |
Represents a JOIN clause
Constructors
| Join | |
Fields
| |
data OrderByClause Source #
Represents an ORDER BY clause component
Constructors
| OrderByClause | |
Fields | |
Instances
| NFData OrderByClause Source # | |||||
Defined in IHP.QueryBuilder.Types Methods rnf :: OrderByClause -> () # | |||||
| Generic OrderByClause Source # | |||||
Defined in IHP.QueryBuilder.Types Associated Types
| |||||
| Show OrderByClause Source # | |||||
Defined in IHP.QueryBuilder.Types Methods showsPrec :: Int -> OrderByClause -> ShowS # show :: OrderByClause -> String # showList :: [OrderByClause] -> ShowS # | |||||
| Eq OrderByClause Source # | |||||
Defined in IHP.QueryBuilder.Types Methods (==) :: OrderByClause -> OrderByClause -> Bool # (/=) :: OrderByClause -> OrderByClause -> Bool # | |||||
| SetField "orderByClause" SQLQuery [OrderByClause] Source # | |||||
Defined in IHP.QueryBuilder.Types | |||||
| type Rep OrderByClause Source # | |||||
Defined in IHP.QueryBuilder.Types type Rep OrderByClause = D1 ('MetaData "OrderByClause" "IHP.QueryBuilder.Types" "ihp-1.4.0-43TSTr8sXn3AQow4erFGsr" 'False) (C1 ('MetaCons "OrderByClause" 'PrefixI 'True) (S1 ('MetaSel ('Just "orderByColumn") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: S1 ('MetaSel ('Just "orderByDirection") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 OrderByDirection))) | |||||
data OrderByDirection Source #
ORDER BY direction
Instances
| NFData OrderByDirection Source # | |||||
Defined in IHP.QueryBuilder.Types Methods rnf :: OrderByDirection -> () # | |||||
| Generic OrderByDirection Source # | |||||
Defined in IHP.QueryBuilder.Types Associated Types
Methods from :: OrderByDirection -> Rep OrderByDirection x # to :: Rep OrderByDirection x -> OrderByDirection # | |||||
| Show OrderByDirection Source # | |||||
Defined in IHP.QueryBuilder.Types Methods showsPrec :: Int -> OrderByDirection -> ShowS # show :: OrderByDirection -> String # showList :: [OrderByDirection] -> ShowS # | |||||
| Eq OrderByDirection Source # | |||||
Defined in IHP.QueryBuilder.Types Methods (==) :: OrderByDirection -> OrderByDirection -> Bool # (/=) :: OrderByDirection -> OrderByDirection -> Bool # | |||||
| type Rep OrderByDirection Source # | |||||
data FilterOperator Source #
Operators used in WHERE clause conditions
Constructors
| EqOp | col = val |
| NotEqOp | col != val |
| InOp | col IN (set) |
| NotInOp | col NOT IN (set) |
| IsOp | col IS val |
| IsNotOp | col IS NOT val |
| LikeOp !MatchSensitivity | col LIKE val |
| NotLikeOp !MatchSensitivity | col NOT LIKE val |
| MatchesOp !MatchSensitivity | col ~ pattern |
| GreaterThanOp | col > val |
| GreaterThanOrEqualToOp | col >= val |
| LessThanOp | col < val |
| LessThanOrEqualToOp | col <= val |
| SqlOp | Used by |
Instances
| Show FilterOperator Source # | |
Defined in IHP.QueryBuilder.Types Methods showsPrec :: Int -> FilterOperator -> ShowS # show :: FilterOperator -> String # showList :: [FilterOperator] -> ShowS # | |
| Eq FilterOperator Source # | |
Defined in IHP.QueryBuilder.Types Methods (==) :: FilterOperator -> FilterOperator -> Bool # (/=) :: FilterOperator -> FilterOperator -> Bool # | |
data MatchSensitivity Source #
Represents whether string matching should be case-sensitive or not
Constructors
| CaseSensitive | |
| CaseInsensitive |
Instances
| Show MatchSensitivity Source # | |
Defined in IHP.QueryBuilder.Types Methods showsPrec :: Int -> MatchSensitivity -> ShowS # show :: MatchSensitivity -> String # showList :: [MatchSensitivity] -> ShowS # | |
| Eq MatchSensitivity Source # | |
Defined in IHP.QueryBuilder.Types Methods (==) :: MatchSensitivity -> MatchSensitivity -> Bool # (/=) :: MatchSensitivity -> MatchSensitivity -> Bool # | |
Type-level Join Tracking
Type-level marker indicating no joins are allowed
Instances
| HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source # | NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> NoJoinQueryBuilderWrapper table Source # getQueryIndex :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> Maybe Text Source # | |
| (KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol indexColumn, HasField indexColumn foreignModel indexValue) => HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable indexColumn indexValue) NoJoins Source # | |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table Source # getQueryIndex :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> Maybe Text Source # | |
data EmptyModelList Source #
Type-level empty list for tracking joined tables
Instances
| ModelList EmptyModelList Source # | |
Defined in IHP.QueryBuilder.Types | |
| HasQueryBuilder QueryBuilder EmptyModelList Source # | QueryBuilders have query builders and the join register is empty. |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table Source # getQueryIndex :: forall (table :: Symbol). QueryBuilder table -> Maybe Text Source # | |
data ConsModelList (model :: k) (models :: k1) Source #
Type-level cons cell for tracking joined tables
Instances
| ModelList b => IsJoined (a :: k2) (ConsModelList a b :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
| (ModelList b, IsJoined a b) => IsJoined (a :: k2) (ConsModelList c b :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
| ModelList (ConsModelList model models :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
class ModelList (a :: k) Source #
Type class to represent the true list type EmptyModelList ConsModelList.
Instances
| ModelList EmptyModelList Source # | |
Defined in IHP.QueryBuilder.Types | |
| ModelList (ConsModelList model models :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
class IsJoined (a :: k) (b :: k1) Source #
Type class to query containment in the type-level list.
Instances
| ModelList b => IsJoined (a :: k2) (ConsModelList a b :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
| (ModelList b, IsJoined a b) => IsJoined (a :: k2) (ConsModelList c b :: Type) Source # | |
Defined in IHP.QueryBuilder.Types | |
QueryBuilder Wrappers
newtype JoinQueryBuilderWrapper (joinRegister :: k) (table :: Symbol) Source #
Wrapper for QueryBuilders resulting from joins. Associates a joinRegister type.
Constructors
| JoinQueryBuilderWrapper (QueryBuilder table) |
Instances
| HasQueryBuilder (JoinQueryBuilderWrapper joinRegister) (joinRegister :: k) Source # | JoinQueryBuilderWrappers have query builders | ||||
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). JoinQueryBuilderWrapper joinRegister table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> JoinQueryBuilderWrapper joinRegister table Source # getQueryIndex :: forall (table :: Symbol). JoinQueryBuilderWrapper joinRegister table -> Maybe Text Source # | |||||
| (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (JoinQueryBuilderWrapper r table) model Source # | |||||
Defined in IHP.Fetch Associated Types
Methods fetch :: JoinQueryBuilderWrapper r table -> IO (FetchResult (JoinQueryBuilderWrapper r table) model) Source # fetchOneOrNothing :: JoinQueryBuilderWrapper r table -> IO (Maybe model) Source # fetchOne :: JoinQueryBuilderWrapper r table -> IO model Source # | |||||
| type FetchResult (JoinQueryBuilderWrapper r table) model Source # | |||||
Defined in IHP.Fetch | |||||
newtype NoJoinQueryBuilderWrapper (table :: Symbol) Source #
Wrapper for QueryBuilder that must not joins, e.g. queryUnion.
Constructors
| NoJoinQueryBuilderWrapper (QueryBuilder table) |
Instances
| HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source # | NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins | ||||
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> NoJoinQueryBuilderWrapper table Source # getQueryIndex :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> Maybe Text Source # | |||||
| (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (NoJoinQueryBuilderWrapper table) model Source # | |||||
Defined in IHP.Fetch Associated Types
Methods fetch :: NoJoinQueryBuilderWrapper table -> IO (FetchResult (NoJoinQueryBuilderWrapper table) model) Source # fetchOneOrNothing :: NoJoinQueryBuilderWrapper table -> IO (Maybe model) Source # fetchOne :: NoJoinQueryBuilderWrapper table -> IO model Source # | |||||
| type FetchResult (NoJoinQueryBuilderWrapper table) model Source # | |||||
Defined in IHP.Fetch | |||||
newtype LabeledQueryBuilderWrapper (foreignTable :: k) (indexColumn :: k1) (indexValue :: k2) (table :: Symbol) Source #
Wrapper for QueryBuilders with indexed results.
Constructors
| LabeledQueryBuilderWrapper (QueryBuilder table) |
Instances
| (KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol indexColumn, HasField indexColumn foreignModel indexValue) => HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable indexColumn indexValue) NoJoins Source # | |||||
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table Source # getQueryIndex :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> Maybe Text Source # | |||||
| (model ~ GetModelByTableName table, KnownSymbol table, HasqlDecodeColumn value, KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol columnName, HasField columnName foreignModel value, HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable columnName value) NoJoins) => Fetchable (LabeledQueryBuilderWrapper foreignTable columnName value table) model Source # | |||||
Defined in IHP.Fetch Associated Types
Methods fetch :: LabeledQueryBuilderWrapper foreignTable columnName value table -> IO (FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model) Source # fetchOneOrNothing :: LabeledQueryBuilderWrapper foreignTable columnName value table -> IO (Maybe model) Source # fetchOne :: LabeledQueryBuilderWrapper foreignTable columnName value table -> IO model Source # | |||||
| type FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model Source # | |||||
Defined in IHP.Fetch type FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model = [LabeledData value model] | |||||
Type Classes
class HasQueryBuilder (queryBuilderProvider :: Symbol -> Type) (joinRegister :: k) | queryBuilderProvider -> joinRegister where Source #
Class to generalise over different QueryBuilder-providing types. The actual query builder can be extracted with getQueryBuilder and injected with injectQueryBuilder. Also assigns a join register to a queryBuilderProvider.
Minimal complete definition
Methods
getQueryBuilder :: forall (table :: Symbol). queryBuilderProvider table -> QueryBuilder table Source #
injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> queryBuilderProvider table Source #
getQueryIndex :: forall (table :: Symbol). queryBuilderProvider table -> Maybe Text Source #
Instances
| HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source # | NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> NoJoinQueryBuilderWrapper table Source # getQueryIndex :: forall (table :: Symbol). NoJoinQueryBuilderWrapper table -> Maybe Text Source # | |
| HasQueryBuilder QueryBuilder EmptyModelList Source # | QueryBuilders have query builders and the join register is empty. |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table Source # getQueryIndex :: forall (table :: Symbol). QueryBuilder table -> Maybe Text Source # | |
| HasQueryBuilder (JoinQueryBuilderWrapper joinRegister) (joinRegister :: k) Source # | JoinQueryBuilderWrappers have query builders |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). JoinQueryBuilderWrapper joinRegister table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> JoinQueryBuilderWrapper joinRegister table Source # getQueryIndex :: forall (table :: Symbol). JoinQueryBuilderWrapper joinRegister table -> Maybe Text Source # | |
| (KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol indexColumn, HasField indexColumn foreignModel indexValue) => HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable indexColumn indexValue) NoJoins Source # | |
Defined in IHP.QueryBuilder.Types Methods getQueryBuilder :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> QueryBuilder table Source # injectQueryBuilder :: forall (table :: Symbol). QueryBuilder table -> LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table Source # getQueryIndex :: forall (table :: Symbol). LabeledQueryBuilderWrapper foreignTable indexColumn indexValue table -> Maybe Text Source # | |
class DefaultScope (table :: Symbol) where Source #
Type class for default scoping of queries
Methods
defaultScope :: QueryBuilder table -> QueryBuilder table Source #
Instances
| DefaultScope table Source # | |
Defined in IHP.QueryBuilder.Types Methods defaultScope :: QueryBuilder table -> QueryBuilder table Source # | |
class EqOrIsOperator value where Source #
Helper to deal with some_field IS NULL and some_field = 'some value'
Methods
toEqOrIsOperator :: value -> FilterOperator Source #
Instances
| EqOrIsOperator otherwise Source # | |
Defined in IHP.QueryBuilder.Types Methods toEqOrIsOperator :: otherwise -> FilterOperator Source # | |
| EqOrIsOperator (Maybe something) Source # | |
Defined in IHP.QueryBuilder.Types Methods toEqOrIsOperator :: Maybe something -> FilterOperator Source # | |
class FilterPrimaryKey (table :: Symbol) where Source #
Type class for filtering by primary key
Methods
filterWhereId :: Id' table -> QueryBuilder table -> QueryBuilder table Source #