Mercurial > hg > orthanc-databases
comparison Framework/Plugins/IndexBackend.cpp @ 164:6f83b74373d3 optimized-routes
/optimized-routes/studies/../instances-metadatas: include empty dico if no metadata such that all instances are listed
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 14 Jul 2020 09:47:46 +0200 |
parents | 2ccde9c7311b |
children |
comparison
equal
deleted
inserted
replaced
161:2ccde9c7311b | 164:6f83b74373d3 |
---|---|
1976 void IndexBackend::GetStudyInstancesMetadata(std::map<std::string, std::map<int32_t, std::string>>& target /*out*/, | 1976 void IndexBackend::GetStudyInstancesMetadata(std::map<std::string, std::map<int32_t, std::string>>& target /*out*/, |
1977 std::string& publicStudyId, | 1977 std::string& publicStudyId, |
1978 std::list<int32_t> metadataTypes) | 1978 std::list<int32_t> metadataTypes) |
1979 { | 1979 { |
1980 { | 1980 { |
1981 std::string sql = "SELECT instances.publicid, metadata.type, metadata.value FROM resources instances " | 1981 std::string metadataSqlFilter = ""; |
1982 "LEFT JOIN metadata ON metadata.id = instances.internalid " | |
1983 "INNER JOIN resources series ON instances.parentid = series.internalid " | |
1984 "INNER JOIN resources studies ON series.parentid = studies.internalid " | |
1985 " WHERE studies.publicId = ${id} "; | |
1986 | |
1987 | |
1988 if (metadataTypes.size() != 0) | 1982 if (metadataTypes.size() != 0) |
1989 { | 1983 { |
1990 std::list<std::string> metadataTypesStrings; | 1984 std::list<std::string> metadataTypesStrings; |
1991 for (std::list<int32_t>::const_iterator m = metadataTypes.begin(); m != metadataTypes.end(); m++) | 1985 for (std::list<int32_t>::const_iterator m = metadataTypes.begin(); m != metadataTypes.end(); m++) |
1992 { | 1986 { |
1993 metadataTypesStrings.push_back(boost::lexical_cast<std::string>(*m)); | 1987 metadataTypesStrings.push_back(boost::lexical_cast<std::string>(*m)); |
1994 } | 1988 } |
1995 | 1989 |
1996 std::string metadataTypesFilter = boost::algorithm::join(metadataTypesStrings, ","); | 1990 std::string metadataTypesFilter = boost::algorithm::join(metadataTypesStrings, ","); |
1997 sql = sql + " AND metadata.type IN (" + metadataTypesFilter + ")"; | 1991 metadataSqlFilter = "WHERE metadata.type IN (" + metadataTypesFilter + ")"; |
1998 } | 1992 } |
1993 | |
1994 std::string sql = "SELECT instances.publicid, metadata.type, metadata.value " | |
1995 "FROM resources instances " | |
1996 " LEFT JOIN (select * from metadata " + metadataSqlFilter + | |
1997 " ) AS metadata ON metadata.id = instances.internalId " | |
1998 "INNER JOIN resources series ON instances.parentid = series.internalid " | |
1999 "INNER JOIN resources studies ON series.parentid = studies.internalid " | |
2000 " WHERE studies.publicId = ${id} "; | |
1999 | 2001 |
2000 DatabaseManager::StandaloneStatement statement(manager_, sql); | 2002 DatabaseManager::StandaloneStatement statement(manager_, sql); |
2001 | 2003 |
2002 statement.SetReadOnly(true); | 2004 statement.SetReadOnly(true); |
2003 statement.SetParameterType("id", ValueType_Utf8String); | 2005 statement.SetParameterType("id", ValueType_Utf8String); |
2017 } | 2019 } |
2018 | 2020 |
2019 while (!statement.IsDone()) | 2021 while (!statement.IsDone()) |
2020 { | 2022 { |
2021 std::string instanceId = ReadString(statement, 0); | 2023 std::string instanceId = ReadString(statement, 0); |
2022 int32_t type = ReadInteger32(statement, 1); | |
2023 std::string value = ReadString(statement, 2); | |
2024 | 2024 |
2025 if (target.find(instanceId) == target.end()) | 2025 if (target.find(instanceId) == target.end()) |
2026 { | 2026 { |
2027 target[instanceId] = std::map<std::int32_t, std::string>(); | 2027 target[instanceId] = std::map<std::int32_t, std::string>(); |
2028 } | 2028 } |
2029 target[instanceId][type] = value; | 2029 |
2030 if (statement.GetResultField(1).GetType() != ValueType_Null) | |
2031 { | |
2032 int32_t type = ReadInteger32(statement, 1); | |
2033 std::string value = ReadString(statement, 2); | |
2034 | |
2035 target[instanceId][type] = value; | |
2036 } | |
2030 | 2037 |
2031 statement.Next(); | 2038 statement.Next(); |
2032 } | 2039 } |
2033 } | 2040 } |
2034 } | 2041 } |