aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2023-08-28 12:29:42 +0200
committerMarco Bubke <marco.bubke@qt.io>2023-08-29 13:49:07 +0000
commit8af0528893617602a3ffed37559359b14358c58b (patch)
treef423c1dd2739a1e751eeecec54d57a75d1edef02 /src/libs/sqlite
parenta20839f8c3429eaa1e37ecc71ffb3e2a85d9e062 (diff)
Sqlite: Improve insertUpdateDelete
Instead of a value we keep the iterator. That is saving us a useless copy because the value range cannot change. Change-Id: I2ea36b5a08e378f8e148f317c3384e4c4954a439 Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/libs/sqlite')
-rw-r--r--src/libs/sqlite/sqlitealgorithms.h18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/libs/sqlite/sqlitealgorithms.h b/src/libs/sqlite/sqlitealgorithms.h
index f54c02e50e..a410e59aa9 100644
--- a/src/libs/sqlite/sqlitealgorithms.h
+++ b/src/libs/sqlite/sqlitealgorithms.h
@@ -34,7 +34,7 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
auto endSqliteIterator = sqliteRange.end();
auto currentValueIterator = values.begin();
auto endValueIterator = values.end();
- std::optional<std::decay_t<decltype(*currentValueIterator)>> lastValue;
+ auto lastValueIterator = endValueIterator;
while (true) {
bool hasMoreValues = currentValueIterator != endValueIterator;
@@ -47,10 +47,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
UpdateChange updateChange = updateCallback(sqliteValue, value);
switch (updateChange) {
case UpdateChange::Update:
- lastValue = value;
+ lastValueIterator = currentValueIterator;
break;
case UpdateChange::No:
- lastValue.reset();
+ lastValueIterator = endValueIterator;
break;
}
++currentSqliteIterator;
@@ -59,10 +59,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
insertCallback(value);
++currentValueIterator;
} else if (compare < 0) {
- if (lastValue) {
- if (compareKey(sqliteValue, *lastValue) != 0)
+ if (lastValueIterator != endValueIterator) {
+ if (compareKey(sqliteValue, *lastValueIterator) != 0)
deleteCallback(sqliteValue);
- lastValue.reset();
+ lastValueIterator = endValueIterator;
} else {
deleteCallback(sqliteValue);
}
@@ -73,10 +73,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
++currentValueIterator;
} else if (hasMoreSqliteValues) {
auto &&sqliteValue = *currentSqliteIterator;
- if (lastValue) {
- if (compareKey(sqliteValue, *lastValue) != 0)
+ if (lastValueIterator != endValueIterator) {
+ if (compareKey(sqliteValue, *lastValueIterator) != 0)
deleteCallback(sqliteValue);
- lastValue.reset();
+ lastValueIterator = endValueIterator;
} else {
deleteCallback(sqliteValue);
}