You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2017/04/29 11:36:47 UTC

lucene-solr:branch_6x: LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x abacb2fe6 -> 02503de8d


LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/02503de8
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/02503de8
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/02503de8

Branch: refs/heads/branch_6x
Commit: 02503de8d4dba564f2e6bd3f27676b98ede32539
Parents: abacb2f
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Sat Apr 29 13:35:24 2017 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Sat Apr 29 14:35:56 2017 +0300

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  3 ++
 .../search/join/ToParentBlockJoinSortField.java | 26 +++++++++++
 .../search/join/TestBlockJoinSorting.java       | 47 +++++++++++++++-----
 .../search/join/TestCloudNestedDocsSort.java    |  4 +-
 .../solr/search/join/TestNestedDocsSort.java    |  1 -
 5 files changed, 67 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02503de8/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index fc705ac..45c794f 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -20,6 +20,9 @@ Bug Fixes
 * LUCENE-7808: Fixed PayloadScoreQuery and SpanPayloadCheckQuery
   .equals and .hashCode methods.  (Erik Hatcher)
 
+* LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField 
+  (Mikhail Khludnev)
+
 Improvements
 
 * LUCENE-7782: OfflineSorter now passes the total number of items it

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02503de8/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinSortField.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinSortField.java b/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinSortField.java
index da04456..68f447b 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinSortField.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinSortField.java
@@ -239,4 +239,30 @@ public class ToParentBlockJoinSortField extends SortField {
       }
     };
   }
+
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = super.hashCode();
+    result = prime * result + ((childFilter == null) ? 0 : childFilter.hashCode());
+    result = prime * result + (order ? 1231 : 1237);
+    result = prime * result + ((parentFilter == null) ? 0 : parentFilter.hashCode());
+    return result;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) return true;
+    if (!super.equals(obj)) return false;
+    if (getClass() != obj.getClass()) return false;
+    ToParentBlockJoinSortField other = (ToParentBlockJoinSortField) obj;
+    if (childFilter == null) {
+      if (other.childFilter != null) return false;
+    } else if (!childFilter.equals(other.childFilter)) return false;
+    if (order != other.order) return false;
+    if (parentFilter == null) {
+      if (other.parentFilter != null) return false;
+    } else if (!parentFilter.equals(other.parentFilter)) return false;
+    return true;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02503de8/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java
index 8b2a0bd..0915c27 100644
--- a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java
+++ b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinSorting.java
@@ -16,6 +16,10 @@
  */
 package org.apache.lucene.search.join;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -37,9 +41,6 @@ import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.LuceneTestCase;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  */
 public class TestBlockJoinSorting extends LuceneTestCase {
@@ -238,9 +239,10 @@ public class TestBlockJoinSorting extends LuceneTestCase {
     assertEquals("i", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
 
     // Sort by field ascending, order last
-    sortField = new ToParentBlockJoinSortField(
+    sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
         "field2", SortField.Type.STRING, false, true, parentFilter, childFilter
-    );
+    ));
+
     sort = new Sort(sortField);
     topDocs = searcher.search(query, 5, sort);
     assertEquals(7, topDocs.totalHits);
@@ -257,9 +259,9 @@ public class TestBlockJoinSorting extends LuceneTestCase {
     assertEquals("k", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
 
     // Sort by field descending, order last
-    sortField = new ToParentBlockJoinSortField(
+    sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
         "field2", SortField.Type.STRING, true, parentFilter, childFilter
-    );
+    ));
     sort = new Sort(sortField);
     topDocs = searcher.search(query, 5, sort);
     assertEquals(topDocs.totalHits, 7);
@@ -274,17 +276,19 @@ public class TestBlockJoinSorting extends LuceneTestCase {
     assertEquals("i", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[3]).fields[0]).utf8ToString());
     assertEquals(11, topDocs.scoreDocs[4].doc);
     assertEquals("g", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
-
+    
     // Sort by field descending, order last, sort filter (filter_1:T)
-    childFilter = new QueryBitSetProducer(new TermQuery((new Term("filter_1", "T"))));
+    BitSetProducer childFilter1T = new QueryBitSetProducer(new TermQuery((new Term("filter_1", "T"))));
     query = new ToParentBlockJoinQuery(
         new TermQuery((new Term("filter_1", "T"))),
         parentFilter,
         ScoreMode.None
     );
-    sortField = new ToParentBlockJoinSortField(
-        "field2", SortField.Type.STRING, true, parentFilter, childFilter
-    );
+ 
+    sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
+        "field2", SortField.Type.STRING, true, parentFilter, childFilter1T
+    ));
+    
     sort = new Sort(sortField);
     topDocs = searcher.search(query, 5, sort);
     assertEquals(6, topDocs.totalHits);
@@ -300,8 +304,27 @@ public class TestBlockJoinSorting extends LuceneTestCase {
     assertEquals(7, topDocs.scoreDocs[4].doc);
     assertEquals("e", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
 
+    sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
+        "field2", SortField.Type.STRING, true, 
+              new QueryBitSetProducer(new TermQuery(new Term("__type", "another")))
+        , childFilter1T
+    ));
+
     searcher.getIndexReader().close();
     dir.close();
   }
+ 
+  private ToParentBlockJoinSortField notEqual(ToParentBlockJoinSortField old, Supplier<ToParentBlockJoinSortField> create) {
+    final ToParentBlockJoinSortField newObj = create.get();
+    assertFalse(old.equals(newObj));
+    assertNotSame( old, newObj);
+    
+    final ToParentBlockJoinSortField bro = create.get();
+    assertEquals(newObj, bro);
+    assertEquals(newObj.hashCode(), bro.hashCode());
+    assertNotSame( bro, newObj);
 
+    assertFalse(old.equals(bro));
+    return newObj;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02503de8/solr/core/src/test/org/apache/solr/search/join/TestCloudNestedDocsSort.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/join/TestCloudNestedDocsSort.java b/solr/core/src/test/org/apache/solr/search/join/TestCloudNestedDocsSort.java
index 22aa052..5cd49aa 100644
--- a/solr/core/src/test/org/apache/solr/search/join/TestCloudNestedDocsSort.java
+++ b/solr/core/src/test/org/apache/solr/search/join/TestCloudNestedDocsSort.java
@@ -39,6 +39,8 @@ import org.apache.solr.common.cloud.ZkStateReader;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import com.carrotsearch.randomizedtesting.annotations.Repeat;
+
 public class TestCloudNestedDocsSort extends SolrCloudTestCase {
 
   private static ArrayList<String> vals = new ArrayList<>();
@@ -113,7 +115,7 @@ public class TestCloudNestedDocsSort extends SolrCloudTestCase {
     }
   }
 
-  @Test
+  @Test @Repeat(iterations=2)
   public void test() throws SolrServerException, IOException {
     final boolean asc = random().nextBoolean();
     final String dir = asc ? "asc": "desc";

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02503de8/solr/core/src/test/org/apache/solr/search/join/TestNestedDocsSort.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/join/TestNestedDocsSort.java b/solr/core/src/test/org/apache/solr/search/join/TestNestedDocsSort.java
index 3e78965..958dc79 100644
--- a/solr/core/src/test/org/apache/solr/search/join/TestNestedDocsSort.java
+++ b/solr/core/src/test/org/apache/solr/search/join/TestNestedDocsSort.java
@@ -45,7 +45,6 @@ public class TestNestedDocsSort extends SolrTestCaseJ4 {
       parseAssertNe("childfield(name_s1,$q) asc", "childfield(surname_s1,$q2) desc");
     }
     
-    @AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/LUCENE-7798")
     public void testEqualityUpToBlockJoin(){
       parseAssertNe("childfield(name_s1,$q) asc","childfield(name_s1,$q2) asc");
     }