annotate OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5840:b24b61331566 find-refactoring tip

pagination: fixed compat with ODBC that does not support ExtendedFind
author Alain Mazy <am@orthanc.team>
date Mon, 21 Oct 2024 18:24:09 +0200
parents 82fc95cc168c
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,
5828
7030fa489669 tools/find: QueryMetadata
Alain Mazy <am@orthanc.team>
parents: 5805
diff changeset
429 const DatabaseDicomTagConstraints& 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
5837
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
505 virtual void ExecuteCount(uint64_t& count,
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
506 const FindRequest& request,
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
507 const Capabilities& capabilities) ORTHANC_OVERRIDE
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
508 {
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
509 LookupFormatter formatter;
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
510 std::string sql;
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
511
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
512 std::string lookupSql;
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
513 LookupFormatter::Apply(lookupSql, formatter, request);
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
514
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
515 // base query, retrieve the ordered internalId and publicId of the selected resources
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
516 sql = "WITH Lookup AS (" + lookupSql + ") SELECT COUNT(*) FROM Lookup";
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
517 SQLite::Statement s(db_, SQLITE_FROM_HERE_DYNAMIC(sql), sql);
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
518 formatter.Bind(s);
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
519
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
520 s.Step();
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
521 count = s.ColumnInt64(0);
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
522 }
82fc95cc168c /tools/count-resources
Alain Mazy <am@orthanc.team>
parents: 5828
diff changeset
523
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
524
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
525 virtual void ExecuteFind(FindResponse& response,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
526 const FindRequest& request,
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
527 const Capabilities& capabilities) ORTHANC_OVERRIDE
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
528 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
529 LookupFormatter formatter;
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
530 std::string sql;
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
531 const ResourceType requestLevel = request.GetLevel();
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
532
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
533 std::string lookupSql;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
534 LookupFormatter::Apply(lookupSql, formatter, request);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
535
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
536 // 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
537 sql = "WITH Lookup AS (" + lookupSql + ") ";
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
538
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
539 // 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
540 // 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
541 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
542 request.IsRetrieveOneInstanceMetadataAndAttachments())
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
543 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
544 // 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
545 sql += ", OneInstance AS";
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 switch (requestLevel)
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 case ResourceType_Series:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
550 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
551 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
552 " FROM Resources AS childLevel "
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 case ResourceType_Study:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
558 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
559 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
560 " FROM Resources AS grandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
561 " 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
562 " 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
563 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
564 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
565
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
566 case ResourceType_Patient:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
567 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
568 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
569 " FROM Resources AS grandGrandChildLevel "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
570 " 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
571 " 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
572 " 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
573 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
574 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
575
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
576 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
577 throw OrthancException(ErrorCode_InternalError);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
578 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
579 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
580
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
581 sql += "SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
582 " " 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
583 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
584 " Lookup.rowNumber AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
585 " Lookup.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
586 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
587 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
588 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
589 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
590 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
591 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
592 " FROM Lookup ";
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
593
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
594 // 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
595 if (request.GetLevel() != ResourceType_Instance &&
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
596 request.IsRetrieveOneInstanceMetadataAndAttachments())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
597 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
598 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
599 " " 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
600 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
601 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
602 " instancePublicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
603 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
604 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
605 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
606 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
607 " instanceInternalId AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
608 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
609 " FROM OneInstance ";
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
610
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
611 sql += " UNION SELECT"
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
612 " " 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
613 " parentInternalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
614 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
615 " Metadata.value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
616 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
617 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
618 " Metadata.type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
619 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
620 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
621 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
622 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
623 " 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
624
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_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
627 " parentInternalId 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 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
630 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
631 " compressedMD5 AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
632 " fileType AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
633 " compressionType AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
634 " compressedSize AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
635 " uncompressedSize AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
636 " FROM OneInstance "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
637 " 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
638
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
639 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
640
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
641 // need MainDicomTags from resource ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
642 if (request.IsRetrieveMainDicomTags())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
643 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
644 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
645 " " 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
646 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
647 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
648 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
649 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
650 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
651 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
652 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
653 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
654 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
655 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
656 "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
657 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
658
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
659 // need resource metadata ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
660 if (request.IsRetrieveMetadata())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
661 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
662 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
663 " " 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
664 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
665 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
666 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
667 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
668 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
669 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
670 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
671 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
672 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
673 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
674 "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
675 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
676
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
677 // need resource attachments ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
678 if (request.IsRetrieveAttachments())
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_ATTACHMENTS) " 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 " uuid AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
685 " uncompressedMD5 AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
686 " compressedMD5 AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
687 " fileType AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
688 " compressionType AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
689 " compressedSize AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
690 " uncompressedSize 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 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
693 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
694
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
695
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
696 // need resource labels ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
697 if (request.IsRetrieveLabels())
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
698 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
699 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
700 " " 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
701 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
702 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
703 " label AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
704 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
705 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
706 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
707 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
708 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
709 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
710 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
711 "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
712 }
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
713
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
714 if (requestLevel > ResourceType_Patient)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
715 {
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
716 // need MainDicomTags 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)).IsRetrieveMainDicomTags())
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
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_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
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 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
727 " tagElement 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 MainDicomTags ON MainDicomTags.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
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
735 // need metadata from parent ?
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
736 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
737 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
738 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
739 " " 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
740 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
741 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
742 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
743 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
744 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
745 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
746 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
747 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
748 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
749 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
750 "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
751 "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
752 }
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
753
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
754 if (requestLevel > ResourceType_Study)
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
755 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
756 // need MainDicomTags from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
757 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
758 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
759 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
760 " " 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
761 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
762 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
763 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
764 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
765 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
766 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
767 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
768 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
769 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
770 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
771 "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
772 "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
773 "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
774 }
5790
a3d283f61304 improved handling of DicomSequences in parent
Alain Mazy <am@orthanc.team>
parents: 5782
diff changeset
775
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
776 // need metadata from grandparent ?
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
777 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
778 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
779 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
780 " " 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
781 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
782 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
783 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
784 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
785 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
786 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
787 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
788 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
789 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
790 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
791 "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
792 "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
793 "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
794 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
795 }
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 children ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
799 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
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_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 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
814 " 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
815 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
816
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
817 // need MainDicomTags from grandchildren ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
818 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
819 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
820 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
821 " " 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
822 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
823 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
824 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
825 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
826 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
827 " tagGroup AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
828 " tagElement AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
829 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
830 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
831 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
832 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
833 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
834 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND " + JoinRequestedTags(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2)));
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
835 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
836
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
837 // need parent identifier ?
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
838 if (request.IsRetrieveParentIdentifier())
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
839 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
840 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
841 " " TOSTRING(QUERY_PARENT_IDENTIFIER) " AS c0_queryId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
842 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
843 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
844 " parentLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
845 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
846 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
847 " NULL 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 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
851 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
852 " 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
853 " 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
854 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
855
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
856 // need children metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
857 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
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_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 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
872 " 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
873 }
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 // need grandchildren metadata ?
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
876 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
877 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
878 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
879 " " 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
880 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
881 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
882 " value AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
883 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
884 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
885 " type AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
886 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
887 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
888 " NULL AS c9_big_int2 "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
889 "FROM Lookup "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
890 " 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
891 " 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
892 " 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
893 }
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
894
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
895 // need children identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
896 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
897 (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
898 (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
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_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 " childLevel.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 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
914
5751
5d78e5cafabc ExtendedFind in SQLite continued (all basic integration tests OK)
Alain Mazy <am@orthanc.team>
parents: 5750
diff changeset
915 // need grandchildren identifiers ?
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
916 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
917 (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
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_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 " grandChildLevel.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 "
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
932 "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
933 }
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
934
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
935 // need grandgrandchildren identifiers ?
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
936 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
937 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
938 sql += "UNION SELECT "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
939 " " 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
940 " Lookup.internalId AS c1_internalId, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
941 " NULL AS c2_rowNumber, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
942 " grandGrandChildLevel.publicId AS c3_string1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
943 " NULL AS c4_string2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
944 " NULL AS c5_string3, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
945 " NULL AS c6_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
946 " NULL AS c7_int2, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
947 " NULL AS c8_big_int1, "
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
948 " NULL AS c9_big_int2 "
5803
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
949 "FROM Lookup "
e219e272650d fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents: 5796
diff changeset
950 "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
951 "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
952 "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
953 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
954
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
955
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
956 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
957
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
958 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
959 formatter.Bind(s);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
960
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
961 while (s.Step())
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
962 {
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
963 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
964 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
965
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
966 // LOG(INFO) << queryId << ": " << internalId;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
967 // continue;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
968
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
969 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
970
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
971 switch (queryId)
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
972 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
973 case QUERY_LOOKUP:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
974 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
975 break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
976
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
977 case QUERY_LABELS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
978 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
979 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
980 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
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_ATTACHMENTS:
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 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
987 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
988 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
989 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
990 res.AddAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
991 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
992
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
993 case QUERY_MAIN_DICOM_TAGS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
994 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
995 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
996 res.AddStringDicomTag(requestLevel,
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(C6_INT_1)),
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
998 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
999 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1000 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1001
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1002 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
1003 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1004 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
1005 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
1006 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
1007 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
1008 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1009 }; break;
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 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
1012 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1013 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
1014 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
1015 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
1016 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
1017 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1018 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1019
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1020 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
1021 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1022 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
1023 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
1024 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
1025 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1026 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1027
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1028 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
1029 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1030 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
1031 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
1032 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
1033 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1034 }; break;
5750
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1035
5796
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1036 case QUERY_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1037 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1038 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
1039 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
1040 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
1041 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1042 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1043
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1044 case QUERY_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1045 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1046 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
1047 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
1048 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
1049 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1050 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1051
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1052 case QUERY_GRAND_PARENT_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1053 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1054 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
1055 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
1056 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
1057 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1058 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1059
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1060 case QUERY_CHILDREN_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1061 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1062 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
1063 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
1064 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
1065 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1066 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1067
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1068 case QUERY_GRAND_CHILDREN_METADATA:
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 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
1071 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
1072 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
1073 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1074 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1075
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1076 case QUERY_PARENT_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1077 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1078 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
1079 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
1080 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1081
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1082 case QUERY_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1083 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1084 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1085 res.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
1086 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1087 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1088
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1089 case QUERY_GRAND_CHILDREN_IDENTIFIERS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1090 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1091 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
1092 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
1093 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_GRAND_GRAND_CHILDREN_IDENTIFIERS:
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 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
1100 s.ColumnString(C3_STRING_1));
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1101 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1102
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1103 case QUERY_ONE_INSTANCE_IDENTIFIER:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1104 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1105 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
1106 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
1107 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1108
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1109 case QUERY_ONE_INSTANCE_METADATA:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1110 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1111 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1112 res.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
1113 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1114
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1115 case QUERY_ONE_INSTANCE_ATTACHMENTS:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1116 {
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1117 FindResponse::Resource& res = response.GetResourceByInternalId(internalId);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1118 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
1119 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
1120 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
1121 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
1122 res.AddOneInstanceAttachment(file);
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1123 }; break;
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1124
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1125 default:
16ce3c920f71 rewrote SQLite find using CTEs instead of temporary tables
Alain Mazy <am@orthanc.team>
parents: 5790
diff changeset
1126 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
1127 }
f39406a9eda4 ExtendedFind in SQLite continued (6 tests still failing)
Alain Mazy <am@orthanc.team>
parents: 5748
diff changeset
1128 }
5748
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1129 }
4bc650d88463 WIP: started to implement IntegratedFind in SQLite
Alain Mazy <am@orthanc.team>
parents: 5723
diff changeset
1130
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1131 // 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
1132 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
1133 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
1134 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1135 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
1136 s.BindInt64(0, parent);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1137 s.BindInt64(1, child);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1138 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1139 }
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 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
1143 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1144 ClearTable("Changes");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1145 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1146
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1147 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
1148 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1149 ClearTable("ExportedResources");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1150 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
1151
1241
90d2f320862d refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1240
diff changeset
1152
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1153 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
1154 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1155 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1156 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
1157 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1158 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1161 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1162 SQLite::Statement s(db_, SQLITE_FROM_HERE, "DELETE FROM MainDicomTags WHERE id=?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1163 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1164 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1165 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1166 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1167
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1168
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1169 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
1170 int64_t& instanceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1171 const std::string& patient,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1172 const std::string& study,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1173 const std::string& series,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1174 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
1175 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1176 return ICreateInstance::Apply
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1177 (*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
1178 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1179
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1180
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1181 // 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
1182 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
1183 ResourceType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1184 {
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
1185 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
1186 s.BindInt(0, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1187 s.BindString(1, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1188 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1189 return db_.GetLastInsertRowId();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1190 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1191
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1192
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1193 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
1194 FileContentType attachment) ORTHANC_OVERRIDE
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1195 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1196 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
1197 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1198 s.BindInt(1, attachment);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1199 s.Run();
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1200 }
4591
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1203 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
1204 MetadataType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1205 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1206 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
1207 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1208 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1209 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1210 }
193
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1211
a1b9d1e1497b failed attempt to compile with linux standard base
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1212
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1213 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
1214 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1215 signalRemainingAncestor_.Reset();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1216
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1217 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
1218 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1219 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1220
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1221 if (signalRemainingAncestor_.HasRemainingAncestor())
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 listener_.SignalRemainingAncestor(signalRemainingAncestor_.GetRemainingAncestorType(),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1224 signalRemainingAncestor_.GetRemainingAncestorId());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1225 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1226 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1227
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1228
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1229 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
1230 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
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1234 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
1235 s.BindInt64(0, id);
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 while (s.Step())
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 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
1240 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
1241 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1242 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1243
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 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
1246 ResourceType resourceType) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1247 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1248 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
1249 s.BindInt(0, resourceType);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1250
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1251 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1252 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1253 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1254 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
1255 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1256 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1257
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1258
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1259 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
1260 ResourceType resourceType,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1261 int64_t since,
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1262 uint32_t limit) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1263 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1264 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
1265 "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
1266 "resourceType=? LIMIT ? OFFSET ?");
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1267 s.BindInt(0, resourceType);
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
1268 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
1269 s.BindInt64(2, since);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1270
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1271 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1272 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1273 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1274 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
1275 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1276 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1277
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1278
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1279 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
1280 bool& done /*out*/,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1281 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1282 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
1283 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1284 std::set<ChangeType> filter;
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1285 GetChangesExtended(target, done, since, -1, limit, filter);
5553
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
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1288 virtual void GetChangesExtended(std::list<ServerIndexChange>& target /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1289 bool& done /*out*/,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1290 int64_t since,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1291 int64_t to,
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
1292 uint32_t limit,
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1293 const std::set<ChangeType>& filterType) ORTHANC_OVERRIDE
5553
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::vector<std::string> filters;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1296 bool hasSince = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1297 bool hasTo = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1298
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1299 if (since > 0)
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 hasSince = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1302 filters.push_back("seq>?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1303 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1304 if (to != -1)
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 hasTo = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1307 filters.push_back("seq<=?");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1308 }
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1309 if (filterType.size() != 0)
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1310 {
5804
25df40a274fd /changes: allowing filtering on multiple changes
Alain Mazy <am@orthanc.team>
parents: 5803
diff changeset
1311 filters.push_back("changeType IN ( " + JoinChanges(filterType) + " )");
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1312 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1313
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1314 std::string filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1315 if (filters.size() > 0)
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 Toolbox::JoinStrings(filtersString, filters, " AND ");
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1318 filtersString = "WHERE " + filtersString;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1319 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1320
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1321 std::string sql;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1322 bool returnFirstResults;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1323 if (hasTo && !hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1324 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1325 // 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
1326 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
1327 returnFirstResults = false;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1328 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1329 else
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1330 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1331 // default query: we want the smallest values ordered in ascending order
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1332 sql = "SELECT * FROM Changes " + filtersString + " ORDER BY seq ASC LIMIT ?";
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1333 returnFirstResults = true;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1334 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1335
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1336 SQLite::Statement s(db_, SQLITE_FROM_HERE_DYNAMIC(sql), sql);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1337
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1338 int paramCounter = 0;
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1339 if (hasSince)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1340 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1341 s.BindInt64(paramCounter++, since);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1342 }
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1343 if (hasTo)
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1344 {
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1345 s.BindInt64(paramCounter++, to);
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1346 }
5805
8a8756b2dd0b cleanup
Alain Mazy <am@orthanc.team>
parents: 5804
diff changeset
1347
5553
28cc06e4859a Added ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents: 5521
diff changeset
1348 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
1349 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
1350 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1351
4591
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 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
1354 int64_t resourceId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1355 MetadataType metadata) ORTHANC_OVERRIDE
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 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
1358 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1359
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1360
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1361 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
1362 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1363 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1364 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
1365 "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
1366 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1367
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1368 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1369
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1370 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1371 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1372 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
1373 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1374 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1375
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1376
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1377 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
1378 int64_t id) ORTHANC_OVERRIDE
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1379 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1380 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
1381 "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
1382 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1383
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1384 target.clear();
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 while (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1387 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1388 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
1389 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1390 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1391
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1392
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1393 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
1394 bool& done,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1395 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1396 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
1397 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1398 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
1399 "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
1400 s.BindInt64(0, since);
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1401 s.BindInt(1, limit + 1);
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5193
diff changeset
1402 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
1403 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1404
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1405
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1406 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
1407 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1408 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1409 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
1410 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
1411 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1412
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1413
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1414 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
1415 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1416 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
1417 "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
1418
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1419 if (s.Step())
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 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
1422 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1423 return c;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1424 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1425 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1426 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1427 // 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
1428 return 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1429 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1430 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1431
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1432
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1433 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
1434 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1435 bool done; // Ignored
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1436 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
1437 "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
1438 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
1439 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1442 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
1443 int64_t id) ORTHANC_OVERRIDE
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1444 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1445 map.Clear();
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 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
1448 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1449 while (s.Step())
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1450 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1451 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
1452 s.ColumnInt(2),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1453 s.ColumnString(3), false);
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 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1456
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 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
1459 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1460 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
1461 "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
1462 s.BindInt64(0, resourceId);
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 if (s.Step())
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 return s.ColumnString(0);
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 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1469 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1470 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1471 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1472 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1473
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1474
4595
cc64385593ef added OrthancPluginRegisterDatabaseBackendV3() to plugin sdk
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4594
diff changeset
1475 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
1476 {
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 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
1479 s.BindInt(0, resourceType);
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 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 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
1488 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1489 return c;
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1490 }
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1491 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1492
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
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 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
1495 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1496 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
1497 "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
1498 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1499
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1500 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1501 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1502 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
1503 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1504 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1505 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1506 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1507 }
3809
2bf30ef727e3 enforcing SQLiteDatabaseWrapper::GetTableRecordCount() against SQL injection
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3712
diff changeset
1508 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1509
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1510
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1511 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1512 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1513 // 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
1514 // 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
1515
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1516 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
1517 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1518 return static_cast<uint64_t>(s.ColumnInt64(0));
218
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 206
diff changeset
1519 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1520
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1521
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1522 virtual 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
1523 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1524 // 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
1525 // 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
1526
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1527 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
1528 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1529 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
1530 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1533 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
1534 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1535 return GetTotalCompressedSize() > threshold;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1536 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1537
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1538
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1539 virtual 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
1540 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1541 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
1542 "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
1543 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1544 return !s.Step();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1545 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1546
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1547
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1548 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
1549 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
1550 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1551 target.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1552
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1553 SQLite::Statement s(db_, SQLITE_FROM_HERE,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1554 "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
1555 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1556
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1557 while (s.Step())
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 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
1560 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1563
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1564 virtual void LogChange(ChangeType changeType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1565 ResourceType resourceType,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1566 int64_t internalId,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1567 const std::string& /* publicId - unused */,
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1568 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
1569 {
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
1570 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
1571 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
1572 s.BindInt64(1, internalId);
5216
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1573 s.BindInt(2, resourceType);
450ac804d3af simplifying IDatabaseWrapper::LogChange()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1574 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
1575 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1578
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1579 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
1580 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1581 SQLite::Statement s(db_, SQLITE_FROM_HERE,
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
1582 "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
1583
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1584 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
1585 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
1586 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
1587 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
1588 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
1589 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
1590 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
1591 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
1592 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1595
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1596 virtual bool LookupAttachment(FileInfo& attachment,
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1597 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1598 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1599 FileContentType contentType) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1600 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1601 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
1602 "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
1603 "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
1604 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1605 s.BindInt(1, contentType);
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 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1608 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1609 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1610 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1611 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1612 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1613 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
1614 contentType,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1615 s.ColumnInt64(1),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1616 s.ColumnString(4),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1617 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
1618 s.ColumnInt64(3),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1619 s.ColumnString(5));
4627
f7d5372b59b3 handling revisions of attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1620 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
1621 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1622 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1623 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1624
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1625
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1626 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
1627 GlobalProperty property,
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1628 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
1629 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1630 // 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
1631 // 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
1632
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1633 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
1634 "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
1635 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1636
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1637 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1638 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1639 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1640 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1641 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1642 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1643 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1644 return true;
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 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1647
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1648
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1649 virtual bool LookupMetadata(std::string& target,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1650 int64_t& revision,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1651 int64_t id,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1652 MetadataType type) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1653 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1654 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
1655 "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
1656 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1657 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1658
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1659 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1660 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1661 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1662 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1663 else
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 target = s.ColumnString(0);
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1666 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
1667 return true;
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 }
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1672 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
1673 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
1674 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1675 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
1676 "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
1677 s.BindInt64(0, resourceId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1678
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1679 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1680 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1681 throw OrthancException(ErrorCode_UnknownResource);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1682 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1683
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1684 if (s.ColumnIsNull(0))
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 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1687 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1688 else
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 parentId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1691 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1692 }
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
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 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
1697 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1698 std::string& parentPublicId,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1699 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
1700 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1701 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
1702 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1703
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1704
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1705 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
1706 ResourceType& type,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1707 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
1708 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1709 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
1710 "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
1711 s.BindString(0, publicId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1712
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1713 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1714 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1715 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1716 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1717 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1718 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1719 id = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1720 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
1721
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1722 // 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
1723 assert(!s.Step());
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1724
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1725 return true;
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1730 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
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 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
1734
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1735 if (!s.Step())
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 // 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
1738 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1739 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1740 else
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 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1743 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1744 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1745 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1746
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 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
1749 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
1750 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1751 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
1752 "SELECT patientId FROM PatientRecyclingOrder "
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1753 "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
1754 s.BindInt64(0, patientIdToAvoid);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1755
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1756 if (!s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1757 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1758 // 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
1759 return false;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1760 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1761 else
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 internalId = s.ColumnInt(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1764 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1765 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1766 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1767
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1768
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1769 virtual void SetGlobalProperty(GlobalProperty property,
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1770 bool shared,
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1771 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
1772 {
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
1773 // 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
1774 // 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
1775
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
1776 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
1777 s.BindInt(0, property);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1778 s.BindString(1, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1779 s.Run();
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1782
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1783 // 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
1784 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
1785 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1786 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
1787 {
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
1788 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
1789 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1790 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
1791 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
1792 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1793 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1794 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1795
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1796
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1797 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
1798 bool isProtected) ORTHANC_OVERRIDE
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1799 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1800 if (isProtected)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1801 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1802 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
1803 s.BindInt64(0, internalId);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1804 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1805 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1806 else if (IsProtectedPatient(internalId))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1807 {
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
1808 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
1809 s.BindInt64(0, internalId);
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 else
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 // 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
1815 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1816 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1817
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1818
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1819 // 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
1820 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
1821 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1822 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
1823 {
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
1824 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
1825 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1826 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
1827 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
1828 s.BindString(3, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1829 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1830 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1831
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 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
1834 MetadataType type,
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1835 const std::string& value,
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1836 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
1837 {
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4607
diff changeset
1838 // 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
1839 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
1840 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1841 s.BindInt(1, type);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1842 s.BindString(2, value);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1843 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1844 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1845
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1846
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1847 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
1848 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1849 ISetResourcesContent::Apply(*this, content);
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
4592
36bbf3169a27 comments
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4591
diff changeset
1853 // 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
1854 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
1855 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1856 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1857 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
1858 "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
1859 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1860 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1861
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1862 assert(db_.GetLastChangeCount() == 0 ||
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1863 db_.GetLastChangeCount() == 1);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1864
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1865 if (db_.GetLastChangeCount() == 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1866 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1867 // 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
1868 return;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1869 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1870 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1871
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1872 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1873 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
1874 "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
1875 s.BindInt64(0, patient);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1876 s.Run();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1877 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1878 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1879
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1880
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1881 virtual void AddLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1882 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1883 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1884 if (label.empty())
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 throw OrthancException(ErrorCode_ParameterOutOfRange);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1887 }
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1888 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1889 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1890 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
1891 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1892 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1893 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1894 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1895 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1896
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1897
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1898 virtual void RemoveLabel(int64_t resource,
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1899 const std::string& label) ORTHANC_OVERRIDE
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1900 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1901 if (label.empty())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1902 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1903 throw OrthancException(ErrorCode_ParameterOutOfRange);
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 else
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1906 {
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1907 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
1908 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1909 s.BindString(1, label);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1910 s.Run();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1911 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1912 }
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1913
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1914
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1915 virtual void ListLabels(std::set<std::string>& target,
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1916 int64_t resource) ORTHANC_OVERRIDE
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1917 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1918 target.clear();
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1919
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1920 SQLite::Statement s(db_, SQLITE_FROM_HERE,
5256
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5249
diff changeset
1921 "SELECT label FROM Labels WHERE id=?");
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1922 s.BindInt64(0, resource);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1923
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1924 while (s.Step())
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1925 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1926 target.insert(s.ColumnString(0));
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
1927 }
5220
df39c7583a49 preparing virtual methods for labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5216
diff changeset
1928 }
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
1929
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
1930
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
1931 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
1932 {
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
1933 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
1934
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
1935 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
1936 "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
1937
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
1938 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
1939 {
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
1940 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
1941 }
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
1942 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1943 };
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1946 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
1947 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1948 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1949 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1950
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1951 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1952 SignalFileDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1953 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1954 {
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1957 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
1958 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1959 return "SignalFileDeleted";
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1962 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
1963 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1964 return 7;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1965 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1966
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1967 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
1968 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1969 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1970 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1971 std::string uncompressedMD5, compressedMD5;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1972
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1973 if (!context.IsNullValue(5))
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 uncompressedMD5 = context.GetStringValue(5);
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 if (!context.IsNullValue(6))
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 compressedMD5 = context.GetStringValue(6);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1981 }
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 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
1984 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
1985 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
1986 uncompressedMD5,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1987 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
1988 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
1989 compressedMD5);
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 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
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 };
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1997 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
1998 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
1999 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2000 SQLiteDatabaseWrapper& sqlite_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2001
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2002 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2003 SignalResourceDeleted(SQLiteDatabaseWrapper& sqlite) :
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2004 sqlite_(sqlite)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2005 {
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 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
2009 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2010 return "SignalResourceDeleted";
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2011 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2012
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2013 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
2014 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2015 return 2;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2016 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2017
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2018 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
2019 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2020 if (sqlite_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2021 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2022 sqlite_.activeTransaction_->GetListener().
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2023 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
2024 context.GetStringValue(0));
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2025 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2026 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2027 };
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 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
2031 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2032 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2033 SQLiteDatabaseWrapper& that_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2034 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
2035 int64_t initialDiskSize_;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2036
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2037 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2038 ReadWriteTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2039 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2040 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
2041 that_(that),
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2042 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
2043 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2044 if (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 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2047 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2048
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2049 that_.activeTransaction_ = this;
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 #if defined(NDEBUG)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2052 // Release mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2053 initialDiskSize_ = 0;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2054 #else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2055 // Debug mode
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2056 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
2057 #endif
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
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2060 virtual ~ReadWriteTransaction()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2061 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2062 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2063 that_.activeTransaction_ = NULL;
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 void Begin()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2067 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2068 transaction_->Begin();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2069 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2070
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2071 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
2072 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2073 transaction_->Rollback();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2074 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2075
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2076 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
2077 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2078 transaction_->Commit();
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 assert(initialDiskSize_ + fileSizeDelta >= 0 &&
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2081 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
2082 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2083 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2084
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2085
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2086 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
2087 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2088 private:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2089 SQLiteDatabaseWrapper& that_;
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 public:
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2092 ReadOnlyTransaction(SQLiteDatabaseWrapper& that,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2093 IDatabaseListener& listener) :
5521
0d0f8788884a removed unused variable dbCapabilities_ in SQLiteDatabaseWrapper::TransactionBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5519
diff changeset
2094 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
2095 that_(that)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2096 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2097 if (that_.activeTransaction_ != NULL)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2098 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2099 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2100 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2101
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2102 that_.activeTransaction_ = this;
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 virtual ~ReadOnlyTransaction()
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2106 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2107 assert(that_.activeTransaction_ != NULL);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2108 that_.activeTransaction_ = NULL;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2109 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2110
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2111 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
2112 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2113 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2114
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2115 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
2116 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2117 if (fileSizeDelta != 0)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2118 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2119 throw OrthancException(ErrorCode_InternalError);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2120 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2121 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2122 };
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2123
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2124
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2125 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
2126 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2127 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2128 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2129 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2130 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2131 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2132 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2133 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2134 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2135 db_.Open(path);
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2136 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2137
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2138
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2139 SQLiteDatabaseWrapper::SQLiteDatabaseWrapper() :
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2140 activeTransaction_(NULL),
1847
559956d5ceb2 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1729
diff changeset
2141 signalRemainingAncestor_(NULL),
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2142 version_(0)
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2143 {
5517
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2144 // TODO: implement revisions in SQLite
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2145 dbCapabilities_.SetFlushToDisk(true);
0d433132b249 refactoring IDatabaseWrapper::Capabilities
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5497
diff changeset
2146 dbCapabilities_.SetLabelsSupport(true);
5757
5463c3ae3235 refactored extended /changes
Alain Mazy <am@orthanc.team>
parents: 5663
diff changeset
2147 dbCapabilities_.SetHasExtendedChanges(true);
5776
de33982a0bf4 wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
2148 dbCapabilities_.SetHasFindSupport(true);
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2149 db_.OpenInMemory();
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2150 }
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2151
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2152 SQLiteDatabaseWrapper::~SQLiteDatabaseWrapper()
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2153 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2154 if (activeTransaction_ != NULL)
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2155 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2156 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
2157 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2158 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2159
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2160
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2161 void SQLiteDatabaseWrapper::Open()
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2162 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2163 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2164 boost::mutex::scoped_lock lock(mutex_);
1717
3926e6317a43 SetIdentifierTagInternal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1712
diff changeset
2165
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2166 if (signalRemainingAncestor_ != NULL)
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2167 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2168 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
2169 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2170
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2171 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
2172 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
2173 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
2174
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2175 db_.Execute("PRAGMA ENCODING=\"UTF-8\";");
374
42e87c17cab8 some refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 310
diff changeset
2176
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2177 // 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
2178 // 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
2179 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
2180 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
2181 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
2182 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
2183 //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
2184
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2185 // 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
2186 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
2187 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2188
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2189 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2190
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2191 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2192 std::unique_ptr<ITransaction> transaction(StartTransaction(TransactionType_ReadOnly, listener));
1239
92c6b3b57699 cleaning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1238
diff changeset
2193
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2194 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
2195 {
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2196 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
2197 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2198 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
2199 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
2200 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2201
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2202 // Check the version of the database
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2203 std::string tmp;
4607
f75c63aa9de0 differentiating between shared and private global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4595
diff changeset
2204 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_DatabaseSchemaVersion, true /* unused in SQLite */))
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2205 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2206 tmp = "Unknown";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2207 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2208
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2209 bool ok = false;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2210 try
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2211 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2212 LOG(INFO) << "Version of the Orthanc database: " << tmp;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2213 version_ = boost::lexical_cast<unsigned int>(tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2214 ok = true;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2215 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2216 catch (boost::bad_lexical_cast&)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2217 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2218 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2219
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2220 if (!ok)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2221 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2222 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2223 "Incompatible version of the Orthanc database: " + tmp);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2224 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2225
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2226 if (version_ == 6)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2227 {
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2228 // 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
2229 if (!transaction->LookupGlobalProperty(tmp, GlobalProperty_GetTotalSizeIsFast, true /* unused in SQLite */) ||
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2230 tmp != "1")
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2231 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2232 LOG(INFO) << "Installing the SQLite triggers to track the size of the attachments";
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2233 std::string query;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2234 ServerResources::GetFileResource(query, ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE);
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2235 db_.Execute(query);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2236 }
5221
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2237
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2238 // New in Orthanc 1.12.0
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2239 if (!db_.DoesTableExist("Labels"))
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2240 {
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2241 LOG(INFO) << "Installing the \"Labels\" table";
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2242 std::string query;
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2243 ServerResources::GetFileResource(query, ServerResources::INSTALL_LABELS_TABLE);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2244 db_.Execute(query);
d0f7c742d397 started implementation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5220
diff changeset
2245 }
3116
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2246 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3105
diff changeset
2247
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2248 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
2249 }
1247
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2250 }
32fcc5dc7562 abstraction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1246
diff changeset
2251
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2252
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2253 void SQLiteDatabaseWrapper::Close()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2254 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2255 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
2256 // 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
2257 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
2258 db_.Close();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2259 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2260
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2261
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2262 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
2263 ServerResources::FileResourceId script)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2264 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2265 std::string upgrade;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4030
diff changeset
2266 ServerResources::GetFileResource(upgrade, script);
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2267 db.BeginTransaction();
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2268 db.Execute(upgrade);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2269 db.CommitTransaction();
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
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2272
3017
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2273 void SQLiteDatabaseWrapper::Upgrade(unsigned int targetVersion,
517fc4767ae0 renamed class DatabaseWrapper as SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
2274 IStorageArea& storageArea)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2275 {
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2276 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
2277
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2278 if (targetVersion != 6)
1615
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 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2281 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2282
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2283 // 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
2284 // 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
2285 if (version_ != 3 &&
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2286 version_ != 4 &&
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2287 version_ != 5 &&
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2288 version_ != 6)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2289 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2290 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion);
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2291 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2292
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2293 if (version_ == 3)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2294 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2295 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
2296 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
2297 version_ = 4;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2298 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2299
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2300 if (version_ == 4)
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2301 {
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2302 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
2303 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
2304 version_ = 5;
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2305 }
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2306
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2307 if (version_ == 5)
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2308 {
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2309 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
2310 // 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
2311 // consists in reconstructing the main DICOM tags information
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
2312 // (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
2313
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2314 VoidDatabaseListener listener;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2315
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2316 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2317 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
2318 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
2319 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
2320 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
2321 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
2322 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
2323 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
2324 transaction->Commit(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2325 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2326
1664
0c58f189782d prepare migration to db v6
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
2327 version_ = 6;
1729
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1725
diff changeset
2328 }
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2329 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2330
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1509
diff changeset
2331
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2332 IDatabaseWrapper::ITransaction* SQLiteDatabaseWrapper::StartTransaction(TransactionType type,
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2333 IDatabaseListener& listener)
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2334 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2335 switch (type)
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2336 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2337 case TransactionType_ReadOnly:
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2338 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
2339
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2340 case TransactionType_ReadWrite:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2341 {
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2342 std::unique_ptr<ReadWriteTransaction> transaction;
4589
bec74e29f86b attaching the listener to transactions in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4571
diff changeset
2343 transaction.reset(new ReadWriteTransaction(*this, listener));
4570
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2344 transaction->Begin();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2345 return transaction.release();
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2346 }
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2347
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2348 default:
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2349 throw OrthancException(ErrorCode_InternalError);
648defffc8cc new enum: TransactionType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4556
diff changeset
2350 }
3019
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
diff changeset
2351 }
8336204d95dc refactoring computation of disk size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3018
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
4594
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2354 void SQLiteDatabaseWrapper::FlushToDisk()
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2355 {
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2356 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
2357 db_.FlushToDisk();
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2358 }
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2359
d494b4f1103e removed the global database mutex from ServerIndex and StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4592
diff changeset
2360
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2361 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
2362 ResourceType type)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2363 {
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
2364 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
2365 s.BindInt(0, type);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2366 s.BindString(1, publicId);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2367 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2368 return db_.GetLastInsertRowId();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2369 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2370
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2371
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2372 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
2373 int64_t child)
2773
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 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
2376 s.BindInt64(0, parent);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2377 s.BindInt64(1, child);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2378 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2379 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2380
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2381
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2382 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
2383 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2384 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2385 {
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
2386 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
2387 s.BindInt64(0, id);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2388 s.BindInt(1, tag.GetGroup());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2389 s.BindInt(2, tag.GetElement());
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2390 s.BindString(3, value);
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2391 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2392 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2393
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2394
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2395 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
2396 const DicomTag& tag,
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2397 const std::string& value)
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2398 {
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
2399 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
2400 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
2401 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
2402 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
2403 s.BindString(3, value);
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2404 s.Run();
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2405 }
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 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
2409 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2410 /**
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2411 * "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
2412 * 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
2413 * 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
2414 * 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
2415 * 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
2416 * characters.
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2417 * 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
2418 **/
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2419 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
2420 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2421 if (!isalpha(table[i]))
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2422 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2423 throw OrthancException(ErrorCode_ParameterOutOfRange);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2424 }
2773
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2425 }
bb63068844ae moving DatabaseWrapperBase into graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
2426
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2427 // 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
2428 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
2429
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2430 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
2431 {
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2432 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
2433 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
2434 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
2435 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2436 else
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2437 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2438 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
2439 }
2e1711f80f74 More consistent handling of the "Last" field returned by the "/changes" URI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3093
diff changeset
2440 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2441
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2442
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2443 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
2444 int64_t id)
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2445 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2446 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
2447 "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
2448 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
2449
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2450 if (s.Step())
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2451 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2452 target = s.ColumnString(0);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2453 return true;
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2454 }
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2455 else
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2456 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2457 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
2458 }
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2459 }
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
2460
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2461
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2462 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
2463 int64_t id)
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2464 {
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2465 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
2466 s.BindInt64(0, id);
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2467
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2468 childrenPublicIds.clear();
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2469 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
2470 {
4591
ff8170d17d90 moving all accesses to databases from IDatabaseWrapper to ITransaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4589
diff changeset
2471 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
2472 }
3121
f86ebf971a72 fix unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3116
diff changeset
2473 }
183
baada606da3c databasewrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2474 }