diff --git a/support/include/utils/db/sqlite/db_select.hpp b/support/include/utils/db/sqlite/db_select.hpp index b764b2ab..9317cae6 100644 --- a/support/include/utils/db/sqlite/db_select.hpp +++ b/support/include/utils/db/sqlite/db_select.hpp @@ -42,6 +42,8 @@ public: [[nodiscard]] auto limit(std::int32_t value) -> db_select_op_t; + [[nodiscard]] auto offset(std::int32_t value) -> db_select_op_t; + [[nodiscard]] auto order_by(std::string column_name, bool ascending) -> db_select_op_t; }; @@ -56,6 +58,7 @@ public: std::vector group_by; std::optional limit; + std::optional offset; std::optional> order_by; std::optional where; std::map> where_actions; @@ -92,6 +95,8 @@ public: [[nodiscard]] auto limit(std::int32_t value) -> db_select &; + [[nodiscard]] auto offset(std::int32_t value) -> db_select &; + [[nodiscard]] auto order_by(std::string column_name, bool ascending) -> db_select &; diff --git a/support/src/utils/db/sqlite/db_select.cpp b/support/src/utils/db/sqlite/db_select.cpp index 60795401..9db42c74 100644 --- a/support/src/utils/db/sqlite/db_select.cpp +++ b/support/src/utils/db/sqlite/db_select.cpp @@ -29,6 +29,7 @@ void db_select::context::clear() { columns.clear(); count_columns.clear(); limit.reset(); + offset.reset(); order_by.reset(); where.reset(); where_values.clear(); @@ -54,6 +55,12 @@ auto db_select::context::db_select_op_t::limit(std::int32_t value) return *this; } +auto db_select::context::db_select_op_t::offset(std::int32_t value) + -> db_select::context::db_select_op_t { + db_select{ctx}.offset(value); + return *this; +} + auto db_select::context::db_select_op_t::order_by(std::string column_name, bool ascending) -> db_select::context::db_select_op_t { @@ -127,6 +134,10 @@ auto db_select::dump() const -> std::string { query << " LIMIT " << context_->limit.value(); } + if (context_->offset.has_value()) { + query << " OFFSET " << context_->offset.value(); + } + query << ';'; return query.str(); @@ -185,6 +196,11 @@ auto db_select::limit(std::int32_t value) -> db_select & { return *this; } +auto db_select::offset(std::int32_t value) -> db_select & { + context_->offset = value; + return *this; +} + auto db_select::order_by(std::string column_name, bool ascending) -> db_select & { context_->order_by = {column_name, ascending};