func (v *typeInferrer) addCastToString(expr ast.ExprNode) ast.ExprNode {
	if !mysql.IsUTF8Charset(expr.GetType().Charset) {
		castTp := types.NewFieldType(mysql.TypeString)
		castTp.Charset, castTp.Collate = types.DefaultCharsetForType(mysql.TypeString)
		if val, ok := expr.(*ast.ValueExpr); ok {
			newVal, err := val.Datum.ConvertTo(v.sc, castTp)
			if err != nil {
				v.err = errors.Trace(err)
			}
			expr.SetDatum(newVal)
		} else {
			castFunc := &ast.FuncCastExpr{
				Expr:         expr,
				Tp:           castTp,
				FunctionType: ast.CastFunction,
			}
			expr = castFunc
		}
		expr.SetType(castTp)
	}
	return expr
}
// AddCastToString adds a cast function to string type if the expr charset is not UTF8.
AddCastToString adds a cast function to string type if the expr charset is not UTF8.
// AddCastToString adds a cast function to string type if the expr charset is not UTF8 .
func (v *typeInferrer) addCastToString(expr ast.ExprNode) ast.ExprNode {
	if !mysql.IsUTF8Charset(expr.GetType().Charset) {
		castTp := types.NewFieldType(mysql.TypeString)
		castTp.Charset, castTp.Collate = types.DefaultCharsetForType(mysql.TypeString)
		if val, ok := expr.(*ast.ValueExpr); ok {
			newVal, err := val.Datum.ConvertTo(v.sc, castTp)
			if err != nil {
				v.err = errors.Trace(err)
			}
			expr.SetDatum(newVal)
		} else {
			castFunc := &ast.FuncCastExpr{
				Expr:         expr,
				Tp:           castTp,
				FunctionType: ast.CastFunction,
			}
			expr = castFunc
		}
		expr.SetType(castTp)
	}
	return expr
}
func ( v * typeInferrer ) addCastToString ( expr ast . ExprNode ) ast . ExprNode { if ! mysql . IsUTF8Charset ( expr . GetType ( ) . Charset ) { castTp := types . NewFieldType ( mysql . TypeString ) castTp . Charset , castTp . Collate = types . DefaultCharsetForType ( mysql . TypeString ) if val , ok := expr . ( * ast . ValueExpr ) ; ok { newVal , err := val . Datum . ConvertTo ( v . sc , castTp ) if err != nil { v . err = errors . Trace ( err ) } expr . SetDatum ( newVal ) } else { castFunc := & ast . FuncCastExpr { Expr : expr , Tp : castTp , FunctionType : ast . CastFunction , } expr = castFunc } expr . SetType ( castTp ) } return expr }
AddCastToString adds a cast function to string type if the expr charset is not UTF8.
AddCastToString adds a cast function to string type if the expr charset is not UTF8 .