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