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>
This commit is contained in:
Marco Bubke
2023-08-28 12:29:42 +02:00
parent a20839f8c3
commit 8af0528893

View File

@@ -34,7 +34,7 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
auto endSqliteIterator = sqliteRange.end(); auto endSqliteIterator = sqliteRange.end();
auto currentValueIterator = values.begin(); auto currentValueIterator = values.begin();
auto endValueIterator = values.end(); auto endValueIterator = values.end();
std::optional<std::decay_t<decltype(*currentValueIterator)>> lastValue; auto lastValueIterator = endValueIterator;
while (true) { while (true) {
bool hasMoreValues = currentValueIterator != endValueIterator; bool hasMoreValues = currentValueIterator != endValueIterator;
@@ -47,10 +47,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
UpdateChange updateChange = updateCallback(sqliteValue, value); UpdateChange updateChange = updateCallback(sqliteValue, value);
switch (updateChange) { switch (updateChange) {
case UpdateChange::Update: case UpdateChange::Update:
lastValue = value; lastValueIterator = currentValueIterator;
break; break;
case UpdateChange::No: case UpdateChange::No:
lastValue.reset(); lastValueIterator = endValueIterator;
break; break;
} }
++currentSqliteIterator; ++currentSqliteIterator;
@@ -59,10 +59,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
insertCallback(value); insertCallback(value);
++currentValueIterator; ++currentValueIterator;
} else if (compare < 0) { } else if (compare < 0) {
if (lastValue) { if (lastValueIterator != endValueIterator) {
if (compareKey(sqliteValue, *lastValue) != 0) if (compareKey(sqliteValue, *lastValueIterator) != 0)
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
lastValue.reset(); lastValueIterator = endValueIterator;
} else { } else {
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
} }
@@ -73,10 +73,10 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
++currentValueIterator; ++currentValueIterator;
} else if (hasMoreSqliteValues) { } else if (hasMoreSqliteValues) {
auto &&sqliteValue = *currentSqliteIterator; auto &&sqliteValue = *currentSqliteIterator;
if (lastValue) { if (lastValueIterator != endValueIterator) {
if (compareKey(sqliteValue, *lastValue) != 0) if (compareKey(sqliteValue, *lastValueIterator) != 0)
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
lastValue.reset(); lastValueIterator = endValueIterator;
} else { } else {
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
} }