From 787d9535d8d68b0859e96131a87e01643a4eaf4a Mon Sep 17 00:00:00 2001 From: sduzh Date: Wed, 6 May 2020 14:04:32 +0800 Subject: [PATCH] expression: keep xor result consistent with mysql 8 (#15934) --- expression/builtin_op.go | 8 ++++++++ expression/builtin_op_test.go | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/expression/builtin_op.go b/expression/builtin_op.go index c51f88669b82a..6256b4c2aade3 100644 --- a/expression/builtin_op.go +++ b/expression/builtin_op.go @@ -173,6 +173,14 @@ func (c *logicXorFunctionClass) getFunction(ctx sessionctx.Context, args []Expre if err != nil { return nil, err } + args[0], err = wrapWithIsTrue(ctx, true, args[0], false) + if err != nil { + return nil, errors.Trace(err) + } + args[1], err = wrapWithIsTrue(ctx, true, args[1], false) + if err != nil { + return nil, errors.Trace(err) + } bf := newBaseBuiltinFuncWithTp(ctx, args, types.ETInt, types.ETInt, types.ETInt) sig := &builtinLogicXorSig{bf} diff --git a/expression/builtin_op_test.go b/expression/builtin_op_test.go index 24e3f48946190..3b74faca29252 100644 --- a/expression/builtin_op_test.go +++ b/expression/builtin_op_test.go @@ -613,13 +613,13 @@ func (s *testEvaluatorSuite) TestLogicXor(c *C) { {[]interface{}{0, nil}, 0, true, false}, {[]interface{}{nil, 0}, 0, true, false}, {[]interface{}{nil, 1}, 0, true, false}, - {[]interface{}{0.5000, 0.4999}, 1, false, false}, + {[]interface{}{0.5000, 0.4999}, 0, false, false}, {[]interface{}{0.5000, 1.0}, 0, false, false}, - {[]interface{}{0.4999, 1.0}, 1, false, false}, + {[]interface{}{0.4999, 1.0}, 0, false, false}, {[]interface{}{nil, 0.000}, 0, true, false}, {[]interface{}{nil, 0.001}, 0, true, false}, {[]interface{}{types.NewDecFromStringForTest("0.000001"), 0.00001}, 0, false, false}, - {[]interface{}{types.NewDecFromStringForTest("0.000001"), 1}, 1, false, false}, + {[]interface{}{types.NewDecFromStringForTest("0.000001"), 1}, 0, false, false}, {[]interface{}{types.NewDecFromStringForTest("0.000000"), nil}, 0, true, false}, {[]interface{}{types.NewDecFromStringForTest("0.000001"), nil}, 0, true, false},