You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2012/08/31 01:29:01 UTC

svn commit: r1379225 - in /lucene/dev/trunk/solr: CHANGES.txt core/src/java/org/apache/solr/search/ValueSourceParser.java core/src/test/org/apache/solr/search/QueryEqualityTest.java

Author: hossman
Date: Thu Aug 30 23:29:00 2012
New Revision: 1379225

URL: http://svn.apache.org/viewvc?rev=1379225&view=rev
Log:
SOLR-2768: new "mod(x,y)" function for computing the modulus of two value sources

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1379225&r1=1379224&r2=1379225&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Thu Aug 30 23:29:00 2012
@@ -48,6 +48,9 @@ New Features
 * SOLR-3670: New CountFieldValuesUpdateProcessorFactory makes it easy to index 
   the number of values in another field for later use at query time. (hossman)
 
+* SOLR-2768: new "mod(x,y)" function for computing the modulus of two value 
+  sources. (hossman)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1379225&r1=1379224&r2=1379225&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java Thu Aug 30 23:29:00 2012
@@ -177,6 +177,23 @@ public abstract class ValueSourceParser 
         return new DivFloatFunction(a, b);
       }
     });
+    addParser("mod", new ValueSourceParser() {
+      @Override
+      public ValueSource parse(FunctionQParser fp) throws ParseException {
+        ValueSource a = fp.parseValueSource();
+        ValueSource b = fp.parseValueSource();
+        return new DualFloatFunction(a, b) {
+          @Override
+          protected String name() {
+            return "mod";
+          }
+          @Override
+          protected float func(int doc, FunctionValues aVals, FunctionValues bVals) {
+            return aVals.floatVal(doc) % bVals.floatVal(doc);
+          }
+        };
+      }
+    });
     addParser("map", new ValueSourceParser() {
       @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java?rev=1379225&r1=1379224&r2=1379225&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java Thu Aug 30 23:29:00 2012
@@ -329,6 +329,13 @@ public class QueryEqualityTest extends S
                      "div(field(foo_i), sub(4,bar_i))");
 
   }
+  public void testFuncMod() throws Exception {
+    assertFuncEquals("mod(5,4)", "mod(5, 4)");
+    assertFuncEquals("mod(foo_i,4)", "mod(foo_i, 4)", 
+                     "mod(field('foo_i'), 4)");
+    assertFuncEquals("mod(foo_i,sub(4,field('bar_i')))", 
+                     "mod(field(foo_i), sub(4,bar_i))");
+  }
   public void testFuncMap() throws Exception {
     assertFuncEquals("map(field(foo_i), 0, 45, 100)",
                      "map(foo_i, 0.0, 45, 100)");