diff PostgreSQL/Plugins/StoragePlugin.cpp @ 16:9e419261f1c9

mysql storage area working
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 10 Jul 2018 10:10:35 +0200
parents 9774802fd05f
children 17f849b2af34
line wrap: on
line diff
--- a/PostgreSQL/Plugins/StoragePlugin.cpp	Tue Jul 10 07:15:13 2018 +0200
+++ b/PostgreSQL/Plugins/StoragePlugin.cpp	Tue Jul 10 10:10:35 2018 +0200
@@ -20,180 +20,9 @@
 
 
 #include "../../Framework/Plugins/StorageBackend.h"
-
-#include "../../Framework/Common/FileValue.h"
-#include "../../Framework/PostgreSQL/PostgreSQLDatabase.h"
-#include "../../Framework/PostgreSQL/PostgreSQLLargeObject.h"
-#include "../../Framework/PostgreSQL/PostgreSQLTransaction.h"
-
-#include <Plugins/Samples/Common/OrthancPluginCppWrapper.h>
-#include <Core/Logging.h>
-
-
-namespace OrthancDatabases
-{
-  class PostgreSQLStorageArea : public StorageBackend
-  {
-  private:
-    class Factory : public IDatabaseFactory
-    {
-    private:
-      PostgreSQLStorageArea&  that_;
-
-    public:
-      Factory(PostgreSQLStorageArea& that) :
-      that_(that)
-      {
-      }
-
-      virtual Dialect GetDialect() const
-      {
-        return Dialect_PostgreSQL;
-      }
-
-      virtual IDatabase* Open()
-      {
-        return that_.OpenInternal();
-      }
-    };
-
-    OrthancPluginContext*  context_;
-    PostgreSQLParameters   parameters_;
-    bool                   clearAll_;
-
-    IDatabase* OpenInternal()
-    {
-      std::auto_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_));
-
-      db->Open();
-
-      if (parameters_.HasLock())
-      {
-        db->AdvisoryLock(43 /* some arbitrary constant */);
-      }
-
-      if (clearAll_)
-      {
-        db->ClearAll();
-      }
-
-      {
-        PostgreSQLTransaction t(*db);
-
-        if (!db->DoesTableExist("StorageArea"))
-        {
-          db->Execute("CREATE TABLE IF NOT EXISTS StorageArea("
-                      "uuid VARCHAR NOT NULL PRIMARY KEY,"
-                      "content OID NOT NULL,"
-                      "type INTEGER NOT NULL)");
-
-          // Automatically remove the large objects associated with the table
-          db->Execute("CREATE OR REPLACE RULE StorageAreaDelete AS ON DELETE "
-                      "TO StorageArea DO SELECT lo_unlink(old.content);");
-        }
-
-        t.Commit();
-      }
-
-      return db.release();
-    }
-
-  public:
-    PostgreSQLStorageArea(const PostgreSQLParameters& parameters) :
-    StorageBackend(new Factory(*this)),
-    parameters_(parameters),
-    clearAll_(false)
-    {
-    }
+#include "PostgreSQLStorageArea.h"
 
-    void SetClearAll(bool clear)
-    {
-      clearAll_ = clear;
-    }
-
-
-    virtual void Create(DatabaseManager::Transaction& transaction,
-                        const std::string& uuid,
-                        const void* content,
-                        size_t size,
-                        OrthancPluginContentType type)
-    {
-      std::auto_ptr<FileValue> file(new FileValue(content, size));
-      
-      {
-        DatabaseManager::CachedStatement statement(
-          STATEMENT_FROM_HERE, GetManager(),
-          "INSERT INTO StorageArea VALUES (${uuid}, ${content}, ${type})");
-     
-        statement.SetParameterType("uuid", ValueType_Utf8String);
-        statement.SetParameterType("content", ValueType_File);
-        statement.SetParameterType("type", ValueType_Integer64);
-
-        Dictionary args;
-        args.SetUtf8Value("uuid", uuid);
-        args.SetValue("content", file.release());
-        args.SetIntegerValue("type", type);
-     
-        statement.Execute(args);
-      }
-    }
-
-
-    virtual void Read(void*& content,
-                      size_t& size,
-                      DatabaseManager::Transaction& transaction, 
-                      const std::string& uuid,
-                      OrthancPluginContentType type) 
-    {
-      DatabaseManager::CachedStatement statement(
-        STATEMENT_FROM_HERE, GetManager(),
-        "SELECT content FROM StorageArea WHERE uuid=$1 AND type=$2");
-     
-      statement.SetParameterType("uuid", ValueType_Utf8String);
-      statement.SetParameterType("type", ValueType_Integer64);
-
-      Dictionary args;
-      args.SetUtf8Value("uuid", uuid);
-      args.SetIntegerValue("type", type);
-     
-      statement.Execute(args);
-
-      if (statement.IsDone())
-      {
-        throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource);
-      }
-      else if (statement.GetResultFieldsCount() != 1 ||
-               statement.GetResultField(0).GetType() != ValueType_File)
-      {
-        throw Orthanc::OrthancException(Orthanc::ErrorCode_Database);        
-      }
-      else
-      {
-        const FileValue& value = dynamic_cast<const FileValue&>(statement.GetResultField(0));
-        ReadFromString(content, size, value.GetContent());
-      }
-    }
-
-
-    virtual void Remove(DatabaseManager::Transaction& transaction,
-                        const std::string& uuid,
-                        OrthancPluginContentType type)
-    {
-      DatabaseManager::CachedStatement statement(
-        STATEMENT_FROM_HERE, GetManager(),
-        "DELETE FROM StorageArea WHERE uuid=${uuid} AND type=${type}");
-     
-      statement.SetParameterType("uuid", ValueType_Utf8String);
-      statement.SetParameterType("type", ValueType_Integer64);
-
-      Dictionary args;
-      args.SetUtf8Value("uuid", uuid);
-      args.SetIntegerValue("type", type);
-     
-      statement.Execute(args);
-    }
-  };
-}
+#include <Core/Logging.h>
 
 
 static bool DisplayPerformanceWarning()