func (e *baseExecutor) Next(ctx context.Context, req *chunk.Chunk) error {
	return nil
}
Next fills multiple rows into a chunk.
package executor
import (
	"bytes"
	"context"
	"fmt"
	"runtime"
	"strings"
	"github.com/cznic/mathutil"
	"github.com/pingcap/errors"
	"github.com/pingcap/parser/ast"
	"github.com/pingcap/parser/mysql"
	"github.com/pingcap/parser/terror"
	"github.com/pingcap/tidb/kv"
	"github.com/pingcap/tidb/sessionctx/stmtctx"
	"github.com/pingcap/tidb/sessionctx/variable"
	"github.com/pingcap/tidb/store/tikv"
	"github.com/pingcap/tidb/types"
	"github.com/pingcap/tidb/util/chunk"
	"github.com/pingcap/tidb/util/logutil"
	"github.com/pingcap/tidb/util/stringutil"
	"github.com/zhihu/zetta/pkg/codec"
	"github.com/zhihu/zetta/pkg/model"
	"github.com/zhihu/zetta/pkg/tablecodec"
	"github.com/zhihu/zetta/tablestore/infoschema"
	"github.com/zhihu/zetta/tablestore/mysql/executor/aggfuncs"
	"github.com/zhihu/zetta/tablestore/mysql/expression"
	"github.com/zhihu/zetta/tablestore/mysql/sctx"
	"github.com/zhihu/zetta/tablestore/table"
	"github.com/zhihu/zetta/tablestore/table/tables"
	"github.com/zhihu/zetta/tablestore/util"
	"github.com/zhihu/zetta/tablestore/zstore"
	"go.uber.org/zap"
)
type Executor interface {
	base() *baseExecutor
	Open(context.Context) error
	Next(ctx context.Context, req *chunk.Chunk) error
	Close() error
	Schema() *expression.Schema
}
var (
	_ Executor = &TableScanExec{}
	_ Executor = &TableDualExec{}
	_ Executor = &SimpleExec{}
	_ Executor = &BatchPointGetExecutor{}
	_ Executor = &SimpleScanExecutor{}
)
func Next(ctx context.Context, e Executor, req *chunk.Chunk) error {
	return e.Next(ctx, req)
}
type baseExecutor struct {
	ctx           sctx.Context
	id            fmt.Stringer
	schema        *expression.Schema  
	initCap       int
	maxChunkSize  int
	children      []Executor
	retFieldTypes []*types.FieldType
}
func (e *baseExecutor) base() *baseExecutor {
	return e
}
func (e *baseExecutor) Open(ctx context.Context) error {
	for _, child := range e.children {
		err := child.Open(ctx)
		if err != nil {
			return err
		}
	}
	return nil
}
func (e *baseExecutor) Close() error {
	var firstErr error
	for _, src := range e.children {
		if err := src.Close(); err != nil && firstErr == nil {
			firstErr = err
		}
	}
	return firstErr
}
func (e *baseExecutor) Schema() *expression.Schema {
	if e.schema == nil {
		return expression.NewSchema()
	}
	return e.schema
}