comparison UnitTestsSources/ServerIndexTests.cpp @ 3036:8fd203510d8b db-changes

moving LookupIdentifierQuery to the graveyard
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 19 Dec 2018 16:27:07 +0100
parents 8336204d95dc
children ce272138f15e
comparison
equal deleted inserted replaced
3034:54e422fe31ce 3036:8fd203510d8b
36 36
37 #include "../Core/FileStorage/FilesystemStorage.h" 37 #include "../Core/FileStorage/FilesystemStorage.h"
38 #include "../Core/FileStorage/MemoryStorageArea.h" 38 #include "../Core/FileStorage/MemoryStorageArea.h"
39 #include "../Core/Logging.h" 39 #include "../Core/Logging.h"
40 #include "../OrthancServer/SQLiteDatabaseWrapper.h" 40 #include "../OrthancServer/SQLiteDatabaseWrapper.h"
41 #include "../OrthancServer/Search/LookupIdentifierQuery.h"
42 #include "../OrthancServer/ServerContext.h" 41 #include "../OrthancServer/ServerContext.h"
43 #include "../OrthancServer/ServerIndex.h"
44 #include "../OrthancServer/ServerToolbox.h" 42 #include "../OrthancServer/ServerToolbox.h"
45 43
46 #include <ctype.h> 44 #include <ctype.h>
47 #include <algorithm> 45 #include <algorithm>
48 46
249 throw OrthancException(ErrorCode_InternalError); 247 throw OrthancException(ErrorCode_InternalError);
250 } 248 }
251 } 249 }
252 250
253 251
254 void DoLookup(std::list<std::string>& result, 252 void DoLookupIdentifier(std::vector<std::string>& result,
255 ResourceType level, 253 ResourceType level,
256 const DicomTag& tag, 254 const DicomTag& tag,
257 const std::string& value) 255 ConstraintType type,
258 { 256 const std::string& value)
259 LookupIdentifierQuery query(level); 257 {
260 query.AddConstraint(tag, IdentifierConstraintType_Equal, value); 258 assert(ServerToolbox::IsIdentifier(tag, level));
261 query.Apply(result, *index_); 259
262 } 260 DicomTagConstraint c(tag, type, value, true, true);
263 261
262 std::vector<DatabaseConstraint> lookup;
263 lookup.push_back(DatabaseConstraint(c, level, DicomTagType_Identifier));
264
265 index_->ApplyLookupResources(result, NULL, lookup, level, 0 /* no limit */);
266 }
267
268
269 void DoLookupIdentifier2(std::vector<std::string>& result,
270 ResourceType level,
271 const DicomTag& tag,
272 ConstraintType type1,
273 const std::string& value1,
274 ConstraintType type2,
275 const std::string& value2)
276 {
277 assert(ServerToolbox::IsIdentifier(tag, level));
278
279 DicomTagConstraint c1(tag, type1, value1, true, true);
280 DicomTagConstraint c2(tag, type2, value2, true, true);
281
282 std::vector<DatabaseConstraint> lookup;
283 lookup.push_back(DatabaseConstraint(c1, level, DicomTagType_Identifier));
284 lookup.push_back(DatabaseConstraint(c2, level, DicomTagType_Identifier));
285
286 index_->ApplyLookupResources(result, NULL, lookup, level, 0 /* no limit */);
287 }
264 }; 288 };
265 } 289 }
266 290
267 291
268 INSTANTIATE_TEST_CASE_P(DatabaseWrapperName, 292 INSTANTIATE_TEST_CASE_P(DatabaseWrapperName,
714 index_->SetIdentifierTag(a[0], DICOM_TAG_STUDY_INSTANCE_UID, "0"); 738 index_->SetIdentifierTag(a[0], DICOM_TAG_STUDY_INSTANCE_UID, "0");
715 index_->SetIdentifierTag(a[1], DICOM_TAG_STUDY_INSTANCE_UID, "1"); 739 index_->SetIdentifierTag(a[1], DICOM_TAG_STUDY_INSTANCE_UID, "1");
716 index_->SetIdentifierTag(a[2], DICOM_TAG_STUDY_INSTANCE_UID, "0"); 740 index_->SetIdentifierTag(a[2], DICOM_TAG_STUDY_INSTANCE_UID, "0");
717 index_->SetIdentifierTag(a[3], DICOM_TAG_SERIES_INSTANCE_UID, "0"); 741 index_->SetIdentifierTag(a[3], DICOM_TAG_SERIES_INSTANCE_UID, "0");
718 742
719 std::list<std::string> s; 743 std::vector<std::string> s;
720 744
721 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "0"); 745 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "0");
722 ASSERT_EQ(2u, s.size()); 746 ASSERT_EQ(2u, s.size());
723 ASSERT_TRUE(std::find(s.begin(), s.end(), "a") != s.end()); 747 ASSERT_TRUE(std::find(s.begin(), s.end(), "a") != s.end());
724 ASSERT_TRUE(std::find(s.begin(), s.end(), "c") != s.end()); 748 ASSERT_TRUE(std::find(s.begin(), s.end(), "c") != s.end());
725 749
726 DoLookup(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, "0"); 750 DoLookupIdentifier(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, ConstraintType_Equal, "0");
727 ASSERT_EQ(1u, s.size()); 751 ASSERT_EQ(1u, s.size());
728 ASSERT_TRUE(std::find(s.begin(), s.end(), "d") != s.end()); 752 ASSERT_TRUE(std::find(s.begin(), s.end(), "d") != s.end());
729 753
730 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "1"); 754 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "1");
731 ASSERT_EQ(1u, s.size()); 755 ASSERT_EQ(1u, s.size());
732 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); 756 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end());
733 757
734 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "1"); 758 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "1");
735 ASSERT_EQ(1u, s.size()); 759 ASSERT_EQ(1u, s.size());
736 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); 760 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end());
737 761
738 DoLookup(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, "1"); 762 DoLookupIdentifier(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, ConstraintType_Equal, "1");
739 ASSERT_EQ(0u, s.size()); 763 ASSERT_EQ(0u, s.size());
740 764
741 { 765 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "0");
742 LookupIdentifierQuery query(ResourceType_Study); 766 ASSERT_EQ(3u, s.size());
743 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "0"); 767
744 query.Apply(s, *index_); 768 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "1");
745 ASSERT_EQ(3u, s.size()); 769 ASSERT_EQ(1u, s.size());
746 } 770
747 771 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "2");
748 { 772 ASSERT_EQ(0u, s.size());
749 LookupIdentifierQuery query(ResourceType_Study); 773
750 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "0"); 774 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID,
751 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_SmallerOrEqual, "0"); 775 ConstraintType_GreaterOrEqual, "0", ConstraintType_SmallerOrEqual, "0");
752 query.Apply(s, *index_); 776 ASSERT_EQ(2u, s.size());
753 ASSERT_EQ(2u, s.size()); 777
754 } 778 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID,
755 779 ConstraintType_GreaterOrEqual, "1", ConstraintType_SmallerOrEqual, "1");
756 { 780 ASSERT_EQ(1u, s.size());
757 LookupIdentifierQuery query(ResourceType_Study); 781
758 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "1"); 782 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID,
759 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_SmallerOrEqual, "1"); 783 ConstraintType_GreaterOrEqual, "0", ConstraintType_SmallerOrEqual, "1");
760 query.Apply(s, *index_); 784 ASSERT_EQ(3u, s.size());
761 ASSERT_EQ(1u, s.size());
762 }
763
764 {
765 LookupIdentifierQuery query(ResourceType_Study);
766 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "1");
767 query.Apply(s, *index_);
768 ASSERT_EQ(1u, s.size());
769 }
770
771 {
772 LookupIdentifierQuery query(ResourceType_Study);
773 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "2");
774 query.Apply(s, *index_);
775 ASSERT_EQ(0u, s.size());
776 }
777 } 785 }
778 786
779 787
780 788
781 TEST(ServerIndex, AttachmentRecycling) 789 TEST(ServerIndex, AttachmentRecycling)
856 context.Stop(); 864 context.Stop();
857 db.Close(); 865 db.Close();
858 } 866 }
859 867
860 868
861 TEST(LookupIdentifierQuery, NormalizeIdentifier) 869 TEST(ServerIndex, NormalizeIdentifier)
862 { 870 {
863 ASSERT_EQ("H^L.LO", ServerToolbox::NormalizeIdentifier(" Hé^l.LO %_ ")); 871 ASSERT_EQ("H^L.LO", ServerToolbox::NormalizeIdentifier(" Hé^l.LO %_ "));
864 ASSERT_EQ("1.2.840.113619.2.176.2025", ServerToolbox::NormalizeIdentifier(" 1.2.840.113619.2.176.2025 ")); 872 ASSERT_EQ("1.2.840.113619.2.176.2025", ServerToolbox::NormalizeIdentifier(" 1.2.840.113619.2.176.2025 "));
865 } 873 }
866 874