Author: yonik
Date: Thu Jun 19 14:50:53 2008
New Revision: 669712

URL: http://svn.apache.org/viewvc?rev=669712&view=rev
Log:
SOLR-424: when writing response, gracefully handle invalid zero length int/long 
field values in the index

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

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=669712&r1=669711&r2=669712&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 Thu Jun 19 
14:50:53 2008
@@ -49,11 +49,19 @@
   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) {
+      // 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.
+      writer.writeNull(name);
+      return;
     }
     writer.writeInt(name, s);
   }

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=669712&r1=669711&r2=669712&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 Thu Jun 19 
14:50:53 2008
@@ -52,8 +52,25 @@
     xmlWriter.writeLong(name, f.stringValue());
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) 
throws IOException {
-    writer.writeLong(name, f.stringValue());
+    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) {
+      // 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.
+      writer.writeNull(name);
+      return;
+    }
+    writer.writeLong(name, s);
   }
 
   @Override


Reply via email to