func (f *First) Merge(ctx *sql.Context, buffer, partial sql.Row) error {
	return nil
}
Merge implements the Aggregation interface.
package aggregation
import (
	"fmt"
	"github.com/src-d/go-mysql-server/sql"
	"github.com/src-d/go-mysql-server/sql/expression"
)
type First struct {
	expression.UnaryExpression
}
func NewFirst(e sql.Expression) *First {
	return &First{expression.UnaryExpression{Child: e}}
}
func (f *First) Type() sql.Type {
	return f.Child.Type()
}
func (f *First) String() string {
	return fmt.Sprintf("FIRST(%s)", f.Child)
}
func (f *First) WithChildren(children ...sql.Expression) (sql.Expression, error) {
	if len(children) != 1 {
		return nil, sql.ErrInvalidChildrenNumber.New(f, len(children), 1)
	}
	return NewFirst(children[0]), nil
}
func (f *First) NewBuffer() sql.Row {
	return sql.NewRow(nil)
}
func (f *First) Update(ctx *sql.Context, buffer, row sql.Row) error {
	if buffer[0] != nil {
		return nil
	}
	v, err := f.Child.Eval(ctx, row)
	if err != nil {
		return err
	}
	if v == nil {
		return nil
	}
	buffer[0] = v
	return nil
}