func (e *Evaluator) checkAnyResult(cs *ast.CompareSubqueryExpr, lv types.Datum, result []types.Datum) (d types.Datum, err error) { hasNull := false for _, v := range result { if v.IsNull() { hasNull = true continue } comRes, err1 := lv.CompareDatum(v) if err1 != nil { return d, errors.Trace(err1) } res, err1 := getCompResult(cs.Op, comRes) if err1 != nil { return d, errors.Trace(err1) } if res { d.SetInt64(boolToInt64(true)) return d, nil } } if hasNull { // If no matched but we get null, return null. // Like `insert t (c) values (1),(2),(null)`, then // `select 0 > any (select c from t)`, returns null. return d, nil } d.SetInt64(boolToInt64(false)) return d, nil }
func testFrac(c *C, v *mysql.MyDecimal) { var d1 types.Datum d1.SetMysqlDecimal(v) b := EncodeDecimal([]byte{}, d1) _, d2, err := DecodeDecimal(b) c.Assert(err, IsNil) cmp, err := d1.CompareDatum(d2) c.Assert(err, IsNil) c.Assert(cmp, Equals, 0) c.Assert(d1.GetMysqlDecimal().String(), Equals, d2.GetMysqlDecimal().String()) }
func testFrac(c *C, v *types.MyDecimal) { var d1 types.Datum d1.SetMysqlDecimal(v) b := EncodeDecimal([]byte{}, d1) _, d2, err := DecodeDecimal(b) c.Assert(err, IsNil) sc := new(variable.StatementContext) cmp, err := d1.CompareDatum(sc, d2) c.Assert(err, IsNil) c.Assert(cmp, Equals, 0) c.Assert(d1.GetMysqlDecimal().String(), Equals, d2.GetMysqlDecimal().String()) }