# HG changeset patch # User Alain Mazy # Date 1729000359 -7200 # Node ID 35d2df9572b162ce0e4144eaaa0012ed115ef0cc # Parent e99ca3508757d532df44662b37e6f5fa42382819 count-resources diff -r e99ca3508757 -r 35d2df9572b1 Framework/Plugins/DatabaseBackendAdapterV4.cpp --- a/Framework/Plugins/DatabaseBackendAdapterV4.cpp Tue Oct 08 17:57:22 2024 +0200 +++ b/Framework/Plugins/DatabaseBackendAdapterV4.cpp Tue Oct 15 15:52:39 2024 +0200 @@ -1327,6 +1327,12 @@ backend.ExecuteFind(response, manager, request.find()); break; } + + case Orthanc::DatabasePluginMessages::OPERATION_COUNT_RESOURCES: + { + backend.ExecuteCount(response, manager, request.find()); + break; + } #endif default: diff -r e99ca3508757 -r 35d2df9572b1 Framework/Plugins/IDatabaseBackend.h --- a/Framework/Plugins/IDatabaseBackend.h Tue Oct 08 17:57:22 2024 +0200 +++ b/Framework/Plugins/IDatabaseBackend.h Tue Oct 15 15:52:39 2024 +0200 @@ -395,6 +395,11 @@ virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) = 0; + + // New in Orthanc 1.12.5 + virtual void ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) = 0; #endif }; } diff -r e99ca3508757 -r 35d2df9572b1 Framework/Plugins/IndexBackend.cpp --- a/Framework/Plugins/IndexBackend.cpp Tue Oct 08 17:57:22 2024 +0200 +++ b/Framework/Plugins/IndexBackend.cpp Tue Oct 15 15:52:39 2024 +0200 @@ -3187,6 +3187,24 @@ #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) + void IndexBackend::ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) + { + std::string sql; + + LookupFormatter formatter(manager.GetDialect()); + std::string lookupSql; + ISqlLookupFormatter::Apply(lookupSql, formatter, request); + + sql = "WITH Lookup AS (" + lookupSql + ") SELECT COUNT(*) FROM Lookup"; + + DatabaseManager::StandaloneStatement statement(manager, sql); // TODO-FIND: cache dynamic statement ? Probably worth it since it can be very complex queries ! + formatter.PrepareStatement(statement); + statement.Execute(formatter.GetDictionary()); + response.mutable_count_resources()->set_count(statement.ReadInteger64(0)); + } + void IndexBackend::ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) diff -r e99ca3508757 -r 35d2df9572b1 Framework/Plugins/IndexBackend.h --- a/Framework/Plugins/IndexBackend.h Tue Oct 08 17:57:22 2024 +0200 +++ b/Framework/Plugins/IndexBackend.h Tue Oct 15 15:52:39 2024 +0200 @@ -445,6 +445,10 @@ virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; + + virtual void ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; #endif diff -r e99ca3508757 -r 35d2df9572b1 MySQL/Plugins/MySQLIndex.cpp --- a/MySQL/Plugins/MySQLIndex.cpp Tue Oct 08 17:57:22 2024 +0200 +++ b/MySQL/Plugins/MySQLIndex.cpp Tue Oct 15 15:52:39 2024 +0200 @@ -612,5 +612,13 @@ // TODO-FIND throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); } + + void MySQLIndex::ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) + { + // TODO-FIND + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } #endif } diff -r e99ca3508757 -r 35d2df9572b1 MySQL/Plugins/MySQLIndex.h --- a/MySQL/Plugins/MySQLIndex.h Tue Oct 08 17:57:22 2024 +0200 +++ b/MySQL/Plugins/MySQLIndex.h Tue Oct 15 15:52:39 2024 +0200 @@ -94,6 +94,10 @@ virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; + + virtual void ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; #endif }; } diff -r e99ca3508757 -r 35d2df9572b1 Odbc/Plugins/OdbcIndex.cpp --- a/Odbc/Plugins/OdbcIndex.cpp Tue Oct 08 17:57:22 2024 +0200 +++ b/Odbc/Plugins/OdbcIndex.cpp Tue Oct 15 15:52:39 2024 +0200 @@ -714,5 +714,13 @@ // TODO-FIND throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); } + + void OdbcIndex::ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) + { + // TODO-FIND + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } #endif } diff -r e99ca3508757 -r 35d2df9572b1 Odbc/Plugins/OdbcIndex.h --- a/Odbc/Plugins/OdbcIndex.h Tue Oct 08 17:57:22 2024 +0200 +++ b/Odbc/Plugins/OdbcIndex.h Tue Oct 15 15:52:39 2024 +0200 @@ -101,6 +101,10 @@ virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; + + virtual void ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; #endif }; } diff -r e99ca3508757 -r 35d2df9572b1 SQLite/Plugins/SQLiteIndex.cpp --- a/SQLite/Plugins/SQLiteIndex.cpp Tue Oct 08 17:57:22 2024 +0200 +++ b/SQLite/Plugins/SQLiteIndex.cpp Tue Oct 15 15:52:39 2024 +0200 @@ -278,5 +278,13 @@ // TODO-FIND throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); } + + void SQLiteIndex::ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) + { + // TODO-FIND + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } #endif } diff -r e99ca3508757 -r 35d2df9572b1 SQLite/Plugins/SQLiteIndex.h --- a/SQLite/Plugins/SQLiteIndex.h Tue Oct 08 17:57:22 2024 +0200 +++ b/SQLite/Plugins/SQLiteIndex.h Tue Oct 15 15:52:39 2024 +0200 @@ -76,6 +76,10 @@ virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, DatabaseManager& manager, const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; + + virtual void ExecuteCount(Orthanc::DatabasePluginMessages::TransactionResponse& response, + DatabaseManager& manager, + const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; #endif }; }