comparison OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 5803:e219e272650d find-refactoring

fix retrieval of grandchildren info + cleanup
author Alain Mazy <am@orthanc.team>
date Fri, 20 Sep 2024 18:18:52 +0200
parents 16ce3c920f71
children 25df40a274fd
comparison
equal deleted inserted replaced
5801:90ca8c1bc75c 5803:e219e272650d
584 " NULL AS c5_string3, " 584 " NULL AS c5_string3, "
585 " Metadata.type AS c6_int1, " 585 " Metadata.type AS c6_int1, "
586 " NULL AS c7_int2, " 586 " NULL AS c7_int2, "
587 " NULL AS c8_big_int1, " 587 " NULL AS c8_big_int1, "
588 " NULL AS c9_big_int2 " 588 " NULL AS c9_big_int2 "
589 " FROM Metadata " 589 " FROM OneInstance "
590 " INNER JOIN OneInstance ON Metadata.id = OneInstance.instanceInternalId "; 590 " INNER JOIN Metadata ON Metadata.id = OneInstance.instanceInternalId ";
591 591
592 sql += " UNION SELECT" 592 sql += " UNION SELECT"
593 " " TOSTRING(QUERY_ONE_INSTANCE_ATTACHMENTS) " AS c0_queryId, " 593 " " TOSTRING(QUERY_ONE_INSTANCE_ATTACHMENTS) " AS c0_queryId, "
594 " parentInternalId AS c1_internalId, " 594 " parentInternalId AS c1_internalId, "
595 " NULL AS c2_rowNumber, " 595 " NULL AS c2_rowNumber, "
598 " compressedMD5 AS c5_string3, " 598 " compressedMD5 AS c5_string3, "
599 " fileType AS c6_int1, " 599 " fileType AS c6_int1, "
600 " compressionType AS c7_int2, " 600 " compressionType AS c7_int2, "
601 " compressedSize AS c8_big_int1, " 601 " compressedSize AS c8_big_int1, "
602 " uncompressedSize AS c9_big_int2 " 602 " uncompressedSize AS c9_big_int2 "
603 " FROM AttachedFiles " 603 " FROM OneInstance "
604 " INNER JOIN OneInstance ON AttachedFiles.id = OneInstance.instanceInternalId "; 604 " INNER JOIN AttachedFiles ON AttachedFiles.id = OneInstance.instanceInternalId ";
605 605
606 } 606 }
607 607
608 // need MainDicomTags from resource ? 608 // need MainDicomTags from resource ?
609 if (request.IsRetrieveMainDicomTags()) 609 if (request.IsRetrieveMainDicomTags())
617 " NULL AS c5_string3, " 617 " NULL AS c5_string3, "
618 " tagGroup AS c6_int1, " 618 " tagGroup AS c6_int1, "
619 " tagElement AS c7_int2, " 619 " tagElement AS c7_int2, "
620 " NULL AS c8_big_int1, " 620 " NULL AS c8_big_int1, "
621 " NULL AS c9_big_int2 " 621 " NULL AS c9_big_int2 "
622 "FROM MainDicomTags " 622 "FROM Lookup "
623 "INNER JOIN Lookup ON MainDicomTags.id = Lookup.internalId "; 623 "INNER JOIN MainDicomTags ON MainDicomTags.id = Lookup.internalId ";
624 } 624 }
625 625
626 // need resource metadata ? 626 // need resource metadata ?
627 if (request.IsRetrieveMetadata()) 627 if (request.IsRetrieveMetadata())
628 { 628 {
635 " NULL AS c5_string3, " 635 " NULL AS c5_string3, "
636 " type AS c6_int1, " 636 " type AS c6_int1, "
637 " NULL AS c7_int2, " 637 " NULL AS c7_int2, "
638 " NULL AS c8_big_int1, " 638 " NULL AS c8_big_int1, "
639 " NULL AS c9_big_int2 " 639 " NULL AS c9_big_int2 "
640 "FROM Metadata " 640 "FROM Lookup "
641 "INNER JOIN Lookup ON Metadata.id = Lookup.internalId "; 641 "INNER JOIN Metadata ON Metadata.id = Lookup.internalId ";
642 } 642 }
643 643
644 // need resource attachments ? 644 // need resource attachments ?
645 if (request.IsRetrieveAttachments()) 645 if (request.IsRetrieveAttachments())
646 { 646 {
653 " compressedMD5 AS c5_string3, " 653 " compressedMD5 AS c5_string3, "
654 " fileType AS c6_int1, " 654 " fileType AS c6_int1, "
655 " compressionType AS c7_int2, " 655 " compressionType AS c7_int2, "
656 " compressedSize AS c8_big_int1, " 656 " compressedSize AS c8_big_int1, "
657 " uncompressedSize AS c9_big_int2 " 657 " uncompressedSize AS c9_big_int2 "
658 "FROM AttachedFiles " 658 "FROM Lookup "
659 "INNER JOIN Lookup ON AttachedFiles.id = Lookup.internalId "; 659 "INNER JOIN AttachedFiles ON AttachedFiles.id = Lookup.internalId ";
660 } 660 }
661 661
662 662
663 // need resource labels ? 663 // need resource labels ?
664 if (request.IsRetrieveLabels()) 664 if (request.IsRetrieveLabels())
672 " NULL AS c5_string3, " 672 " NULL AS c5_string3, "
673 " NULL AS c6_int1, " 673 " NULL AS c6_int1, "
674 " NULL AS c7_int2, " 674 " NULL AS c7_int2, "
675 " NULL AS c8_big_int1, " 675 " NULL AS c8_big_int1, "
676 " NULL AS c9_big_int2 " 676 " NULL AS c9_big_int2 "
677 "FROM Labels " 677 "FROM Lookup "
678 "INNER JOIN Lookup ON Labels.id = Lookup.internalId "; 678 "INNER JOIN Labels ON Labels.id = Lookup.internalId ";
679 } 679 }
680 680
681 if (requestLevel > ResourceType_Patient) 681 if (requestLevel > ResourceType_Patient)
682 { 682 {
683 // need MainDicomTags from parent ? 683 // need MainDicomTags from parent ?
795 " tagElement AS c7_int2, " 795 " tagElement AS c7_int2, "
796 " NULL AS c8_big_int1, " 796 " NULL AS c8_big_int1, "
797 " NULL AS c9_big_int2 " 797 " NULL AS c9_big_int2 "
798 "FROM Lookup " 798 "FROM Lookup "
799 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " 799 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
800 " INNER JOIN Resources grandChildLevel ON childLevel.parentId = Lookup.internalId " 800 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
801 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND " + JoinRequestedTags(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2))); 801 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND " + JoinRequestedTags(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2)));
802 } 802 }
803 803
804 // need parent identifier ? 804 // need parent identifier ?
805 if (request.IsRetrieveParentIdentifier()) 805 if (request.IsRetrieveParentIdentifier())
813 " NULL AS c5_string3, " 813 " NULL AS c5_string3, "
814 " NULL AS c6_int1, " 814 " NULL AS c6_int1, "
815 " NULL AS c7_int2, " 815 " NULL AS c7_int2, "
816 " NULL AS c8_big_int1, " 816 " NULL AS c8_big_int1, "
817 " NULL AS c9_big_int2 " 817 " NULL AS c9_big_int2 "
818 "FROM Resources AS currentLevel " 818 "FROM Lookup "
819 " INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 819 " INNER JOIN Resources currentLevel ON currentLevel.internalId = Lookup.internalId "
820 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "; 820 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId ";
821 } 821 }
822 822
823 // need children metadata ? 823 // need children metadata ?
824 if (requestLevel <= ResourceType_Series && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1)).GetMetadata().size() > 0) 824 if (requestLevel <= ResourceType_Series && request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 1)).GetMetadata().size() > 0)
853 " NULL AS c7_int2, " 853 " NULL AS c7_int2, "
854 " NULL AS c8_big_int1, " 854 " NULL AS c8_big_int1, "
855 " NULL AS c9_big_int2 " 855 " NULL AS c9_big_int2 "
856 "FROM Lookup " 856 "FROM Lookup "
857 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " 857 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId "
858 " INNER JOIN Resources grandChildLevel ON childLevel.parentId = Lookup.internalId " 858 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId "
859 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2))) + ") "; 859 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(request.GetChildrenSpecification(static_cast<ResourceType>(requestLevel + 2))) + ") ";
860 } 860 }
861 861
862 // need children identifiers ? 862 // need children identifiers ?
863 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Study).IsRetrieveIdentifiers()) || 863 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Study).IsRetrieveIdentifiers()) ||
873 " NULL AS c5_string3, " 873 " NULL AS c5_string3, "
874 " NULL AS c6_int1, " 874 " NULL AS c6_int1, "
875 " NULL AS c7_int2, " 875 " NULL AS c7_int2, "
876 " NULL AS c8_big_int1, " 876 " NULL AS c8_big_int1, "
877 " NULL AS c9_big_int2 " 877 " NULL AS c9_big_int2 "
878 "FROM Resources AS currentLevel " 878 "FROM Lookup "
879 " INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 879 " INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId ";
880 " INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId ";
881 } 880 }
882 881
883 // need grandchildren identifiers ? 882 // need grandchildren identifiers ?
884 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Series).IsRetrieveIdentifiers()) || 883 if ((requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Series).IsRetrieveIdentifiers()) ||
885 (requestLevel == ResourceType_Study && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers())) 884 (requestLevel == ResourceType_Study && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers()))
893 " NULL AS c5_string3, " 892 " NULL AS c5_string3, "
894 " NULL AS c6_int1, " 893 " NULL AS c6_int1, "
895 " NULL AS c7_int2, " 894 " NULL AS c7_int2, "
896 " NULL AS c8_big_int1, " 895 " NULL AS c8_big_int1, "
897 " NULL AS c9_big_int2 " 896 " NULL AS c9_big_int2 "
898 "FROM Resources AS currentLevel " 897 "FROM Lookup "
899 "INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 898 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
900 "INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId "
901 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "; 899 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId ";
902 } 900 }
903 901
904 // need grandgrandchildren identifiers ? 902 // need grandgrandchildren identifiers ?
905 if (requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers()) 903 if (requestLevel == ResourceType_Patient && request.GetChildrenSpecification(ResourceType_Instance).IsRetrieveIdentifiers())
913 " NULL AS c5_string3, " 911 " NULL AS c5_string3, "
914 " NULL AS c6_int1, " 912 " NULL AS c6_int1, "
915 " NULL AS c7_int2, " 913 " NULL AS c7_int2, "
916 " NULL AS c8_big_int1, " 914 " NULL AS c8_big_int1, "
917 " NULL AS c9_big_int2 " 915 " NULL AS c9_big_int2 "
918 "FROM Resources AS currentLevel " 916 "FROM Lookup "
919 "INNER JOIN Lookup ON currentLevel.internalId = Lookup.internalId " 917 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "
920 "INNER JOIN Resources childLevel ON currentLevel.internalId = childLevel.parentId "
921 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId " 918 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "
922 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId "; 919 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId ";
923 } 920 }
924 921
925 922