You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2019/03/27 16:25:15 UTC

[lucene-solr] branch branch_8x updated: LUCENE-8741: Fix ClassCastException in ValueSource.fromDoubleValuesSource()

This is an automated email from the ASF dual-hosted git repository.

romseygeek pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new b1edfc5  LUCENE-8741: Fix ClassCastException in ValueSource.fromDoubleValuesSource()
b1edfc5 is described below

commit b1edfc5ef26b2ade2e7c6d012e4f1f438a0b4173
Author: Alan Woodward <ro...@apache.org>
AuthorDate: Wed Mar 27 16:08:25 2019 +0000

    LUCENE-8741: Fix ClassCastException in ValueSource.fromDoubleValuesSource()
---
 lucene/CHANGES.txt                                                  | 4 ++++
 .../src/java/org/apache/lucene/queries/function/ValueSource.java    | 3 +--
 .../test/org/apache/lucene/queries/function/TestValueSources.java   | 6 ++++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 52e76a5..1ce06d7 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -43,6 +43,10 @@ Bug fixes
   matching.  This behaviour can be disabled if users are more interested
   in speed rather than accuracy of matching. (Alan Woodward, Jim Ferenczi)
 
+* LUCENE-8741: ValueSource.fromDoubleValuesSource() was casting to
+  Scorer instead of Scorable, leading to ClassCastExceptions (Markus Jelsma,
+  Alan Woodward)
+
 Improvements
 
 * LUCENE-8673: Use radix partitioning when merging dimensional points instead
diff --git a/lucene/queries/src/java/org/apache/lucene/queries/function/ValueSource.java b/lucene/queries/src/java/org/apache/lucene/queries/function/ValueSource.java
index 0cbfe89..1ba3580 100644
--- a/lucene/queries/src/java/org/apache/lucene/queries/function/ValueSource.java
+++ b/lucene/queries/src/java/org/apache/lucene/queries/function/ValueSource.java
@@ -32,7 +32,6 @@ import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.LongValues;
 import org.apache.lucene.search.LongValuesSource;
 import org.apache.lucene.search.Scorable;
-import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.SimpleFieldComparator;
 import org.apache.lucene.search.SortField;
 
@@ -285,7 +284,7 @@ public abstract class ValueSource {
 
     @Override
     public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
-      Scorer scorer = (Scorer) context.get("scorer");
+      Scorable scorer = (Scorable) context.get("scorer");
       DoubleValues scores = scorer == null ? null : DoubleValuesSource.fromScorer(scorer);
 
       IndexSearcher searcher = (IndexSearcher) context.get("searcher");
diff --git a/lucene/queries/src/test/org/apache/lucene/queries/function/TestValueSources.java b/lucene/queries/src/test/org/apache/lucene/queries/function/TestValueSources.java
index 0b84c93..ba0e470 100644
--- a/lucene/queries/src/test/org/apache/lucene/queries/function/TestValueSources.java
+++ b/lucene/queries/src/test/org/apache/lucene/queries/function/TestValueSources.java
@@ -38,6 +38,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.queries.function.docvalues.FloatDocValues;
 import org.apache.lucene.queries.function.valuesource.*;
 import org.apache.lucene.search.CheckHits;
+import org.apache.lucene.search.DoubleValuesSource;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.ScoreDoc;
@@ -580,6 +581,11 @@ public class TestValueSources extends LuceneTestCase {
     assertNull(source2.searcher);
 
   }
+
+  public void testBuildingFromDoubleValues() throws Exception {
+    DoubleValuesSource dvs = ValueSource.fromDoubleValuesSource(DoubleValuesSource.fromDoubleField("double")).asDoubleValuesSource();
+    assertHits(new FunctionQuery(ValueSource.fromDoubleValuesSource(dvs)), new float[] { 3.63f, 5.65f });
+  }
     
   /** 
    * Asserts that for every doc, the {@link FunctionValues#exists} value