func (t *ProcessIndexableTable) Underlying() sql.Table {
	return t.IndexableTable
}
Underlying implements sql.TableWrapper interface.
package plan
import (
	"io"
	"github.com/src-d/go-mysql-server/sql"
)
type QueryProcess struct {
	UnaryNode
	Notify NotifyFunc
}
type NotifyFunc func()
func NewQueryProcess(node sql.Node, notify NotifyFunc) *QueryProcess {
	return &QueryProcess{UnaryNode{Child: node}, notify}
}
func (p *QueryProcess) WithChildren(children ...sql.Node) (sql.Node, error) {
	if len(children) != 1 {
		return nil, sql.ErrInvalidChildrenNumber.New(p, len(children), 1)
	}
	return NewQueryProcess(children[0], p.Notify), nil
}
func (p *QueryProcess) RowIter(ctx *sql.Context) (sql.RowIter, error) {
	iter, err := p.Child.RowIter(ctx)
	if err != nil {
		return nil, err
	}
	return &trackedRowIter{iter: iter, onDone: p.Notify}, nil
}
func (p *QueryProcess) String() string { return p.Child.String() }
type ProcessIndexableTable struct {
	sql.IndexableTable
	OnPartitionDone  NamedNotifyFunc
	OnPartitionStart NamedNotifyFunc
	OnRowNext        NamedNotifyFunc
}
func NewProcessIndexableTable(t sql.IndexableTable, onPartitionDone, onPartitionStart, OnRowNext NamedNotifyFunc) *ProcessIndexableTable {
	return &ProcessIndexableTable{t, onPartitionDone, onPartitionStart, OnRowNext}
}