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;