aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite/sqlitebasestatement.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/sqlite/sqlitebasestatement.h')
-rw-r--r--src/libs/sqlite/sqlitebasestatement.h27
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)
{