annotate OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5811:a451777236fb attach-custom-data tip

advanced storage: fix + customizable path
author Alain Mazy <am@orthanc.team>
date Tue, 24 Sep 2024 17:52:45 +0200
parents 023a99146dd0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
1900
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1847
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
1288
6e7e5ed91c2d upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1286
diff changeset
4 * Department, University Hospital of Liege, Belgium
5640
f7adfb22e20e updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5521
diff changeset
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium
f7adfb22e20e updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5521
diff changeset
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium
5485
48b8dae6dc77 upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5256
diff changeset
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 *
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * This program is free software: you can redistribute it and/or
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * modify it under the terms of the GNU General Public License as
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * published by the Free Software Foundation, either version 3 of the
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * License, or (at your option) any later version.
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 *
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * General Public License for more details.
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 *
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 **/
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
3093
2e1808b6146a reorganization of folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3080
diff changeset
24 #include "../PrecompiledHeadersServer.h"
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
25 #include "SQLiteDatabaseWrapper.h"
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26
4045
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
27 #include "../../../OrthancFramework/Sources/DicomFormat/DicomArray.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
28 #include "../../../OrthancFramework/Sources/Logging.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
29 #include "../../../OrthancFramework/Sources/SQLite/Transaction.h"
3093
2e1808b6146a reorganization of folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3080
diff changeset
30 #include "../Search/ISqlLookupFormatter.h"
2e1808b6146a reorganization of folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3080
diff changeset
31 #include "../ServerToolbox.h"
5554
12d8a1a266e9 introduction of FindRequest and FindResponse
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5521
diff changeset
32 #include "Compatibility/GenericFind.h"
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
33 #include "Compatibility/ICreateInstance.h"
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
34 #include "Compatibility/IGetChildrenMetadata.h"
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
35 #include "Compatibility/ILookupResourceAndParent.h"
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
36 #include "Compatibility/ISetResourcesContent.h"
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
37 #include "VoidDatabaseListener.h"
3093
2e1808b6146a reorganization of folders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3080
diff changeset
38
4032
058b5ade8acd renaming embedded resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4031
diff changeset
39 #include <OrthancServerResources.h>
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 #include <stdio.h>
1247
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
42 #include <boost/lexical_cast.hpp>
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
44 static std::map<std::string, std::string> filesToDeleteCustomData;
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
45
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 namespace Orthanc
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
47 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
48 static std::string JoinRequestedMetadata(const FindRequest::ChildrenSpecification& childrenSpec)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
49 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
50 std::set<std::string> metadataTypes;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
51 for (std::set<MetadataType>::const_iterator it = childrenSpec.GetMetadata().begin(); it != childrenSpec.GetMetadata().end(); ++it)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
52 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
53 metadataTypes.insert(boost::lexical_cast<std::string>(*it));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
54 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
55 std::string joinedMetadataTypes;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
56 Orthanc::Toolbox::JoinStrings(joinedMetadataTypes, metadataTypes, ", ");
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
57
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
58 return joinedMetadataTypes;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
59 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
60
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
61 static std::string JoinRequestedTags(const FindRequest::ChildrenSpecification& childrenSpec)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
62 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
63 // note: SQLite does not seem to support (tagGroup, tagElement) in ((x, y), (z, w)) in complex subqueries.
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
64 // Therefore, since we expect the requested tag list to be short, we write it as
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
65 // ((tagGroup = x AND tagElement = y ) OR (tagGroup = z AND tagElement = w))
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
66
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
67 std::string sql = " (";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
68 std::set<std::string> tags;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
69 for (std::set<DicomTag>::const_iterator it = childrenSpec.GetMainDicomTags().begin(); it != childrenSpec.GetMainDicomTags().end(); ++it)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
70 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
71 tags.insert("(tagGroup = " + boost::lexical_cast<std::string>(it->GetGroup())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
72 + " AND tagElement = " + boost::lexical_cast<std::string>(it->GetElement()) + ")");
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
73 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
74 std::string joinedTags;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
75 Orthanc::Toolbox::JoinStrings(joinedTags, tags, " OR ");
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
76
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
77 sql += joinedTags + ") ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
78 return sql;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
79 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
80
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
81 static std::string JoinChanges(const std::set<ChangeType>& changeTypes)
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
82 {
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
83 std::set<std::string> changeTypesString;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
84 for (std::set<ChangeType>::const_iterator it = changeTypes.begin(); it != changeTypes.end(); ++it)
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
85 {
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
86 changeTypesString.insert(boost::lexical_cast<std::string>(static_cast<uint32_t>(*it)));
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
87 }
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
88
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
89 std::string joinedChangesTypes;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
90 Orthanc::Toolbox::JoinStrings(joinedChangesTypes, changeTypesString, ", ");
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
91
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
92 return joinedChangesTypes;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
93 }
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
94
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
95 class SQLiteDatabaseWrapper::LookupFormatter : public ISqlLookupFormatter
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 {
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
97 private:
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
98 std::list<std::string> values_;
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
99
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
100 public:
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
101 virtual std::string GenerateParameter(const std::string& value) ORTHANC_OVERRIDE
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
102 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
103 values_.push_back(value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
104 return "?";
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
105 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
106
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
107 virtual std::string FormatResourceType(ResourceType level) ORTHANC_OVERRIDE
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
108 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
109 return boost::lexical_cast<std::string>(level);
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
110 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
112 virtual std::string FormatWildcardEscape() ORTHANC_OVERRIDE
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
113 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
114 return "ESCAPE '\\'";
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
115 }
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
116
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
117 virtual std::string FormatLimits(uint64_t since, uint64_t count) ORTHANC_OVERRIDE
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
118 {
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
119 std::string sql;
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
120
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
121 if (count > 0)
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
122 {
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
123 sql += " LIMIT " + boost::lexical_cast<std::string>(count);
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
124 }
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
125
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
126 if (since > 0)
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
127 {
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
128 if (count == 0)
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
129 {
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
130 sql += " LIMIT -1"; // In SQLite, "OFFSET" cannot appear without "LIMIT"
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
131 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
132
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
133 sql += " OFFSET " + boost::lexical_cast<std::string>(since);
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
134 }
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
135
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
136 return sql;
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
137 }
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
138
4817
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
139 virtual bool IsEscapeBrackets() const ORTHANC_OVERRIDE
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
140 {
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
141 return false;
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
142 }
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
143
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
144 void Bind(SQLite::Statement& statement) const
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
145 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
146 size_t pos = 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
147
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
148 for (std::list<std::string>::const_iterator
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
149 it = values_.begin(); it != values_.end(); ++it, pos++)
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
150 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
151 statement.BindString(pos, *it);
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
152 }
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
153 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
154 };
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
155
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
156
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
157 class SQLiteDatabaseWrapper::SignalRemainingAncestor : public SQLite::IScalarFunction
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
158 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
159 private:
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
160 bool hasRemainingAncestor_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
161 std::string remainingPublicId_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
162 ResourceType remainingType_;
660
f0232774b913 fix warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 616
diff changeset
163
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
164 public:
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
165 SignalRemainingAncestor() :
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
166 hasRemainingAncestor_(false)
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
167 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
168 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
170 void Reset()
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
171 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
172 hasRemainingAncestor_ = false;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
173 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
175 virtual const char* GetName() const ORTHANC_OVERRIDE
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
176 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
177 return "SignalRemainingAncestor";
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
178 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
180 virtual unsigned int GetCardinality() const ORTHANC_OVERRIDE
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
181 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
182 return 2;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
183 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
184
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
185 virtual void Compute(SQLite::FunctionContext& context) ORTHANC_OVERRIDE
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
186 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
187 CLOG(TRACE, SQLITE) << "There exists a remaining ancestor with public ID \""
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
188 << context.GetStringValue(0) << "\" of type "
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
189 << context.GetIntValue(1);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
191 if (!hasRemainingAncestor_ ||
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
192 remainingType_ >= context.GetIntValue(1))
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
193 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
194 hasRemainingAncestor_ = true;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
195 remainingPublicId_ = context.GetStringValue(0);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
196 remainingType_ = static_cast<ResourceType>(context.GetIntValue(1));
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197 }
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
198 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
200 bool HasRemainingAncestor() const
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
201 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
202 return hasRemainingAncestor_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
203 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
205 const std::string& GetRemainingAncestorId() const
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
206 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
207 assert(hasRemainingAncestor_);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
208 return remainingPublicId_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
209 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
210
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
211 ResourceType GetRemainingAncestorType() const
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
212 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
213 assert(hasRemainingAncestor_);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
214 return remainingType_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
215 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
216 };
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
219 class SQLiteDatabaseWrapper::TransactionBase :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
220 public SQLiteDatabaseWrapper::UnitTestsTransaction,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
221 public Compatibility::ICreateInstance,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
222 public Compatibility::IGetChildrenMetadata,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
223 public Compatibility::ILookupResourceAndParent,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
224 public Compatibility::ISetResourcesContent
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
225 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
226 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
227 void AnswerLookup(std::list<std::string>& resourcesId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
228 std::list<std::string>& instancesId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
229 ResourceType level)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
230 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
231 resourcesId.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
232 instancesId.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
233
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
234 std::unique_ptr<SQLite::Statement> statement;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
235
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
236 switch (level)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
237 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
238 case ResourceType_Patient:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
239 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
240 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
241 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
242 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
243 "SELECT patients.publicId, instances.publicID FROM Lookup AS patients "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
244 "INNER JOIN Resources studies ON patients.internalId=studies.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
245 "INNER JOIN Resources series ON studies.internalId=series.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
246 "INNER JOIN Resources instances ON series.internalId=instances.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
247 "GROUP BY patients.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
248
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
249 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
250 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
251
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
252 case ResourceType_Study:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
253 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
254 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
255 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
256 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
257 "SELECT studies.publicId, instances.publicID FROM Lookup AS studies "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
258 "INNER JOIN Resources series ON studies.internalId=series.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
259 "INNER JOIN Resources instances ON series.internalId=instances.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
260 "GROUP BY studies.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
261
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
262 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
263 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
264
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
265 case ResourceType_Series:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
266 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
267 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
268 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
269 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
270 "SELECT series.publicId, instances.publicID FROM Lookup AS series "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
271 "INNER JOIN Resources instances ON series.internalId=instances.parentId "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
272 "GROUP BY series.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
273
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
274 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
275 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
276
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
277 case ResourceType_Instance:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
278 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
279 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
280 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
281 db_, SQLITE_FROM_HERE, "SELECT publicId, publicId FROM Lookup"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
282
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
283 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
284 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
285
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
286 default:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
287 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
288 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
289
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
290 assert(statement.get() != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
291
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
292 while (statement->Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
293 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
294 resourcesId.push_back(statement->ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
295 instancesId.push_back(statement->ColumnString(1));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
296 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
297 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
298
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
299
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
300 void ClearTable(const std::string& tableName)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
301 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
302 db_.Execute("DELETE FROM " + tableName);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
303 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
304
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
305
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
306 void GetChangesInternal(std::list<ServerIndexChange>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
307 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
308 SQLite::Statement& s,
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
309 uint32_t limit,
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
310 bool returnFirstResults) // the statement usually returns limit+1 results while we only need the limit results -> we need to know which ones to return, the firsts or the lasts
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
311 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
312 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
313
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
314 while (s.Step())
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
315 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
316 int64_t seq = s.ColumnInt64(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
317 ChangeType changeType = static_cast<ChangeType>(s.ColumnInt(1));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
318 ResourceType resourceType = static_cast<ResourceType>(s.ColumnInt(3));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
319 const std::string& date = s.ColumnString(4);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
320
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
321 int64_t internalId = s.ColumnInt64(2);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
322 std::string publicId = GetPublicId(internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
323
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
324 target.push_back(ServerIndexChange(seq, changeType, resourceType, publicId, date));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
325 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
326
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
327 done = target.size() <= limit; // 'done' means "there are no more other changes of this type in that direction (depending on since/to)"
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
328
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
329 // if we have retrieved more changes than requested -> cleanup
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
330 if (target.size() > limit)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
331 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
332 assert(target.size() == limit+1); // the statement should only request 1 element more
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
333
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
334 if (returnFirstResults)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
335 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
336 target.pop_back();
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
337 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
338 else
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
339 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
340 target.pop_front();
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
341 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
342 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
343 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
344
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
345
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
346 void GetExportedResourcesInternal(std::list<ExportedResource>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
347 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
348 SQLite::Statement& s,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
349 uint32_t limit)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
350 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
351 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
352
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
353 while (target.size() < limit && s.Step())
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
354 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
355 int64_t seq = s.ColumnInt64(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
356 ResourceType resourceType = static_cast<ResourceType>(s.ColumnInt(1));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
357 std::string publicId = s.ColumnString(2);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
358
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
359 ExportedResource resource(seq,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
360 resourceType,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
361 publicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
362 s.ColumnString(3), // modality
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
363 s.ColumnString(8), // date
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
364 s.ColumnString(4), // patient ID
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
365 s.ColumnString(5), // study instance UID
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
366 s.ColumnString(6), // series instance UID
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
367 s.ColumnString(7)); // sop instance UID
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
368
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
369 target.push_back(resource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
370 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
371
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
372 done = !(target.size() == limit && s.Step());
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
373 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
374
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
375
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
376 void GetChildren(std::list<std::string>& childrenPublicIds,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
377 int64_t id)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
378 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
379 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT publicId FROM Resources WHERE parentId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
380 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
381
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
382 childrenPublicIds.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
383 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
384 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
385 childrenPublicIds.push_back(s.ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
386 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
387 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
388
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
389 boost::mutex::scoped_lock lock_;
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
390 IDatabaseListener& listener_;
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
391 SignalRemainingAncestor& signalRemainingAncestor_;
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
392
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
393 public:
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
394 TransactionBase(boost::mutex& mutex,
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
395 SQLite::Connection& db,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
396 IDatabaseListener& listener,
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
397 SignalRemainingAncestor& signalRemainingAncestor) :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
398 UnitTestsTransaction(db),
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
399 lock_(mutex),
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
400 listener_(listener),
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
401 signalRemainingAncestor_(signalRemainingAncestor)
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
402 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
403 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
404
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
405 IDatabaseListener& GetListener() const
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
406 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
407 return listener_;
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
408 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
409
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
410
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
411 virtual void AddAttachment(int64_t id,
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
412 const FileInfo& attachment,
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
413 int64_t revision) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
414 {
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
415 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
416 "INSERT INTO AttachedFiles (id, fileType, uuid, compressedSize, uncompressedSize, compressionType, uncompressedMD5, compressedMD5, revision, customData) "
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
417 "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
418 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
419 s.BindInt(1, attachment.GetContentType());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
420 s.BindString(2, attachment.GetUuid());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
421 s.BindInt64(3, attachment.GetCompressedSize());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
422 s.BindInt64(4, attachment.GetUncompressedSize());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
423 s.BindInt(5, attachment.GetCompressionType());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
424 s.BindString(6, attachment.GetUncompressedMD5());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
425 s.BindString(7, attachment.GetCompressedMD5());
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
426 s.BindInt(8, revision);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
427 s.BindString(9, attachment.GetCustomData());
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
428 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
429 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
430
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
431 virtual void ApplyLookupResources(std::list<std::string>& resourcesId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
432 std::list<std::string>* instancesId,
5680
68fc5af30c03 added container class DatabaseConstraints
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5640
diff changeset
433 const DatabaseConstraints& lookup,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
434 ResourceType queryLevel,
5248
a7d95f951f8a replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5227
diff changeset
435 const std::set<std::string>& labels,
a7d95f951f8a replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5227
diff changeset
436 LabelsConstraint labelsConstraint,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
437 uint32_t limit) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
438 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
439 LookupFormatter formatter;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
440
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
441 std::string sql;
5248
a7d95f951f8a replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5227
diff changeset
442 LookupFormatter::Apply(sql, formatter, lookup, queryLevel, labels, labelsConstraint, limit);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
443
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
444 sql = "CREATE TEMPORARY TABLE Lookup AS " + sql; // TODO-FIND: use a CTE (or is this method obsolete ?)
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
445
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
446 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
447 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DROP TABLE IF EXISTS Lookup");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
448 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
449 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
450
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
451 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
452 SQLite::Statement statement(db_, sql);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
453 formatter.Bind(statement);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
454 statement.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
455 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
456
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
457 if (instancesId != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
458 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
459 AnswerLookup(resourcesId, *instancesId, queryLevel);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
460 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
461 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
462 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
463 resourcesId.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
464
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
465 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT publicId FROM Lookup");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
466
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
467 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
468 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
469 resourcesId.push_back(s.ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
470 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
471 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
472 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
473
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
474 #define C0_QUERY_ID 0
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
475 #define C1_INTERNAL_ID 1
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
476 #define C2_ROW_NUMBER 2
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
477 #define C3_STRING_1 3
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
478 #define C4_STRING_2 4
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
479 #define C5_STRING_3 5
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
480 #define C6_STRING_4 6
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
481 #define C7_INT_1 7
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
482 #define C8_INT_2 8
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
483 #define C9_BIG_INT_1 9
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
484 #define C10_BIG_INT_2 10
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
485
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
486 #define QUERY_LOOKUP 1
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
487 #define QUERY_MAIN_DICOM_TAGS 2
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
488 #define QUERY_ATTACHMENTS 3
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
489 #define QUERY_METADATA 4
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
490 #define QUERY_LABELS 5
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
491 #define QUERY_PARENT_MAIN_DICOM_TAGS 10
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
492 #define QUERY_PARENT_IDENTIFIER 11
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
493 #define QUERY_PARENT_METADATA 12
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
494 #define QUERY_GRAND_PARENT_MAIN_DICOM_TAGS 15
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
495 #define QUERY_GRAND_PARENT_METADATA 16
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
496 #define QUERY_CHILDREN_IDENTIFIERS 20
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
497 #define QUERY_CHILDREN_MAIN_DICOM_TAGS 21
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
498 #define QUERY_CHILDREN_METADATA 22
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
499 #define QUERY_GRAND_CHILDREN_IDENTIFIERS 30
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
500 #define QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS 31
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
501 #define QUERY_GRAND_CHILDREN_METADATA 32
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
502 #define QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS 40
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
503 #define QUERY_ONE_INSTANCE_IDENTIFIER 50
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
504 #define QUERY_ONE_INSTANCE_METADATA 51
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
505 #define QUERY_ONE_INSTANCE_ATTACHMENTS 52
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
506
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
507 #define STRINGIFY(x) #x
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
508 #define TOSTRING(x) STRINGIFY(x)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
509
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
510
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
511 virtual void ExecuteFind(FindResponse& response,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
512 const FindRequest& request,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
513 const Capabilities& capabilities) ORTHANC_OVERRIDE
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
514 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
515 LookupFormatter formatter;
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
516 std::string sql;
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
517 const ResourceType requestLevel = request.GetLevel();
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
518
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
519 std::string lookupSql;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
520 LookupFormatter::Apply(lookupSql, formatter, request);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
521
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
522 // base query, retrieve the ordered internalId and publicId of the selected resources
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
523 sql = "WITH Lookup AS (" + lookupSql + ") ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
524
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
525 // in SQLite, all CTEs must be created at the beginning of the query, you can not define local CTE inside subqueries
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
526 // need one instance info ? (part 1: create the CTE)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
527 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
528 request.IsRetrieveOneInstanceMetadataAndAttachments())
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
529 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
530 // Here, we create a nested CTE 'OneInstance' with one instance ID to join with metadata and main
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
531 sql += ", OneInstance AS";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
532
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
533 switch (requestLevel)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
534 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
535 case ResourceType_Series:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
536 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
537 sql+= " (SELECT Lookup.internalId AS parentInternalId, childLevel.publicId AS instancePublicId, childLevel.internalId AS instanceInternalId"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
538 " FROM Resources AS childLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
539 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId GROUP BY Lookup.internalId) ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
540 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
541 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
542
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
543 case ResourceType_Study:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
544 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
545 sql+= " (SELECT Lookup.internalId AS parentInternalId, grandChildLevel.publicId AS instancePublicId, grandChildLevel.internalId AS instanceInternalId"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
546 " FROM Resources AS grandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
547 " INNER JOIN Resources childLevel ON grandChildLevel.parentId = childLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
548 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId GROUP BY Lookup.internalId) ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
549 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
550 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
551
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
552 case ResourceType_Patient:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
553 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
554 sql+= " (SELECT Lookup.internalId AS parentInternalId, grandGrandChildLevel.publicId AS instancePublicId, grandGrandChildLevel.internalId AS instanceInternalId"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
555 " FROM Resources AS grandGrandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
556 " INNER JOIN Resources grandChildLevel ON grandGrandChildLevel.parentId = grandChildLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
557 " INNER JOIN Resources childLevel ON grandChildLevel.parentId = childLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
558 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId GROUP BY Lookup.internalId) ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
559 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
560 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
561
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
562 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
563 throw OrthancException(ErrorCode_InternalError);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
564 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
565 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
566
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
567 sql += "SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
568 " " TOSTRING(QUERY_LOOKUP) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
569 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
570 " Lookup.rowNumber AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
571 " Lookup.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
572 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
573 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
574 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
575 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
576 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
577 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
578 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
579 " FROM Lookup ";
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
580
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
581 // need one instance info ? (part 2: execute the queries)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
582 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
583 request.IsRetrieveOneInstanceMetadataAndAttachments())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
584 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
585 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
586 " " TOSTRING(QUERY_ONE_INSTANCE_IDENTIFIER) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
587 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
588 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
589 " instancePublicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
590 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
591 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
592 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
593 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
594 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
595 " instanceInternalId AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
596 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
597 " FROM OneInstance ";
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
598
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
599 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
600 " " TOSTRING(QUERY_ONE_INSTANCE_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
601 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
602 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
603 " Metadata.value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
604 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
605 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
606 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
607 " Metadata.type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
608 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
609 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
610 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
611 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
612 " INNER JOIN Metadata ON Metadata.id = OneInstance.instanceInternalId ";
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
613
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
614 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
615 " " TOSTRING(QUERY_ONE_INSTANCE_ATTACHMENTS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
616 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
617 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
618 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
619 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
620 " compressedMD5 AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
621 " customData AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
622 " fileType AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
623 " compressionType AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
624 " compressedSize AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
625 " uncompressedSize AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
626 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
627 " INNER JOIN AttachedFiles ON AttachedFiles.id = OneInstance.instanceInternalId ";
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
628
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
629 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
630
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
631 // need MainDicomTags from resource ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
632 if (request.IsRetrieveMainDicomTags())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
633 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
634 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
635 " " TOSTRING(QUERY_MAIN_DICOM_TAGS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
636 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
637 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
638 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
639 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
640 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
641 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
642 " tagGroup AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
643 " tagElement AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
644 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
645 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
646 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
647 "INNER JOIN MainDicomTags ON MainDicomTags.id = Lookup.internalId ";
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
648 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
649
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
650 // need resource metadata ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
651 if (request.IsRetrieveMetadata())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
652 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
653 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
654 " " TOSTRING(QUERY_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
655 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
656 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
657 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
658 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
659 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
660 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
661 " type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
662 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
663 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
664 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
665 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
666 "INNER JOIN Metadata ON Metadata.id = Lookup.internalId ";
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
667 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
668
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
669 // need resource attachments ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
670 if (request.IsRetrieveAttachments())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
671 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
672 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
673 " " TOSTRING(QUERY_ATTACHMENTS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
674 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
675 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
676 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
677 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
678 " compressedMD5 AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
679 " customData AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
680 " fileType AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
681 " compressionType AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
682 " compressedSize AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
683 " uncompressedSize AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
684 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
685 "INNER JOIN AttachedFiles ON AttachedFiles.id = Lookup.internalId ";
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
686 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
687
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
688
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
689 // need resource labels ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
690 if (request.IsRetrieveLabels())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
691 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
692 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
693 " " TOSTRING(QUERY_LABELS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
694 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
695 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
696 " label AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
697 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
698 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
699 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
700 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
701 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
702 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
703 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
704 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
705 "INNER JOIN Labels ON Labels.id = Lookup.internalId ";
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
706 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
707
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
708 if (requestLevel > ResourceType_Patient)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
709 {
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
710 // need MainDicomTags from parent ?
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
711 if (request.GetParentSpecification(static_cast<ResourceType>(requestLevel - 1)).IsRetrieveMainDicomTags())
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
712 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
713 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
714 " " TOSTRING(QUERY_PARENT_MAIN_DICOM_TAGS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
715 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
716 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
717 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
718 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
719 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
720 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
721 " tagGroup AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
722 " tagElement AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
723 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
724 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
725 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
726 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
727 "INNER JOIN MainDicomTags ON MainDicomTags.id = currentLevel.parentId ";
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
728 }
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
729
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
730 // need metadata from parent ?
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
731 if (request.GetParentSpecification(static_cast<ResourceType>(requestLevel - 1)).IsRetrieveMetadata())
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
732 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
733 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
734 " " TOSTRING(QUERY_PARENT_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
735 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
736 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
737 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
738 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
739 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
740 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
741 " type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
742 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
743 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
744 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
745 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
746 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
747 "INNER JOIN Metadata ON Metadata.id = currentLevel.parentId ";
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
748 }
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
749
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
750 if (requestLevel > ResourceType_Study)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
751 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
752 // need MainDicomTags from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
753 if (request.GetParentSpecification(static_cast<ResourceType>(requestLevel - 2)).IsRetrieveMainDicomTags())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
754 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
755 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
756 " " TOSTRING(QUERY_GRAND_PARENT_MAIN_DICOM_TAGS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
757 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
758 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
759 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
760 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
761 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
762 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
763 " tagGroup AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
764 " tagElement AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
765 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
766 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
767 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
768 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
769 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
770 "INNER JOIN MainDicomTags ON MainDicomTags.id = parentLevel.parentId ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
771 }
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
772
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
773 // need metadata from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
774 if (request.GetParentSpecification(static_cast<ResourceType>(requestLevel - 2)).IsRetrieveMetadata())
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
775 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
776 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
777 " " TOSTRING(QUERY_GRAND_PARENT_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
778 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
779 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
780 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
781 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
782 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
783 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
784 " type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
785 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
786 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
787 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
788 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
789 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
790 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
791 "INNER JOIN Metadata ON Metadata.id = parentLevel.parentId ";
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
792 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
793 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
794 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
795
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
796 // need MainDicomTags from children ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
797 if (requestLevel <= ResourceType_Series && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1)).GetMainDicomTags().size() > 0)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
798 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
799 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
800 " " TOSTRING(QUERY_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
801 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
802 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
803 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
804 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
805 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
806 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
807 " tagGroup AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
808 " tagElement AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
809 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
810 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
811 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
812 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
813 " INNER JOIN MainDicomTags ON MainDicomTags.id = childLevel.internalId AND " + JoinRequestedTags(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1)));
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
814 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
815
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
816 // need MainDicomTags from grandchildren ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
817 if (requestLevel <= ResourceType_Study && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2)).GetMainDicomTags().size() > 0)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
818 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
819 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
820 " " TOSTRING(QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
821 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
822 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
823 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
824 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
825 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
826 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
827 " tagGroup AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
828 " tagElement AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
829 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
830 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
831 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
832 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
833 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
834 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND " + JoinRequestedTags(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2)));
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
835 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
836
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
837 // need parent identifier ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
838 if (request.IsRetrieveParentIdentifier())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
839 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
840 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
841 " " TOSTRING(QUERY_PARENT_IDENTIFIER) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
842 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
843 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
844 " parentLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
845 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
846 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
847 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
848 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
849 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
850 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
851 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
852 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
853 " INNER JOIN Resources currentLevel ON currentLevel.internalId = Lookup.internalId "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
854 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId ";
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
855 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
856
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
857 // need children metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
858 if (requestLevel <= ResourceType_Series && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1)).GetMetadata().size() > 0)
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
859 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
860 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
861 " " TOSTRING(QUERY_CHILDREN_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
862 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
863 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
864 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
865 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
866 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
867 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
868 " type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
869 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
870 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
871 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
872 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
873 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
874 " INNER JOIN Metadata ON Metadata.id = childLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1))) + ") ";
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
875 }
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
876
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
877 // need grandchildren metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
878 if (requestLevel <= ResourceType_Study && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2)).GetMetadata().size() > 0)
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
879 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
880 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
881 " " TOSTRING(QUERY_GRAND_CHILDREN_METADATA) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
882 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
883 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
884 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
885 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
886 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
887 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
888 " type AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
889 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
890 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
891 " NULL AS c10_big_int2 "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
892 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
893 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
894 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
895 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2))) + ") ";
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
896 }
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
897
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
898 // need children identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
899 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Study).IsRetrieveIdentifiers()) ||
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
900 (requestLevel == ResourceType_Study && request.GetChildrenSpecification(ResourceType_Series).IsRetrieveIdentifiers()) ||
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
901 (requestLevel == ResourceType_Series && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers()))
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
902 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
903 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
904 " " TOSTRING(QUERY_CHILDREN_IDENTIFIERS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
905 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
906 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
907 " childLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
908 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
909 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
910 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
911 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
912 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
913 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
914 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
915 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
916 " INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId ";
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
917 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
918
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
919 // need grandchildren identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
920 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Series).IsRetrieveIdentifiers()) ||
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
921 (requestLevel == ResourceType_Study && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers()))
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
922 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
923 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
924 " " TOSTRING(QUERY_GRAND_CHILDREN_IDENTIFIERS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
925 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
926 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
927 " grandChildLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
928 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
929 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
930 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
931 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
932 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
933 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
934 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
935 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
936 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
937 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId ";
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
938 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
939
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
940 // need grandgrandchildren identifiers ?
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
941 if (requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers())
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
942 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
943 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
944 " " TOSTRING(QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
945 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
946 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
947 " grandGrandChildLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
948 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
949 " NULL AS c5_string3, "
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
950 " NULL AS c6_string4, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
951 " NULL AS c7_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
952 " NULL AS c8_int2, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
953 " NULL AS c9_big_int1, "
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
954 " NULL AS c10_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
955 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
956 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
957 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
958 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId ";
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
959 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
960
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
961
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
962 sql += " ORDER BY c0_queryId, c2_rowNumber"; // this is really important to make sure that the Lookup query is the first one to provide results since we use it to create the responses element !
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
963
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
964 SQLite::Statement s(db_, SQLITE_FROM_HERE_DYNAMIC(sql), sql);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
965 formatter.Bind(s);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
966
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
967 while (s.Step())
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
968 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
969 int queryId = s.ColumnInt(C0_QUERY_ID);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
970 int64_t internalId = s.ColumnInt64(C1_INTERNAL_ID);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
971
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
972 // LOG(INFO) << queryId << ": " << internalId;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
973 // continue;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
974
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
975 assert(queryId == QUERY_LOOKUP || response.HasResource(internalId)); // the QUERY_LOOKUP must be read first and must create the response before any other query tries to populate the fields
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
976
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
977 switch (queryId)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
978 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
979 case QUERY_LOOKUP:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
980 response.Add(new FindResponse::Resource(requestLevel, internalId, s.ColumnString(C3_STRING_1)));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
981 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
982
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
983 case QUERY_LABELS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
984 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
985 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
986 res.AddLabel(s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
987 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
988
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
989 case QUERY_ATTACHMENTS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
990 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
991 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
992 FileInfo file(s.ColumnString(C3_STRING_1), static_cast<FileContentType>(s.ColumnInt(C7_INT_1)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
993 s.ColumnInt64(C9_BIG_INT_1), s.ColumnString(C4_STRING_2),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
994 static_cast<CompressionType>(s.ColumnInt(C8_INT_2)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
995 s.ColumnInt64(C10_BIG_INT_2), s.ColumnString(C5_STRING_3), s.ColumnString(C6_STRING_4));
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
996 res.AddAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
997 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
998
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
999 case QUERY_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1000 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1001 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1002 res.AddStringDicomTag(requestLevel,
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1003 static_cast<uint16_t>(s.ColumnInt(C7_INT_1)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1004 static_cast<uint16_t>(s.ColumnInt(C8_INT_2)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1005 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1006 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1007
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1008 case QUERY_PARENT_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1009 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1010 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1011 res.AddStringDicomTag(static_cast<ResourceType>(requestLevel - 1),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1012 static_cast<uint16_t>(s.ColumnInt(C7_INT_1)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1013 static_cast<uint16_t>(s.ColumnInt(C8_INT_2)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1014 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1015 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1016
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1017 case QUERY_GRAND_PARENT_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1018 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1019 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1020 res.AddStringDicomTag(static_cast<ResourceType>(requestLevel - 2),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1021 static_cast<uint16_t>(s.ColumnInt(C7_INT_1)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1022 static_cast<uint16_t>(s.ColumnInt(C8_INT_2)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1023 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1024 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1025
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1026 case QUERY_CHILDREN_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1027 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1028 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1029 res.AddChildrenMainDicomTagValue(static_cast<ResourceType>(requestLevel + 1),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1030 DicomTag(static_cast<uint16_t>(s.ColumnInt(C7_INT_1)), static_cast<uint16_t>(s.ColumnInt(C8_INT_2))),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1031 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1032 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1033
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1034 case QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1035 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1036 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1037 res.AddChildrenMainDicomTagValue(static_cast<ResourceType>(requestLevel + 2),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1038 DicomTag(static_cast<uint16_t>(s.ColumnInt(C7_INT_1)), static_cast<uint16_t>(s.ColumnInt(C8_INT_2))),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1039 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1040 }; break;
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1041
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1042 case QUERY_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1043 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1044 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1045 res.AddMetadata(static_cast<ResourceType>(requestLevel),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1046 static_cast<MetadataType>(s.ColumnInt(C7_INT_1)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1047 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1048 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1049
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1050 case QUERY_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1051 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1052 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1053 res.AddMetadata(static_cast<ResourceType>(requestLevel - 1),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1054 static_cast<MetadataType>(s.ColumnInt(C7_INT_1)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1055 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1056 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1057
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1058 case QUERY_GRAND_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1059 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1060 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1061 res.AddMetadata(static_cast<ResourceType>(requestLevel - 2),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1062 static_cast<MetadataType>(s.ColumnInt(C7_INT_1)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1063 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1064 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1065
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1066 case QUERY_CHILDREN_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1067 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1068 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1069 res.AddChildrenMetadataValue(static_cast<ResourceType>(requestLevel + 1),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1070 static_cast<MetadataType>(s.ColumnInt(C7_INT_1)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1071 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1072 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1073
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1074 case QUERY_GRAND_CHILDREN_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1075 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1076 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1077 res.AddChildrenMetadataValue(static_cast<ResourceType>(requestLevel + 2),
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1078 static_cast<MetadataType>(s.ColumnInt(C7_INT_1)),
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1079 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1080 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1081
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1082 case QUERY_PARENT_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1083 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1084 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1085 res.SetParentIdentifier(s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1086 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1087
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1088 case QUERY_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1089 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1090 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1091 res.AddChildIdentifier(static_cast<ResourceType>(requestLevel + 1),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1092 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1093 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1094
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1095 case QUERY_GRAND_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1096 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1097 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1098 res.AddChildIdentifier(static_cast<ResourceType>(requestLevel + 2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1099 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1100 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1101
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1102 case QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1103 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1104 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1105 res.AddChildIdentifier(static_cast<ResourceType>(requestLevel + 3),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1106 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1107 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1108
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1109 case QUERY_ONE_INSTANCE_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1110 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1111 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1112 res.SetOneInstancePublicId(s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1113 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1114
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1115 case QUERY_ONE_INSTANCE_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1116 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1117 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1118 res.AddOneInstanceMetadata(static_cast<MetadataType>(s.ColumnInt(C7_INT_1)), s.ColumnString(C3_STRING_1));
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1119 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1120
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1121 case QUERY_ONE_INSTANCE_ATTACHMENTS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1122 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1123 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
5809
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1124 FileInfo file(s.ColumnString(C3_STRING_1), static_cast<FileContentType>(s.ColumnInt(C7_INT_1)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1125 s.ColumnInt64(C9_BIG_INT_1), s.ColumnString(C4_STRING_2),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1126 static_cast<CompressionType>(s.ColumnInt(C8_INT_2)),
023a99146dd0 merged find-refactoring -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5807 5805
diff changeset
1127 s.ColumnInt64(C10_BIG_INT_2), s.ColumnString(C5_STRING_3), s.ColumnString(C6_STRING_4));
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1128 res.AddOneInstanceAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1129 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1130
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1131 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1132 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1133 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1134 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1135 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1136
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1137 // From the "ICreateInstance" interface
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1138 virtual void AttachChild(int64_t parent,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1139 int64_t child) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1140 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1141 SQLite::Statement s(db_, SQLITE_FROM_HERE, "UPDATE Resources SET parentId = ? WHERE internalId = ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1142 s.BindInt64(0, parent);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1143 s.BindInt64(1, child);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1144 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1145 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1146
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1147
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1148 virtual void ClearChanges() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1149 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1150 ClearTable("Changes");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1151 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1152
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1153 virtual void ClearExportedResources() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1154 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1155 ClearTable("ExportedResources");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1156 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
1157
1241
90d2f320862d refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1240
diff changeset
1158
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1159 virtual void ClearMainDicomTags(int64_t id) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1160 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1161 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1162 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM DicomIdentifiers WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1163 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1164 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1165 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1166
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1167 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1168 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM MainDicomTags WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1169 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1170 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1171 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1172 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1173
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1174
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1175 virtual bool CreateInstance(CreateInstanceResult& result,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1176 int64_t& instanceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1177 const std::string& patient,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1178 const std::string& study,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1179 const std::string& series,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1180 const std::string& instance) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1181 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1182 return ICreateInstance::Apply
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1183 (*this, result, instanceId, patient, study, series, instance);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1184 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1185
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1186
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1187 // From the "ICreateInstance" interface
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1188 virtual int64_t CreateResource(const std::string& publicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1189 ResourceType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1190 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1191 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO Resources (internalId, resourceType, publicId, parentId) VALUES(NULL, ?, ?, NULL)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1192 s.BindInt(0, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1193 s.BindString(1, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1194 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1195 return db_.GetLastInsertRowId();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1196 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1197
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1198
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1199 virtual void DeleteAttachment(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1200 FileContentType attachment) ORTHANC_OVERRIDE
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1201 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1202 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM AttachedFiles WHERE id=? AND fileType=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1203 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1204 s.BindInt(1, attachment);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1205 s.Run();
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1206 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1207
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1208
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1209 virtual void DeleteMetadata(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1210 MetadataType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1211 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1212 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM Metadata WHERE id=? and type=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1213 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1214 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1215 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1216 }
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1217
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1218
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1219 virtual void DeleteResource(int64_t id) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1220 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1221 signalRemainingAncestor_.Reset();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1222
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1223 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM Resources WHERE internalId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1224 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1225 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1226
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1227 if (signalRemainingAncestor_.HasRemainingAncestor())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1228 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1229 listener_.SignalRemainingAncestor(signalRemainingAncestor_.GetRemainingAncestorType(),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1230 signalRemainingAncestor_.GetRemainingAncestorId());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1231 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1232 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1233
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1234 void DeleteDeletedFile(const std::string& uuid)
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1235 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1236 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM DeletedFiles WHERE uuid=?");
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1237 s.BindString(0, uuid);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1238 s.Run();
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1239 }
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1240
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1241 void GetDeletedFileCustomData(std::string& customData, const std::string& uuid)
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1242 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1243 SQLite::Statement s(db_, SQLITE_FROM_HERE,
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1244 "SELECT customData FROM DeletedFiles WHERE uuid=?");
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1245 s.BindString(0, uuid);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1246
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1247 if (s.Step())
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1248 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1249 customData = s.ColumnString(0);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1250 }
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1251 else
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1252 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1253 throw OrthancException(ErrorCode_UnknownResource);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1254 }
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1255 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1256
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1257 virtual void GetAllMetadata(std::map<MetadataType, std::string>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1258 int64_t id) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1259 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1260 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1261
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1262 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT type, value FROM Metadata WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1263 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1264
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1265 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1266 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1267 MetadataType key = static_cast<MetadataType>(s.ColumnInt(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1268 target[key] = s.ColumnString(1);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1269 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1270 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1271
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1272
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1273 virtual void GetAllPublicIds(std::list<std::string>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1274 ResourceType resourceType) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1275 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1276 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT publicId FROM Resources WHERE resourceType=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1277 s.BindInt(0, resourceType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1278
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1279 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1280 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1281 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1282 target.push_back(s.ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1283 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1284 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1285
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1286
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1287 virtual void GetAllPublicIds(std::list<std::string>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1288 ResourceType resourceType,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1289 int64_t since,
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1290 uint32_t limit) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1291 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1292 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1293 "SELECT publicId FROM Resources WHERE "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1294 "resourceType=? LIMIT ? OFFSET ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1295 s.BindInt(0, resourceType);
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
1296 s.BindInt64(1, limit == 0 ? -1 : limit); // In SQLite, setting "LIMIT" to "-1" means "no limit"
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1297 s.BindInt64(2, since);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1298
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1299 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1300 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1301 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1302 target.push_back(s.ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1303 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1304 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1305
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1306
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1307 virtual void GetChanges(std::list<ServerIndexChange>& target /*out*/,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1308 bool& done /*out*/,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1309 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1310 uint32_t limit) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1311 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1312 std::set<ChangeType> filter;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1313 GetChangesExtended(target, done, since, -1, limit, filter);
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1314 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1315
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1316 virtual void GetChangesExtended(std::list<ServerIndexChange>& target /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1317 bool& done /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1318 int64_t since,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1319 int64_t to,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1320 uint32_t limit,
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1321 const std::set<ChangeType>& filterType) ORTHANC_OVERRIDE
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1322 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1323 std::vector<std::string> filters;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1324 bool hasSince = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1325 bool hasTo = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1326
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1327 if (since > 0)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1328 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1329 hasSince = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1330 filters.push_back("seq>?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1331 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1332 if (to != -1)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1333 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1334 hasTo = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1335 filters.push_back("seq<=?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1336 }
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1337 if (filterType.size() != 0)
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1338 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1339 filters.push_back("changeType IN ( " + JoinChanges(filterType) + " )");
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1340 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1341
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1342 std::string filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1343 if (filters.size() > 0)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1344 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1345 Toolbox::JoinStrings(filtersString, filters, " AND ");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1346 filtersString = "WHERE " + filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1347 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1348
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1349 std::string sql;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1350 bool returnFirstResults;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1351 if (hasTo && !hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1352 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1353 // in this case, we want the largest values in the LIMIT clause but we want them ordered in ascending order
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1354 sql = "SELECT * FROM (SELECT * FROM Changes " + filtersString + " ORDER BY seq DESC LIMIT ?) ORDER BY seq ASC";
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1355 returnFirstResults = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1356 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1357 else
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1358 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1359 // default query: we want the smallest values ordered in ascending order
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1360 sql = "SELECT * FROM Changes " + filtersString + " ORDER BY seq ASC LIMIT ?";
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1361 returnFirstResults = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1362 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1363
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1364 SQLite::Statement s(db_, SQLITE_FROM_HERE_DYNAMIC(sql), sql);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1365
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1366 int paramCounter = 0;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1367 if (hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1368 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1369 s.BindInt64(paramCounter++, since);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1370 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1371 if (hasTo)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1372 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1373 s.BindInt64(paramCounter++, to);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1374 }
5805
8a8756b2dd0b cleanup
Alain Mazy <am@orthanc.team>
parents: 5804
diff changeset
1375
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1376 s.BindInt(paramCounter++, limit + 1); // we take limit+1 because we use the +1 to know if "Done" must be set to true
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1377 GetChangesInternal(target, done, s, limit, returnFirstResults);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1378 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1379
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1380
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1381 virtual void GetChildrenMetadata(std::list<std::string>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1382 int64_t resourceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1383 MetadataType metadata) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1384 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1385 IGetChildrenMetadata::Apply(*this, target, resourceId, metadata);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1386 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1387
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1388
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1389 virtual void GetChildrenInternalId(std::list<int64_t>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1390 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1391 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1392 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT a.internalId FROM Resources AS a, Resources AS b "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1393 "WHERE a.parentId = b.internalId AND b.internalId = ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1394 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1395
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1396 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1397
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1398 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1399 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1400 target.push_back(s.ColumnInt64(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1401 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1402 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1403
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1404
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1405 virtual void GetChildrenPublicId(std::list<std::string>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1406 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1407 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1408 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT a.publicId FROM Resources AS a, Resources AS b "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1409 "WHERE a.parentId = b.internalId AND b.internalId = ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1410 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1411
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1412 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1413
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1414 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1415 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1416 target.push_back(s.ColumnString(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1417 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1418 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1419
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1420
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1421 virtual void GetExportedResources(std::list<ExportedResource>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1422 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1423 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1424 uint32_t limit) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1425 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1426 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1427 "SELECT * FROM ExportedResources WHERE seq>? ORDER BY seq LIMIT ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1428 s.BindInt64(0, since);
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1429 s.BindInt(1, limit + 1);
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1430 GetExportedResourcesInternal(target, done, s, limit);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1431 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1432
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1433
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1434 virtual void GetLastChange(std::list<ServerIndexChange>& target /*out*/) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1435 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1436 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1437 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT * FROM Changes ORDER BY seq DESC LIMIT 1");
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1438 GetChangesInternal(target, done, s, 1, true);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1439 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1440
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1441
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1442 int64_t GetLastChangeIndex() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1443 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1444 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1445 "SELECT seq FROM sqlite_sequence WHERE name='Changes'");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1446
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1447 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1448 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1449 int64_t c = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1450 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1451 return c;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1452 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1453 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1454 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1455 // No change has been recorded so far in the database
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1456 return 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1457 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1458 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1459
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1460
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1461 virtual void GetLastExportedResource(std::list<ExportedResource>& target) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1462 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1463 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1464 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1465 "SELECT * FROM ExportedResources ORDER BY seq DESC LIMIT 1");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1466 GetExportedResourcesInternal(target, done, s, 1);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1467 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1468
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1469
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1470 virtual void GetMainDicomTags(DicomMap& map,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1471 int64_t id) ORTHANC_OVERRIDE
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1472 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1473 map.Clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1474
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1475 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT * FROM MainDicomTags WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1476 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1477 while (s.Step())
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1478 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1479 map.SetValue(s.ColumnInt(1),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1480 s.ColumnInt(2),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1481 s.ColumnString(3), false);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1482 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1483 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1484
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1485
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1486 virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1487 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1488 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1489 "SELECT publicId FROM Resources WHERE internalId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1490 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1491
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1492 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1493 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1494 return s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1495 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1496 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1497 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1498 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1499 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1500 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1501
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1502
4595
cc64385593ef added OrthancPluginRegisterDatabaseBackendV3() to plugin sdk
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4594
diff changeset
1503 virtual uint64_t GetResourcesCount(ResourceType resourceType) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1504 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1505 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1506 "SELECT COUNT(*) FROM Resources WHERE resourceType=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1507 s.BindInt(0, resourceType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1508
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1509 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1510 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1511 return 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1512 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1513 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1514 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1515 int64_t c = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1516 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1517 return c;
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1518 }
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1519 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1520
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1521
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1522 virtual ResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1523 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1524 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1525 "SELECT resourceType FROM Resources WHERE internalId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1526 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1527
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1528 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1529 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1530 return static_cast<ResourceType>(s.ColumnInt(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1531 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1532 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1533 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1534 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1535 }
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1536 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1537
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1538
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1539 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1540 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1541 // Old SQL query that was used in Orthanc <= 1.5.0:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1542 // SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT SUM(compressedSize) FROM AttachedFiles");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1543
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1544 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT value FROM GlobalIntegers WHERE key=0");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1545 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1546 return static_cast<uint64_t>(s.ColumnInt64(0));
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1547 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1548
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1549
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1550 virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1551 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1552 // Old SQL query that was used in Orthanc <= 1.5.0:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1553 // SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT SUM(uncompressedSize) FROM AttachedFiles");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1554
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1555 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT value FROM GlobalIntegers WHERE key=1");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1556 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1557 return static_cast<uint64_t>(s.ColumnInt64(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1558 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1559
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1560
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1561 virtual bool IsDiskSizeAbove(uint64_t threshold) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1562 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1563 return GetTotalCompressedSize() > threshold;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1564 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1565
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1566
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1567 virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1568 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1569 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1570 "SELECT * FROM PatientRecyclingOrder WHERE patientId = ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1571 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1572 return !s.Step();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1573 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1574
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1575
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1576 virtual void ListAvailableAttachments(std::set<FileContentType>& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1577 int64_t id) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1578 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1579 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1580
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1581 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1582 "SELECT fileType FROM AttachedFiles WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1583 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1584
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1585 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1586 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1587 target.insert(static_cast<FileContentType>(s.ColumnInt(0)));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1588 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1589 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1590
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1591
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1592 virtual void LogChange(ChangeType changeType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1593 ResourceType resourceType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1594 int64_t internalId,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1595 const std::string& /* publicId - unused */,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1596 const std::string& date) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1597 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1598 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO Changes (seq, changeType, internalId, resourceType, date) VALUES(NULL, ?, ?, ?, ?)");
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1599 s.BindInt(0, changeType);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1600 s.BindInt64(1, internalId);
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1601 s.BindInt(2, resourceType);
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1602 s.BindString(3, date);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1603 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1604 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1605
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1606
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1607 virtual void LogExportedResource(const ExportedResource& resource) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1608 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1609 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1610 "INSERT INTO ExportedResources (seq, resourceType, publicId, remoteModality, patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid, date) VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1611
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1612 s.BindInt(0, resource.GetResourceType());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1613 s.BindString(1, resource.GetPublicId());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1614 s.BindString(2, resource.GetModality());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1615 s.BindString(3, resource.GetPatientId());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1616 s.BindString(4, resource.GetStudyInstanceUid());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1617 s.BindString(5, resource.GetSeriesInstanceUid());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1618 s.BindString(6, resource.GetSopInstanceUid());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1619 s.BindString(7, resource.GetDate());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1620 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1621 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1622
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1623
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1624 virtual bool LookupAttachment(FileInfo& attachment,
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1625 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1626 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1627 FileContentType contentType) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1628 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1629 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1630 "SELECT uuid, uncompressedSize, compressionType, compressedSize, "
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1631 "uncompressedMD5, compressedMD5, revision, customData FROM AttachedFiles WHERE id=? AND fileType=?");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1632 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1633 s.BindInt(1, contentType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1634
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1635 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1636 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1637 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1638 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1639 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1640 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1641 attachment = FileInfo(s.ColumnString(0),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1642 contentType,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1643 s.ColumnInt64(1),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1644 s.ColumnString(4),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1645 static_cast<CompressionType>(s.ColumnInt(2)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1646 s.ColumnInt64(3),
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1647 s.ColumnString(5),
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1648 s.ColumnString(7));
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1649 revision = s.ColumnInt(6);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1650 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1651 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1652 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1653
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1654
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1655 virtual bool LookupGlobalProperty(std::string& target,
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1656 GlobalProperty property,
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1657 bool shared) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1658 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1659 // The "shared" info is not used by the SQLite database, as it
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1660 // can only be used by one Orthanc server.
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1661
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1662 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1663 "SELECT value FROM GlobalProperties WHERE property=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1664 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1665
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1666 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1667 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1668 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1669 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1670 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1671 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1672 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1673 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1674 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1675 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1676
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1677
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1678 virtual bool LookupMetadata(std::string& target,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1679 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1680 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1681 MetadataType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1682 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1683 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1684 "SELECT value, revision FROM Metadata WHERE id=? AND type=?");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1685 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1686 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1687
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1688 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1689 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1690 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1691 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1692 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1693 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1694 target = s.ColumnString(0);
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1695 revision = s.ColumnInt(1);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1696 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1697 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1698 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1699
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1700
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1701 virtual bool LookupParent(int64_t& parentId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1702 int64_t resourceId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1703 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1704 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1705 "SELECT parentId FROM Resources WHERE internalId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1706 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1707
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1708 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1709 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1710 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1711 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1712
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1713 if (s.ColumnIsNull(0))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1714 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1715 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1716 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1717 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1718 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1719 parentId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1720 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1721 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1722 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1723
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1724
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1725 virtual bool LookupResourceAndParent(int64_t& id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1726 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1727 std::string& parentPublicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1728 const std::string& publicId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1729 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1730 return ILookupResourceAndParent::Apply(*this, id, type, parentPublicId, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1731 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1732
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1733
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1734 virtual bool LookupResource(int64_t& id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1735 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1736 const std::string& publicId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1737 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1738 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1739 "SELECT internalId, resourceType FROM Resources WHERE publicId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1740 s.BindString(0, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1741
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1742 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1743 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1744 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1745 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1746 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1747 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1748 id = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1749 type = static_cast<ResourceType>(s.ColumnInt(1));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1750
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1751 // Check whether there is a single resource with this public id
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1752 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1753
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1754 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1755 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1756 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1757
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1758
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1759 virtual bool SelectPatientToRecycle(int64_t& internalId) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1760 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1761 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1762 "SELECT patientId FROM PatientRecyclingOrder ORDER BY seq ASC LIMIT 1");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1763
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1764 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1765 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1766 // No patient remaining or all the patients are protected
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1767 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1768 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1769 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1770 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1771 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1772 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1773 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1774 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1775
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1776
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1777 virtual bool SelectPatientToRecycle(int64_t& internalId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1778 int64_t patientIdToAvoid) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1779 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1780 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1781 "SELECT patientId FROM PatientRecyclingOrder "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1782 "WHERE patientId != ? ORDER BY seq ASC LIMIT 1");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1783 s.BindInt64(0, patientIdToAvoid);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1784
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1785 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1786 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1787 // No patient remaining or all the patients are protected
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1788 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1789 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1790 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1791 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1792 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1793 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1794 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1795 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1796
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1797
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1798 virtual void SetGlobalProperty(GlobalProperty property,
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1799 bool shared,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1800 const std::string& value) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1801 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1802 // The "shared" info is not used by the SQLite database, as it
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1803 // can only be used by one Orthanc server.
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1804
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1805 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT OR REPLACE INTO GlobalProperties (property, value) VALUES(?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1806 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1807 s.BindString(1, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1808 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1809 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1810
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1811
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1812 // From the "ISetResourcesContent" interface
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1813 virtual void SetIdentifierTag(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1814 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1815 const std::string& value) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1816 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1817 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO DicomIdentifiers (id, tagGroup, tagElement, value) VALUES(?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1818 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1819 s.BindInt(1, tag.GetGroup());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1820 s.BindInt(2, tag.GetElement());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1821 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1822 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1823 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1824
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1825
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1826 virtual void SetProtectedPatient(int64_t internalId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1827 bool isProtected) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1828 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1829 if (isProtected)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1830 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1831 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM PatientRecyclingOrder WHERE patientId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1832 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1833 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1834 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1835 else if (IsProtectedPatient(internalId))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1836 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1837 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO PatientRecyclingOrder (seq, patientId) VALUES(NULL, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1838 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1839 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1840 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1841 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1842 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1843 // Nothing to do: The patient is already unprotected
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1844 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1845 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1846
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1847
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1848 // From the "ISetResourcesContent" interface
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1849 virtual void SetMainDicomTag(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1850 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1851 const std::string& value) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1852 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1853 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO MainDicomTags (id, tagGroup, tagElement, value) VALUES(?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1854 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1855 s.BindInt(1, tag.GetGroup());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1856 s.BindInt(2, tag.GetElement());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1857 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1858 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1859 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1860
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1861
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1862 virtual void SetMetadata(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1863 MetadataType type,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1864 const std::string& value,
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1865 int64_t revision) ORTHANC_OVERRIDE
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1866 {
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1867 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT OR REPLACE INTO Metadata (id, type, value, revision) VALUES(?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1868 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1869 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1870 s.BindString(2, value);
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
1871 s.BindInt(3, revision);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1872 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1873 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1874
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1875
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1876 virtual void SetResourcesContent(const Orthanc::ResourcesContent& content) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1877 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1878 ISetResourcesContent::Apply(*this, content);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1879 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1880
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1881
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1882 // From the "ICreateInstance" interface
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1883 virtual void TagMostRecentPatient(int64_t patient) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1884 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1885 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1886 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1887 "DELETE FROM PatientRecyclingOrder WHERE patientId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1888 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1889 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1890
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1891 assert(db_.GetLastChangeCount() == 0 ||
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1892 db_.GetLastChangeCount() == 1);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1893
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1894 if (db_.GetLastChangeCount() == 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1895 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1896 // The patient was protected, there was nothing to delete from the recycling order
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1897 return;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1898 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1899 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1900
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1901 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1902 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
1903 "INSERT INTO PatientRecyclingOrder (seq, patientId) VALUES(NULL, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1904 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1905 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1906 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1907 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1908
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1909
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1910 virtual void AddLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1911 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1912 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1913 if (label.empty())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1914 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1915 throw OrthancException(ErrorCode_ParameterOutOfRange);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1916 }
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1917 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1918 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1919 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT OR IGNORE INTO Labels (id, label) VALUES(?, ?)");
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1920 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1921 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1922 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1923 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1924 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1925
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1926
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1927 virtual void RemoveLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1928 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1929 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1930 if (label.empty())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1931 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1932 throw OrthancException(ErrorCode_ParameterOutOfRange);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1933 }
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1934 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1935 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1936 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM Labels WHERE id=? AND label=?");
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1937 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1938 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1939 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1940 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1941 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1942
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1943
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1944 virtual void ListLabels(std::set<std::string>& target,
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1945 int64_t resource) ORTHANC_OVERRIDE
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1946 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1947 target.clear();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1948
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1949 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1950 "SELECT label FROM Labels WHERE id=?");
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1951 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1952
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1953 while (s.Step())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1954 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1955 target.insert(s.ColumnString(0));
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1956 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1957 }
5249
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1958
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1959
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1960 virtual void ListAllLabels(std::set<std::string>& target) ORTHANC_OVERRIDE
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1961 {
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1962 target.clear();
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1963
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1964 SQLite::Statement s(db_, SQLITE_FROM_HERE,
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1965 "SELECT DISTINCT label FROM Labels");
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1966
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1967 while (s.Step())
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1968 {
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1969 target.insert(s.ColumnString(0));
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1970 }
f22c8fac764b added "/tools/labels" to list all the labels that are associated with any resource
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5248
diff changeset
1971 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1972 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1973
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1974
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1975 class SQLiteDatabaseWrapper::SignalFileDeleted : public SQLite::IScalarFunction
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1976 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1977 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1978 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1979
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1980 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1981 SignalFileDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1982 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1983 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1984 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1985
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1986 virtual const char* GetName() const ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1987 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1988 return "SignalFileDeleted";
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1989 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1990
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1991 virtual unsigned int GetCardinality() const ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1992 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1993 return 7;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1994 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1995
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1996 virtual void Compute(SQLite::FunctionContext& context) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1997 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1998 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1999 {
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2000 std::string id = context.GetStringValue(0);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2001
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2002 std::string customData;
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2003 sqlite_.activeTransaction_->GetDeletedFileCustomData(customData, id);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2004
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2005 std::string uncompressedMD5, compressedMD5;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2006
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2007 if (!context.IsNullValue(5))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2008 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2009 uncompressedMD5 = context.GetStringValue(5);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2010 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2011
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2012 if (!context.IsNullValue(6))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2013 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2014 compressedMD5 = context.GetStringValue(6);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2015 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2016
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2017 FileInfo info(context.GetStringValue(0),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2018 static_cast<FileContentType>(context.GetIntValue(1)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2019 static_cast<uint64_t>(context.GetInt64Value(2)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2020 uncompressedMD5,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2021 static_cast<CompressionType>(context.GetIntValue(3)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2022 static_cast<uint64_t>(context.GetInt64Value(4)),
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2023 compressedMD5,
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2024 customData);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2025
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2026 sqlite_.activeTransaction_->GetListener().SignalAttachmentDeleted(info);
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2027 sqlite_.activeTransaction_->DeleteDeletedFile(id);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2028 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2029 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2030 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2031
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2032
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2033 class SQLiteDatabaseWrapper::SignalResourceDeleted : public SQLite::IScalarFunction
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2034 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2035 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2036 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2037
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2038 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2039 SignalResourceDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2040 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2041 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2042 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2043
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2044 virtual const char* GetName() const ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2045 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2046 return "SignalResourceDeleted";
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2047 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2048
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2049 virtual unsigned int GetCardinality() const ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2050 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2051 return 2;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2052 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2053
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2054 virtual void Compute(SQLite::FunctionContext& context) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2055 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2056 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2057 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2058 sqlite_.activeTransaction_->GetListener().
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2059 SignalResourceDeleted(static_cast<ResourceType>(context.GetIntValue(1)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2060 context.GetStringValue(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2061 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2062 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2063 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2064
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2065
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2066 class SQLiteDatabaseWrapper::ReadWriteTransaction : public SQLiteDatabaseWrapper::TransactionBase
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2067 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2068 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2069 SQLiteDatabaseWrapper& that_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2070 std::unique_ptr<SQLite::Transaction> transaction_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2071 int64_t initialDiskSize_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2072
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2073 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2074 ReadWriteTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2075 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2076 TransactionBase(that.mutex_, that.db_, listener, *that.signalRemainingAncestor_),
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2077 that_(that),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2078 transaction_(new SQLite::Transaction(that_.db_))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2079 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2080 if (that_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2081 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2082 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2083 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2084
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2085 that_.activeTransaction_ = this;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2086
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2087 #if defined(NDEBUG)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2088 // Release mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2089 initialDiskSize_ = 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2090 #else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2091 // Debug mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2092 initialDiskSize_ = static_cast<int64_t>(GetTotalCompressedSize());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2093 #endif
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2094 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2095
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2096 virtual ~ReadWriteTransaction()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2097 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2098 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2099 that_.activeTransaction_ = NULL;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2100 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2101
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2102 void Begin()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2103 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2104 transaction_->Begin();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2105 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2106
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2107 virtual void Rollback() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2108 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2109 transaction_->Rollback();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2110 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2111
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2112 virtual void Commit(int64_t fileSizeDelta /* only used in debug */) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2113 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2114 transaction_->Commit();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2115
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2116 assert(initialDiskSize_ + fileSizeDelta >= 0 &&
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2117 initialDiskSize_ + fileSizeDelta == static_cast<int64_t>(GetTotalCompressedSize()));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2118 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2119 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2120
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2121
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2122 class SQLiteDatabaseWrapper::ReadOnlyTransaction : public SQLiteDatabaseWrapper::TransactionBase
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2123 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2124 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2125 SQLiteDatabaseWrapper& that_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2126
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2127 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2128 ReadOnlyTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2129 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2130 TransactionBase(that.mutex_, that.db_, listener, *that.signalRemainingAncestor_),
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2131 that_(that)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2132 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2133 if (that_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2134 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2135 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2136 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2137
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2138 that_.activeTransaction_ = this;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2139 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2140
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2141 virtual ~ReadOnlyTransaction()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2142 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2143 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2144 that_.activeTransaction_ = NULL;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2145 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2146
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2147 virtual void Rollback() ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2148 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2149 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2150
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2151 virtual void Commit(int64_t fileSizeDelta /* only used in debug */) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2152 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2153 if (fileSizeDelta != 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2154 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2155 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2156 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2157 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2158 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2159
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2160
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2161 SQLiteDatabaseWrapper::SQLiteDatabaseWrapper(const std::string& path) :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2162 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2163 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2164 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2165 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2166 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2167 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2168 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2169 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2170 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2171 db_.Open(path);
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2172 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2173
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2174
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2175 SQLiteDatabaseWrapper::SQLiteDatabaseWrapper() :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2176 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2177 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2178 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2179 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2180 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2181 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2182 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2183 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2184 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2185 db_.OpenInMemory();
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2186 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2187
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2188 SQLiteDatabaseWrapper::~SQLiteDatabaseWrapper()
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2189 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2190 if (activeTransaction_ != NULL)
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2191 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2192 LOG(ERROR) << "A SQLite transaction is still active in the SQLiteDatabaseWrapper destructor: Expect a crash";
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2193 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2194 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2195
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2196
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2197 void SQLiteDatabaseWrapper::Open()
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2198 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2199 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2200 boost::mutex::scoped_lock lock(mutex_);
1717
3926e6317a43 SetIdentifierTagInternal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1712
diff changeset
2201
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2202 if (signalRemainingAncestor_ != NULL)
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2203 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2204 throw OrthancException(ErrorCode_BadSequenceOfCalls); // Cannot open twice
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2205 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2206
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2207 signalRemainingAncestor_ = dynamic_cast<SignalRemainingAncestor*>(db_.Register(new SignalRemainingAncestor));
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2208 db_.Register(new SignalFileDeleted(*this));
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2209 db_.Register(new SignalResourceDeleted(*this));
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2210
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2211 db_.Execute("PRAGMA ENCODING=\"UTF-8\";");
374
42e87c17cab8 some refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 310
diff changeset
2212
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2213 // Performance tuning of SQLite with PRAGMAs
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2214 // http://www.sqlite.org/pragma.html
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2215 db_.Execute("PRAGMA SYNCHRONOUS=NORMAL;");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2216 db_.Execute("PRAGMA JOURNAL_MODE=WAL;");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2217 db_.Execute("PRAGMA LOCKING_MODE=EXCLUSIVE;");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2218 db_.Execute("PRAGMA WAL_AUTOCHECKPOINT=1000;");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2219 //db_.Execute("PRAGMA TEMP_STORE=memory");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2220
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2221 // Make "LIKE" case-sensitive in SQLite
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2222 db_.Execute("PRAGMA case_sensitive_like = true;");
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2223 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2224
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2225 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2226
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2227 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2228 std::unique_ptr<ITransaction> transaction(StartTransaction(TransactionType_ReadOnly, listener));
1239
92c6b3b57699 cleaning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1238
diff changeset
2229
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2230 if (!db_.DoesTableExist("GlobalProperties"))
3018
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3017
diff changeset
2231 {
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2232 LOG(INFO) << "Creating the database";
3018
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3017
diff changeset
2233 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2234 ServerResources::GetFileResource(query, ServerResources::PREPARE_DATABASE);
3018
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3017
diff changeset
2235 db_.Execute(query);
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3017
diff changeset
2236 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2237
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2238 // Check the version of the database
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2239 std::string tmp;
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
2240 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_DatabaseSchemaVersion, true /* unused in SQLite */))
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2241 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2242 tmp = "Unknown";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2243 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2244
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2245 bool ok = false;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2246 try
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2247 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2248 LOG(INFO) << "Version of the Orthanc database: " << tmp;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2249 version_ = boost::lexical_cast<unsigned int>(tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2250 ok = true;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2251 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2252 catch (boost::bad_lexical_cast&)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2253 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2254 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2255
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2256 if (!ok)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2257 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2258 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2259 "Incompatible version of the Orthanc database: " + tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2260 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2261
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2262 if (version_ == 6)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2263 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2264 // New in Orthanc 1.5.1
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
2265 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_GetTotalSizeIsFast, true /* unused in SQLite */) ||
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2266 tmp != "1")
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2267 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2268 LOG(INFO) << "Installing the SQLite triggers to track the size of the attachments";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2269 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2270 ServerResources::GetFileResource(query, ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE);
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2271 db_.Execute(query);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2272 }
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2273
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2274 // New in Orthanc 1.12.0
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2275 if (!db_.DoesTableExist("Labels"))
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2276 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2277 LOG(INFO) << "Installing the \"Labels\" table";
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2278 std::string query;
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2279 ServerResources::GetFileResource(query, ServerResources::INSTALL_LABELS_TABLE);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2280 db_.Execute(query);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2281 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2282 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2283
5807
8279eaab0d1d merged default -> attach-custom-data
Alain Mazy <am@orthanc.team>
parents: 5084 5680
diff changeset
2284 // New in Orthanc 1.12.5
5084
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2285 if (version_ >= 6)
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2286 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2287 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_SQLiteHasCustomDataAndRevision, true /* unused in SQLite */)
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2288 || tmp != "1")
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2289 {
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2290 LOG(INFO) << "Upgrading SQLite schema to support revision and customData";
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2291 std::string query;
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2292 ServerResources::GetFileResource(query, ServerResources::INSTALL_REVISION_AND_CUSTOM_DATA);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2293 db_.Execute(query);
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2294 }
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2295 }
9770d537880d added support for revision in SQLite + avoid upgrading DB version
Alain Mazy <am@osimis.io>
parents: 5080
diff changeset
2296
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2297 transaction->Commit(0);
3018
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3017
diff changeset
2298 }
1247
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2299 }
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2300
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2301
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2302 void SQLiteDatabaseWrapper::Close()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2303 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2304 boost::mutex::scoped_lock lock(mutex_);
5057
e6f26be401fa SQLite: close and delete WAL and SHM files on exit (contribution from Sebastian Höffner)
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
2305 // close and delete the WAL when exiting properly -> the DB is stored in a single file (no more -wal and -shm files)
e6f26be401fa SQLite: close and delete WAL and SHM files on exit (contribution from Sebastian Höffner)
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
2306 db_.Execute("PRAGMA JOURNAL_MODE=DELETE;");
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2307 db_.Close();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2308 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2309
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2310
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2311 static void ExecuteUpgradeScript(SQLite::Connection& db,
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2312 ServerResources::FileResourceId script)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2313 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2314 std::string upgrade;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2315 ServerResources::GetFileResource(upgrade, script);
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2316 db.BeginTransaction();
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2317 db.Execute(upgrade);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2318 db.CommitTransaction();
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2319 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2320
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2321
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2322 void SQLiteDatabaseWrapper::Upgrade(unsigned int targetVersion,
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2323 IStorageArea& storageArea)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2324 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2325 boost::mutex::scoped_lock lock(mutex_);
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2326
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2327 if (targetVersion != 7)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2328 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2329 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2330 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2331
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2332 // This version of Orthanc is only compatible with versions 3, 4,
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2333 // 5 and 6 of the DB schema
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2334 if (version_ != 3 &&
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2335 version_ != 4 &&
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2336 version_ != 5 &&
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2337 version_ != 6 &&
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2338 version_ != 7)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2339 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2340 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2341 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2342
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2343 if (version_ == 3)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2344 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2345 LOG(WARNING) << "Upgrading database version from 3 to 4";
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2346 ExecuteUpgradeScript(db_, ServerResources::UPGRADE_DATABASE_3_TO_4);
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2347 version_ = 4;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2348 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2349
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2350 if (version_ == 4)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2351 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2352 LOG(WARNING) << "Upgrading database version from 4 to 5";
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2353 ExecuteUpgradeScript(db_, ServerResources::UPGRADE_DATABASE_4_TO_5);
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2354 version_ = 5;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2355 }
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2356
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2357 if (version_ == 5)
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2358 {
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2359 LOG(WARNING) << "Upgrading database version from 5 to 6";
1668
de1413733c97 reconstructing main dicom tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1665
diff changeset
2360 // No change in the DB schema, the step from version 5 to 6 only
1710
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
2361 // consists in reconstructing the main DICOM tags information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
2362 // (as more tags got included).
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2363
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2364 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2365
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2366 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2367 std::unique_ptr<ITransaction> transaction(StartTransaction(TransactionType_ReadWrite, listener));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2368 ServerToolbox::ReconstructMainDicomTags(*transaction, storageArea, ResourceType_Patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2369 ServerToolbox::ReconstructMainDicomTags(*transaction, storageArea, ResourceType_Study);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2370 ServerToolbox::ReconstructMainDicomTags(*transaction, storageArea, ResourceType_Series);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2371 ServerToolbox::ReconstructMainDicomTags(*transaction, storageArea, ResourceType_Instance);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2372 db_.Execute("UPDATE GlobalProperties SET value=\"6\" WHERE property=" +
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2373 boost::lexical_cast<std::string>(GlobalProperty_DatabaseSchemaVersion) + ";");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2374 transaction->Commit(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2375 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2376
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2377 version_ = 6;
1729
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1725
diff changeset
2378 }
5080
d7274e43ea7c allow plugins to store a customData in the Attachments table to e.g. store custom paths without requiring an external DB
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2379
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2380 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2381
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2382
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2383 IDatabaseWrapper::ITransaction* SQLiteDatabaseWrapper::StartTransaction(TransactionType type,
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2384 IDatabaseListener& listener)
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2385 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2386 switch (type)
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2387 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2388 case TransactionType_ReadOnly:
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2389 return new ReadOnlyTransaction(*this, listener); // This is a no-op transaction in SQLite (thanks to mutex)
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2390
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2391 case TransactionType_ReadWrite:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2392 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2393 std::unique_ptr<ReadWriteTransaction> transaction;
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2394 transaction.reset(new ReadWriteTransaction(*this, listener));
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2395 transaction->Begin();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2396 return transaction.release();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2397 }
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2398
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2399 default:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2400 throw OrthancException(ErrorCode_InternalError);
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2401 }
3019
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
diff changeset
2402 }
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
diff changeset
2403
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2404
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2405 void SQLiteDatabaseWrapper::FlushToDisk()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2406 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2407 boost::mutex::scoped_lock lock(mutex_);
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2408 db_.FlushToDisk();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2409 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2410
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2411
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2412 int64_t SQLiteDatabaseWrapper::UnitTestsTransaction::CreateResource(const std::string& publicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2413 ResourceType type)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2414 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2415 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO Resources (internalId, resourceType, publicId, parentId) VALUES(NULL, ?, ?, NULL)");
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2416 s.BindInt(0, type);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2417 s.BindString(1, publicId);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2418 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2419 return db_.GetLastInsertRowId();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2420 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2421
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2422
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2423 void SQLiteDatabaseWrapper::UnitTestsTransaction::AttachChild(int64_t parent,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2424 int64_t child)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2425 {
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2426 SQLite::Statement s(db_, SQLITE_FROM_HERE, "UPDATE Resources SET parentId = ? WHERE internalId = ?");
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2427 s.BindInt64(0, parent);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2428 s.BindInt64(1, child);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2429 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2430 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2431
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2432
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2433 void SQLiteDatabaseWrapper::UnitTestsTransaction::SetIdentifierTag(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2434 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2435 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2436 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2437 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO DicomIdentifiers (id, tagGroup, tagElement, value) VALUES(?, ?, ?, ?)");
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2438 s.BindInt64(0, id);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2439 s.BindInt(1, tag.GetGroup());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2440 s.BindInt(2, tag.GetElement());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2441 s.BindString(3, value);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2442 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2443 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2444
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2445
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2446 void SQLiteDatabaseWrapper::UnitTestsTransaction::SetMainDicomTag(int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2447 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2448 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2449 {
5090
cc1a8b3ff319 Made the default SQLite DB more robust wrt future updates like adding new columns in DB.
Alain Mazy <am@osimis.io>
parents: 5057
diff changeset
2450 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO MainDicomTags (id, tagGroup, tagElement, value) VALUES(?, ?, ?, ?)");
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2451 s.BindInt64(0, id);
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2452 s.BindInt(1, tag.GetGroup());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2453 s.BindInt(2, tag.GetElement());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2454 s.BindString(3, value);
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2455 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2456 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2457
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2458
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2459 int64_t SQLiteDatabaseWrapper::UnitTestsTransaction::GetTableRecordCount(const std::string& table)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2460 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2461 /**
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2462 * "Generally one cannot use SQL parameters/placeholders for
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2463 * database identifiers (tables, columns, views, schemas, etc.) or
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2464 * database functions (e.g., CURRENT_DATE), but instead only for
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2465 * binding literal values." => To avoid any SQL injection, we
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2466 * check that the "table" parameter has only alphabetic
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2467 * characters.
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2468 * https://stackoverflow.com/a/1274764/881731
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2469 **/
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2470 for (size_t i = 0; i < table.size(); i++)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2471 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2472 if (!isalpha(table[i]))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2473 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2474 throw OrthancException(ErrorCode_ParameterOutOfRange);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2475 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2476 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2477
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2478 // Don't use "SQLITE_FROM_HERE", otherwise "table" would be cached
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2479 SQLite::Statement s(db_, "SELECT COUNT(*) FROM " + table);
3105
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2480
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2481 if (s.Step())
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2482 {
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2483 int64_t c = s.ColumnInt(0);
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2484 assert(!s.Step());
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2485 return c;
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2486 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2487 else
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2488 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2489 throw OrthancException(ErrorCode_InternalError);
3105
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2490 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2491 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2492
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2493
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2494 bool SQLiteDatabaseWrapper::UnitTestsTransaction::GetParentPublicId(std::string& target,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2495 int64_t id)
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2496 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2497 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT a.publicId FROM Resources AS a, Resources AS b "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2498 "WHERE a.internalId = b.parentId AND b.internalId = ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2499 s.BindInt64(0, id);
3124
c0d7aee8c3f8 Fix issue #58 (Patient recycling order should be defined by their received last instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3121
diff changeset
2500
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2501 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2502 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2503 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2504 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2505 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2506 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2507 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2508 return false;
3124
c0d7aee8c3f8 Fix issue #58 (Patient recycling order should be defined by their received last instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3121
diff changeset
2509 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2510 }
3124
c0d7aee8c3f8 Fix issue #58 (Patient recycling order should be defined by their received last instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3121
diff changeset
2511
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2512
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2513 void SQLiteDatabaseWrapper::UnitTestsTransaction::GetChildren(std::list<std::string>& childrenPublicIds,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2514 int64_t id)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2515 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2516 SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT publicId FROM Resources WHERE parentId=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2517 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2518
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2519 childrenPublicIds.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2520 while (s.Step())
3124
c0d7aee8c3f8 Fix issue #58 (Patient recycling order should be defined by their received last instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3121
diff changeset
2521 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2522 childrenPublicIds.push_back(s.ColumnString(0));
3124
c0d7aee8c3f8 Fix issue #58 (Patient recycling order should be defined by their received last instance)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3121
diff changeset
2523 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2524 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2525 }