func (js *JSONUnquote) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
	json, err := js.Child.Eval(ctx, row)
	if json == nil || err != nil {
		return json, err
	}
	ex, err := sql.Text.Convert(json)
	if err != nil {
		return nil, err
	}
	str, ok := ex.(string)
	if !ok {
		return nil, sql.ErrInvalidType.New(reflect.TypeOf(ex).String())
	}
	return unquote(str)
}
Eval implements the Expression interface.
package function
import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"fmt"
	"reflect"
	"unicode/utf8"
	"github.com/src-d/go-mysql-server/sql"
	"github.com/src-d/go-mysql-server/sql/expression"
)
type JSONUnquote struct {
	expression.UnaryExpression
}
func NewJSONUnquote(json sql.Expression) sql.Expression {
	return &JSONUnquote{expression.UnaryExpression{Child: json}}
}
func (js *JSONUnquote) String() string {
	return fmt.Sprintf("JSON_UNQUOTE(%s)", js.Child)
}
func (*JSONUnquote) Type() sql.Type {
	return sql.Text
}
func (js *JSONUnquote) WithChildren(children ...sql.Expression) (sql.Expression, error) {
	if len(children) != 1 {
		return nil, sql.ErrInvalidChildrenNumber.New(js, len(children), 1)
	}
	return NewJSONUnquote(children[0]), nil
}