Mercurial > hg > orthanc
comparison OrthancServer/ServerContext.cpp @ 3033:5da6d1063d8f db-changes
effectively replacing LookupResource by DatabaseLookup in searches
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 19 Dec 2018 13:58:28 +0100 |
parents | 18a2d196414b |
children | 54e422fe31ce |
comparison
equal
deleted
inserted
replaced
3032:19ebb606910d | 3033:5da6d1063d8f |
---|---|
772 #endif | 772 #endif |
773 } | 773 } |
774 | 774 |
775 | 775 |
776 void ServerContext::Apply(ILookupVisitor& visitor, | 776 void ServerContext::Apply(ILookupVisitor& visitor, |
777 const ::Orthanc::LookupResource& lookup, | 777 const DatabaseLookup& lookup, |
778 const DatabaseLookup& lookup2, | 778 ResourceType queryLevel, |
779 size_t since, | 779 size_t since, |
780 size_t limit) | 780 size_t limit) |
781 { | 781 { |
782 LookupMode mode; | 782 LookupMode mode; |
783 unsigned int databaseLimit; | 783 unsigned int databaseLimit; |
805 throw OrthancException(ErrorCode_ParameterOutOfRange, | 805 throw OrthancException(ErrorCode_ParameterOutOfRange, |
806 "Configuration option \"StorageAccessOnFind\" " | 806 "Configuration option \"StorageAccessOnFind\" " |
807 "should be \"Always\", \"Never\" or \"Answers\": " + value); | 807 "should be \"Always\", \"Never\" or \"Answers\": " + value); |
808 } | 808 } |
809 | 809 |
810 if (lookup.GetLevel() == ResourceType_Instance) | 810 if (queryLevel == ResourceType_Instance) |
811 { | 811 { |
812 databaseLimit = lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindInstances", 0); | 812 databaseLimit = lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindInstances", 0); |
813 } | 813 } |
814 else | 814 else |
815 { | 815 { |
816 databaseLimit = lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindResults", 0); | 816 databaseLimit = lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindResults", 0); |
817 } | 817 } |
818 } | 818 } |
819 | 819 |
820 | |
821 std::vector<std::string> resources, instances; | 820 std::vector<std::string> resources, instances; |
822 GetIndex().FindCandidates(resources, instances, lookup); | 821 |
823 | 822 const size_t lookupLimit = (databaseLimit == 0 ? 0 : databaseLimit + 1); |
824 bool complete = true; | 823 GetIndex().ApplyLookupResources(resources, instances, lookup, queryLevel, lookupLimit); |
825 | 824 |
826 #if 1 | 825 bool complete = (databaseLimit == 0 || |
827 { | 826 resources.size() > databaseLimit); |
828 std::vector<std::string> resources2, instances2; | 827 |
829 | |
830 size_t lookupLimit = (databaseLimit == 0 ? 0 : databaseLimit + 1); | |
831 GetIndex().ApplyLookupResources(resources2, instances2, lookup2, lookup.GetLevel(), lookupLimit); | |
832 | |
833 if (databaseLimit != 0 && | |
834 resources2.size() > databaseLimit) | |
835 { | |
836 complete = false; | |
837 } | |
838 | |
839 // Sanity checks | |
840 std::set<std::string> r; | |
841 for (size_t i = 0; i < resources2.size(); i++) | |
842 { | |
843 r.insert(resources2[i]); | |
844 } | |
845 | |
846 printf("%d %d\n", resources2.size(), resources.size()); | |
847 assert(resources2.size() >= resources.size()); | |
848 | |
849 for (size_t i = 0; i < resources.size(); i++) | |
850 { | |
851 assert(r.find(resources[i]) != r.end()); | |
852 } | |
853 } | |
854 #endif | |
855 | |
856 LOG(INFO) << "Number of candidate resources after fast DB filtering on main DICOM tags: " << resources.size(); | 828 LOG(INFO) << "Number of candidate resources after fast DB filtering on main DICOM tags: " << resources.size(); |
857 | 829 |
858 assert(resources.size() == instances.size()); | 830 assert(resources.size() == instances.size()); |
859 | 831 |
860 size_t countResults = 0; | 832 size_t countResults = 0; |