ihp-1.4.0: Haskell Web Framework
Copyright(c) digitally induced GmbH 2020
Safe HaskellNone
LanguageGHC2021

IHP.QueryBuilder.Types

Description

 
Synopsis

Core Types

data QueryBuilder (table :: Symbol) Source #

The main QueryBuilder data type, representing different query operations

Instances

Instances details
HasQueryBuilder QueryBuilder EmptyModelList Source #

QueryBuilders have query builders and the join register is empty.

Instance details

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 #

Table (GetModelByTableName table) => Default (QueryBuilder table) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

def :: QueryBuilder table Source #

Show (QueryBuilder table) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

showsPrec :: Int -> QueryBuilder table -> ShowS #

show :: QueryBuilder table -> String #

showList :: [QueryBuilder table] -> ShowS #

Eq (QueryBuilder table) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

(==) :: QueryBuilder table -> QueryBuilder table -> Bool #

(/=) :: QueryBuilder table -> QueryBuilder table -> Bool #

KnownSymbol table => ToHtml (QueryBuilder table) Source #

Display QueryBuilder's as their sql query inside HSX

Instance details

Defined in IHP.QueryBuilder.Types

Methods

toHtml :: QueryBuilder table -> Html

(model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (QueryBuilder table) model Source # 
Instance details

Defined in IHP.Fetch

Associated Types

type FetchResult (QueryBuilder table) model 
Instance details

Defined in IHP.Fetch

type FetchResult (QueryBuilder table) model = [model]

Methods

fetch :: QueryBuilder table -> IO (FetchResult (QueryBuilder table) model) Source #

fetchOneOrNothing :: QueryBuilder table -> IO (Maybe model) Source #

fetchOne :: QueryBuilder table -> IO model Source #

type FetchResult (QueryBuilder table) model Source # 
Instance details

Defined in IHP.Fetch

type FetchResult (QueryBuilder table) model = [model]

data SQLQuery Source #

Represents a complete SQL query after building

Instances

Instances details
Show SQLQuery Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "distinctClause" SQLQuery Bool Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "selectFrom" SQLQuery Text Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "distinctOnClause" SQLQuery (Maybe Text) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "limitClause" SQLQuery (Maybe Int) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "offsetClause" SQLQuery (Maybe Int) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "orderByClause" SQLQuery [OrderByClause] Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "queryIndex" SQLQuery (Maybe Text) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "whereCondition" SQLQuery (Maybe Condition) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

data Condition Source #

Represents a WHERE condition

Instances

Instances details
Show Condition Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Eq Condition Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "whereCondition" SQLQuery (Maybe Condition) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

data Join Source #

Represents a JOIN clause

Constructors

Join 

Instances

Instances details
Show Join Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

showsPrec :: Int -> Join -> ShowS #

show :: Join -> String #

showList :: [Join] -> ShowS #

Eq Join Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

(==) :: Join -> Join -> Bool #

(/=) :: Join -> Join -> Bool #

data OrderByClause Source #

Represents an ORDER BY clause component

Instances

Instances details
NFData OrderByClause Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

rnf :: OrderByClause -> () #

Generic OrderByClause Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Associated Types

type Rep OrderByClause 
Instance details

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)))
Show OrderByClause Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Eq OrderByClause Source # 
Instance details

Defined in IHP.QueryBuilder.Types

SetField "orderByClause" SQLQuery [OrderByClause] Source # 
Instance details

Defined in IHP.QueryBuilder.Types

type Rep OrderByClause Source # 
Instance details

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

Constructors

Asc 
Desc 

Instances

Instances details
NFData OrderByDirection Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

rnf :: OrderByDirection -> () #

Generic OrderByDirection Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Associated Types

type Rep OrderByDirection 
Instance details

Defined in IHP.QueryBuilder.Types

type Rep OrderByDirection = D1 ('MetaData "OrderByDirection" "IHP.QueryBuilder.Types" "ihp-1.4.0-43TSTr8sXn3AQow4erFGsr" 'False) (C1 ('MetaCons "Asc" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Desc" 'PrefixI 'False) (U1 :: Type -> Type))
Show OrderByDirection Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Eq OrderByDirection Source # 
Instance details

Defined in IHP.QueryBuilder.Types

type Rep OrderByDirection Source # 
Instance details

Defined in IHP.QueryBuilder.Types

type Rep OrderByDirection = D1 ('MetaData "OrderByDirection" "IHP.QueryBuilder.Types" "ihp-1.4.0-43TSTr8sXn3AQow4erFGsr" 'False) (C1 ('MetaCons "Asc" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Desc" 'PrefixI 'False) (U1 :: Type -> Type))

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 filterWhereSql

data MatchSensitivity Source #

Represents whether string matching should be case-sensitive or not

Type-level Join Tracking

data NoJoins Source #

Type-level marker indicating no joins are allowed

Instances

Instances details
HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source #

NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins

Instance details

Defined in IHP.QueryBuilder.Types

(KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol indexColumn, HasField indexColumn foreignModel indexValue) => HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable indexColumn indexValue) NoJoins Source # 
Instance details

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

Instances details
ModelList EmptyModelList Source # 
Instance details

Defined in IHP.QueryBuilder.Types

HasQueryBuilder QueryBuilder EmptyModelList Source #

QueryBuilders have query builders and the join register is empty.

Instance details

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

Instances details
ModelList b => IsJoined (a :: k2) (ConsModelList a b :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

(ModelList b, IsJoined a b) => IsJoined (a :: k2) (ConsModelList c b :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

ModelList (ConsModelList model models :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

class ModelList (a :: k) Source #

Type class to represent the true list type EmptyModelList ConsModelList.

Instances

Instances details
ModelList EmptyModelList Source # 
Instance details

Defined in IHP.QueryBuilder.Types

ModelList (ConsModelList model models :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

class IsJoined (a :: k) (b :: k1) Source #

Type class to query containment in the type-level list.

Instances

Instances details
ModelList b => IsJoined (a :: k2) (ConsModelList a b :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

(ModelList b, IsJoined a b) => IsJoined (a :: k2) (ConsModelList c b :: Type) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

QueryBuilder Wrappers

newtype JoinQueryBuilderWrapper (joinRegister :: k) (table :: Symbol) Source #

Wrapper for QueryBuilders resulting from joins. Associates a joinRegister type.

Instances

Instances details
HasQueryBuilder (JoinQueryBuilderWrapper joinRegister) (joinRegister :: k) Source #

JoinQueryBuilderWrappers have query builders

Instance details

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 # 
Instance details

Defined in IHP.Fetch

Associated Types

type FetchResult (JoinQueryBuilderWrapper r table) model 
Instance details

Defined in IHP.Fetch

type FetchResult (JoinQueryBuilderWrapper r table) model = [model]
type FetchResult (JoinQueryBuilderWrapper r table) model Source # 
Instance details

Defined in IHP.Fetch

type FetchResult (JoinQueryBuilderWrapper r table) model = [model]

newtype NoJoinQueryBuilderWrapper (table :: Symbol) Source #

Wrapper for QueryBuilder that must not joins, e.g. queryUnion.

Instances

Instances details
HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source #

NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins

Instance details

Defined in IHP.QueryBuilder.Types

(model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (NoJoinQueryBuilderWrapper table) model Source # 
Instance details

Defined in IHP.Fetch

Associated Types

type FetchResult (NoJoinQueryBuilderWrapper table) model 
Instance details

Defined in IHP.Fetch

type FetchResult (NoJoinQueryBuilderWrapper table) model = [model]
type FetchResult (NoJoinQueryBuilderWrapper table) model Source # 
Instance details

Defined in IHP.Fetch

type FetchResult (NoJoinQueryBuilderWrapper table) model = [model]

newtype LabeledQueryBuilderWrapper (foreignTable :: k) (indexColumn :: k1) (indexValue :: k2) (table :: Symbol) Source #

Wrapper for QueryBuilders with indexed results.

Instances

Instances details
(KnownSymbol foreignTable, foreignModel ~ GetModelByTableName foreignTable, KnownSymbol indexColumn, HasField indexColumn foreignModel indexValue) => HasQueryBuilder (LabeledQueryBuilderWrapper foreignTable indexColumn indexValue) NoJoins Source # 
Instance details

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 # 
Instance details

Defined in IHP.Fetch

Associated Types

type FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model 
Instance details

Defined in IHP.Fetch

type FetchResult (LabeledQueryBuilderWrapper foreignTable columnName value table) model = [LabeledData value model]

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 # 
Instance details

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

getQueryBuilder, injectQueryBuilder

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

Instances details
HasQueryBuilder NoJoinQueryBuilderWrapper NoJoins Source #

NoJoinQueryBuilderWrapper have query builders and the join register does not allow any joins

Instance details

Defined in IHP.QueryBuilder.Types

HasQueryBuilder QueryBuilder EmptyModelList Source #

QueryBuilders have query builders and the join register is empty.

Instance details

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

Instance details

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 # 
Instance details

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

Instances details
DefaultScope table Source # 
Instance details

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'

Instances

Instances details
EqOrIsOperator otherwise Source # 
Instance details

Defined in IHP.QueryBuilder.Types

Methods

toEqOrIsOperator :: otherwise -> FilterOperator Source #

EqOrIsOperator (Maybe something) Source # 
Instance details

Defined in IHP.QueryBuilder.Types

class FilterPrimaryKey (table :: Symbol) where Source #

Type class for filtering by primary key

Methods

filterWhereId :: Id' table -> QueryBuilder table -> QueryBuilder table Source #

Orphan instances

Show Snippet Source #

Snippet doesn't have a Show instance, so we provide one for debugging QueryBuilder

Instance details