code: func (it *Or) Next(ctx context.Context) bool {
  	if it.currentIterator >= len(it.internalIterators) {
  		return false
  	}
  	graph.NextLogIn(it)
  	var first bool
  	for {
  		if it.currentIterator == -1 {
  			it.currentIterator = 0
  			first = true
  		}
  		curIt := it.internalIterators[it.currentIterator]
  
  		if curIt.Next(ctx) {
  			it.result = curIt.Result()
  			return graph.NextLogOut(it, true)
  		}
  
  		it.err = curIt.Err()
  		if it.err != nil {
  			return graph.NextLogOut(it, false)
  		}
  
  		if it.isShortCircuiting && !first {
  			break
  		}
  		it.currentIterator++
  		if it.currentIterator >= len(it.internalIterators) {
  			break
  		}
  	}
  
  	return graph.NextLogOut(it, false)
  }
docs: // Next advances the Or graph.iterator. Because the Or is the union of its
  // subiterators, it must produce from all subiterators -- unless it it
  // shortcircuiting, in which case, it is the first one that returns anything.