diff options
author | Marco Bubke <marco.bubke@qt.io> | 2023-08-28 12:29:42 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2023-08-29 13:49:07 +0000 |
commit | 8af0528893617602a3ffed37559359b14358c58b (patch) | |
tree | f423c1dd2739a1e751eeecec54d57a75d1edef02 /src/libs/sqlite | |
parent | a20839f8c3429eaa1e37ecc71ffb3e2a85d9e062 (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.h | 18 |
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); } |