# HG changeset patch # User Sebastien Jodogne # Date 1417786306 -3600 # Node ID 9b4977e3c19dfbb0c246450262639f395e80ac3b # Parent a65ad39596cbd33cb1de4e5ee0c5d5dae2ff7612 abstraction diff -r a65ad39596cb -r 9b4977e3c19d Core/SQLite/ITransaction.h --- /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 , + * 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; + }; + } +} diff -r a65ad39596cb -r 9b4977e3c19d Core/SQLite/Transaction.h --- 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(); }; } } diff -r a65ad39596cb -r 9b4977e3c19d OrthancServer/DatabaseWrapper.h --- 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_); } diff -r a65ad39596cb -r 9b4977e3c19d OrthancServer/ServerIndex.cpp --- 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 transaction_; + std::auto_ptr 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 transaction(db_->StartTransaction()); + std::auto_ptr 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 transaction(db_->StartTransaction()); + std::auto_ptr transaction(db_->StartTransaction()); transaction->Begin(); int64_t id;