diff options
Diffstat (limited to 'src/libs/sqlite/sqlitebasestatement.h')
-rw-r--r-- | src/libs/sqlite/sqlitebasestatement.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 3b68d8a3fc..01ae916131 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -336,6 +336,21 @@ public: resetter.reset(); } + template<int ResultTypeCount = 1, typename Container, typename... QueryTypes> + void readTo(Container &container, const QueryTypes &...queryValues) + { + BaseStatement::checkColumnCount(ResultTypeCount); + + Resetter resetter{*this}; + + bindValues(queryValues...); + + while (BaseStatement::next()) + pushBackToContainer<ResultTypeCount>(container); + + resetter.reset(); + } + protected: ~StatementImplementation() = default; @@ -430,6 +445,18 @@ private: return callCallable(callable, std::make_integer_sequence<int, ResultTypeCount>{}); } + template<typename Container, int... ColumnIndices> + void pushBackToContainer(Container &container, std::integer_sequence<int, ColumnIndices...>) + { + container.push_back(Container::value_type(ValueGetter(*this, ColumnIndices)...)); + } + + template<int ResultTypeCount, typename Container> + void pushBackToContainer(Container &container) + { + pushBackToContainer(container, std::make_integer_sequence<int, ResultTypeCount>{}); + } + template<typename ValueType> void bindValuesByIndex(int index, const ValueType &value) { |