From 215d8f5a70bf507a767f80cd545dcf8f53006d73 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Mon, 5 Aug 2019 11:03:31 +0800 Subject: [PATCH 1/2] fixup fixup fixup fixup fixup? --- expression/builtin_control.go | 3 +-- expression/integration_test.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/expression/builtin_control.go b/expression/builtin_control.go index 015f9705f284..80e8d5e233e1 100644 --- a/expression/builtin_control.go +++ b/expression/builtin_control.go @@ -67,9 +67,8 @@ func InferType4ControlFuncs(lhs, rhs *types.FieldType) *types.FieldType { } else if rhs.Tp == mysql.TypeNull { *resultFieldType = *lhs } else { - var unsignedFlag uint - evalType := types.AggregateEvalType([]*types.FieldType{lhs, rhs}, &unsignedFlag) resultFieldType = types.AggFieldType([]*types.FieldType{lhs, rhs}) + evalType := types.AggregateEvalType([]*types.FieldType{lhs, rhs}, &resultFieldType.Flag) if evalType == types.ETInt { resultFieldType.Decimal = 0 } else { diff --git a/expression/integration_test.go b/expression/integration_test.go index 52137a5096ac..0c5bb1df8f44 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -4760,6 +4760,16 @@ func (s *testIntegrationSuite) TestFuncCaseWithLeftJoin(c *C) { tk.MustQuery("select t1.id from kankan1 t1 left join kankan2 t2 on t1.id = t2.id where (case when t1.name='b' then 'case2' when t1.name='a' then 'case1' else NULL end) = 'case1' order by t1.id").Check(testkit.Rows("1", "2")) } +func (s *testIntegrationSuite) TestIssue11594(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1 (v bigint(20) UNSIGNED NOT NULL);") + tk.MustExec("INSERT INTO t1 VALUES (1), (2);") + tk.MustQuery("SELECT SUM(IF(v > 1, v, -v)) FROM t1;").Check(testkit.Rows("1")) + tk.MustQuery("SELECT sum(IFNULL(cast(null+rand() as unsigned), -v)) FROM t1;").Check(testkit.Rows("-3")) +} + func (s *testIntegrationSuite) TestIssue11309And11319(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") From f55ecffcebbb5d4681a7ccb7663f255532ad3076 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Mon, 5 Aug 2019 19:05:47 +0800 Subject: [PATCH 2/2] add UT --- expression/integration_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/expression/integration_test.go b/expression/integration_test.go index 0c5bb1df8f44..c35e1d8cdcfa 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -4768,6 +4768,8 @@ func (s *testIntegrationSuite) TestIssue11594(c *C) { tk.MustExec("INSERT INTO t1 VALUES (1), (2);") tk.MustQuery("SELECT SUM(IF(v > 1, v, -v)) FROM t1;").Check(testkit.Rows("1")) tk.MustQuery("SELECT sum(IFNULL(cast(null+rand() as unsigned), -v)) FROM t1;").Check(testkit.Rows("-3")) + tk.MustQuery("SELECT sum(COALESCE(cast(null+rand() as unsigned), -v)) FROM t1;").Check(testkit.Rows("-3")) + tk.MustQuery("SELECT sum(COALESCE(cast(null+rand() as unsigned), v)) FROM t1;").Check(testkit.Rows("3")) } func (s *testIntegrationSuite) TestIssue11309And11319(c *C) {