Mercurial > hg > orthanc-databases
diff Framework/Plugins/IndexBackend.cpp @ 256:e184dcadf163
handling of revisions in metadata
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 16 Apr 2021 17:13:33 +0200 |
parents | d663d9e44f8d |
children | 34e2b93a7ac1 |
line wrap: on
line diff
--- a/Framework/Plugins/IndexBackend.cpp Wed Apr 14 17:57:08 2021 +0200 +++ b/Framework/Plugins/IndexBackend.cpp Fri Apr 16 17:13:33 2021 +0200 @@ -446,7 +446,7 @@ SignalDeletedFiles(output, manager); } - + void IndexBackend::DeleteMetadata(DatabaseManager& manager, int64_t id, int32_t metadataType) @@ -465,7 +465,7 @@ statement.Execute(args); } - + void IndexBackend::DeleteResource(IDatabaseBackendOutput& output, DatabaseManager& manager, int64_t id) @@ -1256,31 +1256,60 @@ bool IndexBackend::LookupMetadata(std::string& target /*out*/, + int64_t& revision /*out*/, DatabaseManager& manager, int64_t id, int32_t metadataType) { - DatabaseManager::CachedStatement statement( - STATEMENT_FROM_HERE, manager, - "SELECT value FROM Metadata WHERE id=${id} and type=${type}"); + std::unique_ptr<DatabaseManager::CachedStatement> statement; + + switch (manager.GetDialect()) + { + case Dialect_MySQL: + case Dialect_PostgreSQL: + statement.reset(new DatabaseManager::CachedStatement( + STATEMENT_FROM_HERE, manager, + "SELECT value FROM Metadata WHERE id=${id} and type=${type}")); + break; - statement.SetReadOnly(true); - statement.SetParameterType("id", ValueType_Integer64); - statement.SetParameterType("type", ValueType_Integer64); + case Dialect_SQLite: + statement.reset(new DatabaseManager::CachedStatement( + STATEMENT_FROM_HERE, manager, + "SELECT value, revision FROM Metadata WHERE id=${id} and type=${type}")); + break; + + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + + + statement->SetReadOnly(true); + statement->SetParameterType("id", ValueType_Integer64); + statement->SetParameterType("type", ValueType_Integer64); Dictionary args; args.SetIntegerValue("id", id); args.SetIntegerValue("type", metadataType); - statement.Execute(args); + statement->Execute(args); - if (statement.IsDone()) + if (statement->IsDone()) { return false; } else { - target = ReadString(statement, 0); + target = ReadString(*statement, 0); + + if (manager.GetDialect() == Dialect_SQLite) + { + revision = ReadInteger64(*statement, 1); + } + else + { + revision = 0; // TODO - REVISIONS + } + return true; } } @@ -1560,27 +1589,31 @@ void IndexBackend::SetMetadata(DatabaseManager& manager, int64_t id, int32_t metadataType, - const char* value) + const char* value, + int64_t revision) { if (manager.GetDialect() == Dialect_SQLite) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager, - "INSERT OR REPLACE INTO Metadata VALUES (${id}, ${type}, ${value})"); + "INSERT OR REPLACE INTO Metadata VALUES (${id}, ${type}, ${value}, ${revision})"); statement.SetParameterType("id", ValueType_Integer64); statement.SetParameterType("type", ValueType_Integer64); statement.SetParameterType("value", ValueType_Utf8String); + statement.SetParameterType("revision", ValueType_Integer64); Dictionary args; args.SetIntegerValue("id", id); args.SetIntegerValue("type", metadataType); args.SetUtf8Value("value", value); + args.SetIntegerValue("revision", revision); statement.Execute(args); } else { + // TODO - REVISIONS { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager, @@ -2048,10 +2081,16 @@ std::string name = "m" + boost::lexical_cast<std::string>(i); args.SetUtf8Value(name, metadata[i].value); + + std::string revisionSuffix; + if (manager.GetDialect() == Dialect_SQLite) + { + revisionSuffix = ", 0"; // TODO - REVISIONS + } std::string insert = ("(" + boost::lexical_cast<std::string>(metadata[i].resource) + ", " + boost::lexical_cast<std::string>(metadata[i].metadata) + ", " + - "${" + name + "})"); + "${" + name + "}" + revisionSuffix + ")"); std::string remove = ("(id=" + boost::lexical_cast<std::string>(metadata[i].resource) + " AND type=" + boost::lexical_cast<std::string>(metadata[i].metadata) @@ -2121,7 +2160,7 @@ ExecuteSetResourcesContentTags(manager, "MainDicomTags", "t", countMainDicomTags, mainDicomTags); - + ExecuteSetResourcesContentMetadata(manager, countMetadata, metadata); } #endif