comparison Framework/Plugins/IndexBackend.cpp @ 561:6c76a050a341 find-refactoring

handling of parent metadata
author Alain Mazy <am@orthanc.team>
date Wed, 18 Sep 2024 09:49:18 +0200
parents b0ce1ebc9b90
children 13234fec9438
comparison
equal deleted inserted replaced
560:b0ce1ebc9b90 561:6c76a050a341
3160 #define QUERY_ATTACHMENTS 3 3160 #define QUERY_ATTACHMENTS 3
3161 #define QUERY_METADATA 4 3161 #define QUERY_METADATA 4
3162 #define QUERY_LABELS 5 3162 #define QUERY_LABELS 5
3163 #define QUERY_PARENT_MAIN_DICOM_TAGS 10 3163 #define QUERY_PARENT_MAIN_DICOM_TAGS 10
3164 #define QUERY_PARENT_IDENTIFIER 11 3164 #define QUERY_PARENT_IDENTIFIER 11
3165 #define QUERY_PARENT_METADATA 12
3165 #define QUERY_GRAND_PARENT_MAIN_DICOM_TAGS 15 3166 #define QUERY_GRAND_PARENT_MAIN_DICOM_TAGS 15
3167 #define QUERY_GRAND_PARENT_METADATA 16
3166 #define QUERY_CHILDREN_IDENTIFIERS 20 3168 #define QUERY_CHILDREN_IDENTIFIERS 20
3167 #define QUERY_CHILDREN_MAIN_DICOM_TAGS 21 3169 #define QUERY_CHILDREN_MAIN_DICOM_TAGS 21
3168 #define QUERY_CHILDREN_METADATA 22 3170 #define QUERY_CHILDREN_METADATA 22
3169 #define QUERY_GRAND_CHILDREN_IDENTIFIERS 30 3171 #define QUERY_GRAND_CHILDREN_IDENTIFIERS 30
3170 #define QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS 31 3172 #define QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS 31
3320 " NULL::BIGINT AS c8_big_int1, " 3322 " NULL::BIGINT AS c8_big_int1, "
3321 " NULL::BIGINT AS c9_big_int2 " 3323 " NULL::BIGINT AS c9_big_int2 "
3322 "FROM Lookup " 3324 "FROM Lookup "
3323 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " 3325 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
3324 "INNER JOIN MainDicomTags ON MainDicomTags.id = currentLevel.parentId "; 3326 "INNER JOIN MainDicomTags ON MainDicomTags.id = currentLevel.parentId ";
3327 }
3328
3329 if (parentSpec->retrieve_metadata())
3330 {
3331 sql += "UNION SELECT "
3332 " " TOSTRING(QUERY_PARENT_METADATA) " AS c0_queryId, "
3333 " Lookup.internalId AS c1_internalId, "
3334 " NULL::BIGINT AS c2_rowNumber, "
3335 " value AS c3_string1, "
3336 " NULL::TEXT AS c4_string2, "
3337 " NULL::TEXT AS c5_string3, "
3338 " type AS c6_int1, "
3339 " NULL::INT AS c7_int2, "
3340 " NULL::BIGINT AS c8_big_int1, "
3341 " NULL::BIGINT AS c9_big_int2 "
3342 "FROM Lookup "
3343 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
3344 "INNER JOIN Metadata ON Metadata.id = currentLevel.parentId ";
3325 } 3345 }
3326 3346
3327 // need MainDicomTags from grandparent ? 3347 // need MainDicomTags from grandparent ?
3328 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY) 3348 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY)
3329 { 3349 {
3356 " NULL::BIGINT AS c9_big_int2 " 3376 " NULL::BIGINT AS c9_big_int2 "
3357 "FROM Lookup " 3377 "FROM Lookup "
3358 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " 3378 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
3359 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId " 3379 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "
3360 "INNER JOIN MainDicomTags ON MainDicomTags.id = parentLevel.parentId "; 3380 "INNER JOIN MainDicomTags ON MainDicomTags.id = parentLevel.parentId ";
3381 }
3382
3383 if (grandparentSpec->retrieve_metadata())
3384 {
3385 sql += "UNION SELECT "
3386 " " TOSTRING(QUERY_GRAND_PARENT_METADATA) " AS c0_queryId, "
3387 " Lookup.internalId AS c1_internalId, "
3388 " NULL::BIGINT AS c2_rowNumber, "
3389 " value AS c3_string1, "
3390 " NULL::TEXT AS c4_string2, "
3391 " NULL::TEXT AS c5_string3, "
3392 " type AS c6_int1, "
3393 " NULL::INT AS c7_int2, "
3394 " NULL::BIGINT AS c8_big_int1, "
3395 " NULL::BIGINT AS c9_big_int2 "
3396 "FROM Lookup "
3397 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId "
3398 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "
3399 "INNER JOIN Metadata ON Metadata.id = currentLevel.parentId ";
3361 } 3400 }
3362 } 3401 }
3363 } 3402 }
3364 3403
3365 // need MainDicomTags from children ? 3404 // need MainDicomTags from children ?
3771 3810
3772 metadata->set_value(statement.ReadString(C3_STRING_1)); 3811 metadata->set_value(statement.ReadString(C3_STRING_1));
3773 metadata->set_key(statement.ReadInteger32(C6_INT_1)); 3812 metadata->set_key(statement.ReadInteger32(C6_INT_1));
3774 }; break; 3813 }; break;
3775 3814
3815 case QUERY_PARENT_METADATA:
3816 {
3817 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 1));
3818 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = content->add_metadata();
3819
3820 metadata->set_value(statement.ReadString(C3_STRING_1));
3821 metadata->set_key(statement.ReadInteger32(C6_INT_1));
3822 }; break;
3823
3824 case QUERY_GRAND_PARENT_METADATA:
3825 {
3826 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 2));
3827 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = content->add_metadata();
3828
3829 metadata->set_value(statement.ReadString(C3_STRING_1));
3830 metadata->set_key(statement.ReadInteger32(C6_INT_1));
3831 }; break;
3832
3776 case QUERY_PARENT_IDENTIFIER: 3833 case QUERY_PARENT_IDENTIFIER:
3777 { 3834 {
3778 responses[internalId]->set_parent_public_id(statement.ReadString(C3_STRING_1)); 3835 responses[internalId]->set_parent_public_id(statement.ReadString(C3_STRING_1));
3779 }; break; 3836 }; break;
3780 3837