comparison OrthancServer/Sources/Search/ISqlLookupFormatter.cpp @ 5827:976872a99d39 find-refactoring

cleanup
author Alain Mazy <am@orthanc.team>
date Mon, 07 Oct 2024 10:54:40 +0200
parents d73dfb4548c6
children 7030fa489669
comparison
equal deleted inserted replaced
5826:d73dfb4548c6 5827:976872a99d39
764 " FROM Resources AS " + strQueryLevel); 764 " FROM Resources AS " + strQueryLevel);
765 765
766 766
767 std::string joins, comparisons; 767 std::string joins, comparisons;
768 768
769 { 769 // handle parent constraints
770 // handle parent constraints 770 if (request.GetOrthancIdentifiers().IsDefined() && request.GetOrthancIdentifiers().DetectLevel() <= queryLevel)
771 if (request.GetOrthancIdentifiers().IsDefined() && request.GetOrthancIdentifiers().DetectLevel() <= queryLevel) 771 {
772 { 772 ResourceType topParentLevel = request.GetOrthancIdentifiers().DetectLevel();
773 ResourceType topParentLevel = request.GetOrthancIdentifiers().DetectLevel(); 773
774 774 if (topParentLevel == queryLevel)
775 if (topParentLevel == queryLevel) 775 {
776 { 776 comparisons += " AND " + FormatLevel(topParentLevel) + ".publicId = " + formatter.GenerateParameter(request.GetOrthancIdentifiers().GetLevel(topParentLevel));
777 comparisons += " AND " + FormatLevel(topParentLevel) + ".publicId = " + formatter.GenerateParameter(request.GetOrthancIdentifiers().GetLevel(topParentLevel)); 777 }
778 } 778 else
779 else 779 {
780 { 780 comparisons += " AND " + FormatLevel("parent", topParentLevel) + ".publicId = " + formatter.GenerateParameter(request.GetOrthancIdentifiers().GetLevel(topParentLevel));
781 comparisons += " AND " + FormatLevel("parent", topParentLevel) + ".publicId = " + formatter.GenerateParameter(request.GetOrthancIdentifiers().GetLevel(topParentLevel)); 781
782 782 for (int level = queryLevel; level > topParentLevel; level--)
783 for (int level = queryLevel; level > topParentLevel; level--) 783 {
784 { 784 joins += " INNER JOIN Resources " +
785 joins += " INNER JOIN Resources " + 785 FormatLevel("parent", static_cast<ResourceType>(level - 1)) + " ON " +
786 FormatLevel("parent", static_cast<ResourceType>(level - 1)) + " ON " + 786 FormatLevel("parent", static_cast<ResourceType>(level - 1)) + ".internalId = ";
787 FormatLevel("parent", static_cast<ResourceType>(level - 1)) + ".internalId = "; 787 if (level == queryLevel)
788 if (level == queryLevel) 788 {
789 { 789 joins += FormatLevel(static_cast<ResourceType>(level)) + ".parentId";
790 joins += FormatLevel(static_cast<ResourceType>(level)) + ".parentId"; 790 }
791 } 791 else
792 else 792 {
793 { 793 joins += FormatLevel("parent", static_cast<ResourceType>(level)) + ".parentId";
794 joins += FormatLevel("parent", static_cast<ResourceType>(level)) + ".parentId"; 794 }
795 } 795 }
796 } 796 }
797 } 797 }
798 } 798
799 799 size_t count = 0;
800 size_t count = 0; 800
801 const DatabaseConstraints& dicomTagsConstraints = request.GetDicomTagConstraints();
802 for (size_t i = 0; i < dicomTagsConstraints.GetSize(); i++)
803 {
804 const DatabaseConstraint& constraint = dicomTagsConstraints.GetConstraint(i);
805
806 std::string comparison;
801 807
802 const DatabaseConstraints& dicomTagsConstraints = request.GetDicomTagConstraints(); 808 if (FormatComparison(comparison, formatter, constraint, count, escapeBrackets))
803 for (size_t i = 0; i < dicomTagsConstraints.GetSize(); i++) 809 {
804 { 810 std::string join;
805 const DatabaseConstraint& constraint = dicomTagsConstraints.GetConstraint(i); 811 FormatJoin(join, constraint, count);
806 812 joins += join;
807 std::string comparison; 813
814 if (!comparison.empty())
815 {
816 comparisons += " AND " + comparison;
817 }
808 818
809 if (FormatComparison(comparison, formatter, constraint, count, escapeBrackets)) 819 count ++;
810 {
811 std::string join;
812 FormatJoin(join, constraint, count);
813 joins += join;
814
815 if (!comparison.empty())
816 {
817 comparisons += " AND " + comparison;
818 }
819
820 count ++;
821 }
822 } 820 }
823 } 821 }
824 822
825 for (int level = queryLevel - 1; level >= upperLevel; level--) 823 for (int level = queryLevel - 1; level >= upperLevel; level--)
826 { 824 {