changeset 1235:9b4977e3c19d

abstraction
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 05 Dec 2014 14:31:46 +0100
parents a65ad39596cb
children 21d84e3acc0d
files Core/SQLite/ITransaction.h Core/SQLite/Transaction.h OrthancServer/DatabaseWrapper.h OrthancServer/ServerIndex.cpp
diffstat 4 files changed, 79 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Core/SQLite/ITransaction.h	Fri Dec 05 14:31:46 2014 +0100
@@ -0,0 +1,66 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ *
+ * Copyright (C) 2012-2014 Sebastien Jodogne <s.jodogne@gmail.com>,
+ * Medical Physics Department, CHU of Liege, Belgium
+ *
+ * Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *    * Neither the name of Google Inc., the name of the CHU of Liege,
+ * nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **/
+
+
+#pragma once
+
+#include "NonCopyable.h"
+
+namespace Orthanc
+{
+  namespace SQLite
+  {
+    class ITransaction : public NonCopyable
+    {
+    public:
+      virtual ~ITransaction()
+      {
+      }
+
+      // Begins the transaction. This uses the default sqlite "deferred" transaction
+      // type, which means that the DB lock is lazily acquired the next time the
+      // database is accessed, not in the begin transaction command.
+      virtual void Begin() = 0;
+
+      // Rolls back the transaction. This will happen automatically if you do
+      // nothing when the transaction goes out of scope.
+      virtual void Rollback() = 0;
+
+      // Commits the transaction, returning true on success.
+      virtual void Commit() = 0;
+    };
+  }
+}
--- a/Core/SQLite/Transaction.h	Fri Dec 05 11:11:58 2014 +0100
+++ b/Core/SQLite/Transaction.h	Fri Dec 05 14:31:46 2014 +0100
@@ -38,12 +38,13 @@
 #pragma once
 
 #include "Connection.h"
+#include "ITransaction.h"
 
 namespace Orthanc
 {
   namespace SQLite
   {
-    class Transaction : public NonCopyable
+    class Transaction : public ITransaction
     {
     private:
       Connection& connection_;
@@ -54,22 +55,17 @@
 
     public:
       explicit Transaction(Connection& connection);
-      ~Transaction();
+
+      virtual ~Transaction();
 
       // Returns true when there is a transaction that has been successfully begun.
       bool IsOpen() const { return isOpen_; }
 
-      // Begins the transaction. This uses the default sqlite "deferred" transaction
-      // type, which means that the DB lock is lazily acquired the next time the
-      // database is accessed, not in the begin transaction command.
-      void Begin();
+      virtual void Begin();
 
-      // Rolls back the transaction. This will happen automatically if you do
-      // nothing when the transaction goes out of scope.
-      void Rollback();
+      virtual void Rollback();
 
-      // Commits the transaction, returning true on success.
-      void Commit();
+      virtual void Commit();
     };
   }
 }
--- a/OrthancServer/DatabaseWrapper.h	Fri Dec 05 11:11:58 2014 +0100
+++ b/OrthancServer/DatabaseWrapper.h	Fri Dec 05 14:31:46 2014 +0100
@@ -215,7 +215,7 @@
 
     DatabaseWrapper(IServerIndexListener& listener);
 
-    SQLite::Transaction* StartTransaction()
+    SQLite::ITransaction* StartTransaction()
     {
       return new SQLite::Transaction(db_);
     }
--- a/OrthancServer/ServerIndex.cpp	Fri Dec 05 11:11:58 2014 +0100
+++ b/OrthancServer/ServerIndex.cpp	Fri Dec 05 14:31:46 2014 +0100
@@ -43,7 +43,6 @@
 #include "../Core/Toolbox.h"
 #include "../Core/Uuid.h"
 #include "../Core/DicomFormat/DicomArray.h"
-#include "../Core/SQLite/Transaction.h"
 #include "FromDcmtkBridge.h"
 #include "ServerContext.h"
 
@@ -214,7 +213,7 @@
   {
   private:
     ServerIndex& index_;
-    std::auto_ptr<SQLite::Transaction> transaction_;
+    std::auto_ptr<SQLite::ITransaction> transaction_;
     bool isCommitted_;
 
   public:
@@ -1059,7 +1058,7 @@
       }
     }
 
-    // No need for a SQLite::Transaction here, as we only insert 1 record
+    // No need for a SQLite::ITransaction here, as we only insert 1 record
     db_->LogExportedResource(type,
                              publicId,
                              remoteModality,
@@ -1233,7 +1232,7 @@
       throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
 
-    // No need for a SQLite::Transaction here, as we only make 1 write to the DB
+    // No need for a SQLite::ITransaction here, as we only make 1 write to the DB
     db_->SetProtectedPatient(id, isProtected);
 
     if (isProtected)
@@ -1437,7 +1436,7 @@
   {
     boost::mutex::scoped_lock lock(mutex_);
 
-    std::auto_ptr<SQLite::Transaction> transaction(db_->StartTransaction());
+    std::auto_ptr<SQLite::ITransaction> transaction(db_->StartTransaction());
 
     transaction->Begin();
     uint64_t seq = db_->IncrementGlobalSequence(sequence);
@@ -1452,7 +1451,7 @@
                               const std::string& publicId)
   {
     boost::mutex::scoped_lock lock(mutex_);
-    std::auto_ptr<SQLite::Transaction> transaction(db_->StartTransaction());
+    std::auto_ptr<SQLite::ITransaction> transaction(db_->StartTransaction());
     transaction->Begin();
 
     int64_t id;