Mercurial > hg > orthanc
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 { |