comparison OrthancFramework/Sources/SQLite/Transaction.cpp @ 4044:d25f4c0fa160 framework

splitting code into OrthancFramework and OrthancServer
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 10 Jun 2020 20:30:34 +0200
parents Core/SQLite/Transaction.cpp@fa5ad4368fe3
children 50b0c69b653a
comparison
equal deleted inserted replaced
4043:6c6239aec462 4044:d25f4c0fa160
1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store
3 *
4 * Copyright (C) 2012-2016 Sebastien Jodogne <s.jodogne@orthanc-labs.com>,
5 * Medical Physics Department, CHU of Liege, Belgium
6 *
7 * Copyright (c) 2012 The Chromium Authors. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are
11 * met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following disclaimer
17 * in the documentation and/or other materials provided with the
18 * distribution.
19 * * Neither the name of Google Inc., the name of the CHU of Liege,
20 * nor the names of its contributors may be used to endorse or promote
21 * products derived from this software without specific prior written
22 * permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 **/
36
37
38 #if ORTHANC_SQLITE_STANDALONE != 1
39 #include "../PrecompiledHeaders.h"
40 #endif
41
42 #include "Transaction.h"
43 #include "OrthancSQLiteException.h"
44
45 namespace Orthanc
46 {
47 namespace SQLite
48 {
49 Transaction::Transaction(Connection& connection) :
50 connection_(connection),
51 isOpen_(false)
52 {
53 }
54
55 Transaction::~Transaction()
56 {
57 if (isOpen_)
58 {
59 connection_.RollbackTransaction();
60 }
61 }
62
63 void Transaction::Begin()
64 {
65 if (isOpen_)
66 {
67 throw OrthancSQLiteException(ErrorCode_SQLiteTransactionAlreadyStarted);
68 }
69
70 isOpen_ = connection_.BeginTransaction();
71 if (!isOpen_)
72 {
73 throw OrthancSQLiteException(ErrorCode_SQLiteTransactionBegin);
74 }
75 }
76
77 void Transaction::Rollback()
78 {
79 if (!isOpen_)
80 {
81 throw OrthancSQLiteException(ErrorCode_SQLiteRollbackWithoutTransaction);
82 }
83
84 isOpen_ = false;
85
86 connection_.RollbackTransaction();
87 }
88
89 void Transaction::Commit()
90 {
91 if (!isOpen_)
92 {
93 throw OrthancSQLiteException(ErrorCode_SQLiteRollbackWithoutTransaction);
94 }
95
96 isOpen_ = false;
97
98 if (!connection_.CommitTransaction())
99 {
100 throw OrthancSQLiteException(ErrorCode_SQLiteTransactionCommit);
101 }
102 }
103 }
104 }