check for null copyField source, delay some allocations

git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@551060 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yonik Seeley 2007-06-27 05:52:02 +00:00
parent 89bf821efe
commit 951dab2048
1 changed files with 8 additions and 10 deletions

View File

@ -43,7 +43,7 @@ import org.apache.solr.schema.SchemaField;
public class DocumentBuilder { public class DocumentBuilder {
private final IndexSchema schema; private final IndexSchema schema;
private Document doc; private Document doc;
private HashMap<String,String> map = new HashMap<String,String>(); private HashMap<String,String> map;
public DocumentBuilder(IndexSchema schema) { public DocumentBuilder(IndexSchema schema) {
this.schema = schema; this.schema = schema;
@ -51,7 +51,7 @@ public class DocumentBuilder {
public void startDoc() { public void startDoc() {
doc = new Document(); doc = new Document();
map.clear(); map = new HashMap<String,String>();
} }
protected void addSingleField(SchemaField sfield, String val, float boost) { protected void addSingleField(SchemaField sfield, String val, float boost) {
@ -69,11 +69,6 @@ public class DocumentBuilder {
+ ": first='" + oldValue + "' second='" + val + "'"); + ": first='" + oldValue + "' second='" + val + "'");
} }
} }
if( doc == null ) {
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
"must call startDoc() before adding fields!" );
}
// field.setBoost(boost); // field.setBoost(boost);
doc.add(field); doc.add(field);
@ -122,18 +117,21 @@ public class DocumentBuilder {
// Check for all required fields -- Note, all fields with a // Check for all required fields -- Note, all fields with a
// default value are defacto 'required' fields. // default value are defacto 'required' fields.
List<String> missingFields = new ArrayList<String>( schema.getRequiredFields().size() ); List<String> missingFields = null;
for (SchemaField field : schema.getRequiredFields()) { for (SchemaField field : schema.getRequiredFields()) {
if (doc.getField(field.getName() ) == null) { if (doc.getField(field.getName() ) == null) {
if (field.getDefaultValue() != null) { if (field.getDefaultValue() != null) {
doc.add( field.createField( field.getDefaultValue(), 1.0f ) ); doc.add( field.createField( field.getDefaultValue(), 1.0f ) );
} else { } else {
if (missingFields==null) {
missingFields = new ArrayList<String>(1);
}
missingFields.add(field.getName()); missingFields.add(field.getName());
} }
} }
} }
if (missingFields.size() > 0) { if (missingFields != null) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
// add the uniqueKey if possible // add the uniqueKey if possible
if( schema.getUniqueKeyField() != null ) { if( schema.getUniqueKeyField() != null ) {
@ -181,7 +179,7 @@ public class DocumentBuilder {
// Make sure it has the correct number // Make sure it has the correct number
Collection<Object> vals = doc.getFieldValues( name ); Collection<Object> vals = doc.getFieldValues( name );
if( vals.size() > 1 && !sfield.multiValued() ) { if(vals.size() > 1 && sfield!=null && !sfield.multiValued() ) {
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
"ERROR: multiple values encountered for non multiValued field " + "ERROR: multiple values encountered for non multiValued field " +
sfield.getName() + ": " +vals.toString() ); sfield.getName() + ": " +vals.toString() );