diff options
| author | Dan Goodliffe <dan.goodliffe@octal.co.uk> | 2026-04-15 13:57:25 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan.goodliffe@octal.co.uk> | 2026-04-15 13:57:25 +0100 |
| commit | a6d31ff1d8703eae9375b7ec1cd01b323d7e8e6e (patch) | |
| tree | 2b609af7e33ebb6b16a6fd946b3ab402b849b30e | |
| parent | 0f7854926477eb8d0971de6c1ea88dd21071e028 (diff) | |
| download | webstat-a6d31ff1d8703eae9375b7ec1cd01b323d7e8e6e.tar.bz2 webstat-a6d31ff1d8703eae9375b7ec1cd01b323d7e8e6e.tar.xz webstat-a6d31ff1d8703eae9375b7ec1cd01b323d7e8e6e.zip | |
Save point only if there are new entities
Line insert is only a single operation with no new entities.
| -rw-r--r-- | src/ingestor.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index 04dd378..33af8cf 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -299,9 +299,12 @@ namespace WebStat { auto valuesEntities = entities(values); fillKnownEntities(valuesEntities); try { - DB::TransactionScope dbtx {*dbconn}; - storeNewEntities(dbconn, valuesEntities); - existingEntities.insert_range(valuesEntities | entityIds); + std::optional<DB::TransactionScope> lineTx; + if (!std::ranges::all_of(valuesEntities, &std::optional<EntityId>::has_value, &Entity::id)) { + lineTx.emplace(*dbconn); + storeNewEntities(dbconn, valuesEntities); + existingEntities.insert_range(valuesEntities | entityIds); + } storeLogLine(dbconn, values); } catch (const DB::Error & originalError) { |
