comparison OrthancServer/Sources/ServerIndex.cpp @ 4582:fb0379abb4a7 db-changes

assume that "GetDatabaseVersion()" can run out of a database transaction
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 09 Mar 2021 15:25:17 +0100
parents bb3c82b8f373
children 42a846166fa3
comparison
equal deleted inserted replaced
4581:bb3c82b8f373 4582:fb0379abb4a7
1877 /* out */ unsigned int& countInstances, 1877 /* out */ unsigned int& countInstances,
1878 /* out */ uint64_t& dicomDiskSize, 1878 /* out */ uint64_t& dicomDiskSize,
1879 /* out */ uint64_t& dicomUncompressedSize, 1879 /* out */ uint64_t& dicomUncompressedSize,
1880 const std::string& publicId) 1880 const std::string& publicId)
1881 { 1881 {
1882 class Operations : public ServerIndex::IReadOnlyOperations 1882 class Operations : public IReadOnlyOperations
1883 { 1883 {
1884 private: 1884 private:
1885 ResourceType& type_; 1885 ResourceType& type_;
1886 uint64_t& diskSize_; 1886 uint64_t& diskSize_;
1887 uint64_t& uncompressedSize_; 1887 uint64_t& uncompressedSize_;
1912 dicomUncompressedSize_(dicomUncompressedSize), 1912 dicomUncompressedSize_(dicomUncompressedSize),
1913 publicId_(publicId) 1913 publicId_(publicId)
1914 { 1914 {
1915 } 1915 }
1916 1916
1917 virtual void Apply(ServerIndex::ReadOnlyTransaction& transaction) ORTHANC_OVERRIDE 1917 virtual void Apply(ReadOnlyTransaction& transaction) ORTHANC_OVERRIDE
1918 { 1918 {
1919 int64_t top; 1919 int64_t top;
1920 if (!transaction.LookupResource(top, type_, publicId_)) 1920 if (!transaction.LookupResource(top, type_, publicId_))
1921 { 1921 {
1922 throw OrthancException(ErrorCode_UnknownResource); 1922 throw OrthancException(ErrorCode_UnknownResource);
2029 2029
2030 std::vector<DatabaseConstraint> query; 2030 std::vector<DatabaseConstraint> query;
2031 query.push_back(c.ConvertToDatabaseConstraint(level, DicomTagType_Identifier)); 2031 query.push_back(c.ConvertToDatabaseConstraint(level, DicomTagType_Identifier));
2032 2032
2033 2033
2034 class Operations : public ServerIndex::IReadOnlyOperations 2034 class Operations : public IReadOnlyOperations
2035 { 2035 {
2036 private: 2036 private:
2037 std::vector<std::string>& result_; 2037 std::vector<std::string>& result_;
2038 const std::vector<DatabaseConstraint>& query_; 2038 const std::vector<DatabaseConstraint>& query_;
2039 ResourceType level_; 2039 ResourceType level_;
2266 2266
2267 bool found; 2267 bool found;
2268 Operations operations; 2268 Operations operations;
2269 operations.Apply(*this, found, type, publicId); 2269 operations.Apply(*this, found, type, publicId);
2270 return found; 2270 return found;
2271 }
2272
2273
2274 unsigned int ServerIndex::GetDatabaseVersion()
2275 {
2276 class Operations : public ReadOnlyOperationsT1<unsigned int&>
2277 {
2278 public:
2279 virtual void ApplyTuple(ReadOnlyTransaction& transaction,
2280 const Tuple& tuple) ORTHANC_OVERRIDE
2281 {
2282 // TODO - CANDIDATE FOR "TransactionType_Implicit"
2283 tuple.get<0>() = transaction.GetDatabaseVersion();
2284 }
2285 };
2286
2287 unsigned int version;
2288 Operations operations;
2289 operations.Apply(*this, version);
2290 return version;
2291 } 2271 }
2292 2272
2293 2273
2294 bool ServerIndex::LookupParent(std::string& target, 2274 bool ServerIndex::LookupParent(std::string& target,
2295 const std::string& publicId, 2275 const std::string& publicId,