Skip to content

Commit 64383e1

Browse files
Copilotanidotnet
andcommitted
Add test case for OR filter duplicate results issue
Co-authored-by: anidotnet <696662+anidotnet@users.noreply.github.com>
1 parent 4f0d084 commit 64383e1

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

  • nitrite/src/test/java/org/dizitart/no2/integration/collection

nitrite/src/test/java/org/dizitart/no2/integration/collection/IssueTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@
22

33
import org.dizitart.no2.Nitrite;
44
import org.dizitart.no2.collection.Document;
5+
import org.dizitart.no2.collection.DocumentCursor;
56
import org.dizitart.no2.collection.NitriteCollection;
7+
import org.dizitart.no2.filters.Filter;
68
import org.dizitart.no2.filters.FluentFilter;
79
import org.dizitart.no2.index.IndexOptions;
810
import org.dizitart.no2.index.IndexType;
911
import org.junit.After;
1012
import org.junit.Before;
1113
import org.junit.Test;
1214

15+
import java.util.ArrayList;
16+
import java.util.Iterator;
17+
import java.util.List;
18+
1319
import static org.junit.Assert.assertEquals;
1420

1521
public class IssueTest {
@@ -47,4 +53,32 @@ public void testOriginalIssue() {
4753
assertEquals(1, collection.find(FluentFilter.where("value").lte(42L)).size());
4854
assertEquals(1, collection.find(FluentFilter.where("value").gte(42L)).size());
4955
}
56+
57+
@Test
58+
public void testMultipleIndexesOrFilterDuplicates() {
59+
NitriteCollection items = db.getCollection("items");
60+
items.createIndex(IndexOptions.indexOptions(IndexType.NON_UNIQUE), "field_a");
61+
items.createIndex(IndexOptions.indexOptions(IndexType.NON_UNIQUE), "field_b");
62+
63+
Document doc = Document.createDocument();
64+
doc.put("field_a", "A");
65+
doc.put("field_b", "B");
66+
items.insert(doc);
67+
68+
Filter aFilter = FluentFilter.where("field_a").eq("A");
69+
Filter bFilter = FluentFilter.where("field_b").eq("B");
70+
71+
Filter orFilter = Filter.or(aFilter, bFilter);
72+
73+
DocumentCursor cursor = items.find(orFilter);
74+
Iterator<Document> docIter = cursor.iterator();
75+
76+
List<Long> matches = new ArrayList<>();
77+
while (docIter.hasNext()) {
78+
Document match = docIter.next();
79+
long id = match.getId().getIdValue();
80+
matches.add(id);
81+
}
82+
assertEquals("Single document must yield single match", 1, matches.size());
83+
}
5084
}

0 commit comments

Comments
 (0)