You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/06/02 21:05:55 UTC

svn commit: r950723 - in /lucene/dev/trunk/solr: CHANGES.txt src/java/org/apache/solr/response/TextResponseWriter.java src/test/org/apache/solr/request/JSONWriterTest.java

Author: yonik
Date: Wed Jun  2 19:05:54 2010
New Revision: 950723

URL: http://svn.apache.org/viewvc?rev=950723&view=rev
Log:
SOLR-1914: write NaN/+-Inf as strings by default

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/src/java/org/apache/solr/response/TextResponseWriter.java
    lucene/dev/trunk/solr/src/test/org/apache/solr/request/JSONWriterTest.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=950723&r1=950722&r2=950723&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Jun  2 19:05:54 2010
@@ -325,6 +325,9 @@ Bug Fixes
 * SOLR-1936: The JSON response format needed to escape unicode code point
   U+2028 - 'LINE SEPARATOR' (Robert Hofstra, yonik)
 
+* SOLR-1914: Change the JSON response format to output float/double
+  values of NaN,Infinity,-Infinity as strings. (yonik)
+
 
 Other Changes
 ----------------------

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/response/TextResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/response/TextResponseWriter.java?rev=950723&r1=950722&r2=950723&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/response/TextResponseWriter.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/response/TextResponseWriter.java Wed Jun  2 19:05:54 2010
@@ -204,14 +204,28 @@ public abstract class TextResponseWriter
   public abstract void writeFloat(String name, String val) throws IOException;
 
   public void writeFloat(String name, float val) throws IOException {
-    writeFloat(name,Float.toString(val));
+    String s = Float.toString(val);
+    // If it's not a normal number, write the value as a string instead.
+    // The following test also handles NaN since comparisons are always false.
+    if (val > Float.NEGATIVE_INFINITY && val < Float.POSITIVE_INFINITY) {
+      writeFloat(name,s);
+    } else {
+      writeStr(name,s,false);
+    }
   }
 
   /** if this form of the method is called, val is the Java string form of a double */
   public abstract void writeDouble(String name, String val) throws IOException;
 
   public void writeDouble(String name, double val) throws IOException {
-    writeDouble(name,Double.toString(val));
+    String s = Double.toString(val);
+    // If it's not a normal number, write the value as a string instead.
+    // The following test also handles NaN since comparisons are always false.
+    if (val > Double.NEGATIVE_INFINITY && val < Double.POSITIVE_INFINITY) {
+      writeDouble(name,s);
+    } else {
+      writeStr(name,s,false);
+    }
   }
 
   public abstract void writeDate(String name, Date val) throws IOException;

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/request/JSONWriterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/request/JSONWriterTest.java?rev=950723&r1=950722&r2=950723&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/request/JSONWriterTest.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/request/JSONWriterTest.java Wed Jun  2 19:05:54 2010
@@ -61,6 +61,11 @@ public class JSONWriterTest extends Solr
     w.write(buf, req, rsp);
     assertEquals(buf.toString(), "{'data1'=>(0.0/0.0),'data2'=>-(1.0/0.0),'data3'=>(1.0/0.0)}");
 
+    w = new JSONResponseWriter();
+    buf = new StringWriter();
+    w.write(buf, req, rsp);
+    assertEquals(buf.toString(), "{\"data1\":\"NaN\",\"data2\":\"-Infinity\",\"data3\":\"Infinity\"}");
+
   }
 
   @Test