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