From 8af0528893617602a3ffed37559359b14358c58b Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 28 Aug 2023 12:29:42 +0200 Subject: [PATCH] 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 Reviewed-by: Tim Jenssen Reviewed-by: --- src/libs/sqlite/sqlitealgorithms.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libs/sqlite/sqlitealgorithms.h b/src/libs/sqlite/sqlitealgorithms.h index f54c02e50e0..a410e59aa90 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> 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); }