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