ORM C++
Loading...
Searching...
No Matches
query.hpp
1#pragma once
2
3#include <cstddef>
4#include <optional>
5#include <utility>
6
7#include "model.hpp"
8#include "query/QueryData.hpp"
9
10namespace orm
11{
12class Database;
20template <typename T>
21class Query
22{
23public:
27 Query() : data{.modelInfo = Model<T>().getModelInfo()} {}
28
33 auto where(const query::Predicate& predicate) -> Query<T>&
34 {
35 data.predicate = predicate;
36
37 return *this;
38 }
39
44 auto andWhere(const query::Predicate& predicate) -> Query<T>&
45 {
46 data.predicate = data.predicate.has_value() ? data.predicate.value() && predicate : predicate;
47
48 return *this;
49 }
50
55 auto orWhere(const query::Predicate& predicate) -> Query<T>&
56 {
57 data.predicate = data.predicate.has_value() ? data.predicate.value() || predicate : predicate;
58
59 return *this;
60 }
61
68 template <typename... Orders>
69 auto orderBy(Orders... orders) -> Query<T>&
70 {
71 data.orderBy = {std::move(orders)...};
72
73 return *this;
74 }
75
80 inline auto distinct() -> Query<T>&
81 {
82 data.isDistinct = true;
83
84 return *this;
85 }
86
92 inline auto offset(std::size_t offset) -> Query<T>&
93 {
94 data.offset = offset;
95
96 return *this;
97 }
98
104 inline auto limit(std::size_t limit) -> Query<T>&
105 {
106 data.limit = limit;
107
108 return *this;
109 }
110
116 inline auto disableJoining() -> Query<T>&
117 {
118 data.shouldJoin = false;
119
120 return *this;
121 }
122
123private:
127 friend class orm::Database;
128
133 [[nodiscard]] inline auto getData() const -> const query::QueryData&
134 {
135 return data;
136 }
137
138 query::QueryData data;
139};
140} // namespace orm
A class representing a database in the ORM framework.
Definition database.hpp:23
A template class representing a model in the ORM framework.
Definition model.hpp:17
auto orderBy(Orders... orders) -> Query< T > &
Sets the ORDER BY clauses for the select query.
Definition query.hpp:69
auto andWhere(const query::Predicate &predicate) -> Query< T > &
Adds a predicate with AND.
Definition query.hpp:44
auto orWhere(const query::Predicate &predicate) -> Query< T > &
Adds a predicate with OR.
Definition query.hpp:55
auto where(const query::Predicate &predicate) -> Query< T > &
Replaces the WHERE predicate.
Definition query.hpp:33
auto distinct() -> Query< T > &
Select distinct rows.
Definition query.hpp:80
auto limit(std::size_t limit) -> Query< T > &
Sets the LIMIT clause for the select query.
Definition query.hpp:104
auto disableJoining() -> Query< T > &
Disables joining for the select query.
Definition query.hpp:116
Query()
Constructs a Query object.
Definition query.hpp:27
auto offset(std::size_t offset) -> Query< T > &
Sets the OFFSET clause for the select query.
Definition query.hpp:92