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 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);
}