annotate OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5803:e219e272650d find-refactoring

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