Mercurial > hg > orthanc-databases
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()) |