| Copyright | (c) digitally induced GmbH 2020 |
|---|---|
| Safe Haskell | None |
| Language | GHC2021 |
IHP.Fetch
Description
This modules builds on top of QueryBuilder and provides functions to fetch a query builder.
For more complex sql queries, use sqlQuery.
Synopsis
- findManyBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO [GetModelByTableName table]
- findMaybeBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO (Maybe (GetModelByTableName table))
- findBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO (GetModelByTableName table)
- genericFetchId :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO [model]
- genericfetchIdOneOrNothing :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO (Maybe model)
- genericFetchIdOne :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO model
- class Fetchable fetchable model | fetchable -> model where
- type FetchResult fetchable model
- fetch :: fetchable -> IO (FetchResult fetchable model)
- fetchOneOrNothing :: fetchable -> IO (Maybe model)
- fetchOne :: fetchable -> IO model
- genericFetchIds :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO [model]
- genericfetchIdsOneOrNothing :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO (Maybe model)
- genericFetchIdsOne :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO model
- fetchCount :: forall (table :: Symbol). (?modelContext :: ModelContext, KnownSymbol table) => QueryBuilder table -> IO Int
- fetchExists :: forall (table :: Symbol). (?modelContext :: ModelContext, KnownSymbol table) => QueryBuilder table -> IO Bool
- fetchVector :: forall model (table :: Symbol). (Table model, model ~ GetModelByTableName table, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext) => QueryBuilder table -> IO (Vector model)
- fetchLatest :: forall (table :: Symbol) model. (?modelContext :: ModelContext, model ~ GetModelByTableName table, KnownSymbol table, HasField "createdAt" model UTCTime, Table model, FromRowHasql model) => QueryBuilder table -> IO (Maybe model)
- fetchLatestBy :: forall (table :: Symbol) (createdAt :: Symbol) model. (?modelContext :: ModelContext, KnownSymbol createdAt, model ~ GetModelByTableName table, KnownSymbol table, HasField createdAt model UTCTime, Table model, FromRowHasql model) => Proxy createdAt -> QueryBuilder table -> IO (Maybe model)
Documentation
findManyBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO [GetModelByTableName table] Source #
findMaybeBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO (Maybe (GetModelByTableName table)) Source #
findBy :: forall {table :: Symbol} {value} {name :: Symbol}. (Table (GetModelByTableName table), EqOrIsOperator value, HasField name (GetModelByTableName table) value, DefaultParamEncoder value, FromRowHasql (GetModelByTableName table), ?modelContext :: ModelContext, KnownSymbol name, KnownSymbol table) => Proxy name -> value -> QueryBuilder table -> IO (GetModelByTableName table) Source #
genericFetchId :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO [model] Source #
genericfetchIdOneOrNothing :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO (Maybe model) Source #
genericFetchIdOne :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, FilterPrimaryKey table) => Id' table -> IO model Source #
class Fetchable fetchable model | fetchable -> model where Source #
Associated Types
type FetchResult fetchable model Source #
Methods
fetch :: fetchable -> IO (FetchResult fetchable model) Source #
fetchOneOrNothing :: fetchable -> IO (Maybe model) Source #
Instances
| (model ~ GetModelById (Id' table), GetTableName model ~ table, FilterPrimaryKey table) => Fetchable (Id' table) model Source # | |||||
Defined in IHP.Fetch Associated Types
| |||||
| (model ~ GetModelByTableName table, KnownSymbol table) => Fetchable (QueryBuilder table) model Source # | |||||
Defined in IHP.Fetch Associated Types
Methods fetch :: QueryBuilder table -> IO (FetchResult (QueryBuilder table) model) Source # fetchOneOrNothing :: QueryBuilder table -> IO (Maybe model) Source # fetchOne :: QueryBuilder table -> IO model Source # | |||||
| (model ~ GetModelById (Id' table), GetTableName model ~ table, FilterPrimaryKey table) => Fetchable (Maybe (Id' table)) model Source # | |||||
Defined in IHP.Fetch Associated Types
| |||||
| (model ~ GetModelById (Id' table), GetModelByTableName table ~ model, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey table]) => Fetchable [Id' table] model Source # | |||||
Defined in IHP.Fetch Associated Types
| |||||
genericFetchIds :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO [model] Source #
genericfetchIdsOneOrNothing :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO (Maybe model) Source #
genericFetchIdsOne :: forall (table :: Symbol) model. (Table model, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext, model ~ GetModelByTableName table, GetTableName model ~ table, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> IO model Source #
fetchCount :: forall (table :: Symbol). (?modelContext :: ModelContext, KnownSymbol table) => QueryBuilder table -> IO Int Source #
Returns the count of records selected by the query builder.
Example: Counting all users.
allUsersCount <- query @User |> fetchCount -- SELECT COUNT(*) FROM users
Example: Counting all active projects
activeProjectsCount <- query @Project
|> filterWhere (#isActive, True)
|> fetchCount
-- SELECT COUNT(*) FROM projects WHERE is_active = truefetchExists :: forall (table :: Symbol). (?modelContext :: ModelContext, KnownSymbol table) => QueryBuilder table -> IO Bool Source #
Checks whether the query has any results.
Returns True when there is at least one row matching the conditions of the query. Returns False otherwise.
Example: Checking whether there are unread messages
hasUnreadMessages <- query @Message
|> filterWhere (#isUnread, True)
|> fetchExists
-- SELECT EXISTS (SELECT * FROM messages WHERE is_unread = true)fetchVector :: forall model (table :: Symbol). (Table model, model ~ GetModelByTableName table, KnownSymbol table, FromRowHasql model, ?modelContext :: ModelContext) => QueryBuilder table -> IO (Vector model) Source #
fetchLatest :: forall (table :: Symbol) model. (?modelContext :: ModelContext, model ~ GetModelByTableName table, KnownSymbol table, HasField "createdAt" model UTCTime, Table model, FromRowHasql model) => QueryBuilder table -> IO (Maybe model) Source #
Returns the latest record or Nothing
Example:
latestUser <-
query @User
|> fetchLatest
fetchLatest is mainly a shortcut for code like this:
latestUser <-
query @User
|> orderByDesc #createdAt
|> fetchOneOrNothingfetchLatestBy :: forall (table :: Symbol) (createdAt :: Symbol) model. (?modelContext :: ModelContext, KnownSymbol createdAt, model ~ GetModelByTableName table, KnownSymbol table, HasField createdAt model UTCTime, Table model, FromRowHasql model) => Proxy createdAt -> QueryBuilder table -> IO (Maybe model) Source #
Provided a field name, it returns the latest record or Nothing
See fetchLatest if you're looking for the latest record by the createdAt timestamp.
Example:
latestTrialUser <-
query @User
|> fetchLatestBy #trialStartedAt
fetchLatestBy is mainly a shortcut for code like this:
latestUser <-
query @User
|> orderByDesc #trialStartedAt
|> fetchOneOrNothing