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

IHP.QueryBuilder.Types

Description

 
Synopsis

Core Types

newtype QueryBuilder (table :: Symbol) Source #

The QueryBuilder is a flat newtype over SQLQuery. Each combinator directly modifies fields of the underlying SQLQuery, avoiding any recursive tree traversal.

Constructors

QueryBuilder 

Instances

Instances details
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 -> Markup

(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

Constructors

SQLQuery 

Fields

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 "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 ConditionValue Source #

A condition value: either a parameterized encoder or a literal SQL fragment.

Constructors

Param !(Params ())

Parameterized value: compiler assigns $N

Literal !Text

Raw SQL text (for filterWhereSql, NULL comparisons, etc.)

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.5.0-JkJMY5grI1LEXDOsW6DsRv" '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.5.0-JkJMY5grI1LEXDOsW6DsRv" '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.5.0-JkJMY5grI1LEXDOsW6DsRv" '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.5.0-JkJMY5grI1LEXDOsW6DsRv" '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

Helpers

addCondition :: forall (table :: Symbol). Condition -> QueryBuilder table -> QueryBuilder table Source #

Add a WHERE condition to a QueryBuilder, ANDing with any existing condition.

qualifyAndJoinColumns :: Text -> [Text] -> Text Source #

Pre-compute the qualified, comma-separated column selector. E.g. qualifyAndJoinColumns "users" ["id", "name"] = "users.id, users.name"

Intentionally NOINLINE: call sites (query, def) are lifted to CAFs, so this is evaluated once per table type. NOINLINE prevents GHC from inlining the map/intercalate into every use site of the resulting SQLQuery.

Type Classes

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 #