changeset 6188:da92d3af3c5d attach-custom-data

replaced db primitive GetAttachment by GetAttachmentCustomData, as the former is redundant with LookupAttachment
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 12 Jun 2025 16:06:27 +0200 (6 days ago)
parents b2b1f2dde05c
children 33f88747fe68
files OrthancServer/Plugins/Engine/OrthancPluginDatabase.cpp OrthancServer/Plugins/Engine/OrthancPluginDatabaseV3.cpp OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp OrthancServer/Plugins/Engine/OrthancPlugins.cpp OrthancServer/Plugins/Include/orthanc/OrthancDatabasePlugin.proto OrthancServer/Sources/Database/IDatabaseWrapper.h OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp OrthancServer/Sources/Database/StatelessDatabaseOperations.cpp OrthancServer/Sources/Database/StatelessDatabaseOperations.h
diffstat 9 files changed, 62 insertions(+), 102 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPluginDatabase.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Plugins/Engine/OrthancPluginDatabase.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -1499,16 +1499,15 @@
       throw OrthancException(ErrorCode_InternalError);  // Not supported
     }
 
-    virtual bool GetAttachment(FileInfo& attachment,
-                               int64_t& revision,
-                               const std::string& attachmentUuid) ORTHANC_OVERRIDE
+    virtual void GetAttachmentCustomData(std::string& customData,
+                                         const std::string& attachmentUuid) ORTHANC_OVERRIDE
     {
       throw OrthancException(ErrorCode_NotImplemented);  // Not supported
     }
 
-    virtual void UpdateAttachmentCustomData(const std::string& attachmentUuid,
-                                            const void* customData,
-                                            size_t customDataSize) ORTHANC_OVERRIDE
+    virtual void SetAttachmentCustomData(const std::string& attachmentUuid,
+                                         const void* customData,
+                                         size_t customDataSize) ORTHANC_OVERRIDE
     {
       throw OrthancException(ErrorCode_NotImplemented);  // Not supported
     }
--- a/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV3.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV3.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -1111,16 +1111,15 @@
       throw OrthancException(ErrorCode_InternalError);  // Not supported
     }
 
-    virtual bool GetAttachment(FileInfo& attachment,
-                               int64_t& revision,
-                               const std::string& attachmentUuid) ORTHANC_OVERRIDE
+    virtual void GetAttachmentCustomData(std::string& customData,
+                                         const std::string& attachmentUuid) ORTHANC_OVERRIDE
     {
       throw OrthancException(ErrorCode_NotImplemented);  // Not supported
     }
 
-    virtual void UpdateAttachmentCustomData(const std::string& attachmentUuid,
-                                            const void* customData,
-                                            size_t customDataSize) ORTHANC_OVERRIDE
+    virtual void SetAttachmentCustomData(const std::string& attachmentUuid,
+                                         const void* customData,
+                                         size_t customDataSize) ORTHANC_OVERRIDE
     {
       throw OrthancException(ErrorCode_NotImplemented);  // Not supported
     }
--- a/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -1024,28 +1024,18 @@
     }
 
 
-    virtual bool GetAttachment(FileInfo& attachment,
-                               int64_t& revision,
-                               const std::string& attachmentUuid) ORTHANC_OVERRIDE
+    virtual void GetAttachmentCustomData(std::string& customData,
+                                         const std::string& attachmentUuid) ORTHANC_OVERRIDE
     {
       if (database_.GetDatabaseCapabilities().HasAttachmentCustomDataSupport())
       {
         DatabasePluginMessages::TransactionRequest request;
-        request.mutable_get_attachment()->set_uuid(attachmentUuid);
+        request.mutable_get_attachment_custom_data()->set_uuid(attachmentUuid);
 
         DatabasePluginMessages::TransactionResponse response;
-        ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ATTACHMENT, request);
+        ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ATTACHMENT_CUSTOM_DATA, request);
 
-        if (response.get_attachment().found())
-        {
-          revision = response.get_attachment().revision();
-          Convert(attachment, response.get_attachment().attachment());
-          return true;
-        }
-        else
-        {
-          return false;
-        }
+        customData = response.get_attachment_custom_data().custom_data();
       }
       else
       {
@@ -1054,9 +1044,9 @@
       }
     }
 
-    virtual void UpdateAttachmentCustomData(const std::string& attachmentUuid,
-                                            const void* customData,
-                                            size_t customDataSize) ORTHANC_OVERRIDE
+    virtual void SetAttachmentCustomData(const std::string& attachmentUuid,
+                                         const void* customData,
+                                         size_t customDataSize) ORTHANC_OVERRIDE
     {
       if (database_.GetDatabaseCapabilities().HasAttachmentCustomDataSupport())
       {
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -4603,17 +4603,10 @@
 
     CheckAttachmentCustomDataSupport(lock.GetContext());
 
-    FileInfo fileInfo;
-    int64_t revision;
-    
-    if (lock.GetContext().GetIndex().GetAttachment(fileInfo, revision, parameters.attachmentUuid))
-    {
-      CopyToMemoryBuffer(parameters.customData, fileInfo.GetCustomData());
-    }
-    else
-    {
-      throw OrthancException(ErrorCode_UnknownResource);
-    }
+    std::string customData;
+    lock.GetContext().GetIndex().GetAttachmentCustomData(customData, parameters.attachmentUuid);
+
+    CopyToMemoryBuffer(parameters.customData, customData);
   }
 
   void OrthancPlugins::ApplySetAttachmentCustomData(const _OrthancPluginSetAttachmentCustomData& parameters)
--- a/OrthancServer/Plugins/Include/orthanc/OrthancDatabasePlugin.proto	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Plugins/Include/orthanc/OrthancDatabasePlugin.proto	Thu Jun 12 16:06:27 2025 +0200
@@ -337,7 +337,7 @@
   OPERATION_ENQUEUE_VALUE = 57;               // New in Orthanc 1.12.8
   OPERATION_DEQUEUE_VALUE = 58;               // New in Orthanc 1.12.8
   OPERATION_GET_QUEUE_SIZE = 59;              // New in Orthanc 1.12.8
-  OPERATION_GET_ATTACHMENT = 60;              // New in Orthanc 1.12.8
+  OPERATION_GET_ATTACHMENT_CUSTOM_DATA = 60;  // New in Orthanc 1.12.8
   OPERATION_SET_ATTACHMENT_CUSTOM_DATA = 61;  // New in Orthanc 1.12.8
 
 }
@@ -1075,15 +1075,13 @@
   }
 }
 
-message GetAttachment {
+message GetAttachmentCustomData {
   message Request {
     string uuid = 1;
   }
 
   message Response {
-    bool found = 1;
-    FileInfo attachment = 2;
-    int64 revision = 3;
+    bytes custom_data = 1;
   }
 }
 
@@ -1161,7 +1159,7 @@
   EnqueueValue.Request                    enqueue_value = 157;
   DequeueValue.Request                    dequeue_value = 158;
   GetQueueSize.Request                    get_queue_size = 159;
-  GetAttachment.Request                   get_attachment = 160;
+  GetAttachmentCustomData.Request         get_attachment_custom_data = 160;
   SetAttachmentCustomData.Request         set_attachment_custom_data = 161;
 }
 
@@ -1226,7 +1224,7 @@
   EnqueueValue.Response                    enqueue_value = 157;
   DequeueValue.Response                    dequeue_value = 158;
   GetQueueSize.Response                    get_queue_size = 159;
-  GetAttachment.Response                   get_attachment = 160;
+  GetAttachmentCustomData.Response         get_attachment_custom_data = 160;
   SetAttachmentCustomData.Response         set_attachment_custom_data = 161;
 }
 
--- a/OrthancServer/Sources/Database/IDatabaseWrapper.h	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Sources/Database/IDatabaseWrapper.h	Thu Jun 12 16:06:27 2025 +0200
@@ -286,13 +286,12 @@
                                     int64_t id,
                                     FileContentType contentType) = 0;
 
-      virtual bool GetAttachment(FileInfo& attachment,
-                                 int64_t& revision,
-                                 const std::string& attachmentUuid) = 0;
+      virtual void GetAttachmentCustomData(std::string& customData,
+                                           const std::string& attachmentUuid) = 0;
 
-      virtual void UpdateAttachmentCustomData(const std::string& attachmentUuid,
-                                              const void* customData,
-                                              size_t customDataSize) = 0;
+      virtual void SetAttachmentCustomData(const std::string& attachmentUuid,
+                                           const void* customData,
+                                           size_t customDataSize) = 0;
 
       /**
        * If "shared" is "true", the property is shared by all the
--- a/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -1824,37 +1824,33 @@
       }
     }
 
-    virtual bool GetAttachment(FileInfo& attachment,
-                               int64_t& revision,
-                               const std::string& attachmentUuid) ORTHANC_OVERRIDE
+    virtual void GetAttachmentCustomData(std::string& customData,
+                                         const std::string& attachmentUuid) ORTHANC_OVERRIDE
     {
       SQLite::Statement s(db_, SQLITE_FROM_HERE, 
-                          "SELECT uuid, uncompressedSize, compressionType, compressedSize, "
-                          "uncompressedMD5, compressedMD5, revision, customData, fileType FROM AttachedFiles WHERE uuid=?");
+                          "SELECT customData FROM AttachedFiles WHERE uuid=?");
       s.BindString(0, attachmentUuid);
 
       if (!s.Step())
       {
-        return false;
+        throw OrthancException(ErrorCode_UnknownResource);
       }
       else
       {
-        attachment = FileInfo(s.ColumnString(0),
-                              static_cast<FileContentType>(s.ColumnInt(8)),
-                              s.ColumnInt64(1),
-                              s.ColumnString(4),
-                              static_cast<CompressionType>(s.ColumnInt(2)),
-                              s.ColumnInt64(3),
-                              s.ColumnString(5));
-        ReadCustomData(attachment, s, 7);
-        revision = s.ColumnInt(6);
-        return true;
+        if (s.ColumnIsNull(0))
+        {
+          customData.clear();
+        }
+        else if (!s.ColumnBlobAsString(0, &customData))
+        {
+          throw OrthancException(ErrorCode_InternalError);
+        }
       }
     }
 
-    virtual void UpdateAttachmentCustomData(const std::string& attachmentUuid,
-                                            const void* customData,
-                                            size_t customDataSize) ORTHANC_OVERRIDE
+    virtual void SetAttachmentCustomData(const std::string& attachmentUuid,
+                                         const void* customData,
+                                         size_t customDataSize) ORTHANC_OVERRIDE
     {
       SQLite::Statement s(db_, SQLITE_FROM_HERE, 
                           "UPDATE AttachedFiles SET customData=? WHERE uuid=?");
--- a/OrthancServer/Sources/Database/StatelessDatabaseOperations.cpp	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Sources/Database/StatelessDatabaseOperations.cpp	Thu Jun 12 16:06:27 2025 +0200
@@ -3565,36 +3565,24 @@
   }
 
 
-  bool StatelessDatabaseOperations::GetAttachment(FileInfo& attachment,
-                                                  int64_t& revision,
-                                                  const std::string& attachmentUuid)
+  void StatelessDatabaseOperations::GetAttachmentCustomData(std::string& customData,
+                                                            const std::string& attachmentUuid)
   {
-    class Operations : public ReadOnlyOperationsT3<FileInfo&, int64_t&, const std::string& >
+    class Operations : public ReadOnlyOperationsT2<std::string&, const std::string& >
     {
-      bool found_;
     public:
-      Operations():
-        found_(false)
-      {}
-
-      bool HasFound()
-      {
-        return found_;
-      }
-
       virtual void ApplyTuple(ReadOnlyTransaction& transaction,
                               const Tuple& tuple) ORTHANC_OVERRIDE
       {
-        found_ = transaction.GetAttachment(tuple.get<0>(), tuple.get<1>(), tuple.get<2>());
+        transaction.GetAttachmentCustomData(tuple.get<0>(), tuple.get<1>());
       }
     };
 
     Operations operations;
-    operations.Apply(*this, attachment, revision, attachmentUuid);
-
-    return operations.HasFound();
+    operations.Apply(*this, customData, attachmentUuid);
   }
 
+
   void StatelessDatabaseOperations::SetAttachmentCustomData(const std::string& attachmentUuid,
                                                             const void* customData,
                                                             size_t customDataSize)
@@ -3626,6 +3614,7 @@
     Apply(operations);
   }
 
+
   StatelessDatabaseOperations::KeysValuesIterator::KeysValuesIterator(StatelessDatabaseOperations& db,
                                                                       const std::string& storeId) :
     db_(db),
--- a/OrthancServer/Sources/Database/StatelessDatabaseOperations.h	Thu Jun 12 13:28:36 2025 +0200
+++ b/OrthancServer/Sources/Database/StatelessDatabaseOperations.h	Thu Jun 12 16:06:27 2025 +0200
@@ -226,11 +226,10 @@
         return transaction_.LookupAttachment(attachment, revision, id, contentType);
       }
       
-      bool GetAttachment(FileInfo& attachment,
-                         int64_t& revision,
-                         const std::string& attachmentUuid)
+      void GetAttachmentCustomData(std::string& customData,
+                                   const std::string& attachmentUuid)
       {
-        return transaction_.GetAttachment(attachment, revision, attachmentUuid);
+        return transaction_.GetAttachmentCustomData(customData, attachmentUuid);
       }
 
       bool LookupGlobalProperty(std::string& target,
@@ -490,9 +489,8 @@
                                       const void* customData,
                                       size_t customDataSize)
       {
-        return transaction_.UpdateAttachmentCustomData(attachmentUuid, customData, customDataSize);
+        return transaction_.SetAttachmentCustomData(attachmentUuid, customData, customDataSize);
       }
-
     };
 
 
@@ -588,13 +586,12 @@
                              /* out */ uint64_t& countSeries, 
                              /* out */ uint64_t& countInstances);
 
-    bool GetAttachment(FileInfo& attachment,
-                       int64_t& revision,
-                       const std::string& attachmentUuid);
+    void GetAttachmentCustomData(std::string& customData,
+                                 const std::string& attachmentUuid);
 
     void SetAttachmentCustomData(const std::string& attachmentUuid,
-                                    const void* customData,
-                                    size_t customDataSize);
+                                 const void* customData,
+                                 size_t customDataSize);
 
     bool LookupAttachment(FileInfo& attachment,
                           int64_t& revision,