func (l *Lower) WithChildren(children ...sql.Expression) (sql.Expression, error) {
	if len(children) != 1 {
		return nil, sql.ErrInvalidChildrenNumber.New(l, len(children), 1)
	}
	return NewLower(children[0]), nil
}
WithChildren implements the Expression interface.
package function
import (
	"fmt"
	"strings"
	"github.com/src-d/go-mysql-server/sql"
	"github.com/src-d/go-mysql-server/sql/expression"
)
type Lower struct {
	expression.UnaryExpression
}
func NewLower(e sql.Expression) sql.Expression {
	return &Lower{expression.UnaryExpression{Child: e}}
}
func (l *Lower) Eval(
	ctx *sql.Context,
	row sql.Row,
) (interface{}, error) {
	v, err := l.Child.Eval(ctx, row)
	if err != nil {
		return nil, err
	}
	if v == nil {
		return nil, nil
	}
	v, err = sql.Text.Convert(v)
	if err != nil {
		return nil, err
	}
	return strings.ToLower(v.(string)), nil
}
func (l *Lower) String() string {
	return fmt.Sprintf("LOWER(%s)", l.Child)
}