From e05b97a2bd0e33552da8335689d168bb1de42708 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 23 Jun 2021 10:39:22 +0800 Subject: [PATCH] planner: fix incorrect TableDual plan built from nulleq (#24596) (#24633) --- util/ranger/points.go | 3 ++- util/ranger/ranger_test.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/util/ranger/points.go b/util/ranger/points.go index d8684d03a65a2..63ac096e04c36 100644 --- a/util/ranger/points.go +++ b/util/ranger/points.go @@ -228,7 +228,8 @@ func (r *builder) buildFormBinOp(expr *expression.ScalarFunction) []*point { if col.RetType.EvalType() == types.ETString && (value.Kind() == types.KindString || value.Kind() == types.KindBinaryLiteral) { value.SetString(value.GetString(), col.RetType.Collate) } - if col.GetType().Tp == mysql.TypeYear { + // If nulleq with null value, values.ToInt64 will return err + if col.GetType().Tp == mysql.TypeYear && !value.IsNull() { *value, err = types.ConvertDatumToFloatYear(r.sc, *value) } return diff --git a/util/ranger/ranger_test.go b/util/ranger/ranger_test.go index 57137370bf626..e699c2425af52 100644 --- a/util/ranger/ranger_test.go +++ b/util/ranger/ranger_test.go @@ -1512,12 +1512,13 @@ func (s *testRangerSuite) TestIndexRangeForYear(c *C) { // test index range testKit.MustExec("DROP TABLE IF EXISTS t") testKit.MustExec("CREATE TABLE t (a year(4), key(a))") - testKit.MustExec("INSERT INTO t VALUES (1), (70), (99), (0), ('0')") + testKit.MustExec("INSERT INTO t VALUES (1), (70), (99), (0), ('0'), (NULL)") testKit.MustQuery("SELECT * FROM t WHERE a < 15698").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) testKit.MustQuery("SELECT * FROM t WHERE a <= 0").Check(testkit.Rows("0")) testKit.MustQuery("SELECT * FROM t WHERE a <= 1").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) testKit.MustQuery("SELECT * FROM t WHERE a < 2000").Check(testkit.Rows("0", "1970", "1999")) testKit.MustQuery("SELECT * FROM t WHERE a > -1").Check(testkit.Rows("0", "1970", "1999", "2000", "2001")) + testKit.MustQuery("SELECT * FROM t WHERE a <=> NULL").Check(testkit.Rows("")) tests := []struct { indexPos int