# HG changeset patch # User Alain Mazy # Date 1594712866 -7200 # Node ID 6f83b74373d340b180f4a03b5bf7a34b83630d71 # Parent 2ccde9c7311bb4361ee2ea0edd6091a70253d41c /optimized-routes/studies/../instances-metadatas: include empty dico if no metadata such that all instances are listed diff -r 2ccde9c7311b -r 6f83b74373d3 Framework/Plugins/IndexBackend.cpp --- a/Framework/Plugins/IndexBackend.cpp Fri Jul 10 13:26:47 2020 +0200 +++ b/Framework/Plugins/IndexBackend.cpp Tue Jul 14 09:47:46 2020 +0200 @@ -1978,13 +1978,7 @@ std::list metadataTypes) { { - std::string sql = "SELECT instances.publicid, metadata.type, metadata.value FROM resources instances " - "LEFT JOIN metadata ON metadata.id = instances.internalid " - "INNER JOIN resources series ON instances.parentid = series.internalid " - "INNER JOIN resources studies ON series.parentid = studies.internalid " - " WHERE studies.publicId = ${id} "; - - + std::string metadataSqlFilter = ""; if (metadataTypes.size() != 0) { std::list metadataTypesStrings; @@ -1994,9 +1988,17 @@ } std::string metadataTypesFilter = boost::algorithm::join(metadataTypesStrings, ","); - sql = sql + " AND metadata.type IN (" + metadataTypesFilter + ")"; + metadataSqlFilter = "WHERE metadata.type IN (" + metadataTypesFilter + ")"; } + std::string sql = "SELECT instances.publicid, metadata.type, metadata.value " + "FROM resources instances " + " LEFT JOIN (select * from metadata " + metadataSqlFilter + + " ) AS metadata ON metadata.id = instances.internalId " + "INNER JOIN resources series ON instances.parentid = series.internalid " + "INNER JOIN resources studies ON series.parentid = studies.internalid " + " WHERE studies.publicId = ${id} "; + DatabaseManager::StandaloneStatement statement(manager_, sql); statement.SetReadOnly(true); @@ -2019,14 +2021,19 @@ while (!statement.IsDone()) { std::string instanceId = ReadString(statement, 0); - int32_t type = ReadInteger32(statement, 1); - std::string value = ReadString(statement, 2); if (target.find(instanceId) == target.end()) { target[instanceId] = std::map(); } - target[instanceId][type] = value; + + if (statement.GetResultField(1).GetType() != ValueType_Null) + { + int32_t type = ReadInteger32(statement, 1); + std::string value = ReadString(statement, 2); + + target[instanceId][type] = value; + } statement.Next(); } diff -r 2ccde9c7311b -r 6f83b74373d3 Framework/Plugins/OptimizedRoutes.cpp --- a/Framework/Plugins/OptimizedRoutes.cpp Fri Jul 10 13:26:47 2020 +0200 +++ b/Framework/Plugins/OptimizedRoutes.cpp Tue Jul 14 09:47:46 2020 +0200 @@ -66,7 +66,7 @@ Json::Value response(Json::objectValue); for (std::map>::const_iterator itInstance = result.begin(); itInstance != result.end(); itInstance++) { - Json::Value instanceMetadatas; + Json::Value instanceMetadatas(Json::objectValue); for (std::map::const_iterator itMetadata = itInstance->second.begin(); itMetadata != itInstance->second.end(); itMetadata++) { std::string id = boost::lexical_cast(itMetadata->first);