comparison Framework/Plugins/IndexBackend.cpp @ 563:cf6aea0bf438 find-refactoring

fix retrieval of grandchildren info + cleanup
author Alain Mazy <am@orthanc.team>
date Fri, 20 Sep 2024 18:19:16 +0200
parents 13234fec9438
children 3a83c434b284
comparison
equal deleted inserted replaced
562:13234fec9438 563:cf6aea0bf438
3228 " NULL::TEXT AS c5_string3, " 3228 " NULL::TEXT AS c5_string3, "
3229 " tagGroup AS c6_int1, " 3229 " tagGroup AS c6_int1, "
3230 " tagElement AS c7_int2, " 3230 " tagElement AS c7_int2, "
3231 " NULL::BIGINT AS c8_big_int1, " 3231 " NULL::BIGINT AS c8_big_int1, "
3232 " NULL::BIGINT AS c9_big_int2 " 3232 " NULL::BIGINT AS c9_big_int2 "
3233 "FROM MainDicomTags " 3233 "FROM Lookup "
3234 "INNER JOIN Lookup ON MainDicomTags.id = Lookup.internalId "; 3234 "INNER JOIN MainDicomTags ON MainDicomTags.id = Lookup.internalId ";
3235 } 3235 }
3236 3236
3237 // need resource metadata ? 3237 // need resource metadata ?
3238 if (request.retrieve_metadata()) 3238 if (request.retrieve_metadata())
3239 { 3239 {
3246 " NULL::TEXT AS c5_string3, " 3246 " NULL::TEXT AS c5_string3, "
3247 " type AS c6_int1, " 3247 " type AS c6_int1, "
3248 " NULL::INT AS c7_int2, " 3248 " NULL::INT AS c7_int2, "
3249 " NULL::BIGINT AS c8_big_int1, " 3249 " NULL::BIGINT AS c8_big_int1, "
3250 " NULL::BIGINT AS c9_big_int2 " 3250 " NULL::BIGINT AS c9_big_int2 "
3251 "FROM Metadata " 3251 "FROM Lookup "
3252 "INNER JOIN Lookup ON Metadata.id = Lookup.internalId "; 3252 "INNER JOIN Metadata ON Metadata.id = Lookup.internalId ";
3253 } 3253 }
3254 3254
3255 // need resource attachments ? 3255 // need resource attachments ?
3256 if (request.retrieve_attachments()) 3256 if (request.retrieve_attachments())
3257 { 3257 {
3264 " compressedHash AS c5_string3, " 3264 " compressedHash AS c5_string3, "
3265 " fileType AS c6_int1, " 3265 " fileType AS c6_int1, "
3266 " compressionType AS c7_int2, " 3266 " compressionType AS c7_int2, "
3267 " compressedSize AS c8_big_int1, " 3267 " compressedSize AS c8_big_int1, "
3268 " uncompressedSize AS c9_big_int2 " 3268 " uncompressedSize AS c9_big_int2 "
3269 "FROM AttachedFiles " 3269 "FROM Lookup "
3270 "INNER JOIN Lookup ON AttachedFiles.id = Lookup.internalId "; 3270 "INNER JOIN AttachedFiles ON AttachedFiles.id = Lookup.internalId ";
3271 } 3271 }
3272 3272
3273 // need resource labels ? 3273 // need resource labels ?
3274 if (request.retrieve_labels()) 3274 if (request.retrieve_labels())
3275 { 3275 {
3282 " NULL::TEXT AS c5_string3, " 3282 " NULL::TEXT AS c5_string3, "
3283 " NULL::INT AS c6_int1, " 3283 " NULL::INT AS c6_int1, "
3284 " NULL::INT AS c7_int2, " 3284 " NULL::INT AS c7_int2, "
3285 " NULL::BIGINT AS c8_big_int1, " 3285 " NULL::BIGINT AS c8_big_int1, "
3286 " NULL::BIGINT AS c9_big_int2 " 3286 " NULL::BIGINT AS c9_big_int2 "
3287 "FROM Labels " 3287 "FROM Lookup "
3288 "INNER JOIN Lookup ON Labels.id = Lookup.internalId "; 3288 "INNER JOIN Labels ON Labels.id = Lookup.internalId ";
3289 } 3289 }
3290 3290
3291 // need MainDicomTags from parent ? 3291 // need MainDicomTags from parent ?
3292 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT) 3292 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT)
3293 { 3293 {
3419 3419
3420 default: 3420 default:
3421 break; 3421 break;
3422 } 3422 }
3423 3423
3424 if (childrenSpec->retrieve_main_dicom_tags_size() > 0) // TODO: retrieve only the requested tags ? 3424 if (childrenSpec->retrieve_main_dicom_tags_size() > 0)
3425 { 3425 {
3426 sql += "UNION SELECT " 3426 sql += "UNION SELECT "
3427 " " TOSTRING(QUERY_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, " 3427 " " TOSTRING(QUERY_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, "
3428 " Lookup.internalId AS c1_internalId, " 3428 " Lookup.internalId AS c1_internalId, "
3429 " NULL::BIGINT AS c2_rowNumber, " 3429 " NULL::BIGINT AS c2_rowNumber, "
3451 " NULL::TEXT AS c5_string3, " 3451 " NULL::TEXT AS c5_string3, "
3452 " NULL::INT AS c6_int1, " 3452 " NULL::INT AS c6_int1, "
3453 " NULL::INT AS c7_int2, " 3453 " NULL::INT AS c7_int2, "
3454 " NULL::BIGINT AS c8_big_int1, " 3454 " NULL::BIGINT AS c8_big_int1, "
3455 " NULL::BIGINT AS c9_big_int2 " 3455 " NULL::BIGINT AS c9_big_int2 "
3456 "FROM Resources AS currentLevel " 3456 "FROM Lookup "
3457 " INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 3457 " INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId ";
3458 " INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId ";
3459 } 3458 }
3460 3459
3461 if (childrenSpec->retrieve_metadata_size() > 0) 3460 if (childrenSpec->retrieve_metadata_size() > 0)
3462 { 3461 {
3463 sql += "UNION SELECT " 3462 sql += "UNION SELECT "
3504 " NULL::TEXT AS c5_string3, " 3503 " NULL::TEXT AS c5_string3, "
3505 " NULL::INT AS c6_int1, " 3504 " NULL::INT AS c6_int1, "
3506 " NULL::INT AS c7_int2, " 3505 " NULL::INT AS c7_int2, "
3507 " NULL::BIGINT AS c8_big_int1, " 3506 " NULL::BIGINT AS c8_big_int1, "
3508 " NULL::BIGINT AS c9_big_int2 " 3507 " NULL::BIGINT AS c9_big_int2 "
3509 "FROM Resources AS currentLevel " 3508 "FROM Lookup "
3510 "INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 3509 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
3511 "INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId "
3512 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "; 3510 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId ";
3513 } 3511 }
3514 3512
3515 if (grandchildrenSpec->retrieve_main_dicom_tags_size() > 0) 3513 if (grandchildrenSpec->retrieve_main_dicom_tags_size() > 0)
3516 { 3514 {
3525 " tagElement AS c7_int2, " 3523 " tagElement AS c7_int2, "
3526 " NULL::BIGINT AS c8_big_int1, " 3524 " NULL::BIGINT AS c8_big_int1, "
3527 " NULL::BIGINT AS c9_big_int2 " 3525 " NULL::BIGINT AS c9_big_int2 "
3528 "FROM Lookup " 3526 "FROM Lookup "
3529 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " 3527 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
3530 " INNER JOIN Resources grandChildLevel ON childLevel.parentId = Lookup.internalId " 3528 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
3531 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND (tagGroup, tagElement) IN (" + JoinRequestedTags(grandchildrenSpec) + ")"; 3529 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND (tagGroup, tagElement) IN (" + JoinRequestedTags(grandchildrenSpec) + ")";
3532 } 3530 }
3533 3531
3534 if (grandchildrenSpec->retrieve_metadata_size() > 0) 3532 if (grandchildrenSpec->retrieve_metadata_size() > 0)
3535 { 3533 {
3544 " NULL::INT AS c7_int2, " 3542 " NULL::INT AS c7_int2, "
3545 " NULL::BIGINT AS c8_big_int1, " 3543 " NULL::BIGINT AS c8_big_int1, "
3546 " NULL::BIGINT AS c9_big_int2 " 3544 " NULL::BIGINT AS c9_big_int2 "
3547 "FROM Lookup " 3545 "FROM Lookup "
3548 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " 3546 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
3549 " INNER JOIN Resources grandChildLevel ON childLevel.parentId = Lookup.internalId " 3547 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
3550 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(grandchildrenSpec) + ") "; 3548 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(grandchildrenSpec) + ") ";
3551 } 3549 }
3552 3550
3553 if (request.level() == Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT) 3551 if (request.level() == Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT)
3554 { 3552 {
3566 " NULL::TEXT AS c5_string3, " 3564 " NULL::TEXT AS c5_string3, "
3567 " NULL::INT AS c6_int1, " 3565 " NULL::INT AS c6_int1, "
3568 " NULL::INT AS c7_int2, " 3566 " NULL::INT AS c7_int2, "
3569 " NULL::BIGINT AS c8_big_int1, " 3567 " NULL::BIGINT AS c8_big_int1, "
3570 " NULL::BIGINT AS c9_big_int2 " 3568 " NULL::BIGINT AS c9_big_int2 "
3571 "FROM Resources AS currentLevel " 3569 "FROM Lookup "
3572 "INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 3570 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
3573 "INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId "
3574 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId " 3571 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "
3575 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId "; 3572 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId ";
3576 } 3573 }
3577 } 3574 }
3578 } 3575 }
3590 " NULL::TEXT AS c5_string3, " 3587 " NULL::TEXT AS c5_string3, "
3591 " NULL::INT AS c6_int1, " 3588 " NULL::INT AS c6_int1, "
3592 " NULL::INT AS c7_int2, " 3589 " NULL::INT AS c7_int2, "
3593 " NULL::BIGINT AS c8_big_int1, " 3590 " NULL::BIGINT AS c8_big_int1, "
3594 " NULL::BIGINT AS c9_big_int2 " 3591 " NULL::BIGINT AS c9_big_int2 "
3595 "FROM Resources AS currentLevel " 3592 "FROM Lookup "
3596 " INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 3593 " INNER JOIN Resources ON currentLevel.internalId = Lookup.internalId "
3597 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "; 3594 " INNER JOIN Resources parentLevel ON Lookup.parentId = parentLevel.internalId ";
3598 } 3595 }
3599 3596
3600 // need one instance info ? 3597 // need one instance info ?
3601 if (request.level() != Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE && 3598 if (request.level() != Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE &&
3602 request.retrieve_one_instance_metadata_and_attachments()) 3599 request.retrieve_one_instance_metadata_and_attachments())