Mercurial > hg > orthanc-databases
changeset 668:f0b43129cc08 attach-custom-data
make DequeuValue more atomic
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Wed, 28 May 2025 14:37:38 +0200 (2 weeks ago) |
parents | 88d016b2a117 |
children | 0b35221b1d44 |
files | Framework/Plugins/IndexBackend.cpp |
diffstat | 1 files changed, 6 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/Framework/Plugins/IndexBackend.cpp Mon May 26 10:18:08 2025 +0200 +++ b/Framework/Plugins/IndexBackend.cpp Wed May 28 14:37:38 2025 +0200 @@ -4526,13 +4526,15 @@ { statement.reset(new DatabaseManager::CachedStatement( STATEMENT_FROM_HERE, manager, - "SELECT id, value FROM Queues WHERE queueId= " + queueIdParameter + " ORDER BY id ASC " + formatter.FormatLimits(0, 1))); + "WITH poppedRows AS (DELETE FROM Queues WHERE id = (SELECT MIN(id) FROM Queues WHERE queueId=" + queueIdParameter + ") RETURNING value) " + "SELECT value FROM poppedRows")); } else { statement.reset(new DatabaseManager::CachedStatement( STATEMENT_FROM_HERE, manager, - "SELECT id, value FROM Queues WHERE queueId= " + queueIdParameter + " ORDER BY id DESC " + formatter.FormatLimits(0, 1))); + "WITH poppedRows AS (DELETE FROM Queues WHERE id = (SELECT MAX(id) FROM Queues WHERE queueId=" + queueIdParameter + ") RETURNING value) " + "SELECT value FROM poppedRows")); } statement->Execute(formatter.GetDictionary()); @@ -4543,27 +4545,8 @@ } else { - if (statement->GetResultFieldsCount() != 2) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); - } - - statement->SetResultFieldType(0, ValueType_Integer64); - statement->SetResultFieldType(1, ValueType_Utf8String); - - int64_t id = statement->ReadInteger64(0); - value = statement->ReadString(1); - - DatabaseManager::CachedStatement statement2( - STATEMENT_FROM_HERE, manager, - "DELETE FROM Queues WHERE id = ${id}"); - - Dictionary args; - - statement2.SetParameterType("id", ValueType_Integer64); - args.SetIntegerValue("id", id); - - statement2.Execute(args); + statement->SetResultFieldType(0, ValueType_Utf8String); + value = statement->ReadString(0); return true; }