code: func (e *TableDualExec) Next(ctx context.Context, req *chunk.RecordBatch) error {
  	if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
  		span1 := span.Tracer().StartSpan("tableDual.Next", opentracing.ChildOf(span.Context()))
  		defer span1.Finish()
  	}
  	if e.runtimeStats != nil {
  		start := time.Now()
  		defer func() { e.runtimeStats.Record(time.Since(start), req.NumRows()) }()
  	}
  	req.Reset()
  	if e.numReturned >= e.numDualRows {
  		return nil
  	}
  	if e.Schema().Len() == 0 {
  		req.SetNumVirtualRows(1)
  	} else {
  		for i := range e.Schema().Columns {
  			req.AppendNull(i)
  		}
  	}
  	e.numReturned = e.numDualRows
  	return nil
  }
docs: // Next implements the Executor Next interface.