Mercurial > hg > orthanc
annotate OrthancServer/DatabaseWrapper.h @ 267:2ccf556dc1ce Orthanc-0.3.1
close
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 29 Apr 2013 12:55:01 +0200 |
parents | e4148b0ab1d0 |
children | 2354560daf2f |
rev | line source |
---|---|
183 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
3 * Copyright (C) 2012 Medical Physics Department, CHU of Liege, | |
4 * Belgium | |
5 * | |
6 * This program is free software: you can redistribute it and/or | |
7 * modify it under the terms of the GNU General Public License as | |
8 * published by the Free Software Foundation, either version 3 of the | |
9 * License, or (at your option) any later version. | |
10 * | |
11 * In addition, as a special exception, the copyright holders of this | |
12 * program give permission to link the code of its release with the | |
13 * OpenSSL project's "OpenSSL" library (or with modified versions of it | |
14 * that use the same license as the "OpenSSL" library), and distribute | |
15 * the linked executables. You must obey the GNU General Public License | |
16 * in all respects for all of the code used other than "OpenSSL". If you | |
17 * modify file(s) with this exception, you may extend this exception to | |
18 * your version of the file(s), but you are not obligated to do so. If | |
19 * you do not wish to do so, delete this exception statement from your | |
20 * version. If you delete this exception statement from all source files | |
21 * in the program, then also delete it here. | |
22 * | |
23 * This program is distributed in the hope that it will be useful, but | |
24 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
26 * General Public License for more details. | |
27 * | |
28 * You should have received a copy of the GNU General Public License | |
29 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
30 **/ | |
31 | |
32 | |
33 #pragma once | |
34 | |
35 #include "../Core/SQLite/Connection.h" | |
187
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
36 #include "../Core/SQLite/Transaction.h" |
183 | 37 #include "../Core/DicomFormat/DicomInstanceHasher.h" |
232
5368bbe813cf
refactoring of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
38 #include "../Core/FileStorage/FileInfo.h" |
183 | 39 #include "IServerIndexListener.h" |
40 | |
41 #include <list> | |
42 #include <boost/date_time/posix_time/posix_time.hpp> | |
43 | |
44 namespace Orthanc | |
45 { | |
46 namespace Internals | |
47 { | |
48 class SignalRemainingAncestor; | |
49 } | |
50 | |
51 /** | |
52 * This class manages an instance of the Orthanc SQLite database. It | |
53 * translates low-level requests into SQL statements. Mutual | |
54 * exclusion MUST be implemented at a higher level. | |
55 **/ | |
56 class DatabaseWrapper | |
57 { | |
58 private: | |
59 IServerIndexListener& listener_; | |
60 SQLite::Connection db_; | |
61 Internals::SignalRemainingAncestor* signalRemainingAncestor_; | |
62 | |
63 void Open(); | |
64 | |
237
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
65 void GetChangesInternal(Json::Value& target, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
66 SQLite::Statement& s, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
67 int64_t since, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
68 unsigned int maxResults); |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
69 |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
70 void GetExportedResources(Json::Value& target, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
71 SQLite::Statement& s, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
72 int64_t since, |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
73 unsigned int maxResults); |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
74 |
183 | 75 public: |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
76 void SetGlobalProperty(GlobalProperty property, |
183 | 77 const std::string& value); |
78 | |
188
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
79 bool LookupGlobalProperty(std::string& target, |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
80 GlobalProperty property); |
183 | 81 |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
82 std::string GetGlobalProperty(GlobalProperty property, |
183 | 83 const std::string& defaultValue = ""); |
84 | |
85 int64_t CreateResource(const std::string& publicId, | |
86 ResourceType type); | |
87 | |
188
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
88 bool LookupResource(const std::string& publicId, |
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
89 int64_t& id, |
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
90 ResourceType& type); |
183 | 91 |
198
663cc6c46d0a
before refactoring of ServerIndex::GetXXX
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
92 bool LookupParent(int64_t& parentId, |
663cc6c46d0a
before refactoring of ServerIndex::GetXXX
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
93 int64_t resourceId); |
663cc6c46d0a
before refactoring of ServerIndex::GetXXX
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
94 |
663cc6c46d0a
before refactoring of ServerIndex::GetXXX
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
95 std::string GetPublicId(int64_t resourceId); |
663cc6c46d0a
before refactoring of ServerIndex::GetXXX
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
96 |
183 | 97 void AttachChild(int64_t parent, |
98 int64_t child); | |
99 | |
193
a1b9d1e1497b
failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
100 void GetChildren(Json::Value& childrenPublicIds, |
a1b9d1e1497b
failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
101 int64_t id); |
a1b9d1e1497b
failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
192
diff
changeset
|
102 |
183 | 103 void DeleteResource(int64_t id); |
104 | |
105 void SetMetadata(int64_t id, | |
106 MetadataType type, | |
107 const std::string& value); | |
108 | |
188
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
109 bool LookupMetadata(std::string& target, |
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
110 int64_t id, |
090cefdab1d1
fix because of Windows macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
187
diff
changeset
|
111 MetadataType type); |
183 | 112 |
113 std::string GetMetadata(int64_t id, | |
114 MetadataType type, | |
115 const std::string& defaultValue = ""); | |
116 | |
200
9c58b2b03cf0
refactoring of read operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
199
diff
changeset
|
117 bool GetMetadataAsInteger(int& result, |
9c58b2b03cf0
refactoring of read operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
199
diff
changeset
|
118 int64_t id, |
9c58b2b03cf0
refactoring of read operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
199
diff
changeset
|
119 MetadataType type); |
9c58b2b03cf0
refactoring of read operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
199
diff
changeset
|
120 |
232
5368bbe813cf
refactoring of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
121 void AddAttachment(int64_t id, |
5368bbe813cf
refactoring of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
122 const FileInfo& attachment); |
183 | 123 |
232
5368bbe813cf
refactoring of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
124 bool LookupAttachment(FileInfo& attachment, |
5368bbe813cf
refactoring of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
231
diff
changeset
|
125 int64_t id, |
233 | 126 FileContentType contentType); |
200
9c58b2b03cf0
refactoring of read operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
199
diff
changeset
|
127 |
183 | 128 void SetMainDicomTags(int64_t id, |
129 const DicomMap& tags); | |
130 | |
131 void GetMainDicomTags(DicomMap& map, | |
132 int64_t id); | |
133 | |
134 bool GetParentPublicId(std::string& result, | |
135 int64_t id); | |
136 | |
137 void GetChildrenPublicId(std::list<std::string>& result, | |
138 int64_t id); | |
139 | |
199 | 140 void GetChildrenInternalId(std::list<int64_t>& result, |
141 int64_t id); | |
142 | |
183 | 143 void LogChange(ChangeType changeType, |
189
ccbc2cf64a0d
record main dicom tags and changes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
144 int64_t internalId, |
183 | 145 ResourceType resourceType, |
189
ccbc2cf64a0d
record main dicom tags and changes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
188
diff
changeset
|
146 const boost::posix_time::ptime& date = boost::posix_time::second_clock::local_time()); |
183 | 147 |
204 | 148 void GetChanges(Json::Value& target, |
149 int64_t since, | |
150 unsigned int maxResults); | |
151 | |
237
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
152 void GetLastChange(Json::Value& target); |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
153 |
231 | 154 void LogExportedResource(ResourceType resourceType, |
155 const std::string& publicId, | |
156 const std::string& remoteModality, | |
157 const std::string& patientId, | |
158 const std::string& studyInstanceUid, | |
159 const std::string& seriesInstanceUid, | |
160 const std::string& sopInstanceUid, | |
161 const boost::posix_time::ptime& date = | |
162 boost::posix_time::second_clock::local_time()); | |
183 | 163 |
231 | 164 void GetExportedResources(Json::Value& target, |
165 int64_t since, | |
166 unsigned int maxResults); | |
167 | |
237
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
168 void GetLastExportedResource(Json::Value& target); |
16a4ac70bd8a
last change and export
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
233
diff
changeset
|
169 |
238 | 170 // For unit testing only! |
183 | 171 int64_t GetTableRecordCount(const std::string& table); |
172 | |
173 uint64_t GetTotalCompressedSize(); | |
174 | |
175 uint64_t GetTotalUncompressedSize(); | |
176 | |
238 | 177 uint64_t GetResourceCount(ResourceType resourceType); |
178 | |
190 | 179 void GetAllPublicIds(Json::Value& target, |
180 ResourceType resourceType); | |
181 | |
183 | 182 DatabaseWrapper(const std::string& path, |
183 IServerIndexListener& listener); | |
184 | |
185 DatabaseWrapper(IServerIndexListener& listener); | |
187
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
186 |
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
187 SQLite::Transaction* StartTransaction() |
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
188 { |
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
189 return new SQLite::Transaction(db_); |
8e673a65564d
refactoring of storing new instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
183
diff
changeset
|
190 } |
202 | 191 |
192 const char* GetErrorMessage() const | |
193 { | |
194 return db_.GetErrorMessage(); | |
195 } | |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
196 |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
197 void FlushToDisk() |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
198 { |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
199 db_.FlushToDisk(); |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
204
diff
changeset
|
200 } |
183 | 201 }; |
202 } |