10#include "query/SelectSpec.hpp"
15template <
typename SchemaType>
39 data.predicate = predicate;
50 data.predicate = data.predicate.has_value() ? data.predicate.value() && predicate : predicate;
61 data.predicate = data.predicate.has_value() ? data.predicate.value() || predicate : predicate;
72 template <
typename... Orders>
75 data.orderBy = {std::move(orders)...};
86 template <
typename... Columns>
89 data.groupBy = {std::move(columns)...};
102 data.having = predicate;
115 data.having = data.having.has_value() ? data.having.value() && predicate : predicate;
128 data.having = data.having.has_value() ? data.having.value() || predicate : predicate;
139 data.isDistinct =
true;
175 data.shouldJoin =
false;
190 if (relation.empty())
192 throw std::invalid_argument{
"Included relation name must not be empty"};
195 if (std::ranges::find(data.includes, relation) == data.includes.end())
197 data.includes.push_back(std::move(relation));
215 [[nodiscard]]
inline auto getData() const -> const query::SelectSpec&
220 query::SelectSpec data;
A class representing a database in the ORM framework.
Definition database.hpp:67
Database facade bound to one closed compile-time model schema.
Definition database.hpp:704
auto orderBy(Orders... orders) -> Query< T > &
Sets the ORDER BY clauses for the select query.
Definition query.hpp:73
auto groupBy(Columns... columns) -> Query< T > &
Sets the GROUP BY columns for the select query.
Definition query.hpp:87
auto andWhere(const query::Predicate &predicate) -> Query< T > &
Adds a predicate with AND.
Definition query.hpp:48
auto orWhere(const query::Predicate &predicate) -> Query< T > &
Adds a predicate with OR.
Definition query.hpp:59
Query()=default
Constructs a Query object.
auto having(const query::AggregatePredicate &predicate) -> Query< T > &
Replaces the HAVING predicate.
Definition query.hpp:100
auto andHaving(const query::AggregatePredicate &predicate) -> Query< T > &
Adds an aggregate predicate with AND.
Definition query.hpp:113
auto where(const query::Predicate &predicate) -> Query< T > &
Replaces the WHERE predicate.
Definition query.hpp:37
auto distinct() -> Query< T > &
Select distinct rows.
Definition query.hpp:137
auto limit(std::size_t limit) -> Query< T > &
Sets the LIMIT clause for the select query.
Definition query.hpp:161
auto include(std::string relation) -> Query< T > &
Explicitly loads a mapped OneToMany or ManyToMany collection.
Definition query.hpp:188
auto disableJoining() -> Query< T > &
Disables joining for the select query.
Definition query.hpp:173
auto offset(std::size_t offset) -> Query< T > &
Sets the OFFSET clause for the select query.
Definition query.hpp:149
auto orHaving(const query::AggregatePredicate &predicate) -> Query< T > &
Adds an aggregate predicate with OR.
Definition query.hpp:126