Github user dsmiley commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/385#discussion_r191983681
  
    --- Diff: solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java 
---
    @@ -175,69 +172,83 @@ public String getHashableId() {
         return id;
       }
     
    -  public boolean isBlock() {
    -    return solrDoc.hasChildDocuments();
    +  /**
    +   * @return String id to hash
    +   */
    +  public String getHashableId() {
    +    return getHashableId(solrDoc);
       }
     
    -  @Override
    -  public Iterator<Document> iterator() {
    -    return new Iterator<Document>() {
    -      Iterator<SolrInputDocument> iter;
    -
    -      {
    -        List<SolrInputDocument> all = flatten(solrDoc);
    -
    -        String idField = getHashableId();
    -
    -        boolean isVersion = version != 0;
    -
    -        for (SolrInputDocument sdoc : all) {
    -          sdoc.setField(IndexSchema.ROOT_FIELD_NAME, idField);
    -          if(isVersion) sdoc.setField(CommonParams.VERSION_FIELD, version);
    -          // TODO: if possible concurrent modification exception (if 
SolrInputDocument not cloned and is being forwarded to replicas)
    -          // then we could add this field to the generated lucene document 
instead.
    -        }
    -
    -        iter = all.iterator();
    -     }
    +  public List<SolrInputDocument> computeFlattenedDocs() {
    +    List<SolrInputDocument> all = flatten(solrDoc);
     
    -      @Override
    -      public boolean hasNext() {
    -        return iter.hasNext();
    -      }
    +    String rootId = getHashableId();
     
    -      @Override
    -      public Document next() {
    -        return DocumentBuilder.toDocument(iter.next(), req.getSchema());
    -      }
    +    boolean isVersion = version != 0;
     
    -      @Override
    -      public void remove() {
    -        throw new UnsupportedOperationException();
    +    for (SolrInputDocument sdoc : all) {
    +      if (all.size() > 1) {
    +        sdoc.setField(IndexSchema.ROOT_FIELD_NAME, rootId);
           }
    -    };
    +      if(isVersion) sdoc.setField(CommonParams.VERSION_FIELD, version);
    +      // TODO: if possible concurrent modification exception (if 
SolrInputDocument not cloned and is being forwarded to replicas)
    +      // then we could add this field to the generated lucene document 
instead.
    +    }
    +    return all;
       }
     
       private List<SolrInputDocument> flatten(SolrInputDocument root) {
    --- End diff --
    
    note that if cmd.isInplaceUpdate(), then there is no flattening to be done 
-- or at least, it's an error.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to