Sqlite: Simplify insertUpdateDelete

That hopefully is clearing up the intention.

Change-Id: I89ef34dddaf8453b28361be8875c73d0dd4e9d5b
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-03-07 19:03:03 +01:00
parent 993e88e088
commit ef711343af

View File

@@ -36,14 +36,7 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
auto endValueIterator = values.end(); auto endValueIterator = values.end();
auto lastValueIterator = endValueIterator; auto lastValueIterator = endValueIterator;
while (true) { auto doUpdate = [&](const auto &sqliteValue, const auto &value) {
bool hasMoreValues = currentValueIterator != endValueIterator;
bool hasMoreSqliteValues = currentSqliteIterator != endSqliteIterator;
if (hasMoreValues && hasMoreSqliteValues) {
auto &&sqliteValue = *currentSqliteIterator;
auto &&value = *currentValueIterator;
auto compare = compareKey(sqliteValue, value);
if (compare == 0) {
UpdateChange updateChange = updateCallback(sqliteValue, value); UpdateChange updateChange = updateCallback(sqliteValue, value);
switch (updateChange) { switch (updateChange) {
case UpdateChange::Update: case UpdateChange::Update:
@@ -55,10 +48,14 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
} }
++currentSqliteIterator; ++currentSqliteIterator;
++currentValueIterator; ++currentValueIterator;
} else if (compare > 0) { };
auto doInsert = [&](const auto &value) {
insertCallback(value); insertCallback(value);
++currentValueIterator; ++currentValueIterator;
} else if (compare < 0) { };
auto doDelete = [&](const auto &sqliteValue) {
if (lastValueIterator != endValueIterator) { if (lastValueIterator != endValueIterator) {
if (compareKey(sqliteValue, *lastValueIterator) != 0) if (compareKey(sqliteValue, *lastValueIterator) != 0)
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
@@ -67,20 +64,25 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
deleteCallback(sqliteValue); deleteCallback(sqliteValue);
} }
++currentSqliteIterator; ++currentSqliteIterator;
} };
} else if (hasMoreValues) {
insertCallback(*currentValueIterator); while (true) {
++currentValueIterator; bool hasMoreValues = currentValueIterator != endValueIterator;
} else if (hasMoreSqliteValues) { bool hasMoreSqliteValues = currentSqliteIterator != endSqliteIterator;
if (hasMoreValues && hasMoreSqliteValues) {
auto &&sqliteValue = *currentSqliteIterator; auto &&sqliteValue = *currentSqliteIterator;
if (lastValueIterator != endValueIterator) { auto &&value = *currentValueIterator;
if (compareKey(sqliteValue, *lastValueIterator) != 0) auto compare = compareKey(sqliteValue, value);
deleteCallback(sqliteValue); if (compare == 0)
lastValueIterator = endValueIterator; doUpdate(sqliteValue, value);
} else { else if (compare > 0)
deleteCallback(sqliteValue); doInsert(value);
} else if (compare < 0)
++currentSqliteIterator; doDelete(sqliteValue);
} else if (hasMoreValues) {
doInsert(*currentValueIterator);
} else if (hasMoreSqliteValues) {
doDelete(*currentSqliteIterator);
} else { } else {
break; break;
} }