annotate OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5805:8a8756b2dd0b find-refactoring tip

cleanup
author Alain Mazy <am@orthanc.team>
date Mon, 23 Sep 2024 16:03:02 +0200
parents 25df40a274fd
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
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 namespace Orthanc
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
45 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
46 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
47 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
48 std::set<std::string> metadataTypes;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
49 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
50 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
51 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
52 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
53 std::string joinedMetadataTypes;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
54 Orthanc::Toolbox::JoinStrings(joinedMetadataTypes, metadataTypes, ", ");
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
55
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
56 return joinedMetadataTypes;
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
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
59 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
60 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
61 // 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
62 // 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
63 // ((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
64
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
65 std::string sql = " (";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
66 std::set<std::string> tags;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
67 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
68 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
69 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
70 + " 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
71 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
72 std::string joinedTags;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
73 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
74
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
75 sql += joinedTags + ") ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
76 return sql;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
77 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
78
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
79 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
80 {
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
81 std::set<std::string> changeTypesString;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
82 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
83 {
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
84 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
85 }
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
86
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
87 std::string joinedChangesTypes;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
88 Orthanc::Toolbox::JoinStrings(joinedChangesTypes, changeTypesString, ", ");
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
89
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
90 return joinedChangesTypes;
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
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
93 class SQLiteDatabaseWrapper::LookupFormatter : public ISqlLookupFormatter
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 {
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
95 private:
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
96 std::list<std::string> values_;
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
97
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
98 public:
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
99 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
100 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
101 values_.push_back(value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
102 return "?";
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
103 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
104
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
105 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
106 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
107 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
108 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
110 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
111 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
112 return "ESCAPE '\\'";
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
113 }
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
114
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
115 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
116 {
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
117 std::string sql;
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
118
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
119 if (count > 0)
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
120 {
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
121 sql += " LIMIT " + boost::lexical_cast<std::string>(count);
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
122 }
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
123
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
124 if (since > 0)
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
125 {
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
126 if (count == 0)
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
127 {
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
128 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
129 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
130
5762
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
131 sql += " OFFSET " + boost::lexical_cast<std::string>(since);
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
132 }
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
133
d52b3f394f69 FormatLimits (SQLServer needs custom code)
Alain Mazy <am@orthanc.team>
parents: 5758
diff changeset
134 return sql;
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
4817
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
137 virtual bool IsEscapeBrackets() const ORTHANC_OVERRIDE
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
138 {
b8fcd331b4b3 added ISqlLookupFormatter::IsEscapeBrackets()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4627
diff changeset
139 return false;
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
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
142 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
143 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
144 size_t pos = 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
145
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
146 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
147 it = values_.begin(); it != values_.end(); ++it, pos++)
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
148 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
149 statement.BindString(pos, *it);
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
150 }
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
151 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
152 };
1158
badc14fee61f speed up db
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1006
diff changeset
153
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
154
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
155 class SQLiteDatabaseWrapper::SignalRemainingAncestor : public SQLite::IScalarFunction
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 private:
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
158 bool hasRemainingAncestor_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
159 std::string remainingPublicId_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
160 ResourceType remainingType_;
660
f0232774b913 fix warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 616
diff changeset
161
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
162 public:
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
163 SignalRemainingAncestor() :
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
164 hasRemainingAncestor_(false)
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
165 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
166 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
168 void Reset()
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
169 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
170 hasRemainingAncestor_ = false;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
171 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
173 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
174 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
175 return "SignalRemainingAncestor";
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
176 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
178 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
179 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
180 return 2;
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
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
183 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
184 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
185 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
186 << context.GetStringValue(0) << "\" of type "
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
187 << context.GetIntValue(1);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
189 if (!hasRemainingAncestor_ ||
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
190 remainingType_ >= context.GetIntValue(1))
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
191 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
192 hasRemainingAncestor_ = true;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
193 remainingPublicId_ = context.GetStringValue(0);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
194 remainingType_ = static_cast<ResourceType>(context.GetIntValue(1));
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 }
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
196 }
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 bool HasRemainingAncestor() const
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
199 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
200 return hasRemainingAncestor_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
201 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
203 const std::string& GetRemainingAncestorId() const
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
204 {
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
205 assert(hasRemainingAncestor_);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
206 return remainingPublicId_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
207 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
208
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
209 ResourceType GetRemainingAncestorType() const
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 assert(hasRemainingAncestor_);
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
212 return remainingType_;
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
213 }
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
214 };
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
217 class SQLiteDatabaseWrapper::TransactionBase :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
218 public SQLiteDatabaseWrapper::UnitTestsTransaction,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
219 public Compatibility::ICreateInstance,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
220 public Compatibility::IGetChildrenMetadata,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
221 public Compatibility::ILookupResourceAndParent,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
222 public Compatibility::ISetResourcesContent
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
223 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
224 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
225 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
226 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
227 ResourceType level)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
228 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
229 resourcesId.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
230 instancesId.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
231
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
232 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
233
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
234 switch (level)
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 case ResourceType_Patient:
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 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
239 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
240 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
241 "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
242 "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
243 "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
244 "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
245 "GROUP BY patients.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
246
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
247 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
248 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
249
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
250 case ResourceType_Study:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
251 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
252 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
253 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
254 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
255 "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
256 "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
257 "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
258 "GROUP BY studies.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
259
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
260 break;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
261 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
262
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
263 case ResourceType_Series:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
264 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
265 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
266 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
267 db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
268 "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
269 "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
270 "GROUP BY series.publicId"));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
271
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
272 break;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
275 case ResourceType_Instance:
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 statement.reset(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
278 new SQLite::Statement(
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
279 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
280
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
281 break;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
284 default:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
285 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
286 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
287
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
288 assert(statement.get() != NULL);
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 while (statement->Step())
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 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
293 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
294 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
295 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
296
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
297
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
298 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
299 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
300 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
301 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
302
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 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
305 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
306 SQLite::Statement& s,
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
307 uint32_t limit,
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
308 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
309 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
310 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
311
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
312 while (s.Step())
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
313 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
314 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
315 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
316 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
317 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
318
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
319 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
320 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
321
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
322 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
323 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
324
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
325 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
326
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
327 // if we have retrieved more changes than requested -> cleanup
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
328 if (target.size() > limit)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
329 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
330 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
331
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
332 if (returnFirstResults)
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 target.pop_back();
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 else
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 target.pop_front();
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 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
341 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
342
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
343
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
344 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
345 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
346 SQLite::Statement& s,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
347 uint32_t limit)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
348 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
349 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
350
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
351 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
352 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
353 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
354 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
355 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
356
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
357 ExportedResource resource(seq,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
358 resourceType,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
359 publicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
360 s.ColumnString(3), // modality
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
361 s.ColumnString(8), // date
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
362 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
363 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
364 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
365 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
366
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
367 target.push_back(resource);
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
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
370 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
371 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
372
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
373
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
374 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
375 int64_t id)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
376 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
377 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
378 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
379
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
380 childrenPublicIds.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
381 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
382 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
383 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
384 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
385 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
386
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
387 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
388 IDatabaseListener& listener_;
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
389 SignalRemainingAncestor& signalRemainingAncestor_;
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
390
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
391 public:
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
392 TransactionBase(boost::mutex& mutex,
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
393 SQLite::Connection& db,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
394 IDatabaseListener& listener,
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
395 SignalRemainingAncestor& signalRemainingAncestor) :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
396 UnitTestsTransaction(db),
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
397 lock_(mutex),
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
398 listener_(listener),
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
399 signalRemainingAncestor_(signalRemainingAncestor)
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
400 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
401 }
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 IDatabaseListener& GetListener() const
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 return listener_;
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
406 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
407
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
408
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
409 virtual void AddAttachment(int64_t id,
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
410 const FileInfo& attachment,
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
411 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
412 {
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
413 // TODO - REVISIONS
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
414 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO AttachedFiles (id, fileType, uuid, compressedSize, uncompressedSize, compressionType, uncompressedMD5, compressedMD5) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
415 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
416 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
417 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
418 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
419 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
420 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
421 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
422 s.BindString(7, attachment.GetCompressedMD5());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
423 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
424 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
425
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
426
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
427 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
428 std::list<std::string>* instancesId,
5680
68fc5af30c03 added container class DatabaseConstraints
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5640
diff changeset
429 const DatabaseConstraints& lookup,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
430 ResourceType queryLevel,
5248
a7d95f951f8a replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5227
diff changeset
431 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
432 LabelsConstraint labelsConstraint,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
433 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
434 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
435 LookupFormatter formatter;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
436
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
437 std::string sql;
5248
a7d95f951f8a replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5227
diff changeset
438 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
439
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
440 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
441
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
442 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
443 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
444 s.Run();
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 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
448 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
449 formatter.Bind(statement);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
450 statement.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
453 if (instancesId != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
454 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
455 AnswerLookup(resourcesId, *instancesId, queryLevel);
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 else
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 resourcesId.clear();
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 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
462
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
463 while (s.Step())
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 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
466 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
467 }
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
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
470 #define C0_QUERY_ID 0
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
471 #define C1_INTERNAL_ID 1
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
472 #define C2_ROW_NUMBER 2
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
473 #define C3_STRING_1 3
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
474 #define C4_STRING_2 4
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
475 #define C5_STRING_3 5
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
476 #define C6_INT_1 6
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
477 #define C7_INT_2 7
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
478 #define C8_BIG_INT_1 8
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
479 #define C9_BIG_INT_2 9
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
480
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
481 #define QUERY_LOOKUP 1
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
482 #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
483 #define QUERY_ATTACHMENTS 3
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
484 #define QUERY_METADATA 4
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
485 #define QUERY_LABELS 5
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
486 #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
487 #define QUERY_PARENT_IDENTIFIER 11
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
488 #define QUERY_PARENT_METADATA 12
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
489 #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
490 #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
491 #define QUERY_CHILDREN_IDENTIFIERS 20
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
492 #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
493 #define QUERY_CHILDREN_METADATA 22
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
494 #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
495 #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
496 #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
497 #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
498 #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
499 #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
500 #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
501
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
502 #define STRINGIFY(x) #x
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
503 #define TOSTRING(x) STRINGIFY(x)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
504
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
505
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
506 virtual void ExecuteFind(FindResponse& response,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
507 const FindRequest& request,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
508 const Capabilities& capabilities) ORTHANC_OVERRIDE
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
509 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
510 LookupFormatter formatter;
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
511 std::string sql;
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
512 const ResourceType requestLevel = request.GetLevel();
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
513
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
514 std::string lookupSql;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
515 LookupFormatter::Apply(lookupSql, formatter, request);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
516
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
517 // 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
518 sql = "WITH Lookup AS (" + lookupSql + ") ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
519
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
520 // 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
521 // 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
522 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
523 request.IsRetrieveOneInstanceMetadataAndAttachments())
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
524 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
525 // 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
526 sql += ", OneInstance AS";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
527
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
528 switch (requestLevel)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
529 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
530 case ResourceType_Series:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
531 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
532 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
533 " FROM Resources AS childLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
534 " 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
535 break;
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
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
538 case ResourceType_Study:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
539 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
540 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
541 " FROM Resources AS grandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
542 " 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
543 " 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
544 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
545 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
546
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
547 case ResourceType_Patient:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
548 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
549 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
550 " FROM Resources AS grandGrandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
551 " 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
552 " 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
553 " 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
554 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
555 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
556
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
557 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
558 throw OrthancException(ErrorCode_InternalError);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
559 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
560 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
561
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
562 sql += "SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
563 " " 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
564 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
565 " Lookup.rowNumber AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
566 " Lookup.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
567 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
568 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
569 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
570 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
571 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
572 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
573 " FROM Lookup ";
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
574
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
575 // 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
576 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
577 request.IsRetrieveOneInstanceMetadataAndAttachments())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
578 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
579 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
580 " " 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
581 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
582 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
583 " instancePublicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
584 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
585 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
586 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
587 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
588 " instanceInternalId AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
589 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
590 " FROM OneInstance ";
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
591
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
592 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
593 " " 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
594 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
595 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
596 " Metadata.value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
597 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
598 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
599 " Metadata.type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
600 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
601 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
602 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
603 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
604 " 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
605
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
606 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
607 " " 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
608 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
609 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
610 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
611 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
612 " compressedMD5 AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
613 " fileType AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
614 " compressionType AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
615 " compressedSize AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
616 " uncompressedSize AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
617 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
618 " 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
619
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
620 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
621
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
622 // need MainDicomTags from resource ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
623 if (request.IsRetrieveMainDicomTags())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
624 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
625 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
626 " " 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
627 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
628 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
629 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
630 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
631 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
632 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
633 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
634 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
635 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
636 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
637 "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
638 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
639
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
640 // need resource metadata ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
641 if (request.IsRetrieveMetadata())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
642 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
643 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
644 " " 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
645 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
646 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
647 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
648 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
649 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
650 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
651 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
652 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
653 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
654 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
655 "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
656 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
657
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
658 // need resource attachments ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
659 if (request.IsRetrieveAttachments())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
660 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
661 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
662 " " 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
663 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
664 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
665 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
666 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
667 " compressedMD5 AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
668 " fileType AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
669 " compressionType AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
670 " compressedSize AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
671 " uncompressedSize AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
672 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
673 "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
674 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
675
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
676
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
677 // need resource labels ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
678 if (request.IsRetrieveLabels())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
679 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
680 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
681 " " 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
682 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
683 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
684 " label AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
685 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
686 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
687 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
688 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
689 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
690 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
691 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
692 "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
693 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
694
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
695 if (requestLevel > ResourceType_Patient)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
696 {
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
697 // need MainDicomTags from parent ?
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
698 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
699 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
700 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
701 " " 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
702 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
703 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
704 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
705 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
706 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
707 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
708 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
709 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
710 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
711 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
712 "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
713 "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
714 }
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
715
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
716 // need metadata from parent ?
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
717 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
718 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
719 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
720 " " 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
721 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
722 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
723 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
724 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
725 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
726 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
727 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
728 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
729 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
730 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
731 "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
732 "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
733 }
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
734
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
735 if (requestLevel > ResourceType_Study)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
736 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
737 // need MainDicomTags from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
738 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
739 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
740 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
741 " " 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
742 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
743 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
744 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
745 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
746 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
747 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
748 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
749 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
750 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
751 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
752 "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
753 "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
754 "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
755 }
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
756
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
757 // need metadata from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
758 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
759 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
760 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
761 " " 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
762 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
763 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
764 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
765 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
766 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
767 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
768 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
769 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
770 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
771 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
772 "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
773 "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
774 "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
775 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
776 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
777 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
778
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
779 // need MainDicomTags from children ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
780 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
781 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
782 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
783 " " 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
784 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
785 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
786 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
787 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
788 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
789 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
790 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
791 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
792 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
793 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
794 " 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
795 " 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
796 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
797
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
798 // need MainDicomTags from grandchildren ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
799 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
800 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
801 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
802 " " 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
803 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
804 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
805 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
806 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
807 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
808 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
809 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
810 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
811 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
812 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
813 " 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
814 " 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
815 " 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
816 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
817
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
818 // need parent identifier ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
819 if (request.IsRetrieveParentIdentifier())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
820 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
821 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
822 " " 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
823 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
824 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
825 " parentLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
826 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
827 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
828 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
829 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
830 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
831 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
832 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
833 " 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
834 " 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
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 children metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
838 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
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_CHILDREN_METADATA) " 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 " value 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, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
847 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
848 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
849 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
850 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
851 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
852 " 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
853 " 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
854 }
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
855
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
856 // need grandchildren metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
857 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
858 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
859 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
860 " " 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
861 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
862 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
863 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
864 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
865 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
866 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
867 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
868 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
869 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
870 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
871 " 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
872 " 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
873 " 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
874 }
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 // need children identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
877 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
878 (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
879 (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
880 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
881 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
882 " " 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
883 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
884 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
885 " childLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
886 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
887 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
888 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
889 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
890 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
891 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
892 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
893 " 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
894 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
895
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
896 // need grandchildren identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
897 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
898 (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
899 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
900 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
901 " " 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
902 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
903 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
904 " grandChildLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
905 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
906 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
907 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
908 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
909 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
910 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
911 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
912 "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
913 "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
914 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
915
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
916 // need grandgrandchildren identifiers ?
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
917 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
918 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
919 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
920 " " 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
921 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
922 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
923 " grandGrandChildLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
924 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
925 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
926 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
927 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
928 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
929 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
930 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
931 "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
932 "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
933 "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
934 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
935
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
936
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
937 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
938
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
939 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
940 formatter.Bind(s);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
941
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
942 while (s.Step())
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
943 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
944 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
945 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
946
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
947 // LOG(INFO) << queryId << ": " << internalId;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
948 // continue;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
949
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
950 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
951
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
952 switch (queryId)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
953 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
954 case QUERY_LOOKUP:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
955 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
956 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
957
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
958 case QUERY_LABELS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
959 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
960 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
961 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
962 }; break;
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 case QUERY_ATTACHMENTS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
965 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
966 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
967 FileInfo file(s.ColumnString(C3_STRING_1), static_cast<FileContentType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
968 s.ColumnInt64(C8_BIG_INT_1), s.ColumnString(C4_STRING_2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
969 static_cast<CompressionType>(s.ColumnInt(C7_INT_2)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
970 s.ColumnInt64(C9_BIG_INT_2), s.ColumnString(C5_STRING_3));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
971 res.AddAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
972 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
973
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
974 case QUERY_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
975 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
976 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
977 res.AddStringDicomTag(requestLevel,
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
978 static_cast<uint16_t>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
979 static_cast<uint16_t>(s.ColumnInt(C7_INT_2)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
980 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_PARENT_MAIN_DICOM_TAGS:
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.AddStringDicomTag(static_cast<ResourceType>(requestLevel - 1),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
987 static_cast<uint16_t>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
988 static_cast<uint16_t>(s.ColumnInt(C7_INT_2)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
989 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
990 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
991
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
992 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
993 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
994 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
995 res.AddStringDicomTag(static_cast<ResourceType>(requestLevel - 2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
996 static_cast<uint16_t>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
997 static_cast<uint16_t>(s.ColumnInt(C7_INT_2)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
998 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
999 }; break;
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 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
1002 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1003 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
1004 res.AddChildrenMainDicomTagValue(static_cast<ResourceType>(requestLevel + 1),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1005 DicomTag(static_cast<uint16_t>(s.ColumnInt(C6_INT_1)), static_cast<uint16_t>(s.ColumnInt(C7_INT_2))),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1006 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1007 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1008
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1009 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
1010 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1011 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
1012 res.AddChildrenMainDicomTagValue(static_cast<ResourceType>(requestLevel + 2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1013 DicomTag(static_cast<uint16_t>(s.ColumnInt(C6_INT_1)), static_cast<uint16_t>(s.ColumnInt(C7_INT_2))),
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;
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1016
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1017 case QUERY_METADATA:
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.AddMetadata(static_cast<ResourceType>(requestLevel),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1021 static_cast<MetadataType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1022 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1023 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1024
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1025 case QUERY_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1026 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1027 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
1028 res.AddMetadata(static_cast<ResourceType>(requestLevel - 1),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1029 static_cast<MetadataType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1030 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1031 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1032
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1033 case QUERY_GRAND_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1034 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1035 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
1036 res.AddMetadata(static_cast<ResourceType>(requestLevel - 2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1037 static_cast<MetadataType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1038 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1039 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1040
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1041 case QUERY_CHILDREN_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1042 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1043 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
1044 res.AddChildrenMetadataValue(static_cast<ResourceType>(requestLevel + 1),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1045 static_cast<MetadataType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1046 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1047 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1048
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1049 case QUERY_GRAND_CHILDREN_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1050 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1051 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
1052 res.AddChildrenMetadataValue(static_cast<ResourceType>(requestLevel + 2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1053 static_cast<MetadataType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1054 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1055 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1056
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1057 case QUERY_PARENT_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1058 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1059 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
1060 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
1061 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1062
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1063 case QUERY_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1064 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1065 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
1066 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
1067 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1068 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1069
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1070 case QUERY_GRAND_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1071 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1072 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
1073 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
1074 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1075 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1076
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1077 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
1078 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1079 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
1080 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
1081 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1082 }; break;
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 case QUERY_ONE_INSTANCE_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1085 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1086 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
1087 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
1088 }; break;
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 case QUERY_ONE_INSTANCE_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1091 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1092 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
1093 res.AddOneInstanceMetadata(static_cast<MetadataType>(s.ColumnInt(C6_INT_1)), s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1094 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1095
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1096 case QUERY_ONE_INSTANCE_ATTACHMENTS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1097 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1098 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
1099 FileInfo file(s.ColumnString(C3_STRING_1), static_cast<FileContentType>(s.ColumnInt(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1100 s.ColumnInt64(C8_BIG_INT_1), s.ColumnString(C4_STRING_2),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1101 static_cast<CompressionType>(s.ColumnInt(C7_INT_2)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1102 s.ColumnInt64(C9_BIG_INT_2), s.ColumnString(C5_STRING_3));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1103 res.AddOneInstanceAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1104 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1105
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1106 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1107 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
1108 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1109 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1110 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1111
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1112 // 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
1113 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
1114 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
1115 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1116 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
1117 s.BindInt64(0, parent);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1118 s.BindInt64(1, child);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1119 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1120 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1121
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1122
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1123 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
1124 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1125 ClearTable("Changes");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1126 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1127
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1128 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
1129 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1130 ClearTable("ExportedResources");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1131 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
1132
1241
90d2f320862d refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1240
diff changeset
1133
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1134 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
1135 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1136 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1137 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
1138 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1139 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1142 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1143 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
1144 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1145 s.Run();
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
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 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
1151 int64_t& instanceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1152 const std::string& patient,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1153 const std::string& study,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1154 const std::string& series,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1155 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
1156 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1157 return ICreateInstance::Apply
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1158 (*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
1159 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1160
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1161
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1162 // 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
1163 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
1164 ResourceType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1165 {
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
1166 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
1167 s.BindInt(0, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1168 s.BindString(1, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1169 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1170 return db_.GetLastInsertRowId();
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 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
1175 FileContentType attachment) ORTHANC_OVERRIDE
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1176 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1177 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
1178 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1179 s.BindInt(1, attachment);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1180 s.Run();
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1181 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1182
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1183
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1184 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
1185 MetadataType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1186 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1187 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
1188 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1189 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1190 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1191 }
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1192
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1193
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1194 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
1195 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1196 signalRemainingAncestor_.Reset();
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 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
1199 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1200 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1201
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1202 if (signalRemainingAncestor_.HasRemainingAncestor())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1203 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1204 listener_.SignalRemainingAncestor(signalRemainingAncestor_.GetRemainingAncestorType(),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1205 signalRemainingAncestor_.GetRemainingAncestorId());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1206 }
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
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1209
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1210 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
1211 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
1212 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1213 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1214
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1215 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
1216 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1217
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1218 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1219 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1220 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
1221 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
1222 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1223 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1224
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1225
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1226 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
1227 ResourceType resourceType) ORTHANC_OVERRIDE
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 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
1230 s.BindInt(0, resourceType);
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 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1233 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1234 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1235 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
1236 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1237 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1238
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1239
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1240 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
1241 ResourceType resourceType,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1242 int64_t since,
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1243 uint32_t limit) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1244 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1245 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
1246 "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
1247 "resourceType=? LIMIT ? OFFSET ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1248 s.BindInt(0, resourceType);
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
1249 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
1250 s.BindInt64(2, since);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1251
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1252 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1253 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1254 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1255 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
1256 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1257 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1258
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1259
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1260 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
1261 bool& done /*out*/,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1262 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1263 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
1264 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1265 std::set<ChangeType> filter;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1266 GetChangesExtended(target, done, since, -1, limit, filter);
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1267 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1268
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1269 virtual void GetChangesExtended(std::list<ServerIndexChange>& target /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1270 bool& done /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1271 int64_t since,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1272 int64_t to,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1273 uint32_t limit,
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1274 const std::set<ChangeType>& filterType) ORTHANC_OVERRIDE
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1275 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1276 std::vector<std::string> filters;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1277 bool hasSince = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1278 bool hasTo = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1279
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1280 if (since > 0)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1281 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1282 hasSince = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1283 filters.push_back("seq>?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1284 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1285 if (to != -1)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1286 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1287 hasTo = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1288 filters.push_back("seq<=?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1289 }
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1290 if (filterType.size() != 0)
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1291 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1292 filters.push_back("changeType IN ( " + JoinChanges(filterType) + " )");
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1293 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1294
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1295 std::string filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1296 if (filters.size() > 0)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1297 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1298 Toolbox::JoinStrings(filtersString, filters, " AND ");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1299 filtersString = "WHERE " + filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1300 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1301
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1302 std::string sql;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1303 bool returnFirstResults;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1304 if (hasTo && !hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1305 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1306 // 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
1307 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
1308 returnFirstResults = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1309 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1310 else
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1311 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1312 // default query: we want the smallest values ordered in ascending order
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1313 sql = "SELECT * FROM Changes " + filtersString + " ORDER BY seq ASC LIMIT ?";
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1314 returnFirstResults = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1315 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1316
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1317 SQLite::Statement s(db_, SQLITE_FROM_HERE_DYNAMIC(sql), sql);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1318
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1319 int paramCounter = 0;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1320 if (hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1321 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1322 s.BindInt64(paramCounter++, since);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1323 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1324 if (hasTo)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1325 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1326 s.BindInt64(paramCounter++, to);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1327 }
5805
8a8756b2dd0b cleanup
Alain Mazy <am@orthanc.team>
parents: 5804
diff changeset
1328
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1329 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
1330 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
1331 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1332
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1333
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1334 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
1335 int64_t resourceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1336 MetadataType metadata) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1337 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1338 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
1339 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1340
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1341
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1342 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
1343 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1344 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1345 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
1346 "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
1347 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1348
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1349 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1350
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1351 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1352 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1353 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
1354 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1355 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1356
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1357
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1358 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
1359 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1360 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1361 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
1362 "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
1363 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1364
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1365 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1366
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1367 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1368 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1369 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
1370 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1371 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1372
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1373
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1374 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
1375 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1376 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1377 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
1378 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1379 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
1380 "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
1381 s.BindInt64(0, since);
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1382 s.BindInt(1, limit + 1);
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1383 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
1384 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1385
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 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
1388 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1389 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1390 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
1391 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
1392 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1393
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1394
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1395 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
1396 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1397 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
1398 "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
1399
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1400 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1401 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1402 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
1403 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1404 return c;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1405 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1406 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1407 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1408 // 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
1409 return 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1410 }
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
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 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
1415 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1416 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1417 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
1418 "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
1419 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
1420 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1421
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1422
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1423 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
1424 int64_t id) ORTHANC_OVERRIDE
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1425 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1426 map.Clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1427
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1428 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
1429 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1430 while (s.Step())
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1431 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1432 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
1433 s.ColumnInt(2),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1434 s.ColumnString(3), false);
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 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1437
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1438
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1439 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
1440 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1441 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
1442 "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
1443 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1444
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1445 if (s.Step())
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 return s.ColumnString(0);
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 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1450 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1451 throw OrthancException(ErrorCode_UnknownResource);
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 }
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
4595
cc64385593ef added OrthancPluginRegisterDatabaseBackendV3() to plugin sdk
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4594
diff changeset
1456 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
1457 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1458 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
1459 "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
1460 s.BindInt(0, resourceType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1461
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1462 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1463 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1464 return 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1465 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1466 else
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 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
1469 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1470 return c;
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1471 }
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1472 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1473
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1474
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1475 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
1476 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1477 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
1478 "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
1479 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1480
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1481 if (s.Step())
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 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
1484 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1485 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1486 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1487 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1488 }
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1489 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1490
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 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1493 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1494 // 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
1495 // 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
1496
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1497 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
1498 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1499 return static_cast<uint64_t>(s.ColumnInt64(0));
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1500 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1501
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1502
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1503 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
1504 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1505 // 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
1506 // 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
1507
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1508 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
1509 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1510 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
1511 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1514 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
1515 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1516 return GetTotalCompressedSize() > threshold;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1517 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1518
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1519
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1520 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
1521 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1522 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
1523 "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
1524 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1525 return !s.Step();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1526 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1529 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
1530 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
1531 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1532 target.clear();
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 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
1535 "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
1536 s.BindInt64(0, id);
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 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1539 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1540 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
1541 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1542 }
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
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1545 virtual void LogChange(ChangeType changeType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1546 ResourceType resourceType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1547 int64_t internalId,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1548 const std::string& /* publicId - unused */,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1549 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
1550 {
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
1551 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
1552 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
1553 s.BindInt64(1, internalId);
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1554 s.BindInt(2, resourceType);
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1555 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
1556 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1557 }
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 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
1561 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1562 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
1563 "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
1564
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1565 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
1566 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
1567 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
1568 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
1569 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
1570 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
1571 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
1572 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
1573 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1577 virtual bool LookupAttachment(FileInfo& attachment,
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1578 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1579 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1580 FileContentType contentType) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1581 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1582 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
1583 "SELECT uuid, uncompressedSize, compressionType, compressedSize, "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1584 "uncompressedMD5, compressedMD5 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
1585 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1586 s.BindInt(1, contentType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1587
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1588 if (!s.Step())
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 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1591 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1592 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1593 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1594 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
1595 contentType,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1596 s.ColumnInt64(1),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1597 s.ColumnString(4),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1598 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
1599 s.ColumnInt64(3),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1600 s.ColumnString(5));
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1601 revision = 0; // TODO - REVISIONS
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1602 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1603 }
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 bool LookupGlobalProperty(std::string& target,
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1608 GlobalProperty property,
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1609 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
1610 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1611 // 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
1612 // 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
1613
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1614 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
1615 "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
1616 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1617
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1618 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1619 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1620 return false;
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 else
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 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1625 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1626 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1627 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1630 virtual bool LookupMetadata(std::string& target,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1631 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1632 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1633 MetadataType type) ORTHANC_OVERRIDE
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 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
1636 "SELECT value 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
1637 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1638 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1639
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1640 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1641 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1642 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1643 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1644 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1645 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1646 target = s.ColumnString(0);
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1647 revision = 0; // TODO - REVISIONS
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1648 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1649 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1650 }
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 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
1654 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
1655 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1656 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
1657 "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
1658 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1659
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1660 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1661 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1662 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1663 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1664
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1665 if (s.ColumnIsNull(0))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1666 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1667 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1668 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1669 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1670 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1671 parentId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1672 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1673 }
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 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
1678 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1679 std::string& parentPublicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1680 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
1681 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1682 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
1683 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1684
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1685
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1686 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
1687 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1688 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
1689 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1690 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
1691 "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
1692 s.BindString(0, publicId);
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 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1695 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1696 return false;
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 else
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 id = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1701 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
1702
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1703 // 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
1704 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1705
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1706 return true;
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 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1711 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
1712 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1713 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
1714 "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
1715
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1716 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1717 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1718 // 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
1719 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1720 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1721 else
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 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1724 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1725 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1726 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1727
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1728
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1729 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
1730 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
1731 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1732 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
1733 "SELECT patientId FROM PatientRecyclingOrder "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1734 "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
1735 s.BindInt64(0, patientIdToAvoid);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1736
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1737 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1738 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1739 // 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
1740 return false;
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 else
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 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1745 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1746 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1749
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1750 virtual void SetGlobalProperty(GlobalProperty property,
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1751 bool shared,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1752 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
1753 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1754 // 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
1755 // 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
1756
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
1757 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
1758 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1759 s.BindString(1, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1760 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1761 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1762
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1763
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1764 // 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
1765 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
1766 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1767 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
1768 {
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
1769 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
1770 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1771 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
1772 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
1773 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1774 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1778 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
1779 bool isProtected) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1780 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1781 if (isProtected)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1782 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1783 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
1784 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1785 s.Run();
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 else if (IsProtectedPatient(internalId))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1788 {
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
1789 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
1790 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1791 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1792 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1793 else
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 // 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
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1799
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1800 // 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
1801 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
1802 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1803 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
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 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
1806 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1807 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
1808 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
1809 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1810 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1811 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1812
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1813
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1814 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
1815 MetadataType type,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1816 const std::string& value,
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1817 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
1818 {
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1819 // TODO - REVISIONS
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
1820 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT OR REPLACE INTO Metadata (id, type, value) VALUES(?, ?, ?)");
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1821 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1822 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1823 s.BindString(2, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1824 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1827
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1828 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
1829 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1830 ISetResourcesContent::Apply(*this, content);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1831 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1832
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1833
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1834 // 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
1835 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
1836 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1837 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1838 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
1839 "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
1840 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1841 s.Run();
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 assert(db_.GetLastChangeCount() == 0 ||
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1844 db_.GetLastChangeCount() == 1);
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 if (db_.GetLastChangeCount() == 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1847 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1848 // 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
1849 return;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1850 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1851 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1852
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1853 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1854 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
1855 "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
1856 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1857 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1858 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1859 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1860
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1861
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1862 virtual void AddLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1863 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1864 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1865 if (label.empty())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1866 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1867 throw OrthancException(ErrorCode_ParameterOutOfRange);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1868 }
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1869 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1870 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1871 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
1872 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1873 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1874 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1875 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1876 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1877
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1878
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1879 virtual void RemoveLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1880 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1881 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1882 if (label.empty())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1883 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1884 throw OrthancException(ErrorCode_ParameterOutOfRange);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1885 }
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1886 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1887 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1888 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
1889 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1890 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1891 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1892 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1893 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1894
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1895
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1896 virtual void ListLabels(std::set<std::string>& target,
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1897 int64_t resource) ORTHANC_OVERRIDE
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1898 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1899 target.clear();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1900
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1901 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1902 "SELECT label FROM Labels WHERE id=?");
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1903 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1904
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1905 while (s.Step())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1906 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1907 target.insert(s.ColumnString(0));
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1908 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1909 }
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
1910
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
1911
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
1912 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
1913 {
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
1914 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
1915
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
1916 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
1917 "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
1918
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
1919 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
1920 {
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
1921 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
1922 }
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
1923 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1924 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1925
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1926
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1927 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
1928 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1929 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1930 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1931
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1932 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1933 SignalFileDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1934 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1935 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1936 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1937
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1938 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
1939 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1940 return "SignalFileDeleted";
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1941 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1942
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1943 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
1944 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1945 return 7;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1946 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1947
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1948 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
1949 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1950 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1951 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1952 std::string uncompressedMD5, compressedMD5;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1953
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1954 if (!context.IsNullValue(5))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1955 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1956 uncompressedMD5 = context.GetStringValue(5);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1957 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1958
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1959 if (!context.IsNullValue(6))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1960 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1961 compressedMD5 = context.GetStringValue(6);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1962 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1963
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1964 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
1965 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
1966 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
1967 uncompressedMD5,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1968 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
1969 static_cast<uint64_t>(context.GetInt64Value(4)),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1970 compressedMD5);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1971
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1972 sqlite_.activeTransaction_->GetListener().SignalAttachmentDeleted(info);
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 };
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1978 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
1979 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1980 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1981 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1982
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1983 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1984 SignalResourceDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1985 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1986 {
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1989 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
1990 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1991 return "SignalResourceDeleted";
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1994 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
1995 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1996 return 2;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1999 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
2000 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2001 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2002 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2003 sqlite_.activeTransaction_->GetListener().
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2004 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
2005 context.GetStringValue(0));
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 }
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
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 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
2012 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2013 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2014 SQLiteDatabaseWrapper& that_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2015 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
2016 int64_t initialDiskSize_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2017
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2018 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2019 ReadWriteTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2020 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2021 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
2022 that_(that),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2023 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
2024 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2025 if (that_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2026 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2027 throw OrthancException(ErrorCode_InternalError);
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 that_.activeTransaction_ = this;
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 #if defined(NDEBUG)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2033 // Release mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2034 initialDiskSize_ = 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2035 #else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2036 // Debug mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2037 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
2038 #endif
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2039 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2040
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2041 virtual ~ReadWriteTransaction()
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 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2044 that_.activeTransaction_ = NULL;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2047 void Begin()
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 transaction_->Begin();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2052 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
2053 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2054 transaction_->Rollback();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2057 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
2058 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2059 transaction_->Commit();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2060
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2061 assert(initialDiskSize_ + fileSizeDelta >= 0 &&
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2062 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
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2067 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
2068 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2069 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2070 SQLiteDatabaseWrapper& that_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2071
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2072 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2073 ReadOnlyTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2074 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2075 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
2076 that_(that)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2077 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2078 if (that_.activeTransaction_ != NULL)
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 throw OrthancException(ErrorCode_InternalError);
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2083 that_.activeTransaction_ = this;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2086 virtual ~ReadOnlyTransaction()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2087 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2088 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2089 that_.activeTransaction_ = NULL;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2090 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2091
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2092 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
2093 {
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 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
2097 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2098 if (fileSizeDelta != 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2099 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2100 throw OrthancException(ErrorCode_InternalError);
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 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2105
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2106 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
2107 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2108 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2109 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2110 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2111 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2112 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2113 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2114 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2115 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2116 db_.Open(path);
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2117 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2118
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2119
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2120 SQLiteDatabaseWrapper::SQLiteDatabaseWrapper() :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2121 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2122 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2123 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2124 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2125 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2126 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2127 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2128 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2129 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2130 db_.OpenInMemory();
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2131 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2132
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2133 SQLiteDatabaseWrapper::~SQLiteDatabaseWrapper()
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2134 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2135 if (activeTransaction_ != NULL)
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2136 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2137 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
2138 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2139 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2140
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2141
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2142 void SQLiteDatabaseWrapper::Open()
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2143 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2144 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2145 boost::mutex::scoped_lock lock(mutex_);
1717
3926e6317a43 SetIdentifierTagInternal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1712
diff changeset
2146
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2147 if (signalRemainingAncestor_ != NULL)
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2148 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2149 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
2150 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2151
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2152 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
2153 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
2154 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
2155
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2156 db_.Execute("PRAGMA ENCODING=\"UTF-8\";");
374
42e87c17cab8 some refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 310
diff changeset
2157
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2158 // 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
2159 // 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
2160 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
2161 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
2162 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
2163 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
2164 //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
2165
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2166 // 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
2167 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
2168 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2169
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2170 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2171
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2172 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2173 std::unique_ptr<ITransaction> transaction(StartTransaction(TransactionType_ReadOnly, listener));
1239
92c6b3b57699 cleaning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1238
diff changeset
2174
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2175 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
2176 {
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2177 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
2178 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2179 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
2180 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
2181 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2182
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2183 // Check the version of the database
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2184 std::string tmp;
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
2185 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_DatabaseSchemaVersion, true /* unused in SQLite */))
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2186 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2187 tmp = "Unknown";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2188 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2189
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2190 bool ok = false;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2191 try
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2192 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2193 LOG(INFO) << "Version of the Orthanc database: " << tmp;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2194 version_ = boost::lexical_cast<unsigned int>(tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2195 ok = true;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2196 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2197 catch (boost::bad_lexical_cast&)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2198 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2199 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2200
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2201 if (!ok)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2202 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2203 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2204 "Incompatible version of the Orthanc database: " + tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2205 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2206
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2207 if (version_ == 6)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2208 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2209 // 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
2210 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_GetTotalSizeIsFast, true /* unused in SQLite */) ||
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2211 tmp != "1")
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2212 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2213 LOG(INFO) << "Installing the SQLite triggers to track the size of the attachments";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2214 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2215 ServerResources::GetFileResource(query, ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE);
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2216 db_.Execute(query);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2217 }
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2218
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2219 // New in Orthanc 1.12.0
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2220 if (!db_.DoesTableExist("Labels"))
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2221 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2222 LOG(INFO) << "Installing the \"Labels\" table";
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2223 std::string query;
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2224 ServerResources::GetFileResource(query, ServerResources::INSTALL_LABELS_TABLE);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2225 db_.Execute(query);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2226 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2227 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2228
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2229 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
2230 }
1247
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2231 }
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2232
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2233
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2234 void SQLiteDatabaseWrapper::Close()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2235 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2236 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
2237 // 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
2238 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
2239 db_.Close();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2240 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2241
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2242
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2243 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
2244 ServerResources::FileResourceId script)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2245 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2246 std::string upgrade;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2247 ServerResources::GetFileResource(upgrade, script);
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2248 db.BeginTransaction();
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2249 db.Execute(upgrade);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2250 db.CommitTransaction();
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2251 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2252
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2253
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2254 void SQLiteDatabaseWrapper::Upgrade(unsigned int targetVersion,
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2255 IStorageArea& storageArea)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2256 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2257 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
2258
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2259 if (targetVersion != 6)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2260 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2261 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2262 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2263
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2264 // 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
2265 // 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
2266 if (version_ != 3 &&
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2267 version_ != 4 &&
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2268 version_ != 5 &&
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2269 version_ != 6)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2270 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2271 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2272 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2273
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2274 if (version_ == 3)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2275 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2276 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
2277 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
2278 version_ = 4;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2279 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2280
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2281 if (version_ == 4)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2282 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2283 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
2284 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
2285 version_ = 5;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2286 }
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2287
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2288 if (version_ == 5)
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2289 {
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2290 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
2291 // 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
2292 // consists in reconstructing the main DICOM tags information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
2293 // (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
2294
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2295 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2296
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2297 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2298 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
2299 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
2300 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
2301 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
2302 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
2303 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
2304 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
2305 transaction->Commit(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2306 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2307
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2308 version_ = 6;
1729
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1725
diff changeset
2309 }
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2310 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2311
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2312
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2313 IDatabaseWrapper::ITransaction* SQLiteDatabaseWrapper::StartTransaction(TransactionType type,
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2314 IDatabaseListener& listener)
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2315 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2316 switch (type)
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2317 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2318 case TransactionType_ReadOnly:
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2319 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
2320
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2321 case TransactionType_ReadWrite:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2322 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2323 std::unique_ptr<ReadWriteTransaction> transaction;
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2324 transaction.reset(new ReadWriteTransaction(*this, listener));
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2325 transaction->Begin();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2326 return transaction.release();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2327 }
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2328
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2329 default:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2330 throw OrthancException(ErrorCode_InternalError);
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2331 }
3019
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
diff changeset
2332 }
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
diff changeset
2333
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2334
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2335 void SQLiteDatabaseWrapper::FlushToDisk()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2336 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2337 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
2338 db_.FlushToDisk();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2339 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2340
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2341
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2342 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
2343 ResourceType type)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2344 {
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
2345 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
2346 s.BindInt(0, type);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2347 s.BindString(1, publicId);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2348 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2349 return db_.GetLastInsertRowId();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2350 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2351
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2352
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2353 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
2354 int64_t child)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2355 {
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2356 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
2357 s.BindInt64(0, parent);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2358 s.BindInt64(1, child);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2359 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2360 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2361
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2362
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2363 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
2364 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2365 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2366 {
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
2367 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
2368 s.BindInt64(0, id);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2369 s.BindInt(1, tag.GetGroup());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2370 s.BindInt(2, tag.GetElement());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2371 s.BindString(3, value);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2372 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2373 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2374
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2375
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2376 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
2377 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2378 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2379 {
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
2380 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
2381 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
2382 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
2383 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
2384 s.BindString(3, value);
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2385 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2386 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2387
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2388
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2389 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
2390 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2391 /**
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2392 * "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
2393 * 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
2394 * 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
2395 * 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
2396 * 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
2397 * characters.
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2398 * 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
2399 **/
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2400 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
2401 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2402 if (!isalpha(table[i]))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2403 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2404 throw OrthancException(ErrorCode_ParameterOutOfRange);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2405 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2406 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2407
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2408 // 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
2409 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
2410
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2411 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
2412 {
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2413 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
2414 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
2415 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
2416 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2417 else
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2418 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2419 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
2420 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2421 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2422
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2423
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2424 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
2425 int64_t id)
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2426 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2427 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
2428 "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
2429 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
2430
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2431 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2432 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2433 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2434 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2435 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2436 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2437 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2438 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
2439 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2440 }
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
2441
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2442
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2443 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
2444 int64_t id)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2445 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2446 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
2447 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2448
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2449 childrenPublicIds.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2450 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
2451 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2452 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
2453 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2454 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2455 }