forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user