diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/sqlite/sqlitebasestatement.h | 27 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitereadstatement.h | 1 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitereadwritestatement.h | 1 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 3b68d8a3fc6..01ae9161318 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) { diff --git a/src/libs/sqlite/sqlitereadstatement.h b/src/libs/sqlite/sqlitereadstatement.h index 9314b54e0fe..236aab67f17 100644 --- a/src/libs/sqlite/sqlitereadstatement.h +++ b/src/libs/sqlite/sqlitereadstatement.h @@ -35,6 +35,7 @@ public: explicit ReadStatement(Utils::SmallStringView sqlStatement, Database &database); using StatementImplementation::readCallback; + using StatementImplementation::readTo; using StatementImplementation::toValue; using StatementImplementation::value; using StatementImplementation::values; diff --git a/src/libs/sqlite/sqlitereadwritestatement.h b/src/libs/sqlite/sqlitereadwritestatement.h index f7e23e100c2..6adc9ebb35f 100644 --- a/src/libs/sqlite/sqlitereadwritestatement.h +++ b/src/libs/sqlite/sqlitereadwritestatement.h @@ -38,6 +38,7 @@ public: using StatementImplementation::execute; using StatementImplementation::readCallback; + using StatementImplementation::readTo; using StatementImplementation::toValue; using StatementImplementation::value; using StatementImplementation::values; |