comparison OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5589:b51ee994cd6f find-refactoring

renamed FindResponse::Item as FindResponse::Resource
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 03 May 2024 17:26:06 +0200
parents 1b0fc6685f57
children 8b32213af23e
comparison
equal deleted inserted replaced
5588:1b0fc6685f57 5589:b51ee994cd6f
1171 SQLite::Statement statement(db_, SQLITE_FROM_HERE_DYNAMIC(sqlLookup), sqlLookup); 1171 SQLite::Statement statement(db_, SQLITE_FROM_HERE_DYNAMIC(sqlLookup), sqlLookup);
1172 formatter.Bind(statement); 1172 formatter.Bind(statement);
1173 1173
1174 while (statement.Step()) 1174 while (statement.Step())
1175 { 1175 {
1176 response.Add(new FindResponse::Item(request.GetLevel(), statement.ColumnString(0))); 1176 response.Add(new FindResponse::Resource(request.GetLevel(), statement.ColumnString(0)));
1177 } 1177 }
1178 } 1178 }
1179 else 1179 else
1180 { 1180 {
1181 { 1181 {
1193 formatter.Bind(statement); 1193 formatter.Bind(statement);
1194 1194
1195 while (statement.Step()) 1195 while (statement.Step())
1196 { 1196 {
1197 const std::string resourceId = statement.ColumnString(0); 1197 const std::string resourceId = statement.ColumnString(0);
1198 response.Add(new FindResponse::Item(request.GetLevel(), resourceId)); 1198 response.Add(new FindResponse::Resource(request.GetLevel(), resourceId));
1199 } 1199 }
1200 } 1200 }
1201 1201
1202 // request Each response content through INNER JOIN with the temporary table 1202 // request Each response content through INNER JOIN with the temporary table
1203 if (request.HasResponseContent(FindRequest::ResponseContent_MainDicomTags)) 1203 if (request.HasResponseContent(FindRequest::ResponseContent_MainDicomTags))
1209 formatter.Bind(statement); 1209 formatter.Bind(statement);
1210 1210
1211 while (statement.Step()) 1211 while (statement.Step())
1212 { 1212 {
1213 const std::string& resourceId = statement.ColumnString(0); 1213 const std::string& resourceId = statement.ColumnString(0);
1214 assert(response.HasItem(resourceId)); 1214 assert(response.HasResource(resourceId));
1215 response.GetItem(resourceId).AddStringDicomTag(request.GetLevel(), 1215 response.GetResource(resourceId).AddStringDicomTag(request.GetLevel(),
1216 statement.ColumnInt(1), 1216 statement.ColumnInt(1),
1217 statement.ColumnInt(2), 1217 statement.ColumnInt(2),
1218 statement.ColumnString(3)); 1218 statement.ColumnString(3));
1219 } 1219 }
1220 } 1220 }
1221 1221
1222 if (request.HasResponseContent(FindRequest::ResponseContent_Children)) 1222 if (request.HasResponseContent(FindRequest::ResponseContent_Children))
1223 { 1223 {
1224 SQLite::Statement statement(db_, SQLITE_FROM_HERE, 1224 SQLite::Statement statement(db_, SQLITE_FROM_HERE,
1225 "SELECT filtered.publicId, childLevel.publicId AS childPublicId " 1225 "SELECT filtered.publicId, childLevel.publicId AS childPublicId "
1226 "FROM Resources as currentLevel " 1226 "FROM Resources as currentLevel "
1227 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = currentLevel.internalId " 1227 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = currentLevel.internalId "
1228 " INNER JOIN Resources childLevel ON childLevel.parentId = currentLevel.internalId"); 1228 " INNER JOIN Resources childLevel ON childLevel.parentId = currentLevel.internalId");
1229 formatter.Bind(statement); 1229 formatter.Bind(statement);
1230 1230
1231 while (statement.Step()) 1231 while (statement.Step())
1232 { 1232 {
1233 const std::string& resourceId = statement.ColumnString(0); 1233 const std::string& resourceId = statement.ColumnString(0);
1234 assert(response.HasItem(resourceId)); 1234 assert(response.HasResource(resourceId));
1235 response.GetItem(resourceId).AddChildIdentifier(GetChildResourceType(request.GetLevel()), statement.ColumnString(1)); 1235 response.GetResource(resourceId).AddChildIdentifier(GetChildResourceType(request.GetLevel()), statement.ColumnString(1));
1236 } 1236 }
1237 } 1237 }
1238 1238
1239 if (request.HasResponseContent(FindRequest::ResponseContent_Parent)) 1239 if (request.HasResponseContent(FindRequest::ResponseContent_Parent))
1240 { 1240 {
1241 SQLite::Statement statement(db_, SQLITE_FROM_HERE, 1241 SQLite::Statement statement(db_, SQLITE_FROM_HERE,
1242 "SELECT filtered.publicId, parentLevel.publicId AS parentPublicId " 1242 "SELECT filtered.publicId, parentLevel.publicId AS parentPublicId "
1243 "FROM Resources as currentLevel " 1243 "FROM Resources as currentLevel "
1244 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = currentLevel.internalId " 1244 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = currentLevel.internalId "
1245 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId"); 1245 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId");
1246 1246
1247 while (statement.Step()) 1247 while (statement.Step())
1248 { 1248 {
1249 const std::string& resourceId = statement.ColumnString(0); 1249 const std::string& resourceId = statement.ColumnString(0);
1250 const std::string& parentId = statement.ColumnString(1); 1250 const std::string& parentId = statement.ColumnString(1);
1251 assert(response.HasItem(resourceId)); 1251 assert(response.HasResource(resourceId));
1252 response.GetItem(resourceId).SetParentIdentifier(parentId); 1252 response.GetResource(resourceId).SetParentIdentifier(parentId);
1253 } 1253 }
1254 } 1254 }
1255 1255
1256 if (request.HasResponseContent(FindRequest::ResponseContent_Metadata)) 1256 if (request.HasResponseContent(FindRequest::ResponseContent_Metadata))
1257 { 1257 {
1258 SQLite::Statement statement(db_, SQLITE_FROM_HERE, 1258 SQLite::Statement statement(db_, SQLITE_FROM_HERE,
1259 "SELECT filtered.publicId, metadata.type, metadata.value " 1259 "SELECT filtered.publicId, metadata.type, metadata.value "
1260 "FROM Metadata " 1260 "FROM Metadata "
1261 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = Metadata.id"); 1261 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = Metadata.id");
1262 1262
1263 while (statement.Step()) 1263 while (statement.Step())
1264 { 1264 {
1265 const std::string& resourceId = statement.ColumnString(0); 1265 const std::string& resourceId = statement.ColumnString(0);
1266 assert(response.HasItem(resourceId)); 1266 assert(response.HasResource(resourceId));
1267 response.GetItem(resourceId).AddMetadata(static_cast<MetadataType>(statement.ColumnInt(1)), 1267 response.GetResource(resourceId).AddMetadata(static_cast<MetadataType>(statement.ColumnInt(1)),
1268 statement.ColumnString(2)); 1268 statement.ColumnString(2));
1269 } 1269 }
1270 } 1270 }
1271 1271
1272 if (request.HasResponseContent(FindRequest::ResponseContent_Labels)) 1272 if (request.HasResponseContent(FindRequest::ResponseContent_Labels))
1273 { 1273 {
1274 SQLite::Statement statement(db_, SQLITE_FROM_HERE, 1274 SQLite::Statement statement(db_, SQLITE_FROM_HERE,
1275 "SELECT filtered.publicId, label " 1275 "SELECT filtered.publicId, label "
1276 "FROM Labels " 1276 "FROM Labels "
1277 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = Labels.id"); 1277 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = Labels.id");
1278 1278
1279 while (statement.Step()) 1279 while (statement.Step())
1280 { 1280 {
1281 const std::string& resourceId = statement.ColumnString(0); 1281 const std::string& resourceId = statement.ColumnString(0);
1282 assert(response.HasItem(resourceId)); 1282 assert(response.HasResource(resourceId));
1283 response.GetItem(resourceId).AddLabel(statement.ColumnString(1)); 1283 response.GetResource(resourceId).AddLabel(statement.ColumnString(1));
1284 } 1284 }
1285 } 1285 }
1286 1286
1287 if (request.HasResponseContent(FindRequest::ResponseContent_Attachments)) 1287 if (request.HasResponseContent(FindRequest::ResponseContent_Attachments))
1288 { 1288 {
1289 SQLite::Statement statement(db_, SQLITE_FROM_HERE, 1289 SQLite::Statement statement(db_, SQLITE_FROM_HERE,
1290 "SELECT filtered.publicId, uuid, fileType, uncompressedSize, compressionType, compressedSize, " 1290 "SELECT filtered.publicId, uuid, fileType, uncompressedSize, compressionType, compressedSize, "
1291 " uncompressedMD5, compressedMD5 " 1291 " uncompressedMD5, compressedMD5 "
1292 "FROM AttachedFiles " 1292 "FROM AttachedFiles "
1293 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = AttachedFiles.id"); 1293 " INNER JOIN FilteredResourcesIds filtered ON filtered.internalId = AttachedFiles.id");
1294 1294
1295 while (statement.Step()) 1295 while (statement.Step())
1296 { 1296 {
1297 const std::string& resourceId = statement.ColumnString(0); 1297 const std::string& resourceId = statement.ColumnString(0);
1298 FileInfo attachment = FileInfo(statement.ColumnString(1), 1298 FileInfo attachment = FileInfo(statement.ColumnString(1),
1301 statement.ColumnString(6), 1301 statement.ColumnString(6),
1302 static_cast<CompressionType>(statement.ColumnInt(4)), 1302 static_cast<CompressionType>(statement.ColumnInt(4)),
1303 statement.ColumnInt64(5), 1303 statement.ColumnInt64(5),
1304 statement.ColumnString(7)); 1304 statement.ColumnString(7));
1305 1305
1306 assert(response.HasItem(resourceId)); 1306 assert(response.HasResource(resourceId));
1307 response.GetItem(resourceId).AddAttachment(attachment); 1307 response.GetResource(resourceId).AddAttachment(attachment);
1308 }; 1308 };
1309 } 1309 }
1310 1310
1311 // TODO-FIND: implement other responseContent: ResponseContent_ChildInstanceId, ResponseContent_ChildrenMetadata (later: ResponseContent_IsStable) 1311 // TODO-FIND: implement other responseContent: ResponseContent_ChildInstanceId, ResponseContent_ChildrenMetadata (later: ResponseContent_IsStable)
1312 1312