code: func (e *UpdateExec) Next(ctx context.Context, req *chunk.RecordBatch) error {
  	if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
  		span1 := span.Tracer().StartSpan("update.Next", opentracing.ChildOf(span.Context()))
  		defer span1.Finish()
  	}
  
  	req.Reset()
  	if !e.fetched {
  		err := e.fetchChunkRows(ctx)
  		if err != nil {
  			return err
  		}
  		e.fetched = true
  		e.ctx.GetSessionVars().StmtCtx.AddRecordRows(uint64(len(e.rows)))
  
  		for {
  			row, err := e.exec(e.children[0].Schema())
  			if err != nil {
  				return err
  			}
  
  			// once "row == nil" there is no more data waiting to be updated,
  			// the execution of UpdateExec is finished.
  			if row == nil {
  				break
  			}
  		}
  	}
  
  	return nil
  }
docs: // Next implements the Executor Next interface.