You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2009/08/04 22:51:13 UTC

svn commit: r800966 - in /lucene/solr/trunk/src/java/org/apache/solr/schema: ByteField.java DoubleField.java IntField.java LongField.java ShortField.java

Author: yonik
Date: Tue Aug  4 20:51:12 2009
New Revision: 800966

URL: http://svn.apache.org/viewvc?rev=800966&view=rev
Log:
SOLR-1270: make sure that plain numeric types produce correct transfer syntax for JSON, Python, Ruby, and other TextWriter fields

Modified:
    lucene/solr/trunk/src/java/org/apache/solr/schema/ByteField.java
    lucene/solr/trunk/src/java/org/apache/solr/schema/DoubleField.java
    lucene/solr/trunk/src/java/org/apache/solr/schema/IntField.java
    lucene/solr/trunk/src/java/org/apache/solr/schema/LongField.java
    lucene/solr/trunk/src/java/org/apache/solr/schema/ShortField.java

Modified: lucene/solr/trunk/src/java/org/apache/solr/schema/ByteField.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/schema/ByteField.java?rev=800966&r1=800965&r2=800966&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/schema/ByteField.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/schema/ByteField.java Tue Aug  4 20:51:12 2009
@@ -28,7 +28,7 @@
 import java.util.Map;
 
 /**
- * @version $Id: LongField.java 555343 2007-07-11 17:46:25Z hossman $
+ * @version $Id:$
  */
 public class ByteField extends FieldType {
   protected void init(IndexSchema schema, Map<String, String> args) {
@@ -50,7 +50,27 @@
   }
 
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
-    writer.writeByte(name, f.stringValue());
+    String s = f.stringValue();
+
+    // these values may be from a legacy lucene index, which may
+    // not be properly formatted in some output formats, or may
+    // incorrectly have a zero length.
+
+    if (s.length()==0) {
+      // zero length value means someone mistakenly indexed the value
+      // instead of simply leaving it out.  Write a null value instead of a numeric.
+      writer.writeNull(name);
+      return;
+    }
+
+    try {
+      byte val = Byte.parseByte(s);
+      writer.writeByte(name, val);
+    } catch (NumberFormatException e){
+      // can't parse - write out the contents as a string so nothing is lost and
+      // clients don't get a parse error.
+      writer.writeStr(name, s, true);
+    }
   }
 
   @Override

Modified: lucene/solr/trunk/src/java/org/apache/solr/schema/DoubleField.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/schema/DoubleField.java?rev=800966&r1=800965&r2=800966&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/schema/DoubleField.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/schema/DoubleField.java Tue Aug  4 20:51:12 2009
@@ -50,7 +50,27 @@
   }
 
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
-    writer.writeDouble(name, f.stringValue());
+    String s = f.stringValue();
+
+    // these values may be from a legacy lucene index, which may
+    // not be properly formatted in some output formats, or may
+    // incorrectly have a zero length.
+
+    if (s.length()==0) {
+      // zero length value means someone mistakenly indexed the value
+      // instead of simply leaving it out.  Write a null value instead of a numeric.
+      writer.writeNull(name);
+      return;
+    }
+
+    try {
+      double val = Double.parseDouble(s);
+      writer.writeDouble(name, val);
+    } catch (NumberFormatException e){
+      // can't parse - write out the contents as a string so nothing is lost and
+      // clients don't get a parse error.
+      writer.writeStr(name, s, true);
+    }
   }
 
 

Modified: lucene/solr/trunk/src/java/org/apache/solr/schema/IntField.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/schema/IntField.java?rev=800966&r1=800965&r2=800966&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/schema/IntField.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/schema/IntField.java Tue Aug  4 20:51:12 2009
@@ -48,22 +48,26 @@
 
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
-    int len = s.length();
-    // these values may be from a legacy lucene index, which may contain
-    // integer values padded with zeros, or a zero length value.
-    if (len>=2) {
-      char ch = s.charAt(0);
-      if ((ch=='0') || (ch=='-' && s.charAt(1)=='0')) {
-        s = Integer.toString(Integer.parseInt(s));
-      }
-    } else if (len == 0) {
+
+    // these values may be from a legacy lucene index, which may
+    // not be properly formatted in some output formats, or may
+    // incorrectly have a zero length.
+
+    if (s.length()==0) {
       // zero length value means someone mistakenly indexed the value
-      // instead of simply leaving it out.  Write a null value instead
-      // of an integer value in this case.
+      // instead of simply leaving it out.  Write a null value instead of a numeric.
       writer.writeNull(name);
       return;
     }
-    writer.writeInt(name, s);
+
+    try {
+      int val = Integer.parseInt(s);
+      writer.writeInt(name, val);
+    } catch (NumberFormatException e){
+      // can't parse - write out the contents as a string so nothing is lost and
+      // clients don't get a parse error.
+      writer.writeStr(name, s, true);
+    }
   }
 
   @Override

Modified: lucene/solr/trunk/src/java/org/apache/solr/schema/LongField.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/schema/LongField.java?rev=800966&r1=800965&r2=800966&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/schema/LongField.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/schema/LongField.java Tue Aug  4 20:51:12 2009
@@ -55,22 +55,26 @@
   @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
-    int len = s.length();
-    // these values may be from a legacy lucene index, which may contain
-    // integer values padded with zeros, or a zero length value.
-    if (len>=2) {
-      char ch = s.charAt(0);
-      if ((ch=='0') || (ch=='-' && s.charAt(1)=='0')) {
-        s = Long.toString(Long.parseLong(s));
-      }
-    } else if (len == 0) {
+
+    // these values may be from a legacy lucene index, which may
+    // not be properly formatted in some output formats, or may
+    // incorrectly have a zero length.
+
+    if (s.length()==0) {
       // zero length value means someone mistakenly indexed the value
-      // instead of simply leaving it out.  Write a null value instead
-      // of an integer value in this case.
+      // instead of simply leaving it out.  Write a null value instead of a numeric.
       writer.writeNull(name);
       return;
     }
-    writer.writeLong(name, s);
+
+    try {
+      long val = Long.parseLong(s);
+      writer.writeLong(name, val);
+    } catch (NumberFormatException e){
+      // can't parse - write out the contents as a string so nothing is lost and
+      // clients don't get a parse error.
+      writer.writeStr(name, s, true);
+    }
   }
 
   @Override

Modified: lucene/solr/trunk/src/java/org/apache/solr/schema/ShortField.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/schema/ShortField.java?rev=800966&r1=800965&r2=800966&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/schema/ShortField.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/schema/ShortField.java Tue Aug  4 20:51:12 2009
@@ -56,7 +56,27 @@
 
   @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
-    writer.writeShort(name, f.stringValue());
+    String s = f.stringValue();
+
+    // these values may be from a legacy lucene index, which may
+    // not be properly formatted in some output formats, or may
+    // incorrectly have a zero length.
+
+    if (s.length()==0) {
+      // zero length value means someone mistakenly indexed the value
+      // instead of simply leaving it out.  Write a null value instead of a numeric.
+      writer.writeNull(name);
+      return;
+    }
+
+    try {
+      short val = Short.parseShort(s);
+      writer.writeShort(name, val);
+    } catch (NumberFormatException e){
+      // can't parse - write out the contents as a string so nothing is lost and
+      // clients don't get a parse error.
+      writer.writeStr(name, s, true);
+    }
   }
 
   @Override