diff --git a/expression/constant_fold.go b/expression/constant_fold.go index 6bcc46a4f4112..adec69c78f8a0 100644 --- a/expression/constant_fold.go +++ b/expression/constant_fold.go @@ -117,7 +117,10 @@ func foldConstant(expr Expression) (Expression, bool) { constArgs[i] = One } } - dummyScalarFunc := NewFunctionInternal(x.GetCtx(), x.FuncName.L, x.GetType(), constArgs...) + dummyScalarFunc, err := NewFunctionBase(x.GetCtx(), x.FuncName.L, x.GetType(), constArgs...) + if err != nil { + return expr, isDeferredConst + } value, err := dummyScalarFunc.Eval(chunk.Row{}) if err != nil { return expr, isDeferredConst diff --git a/expression/integration_test.go b/expression/integration_test.go index 6bd91b57691bf..33b8f5a8076da 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -4213,3 +4213,25 @@ func (s *testIntegrationSuite) TestDaynameArithmetic(c *C) { tk.MustQuery(c.sql).Check(testkit.Rows(c.result)) } } + +func (s *testIntegrationSuite) TestIssue10156(c *C) { + tk := testkit.NewTestKit(c, s.store) + defer s.cleanEnv(c) + + tk.MustExec("use test") + tk.MustExec("CREATE TABLE `t1` (`period_name` varchar(24) DEFAULT NULL ,`period_id` bigint(20) DEFAULT NULL ,`starttime` bigint(20) DEFAULT NULL)") + tk.MustExec("CREATE TABLE `t2` (`bussid` bigint(20) DEFAULT NULL,`ct` bigint(20) DEFAULT NULL)") + q := ` +select + a.period_name, + b.date8 +from + (select * from t1) a +left join + (select bussid,date(from_unixtime(ct)) date8 from t2) b +on + a.period_id = b.bussid +where + datediff(b.date8, date(from_unixtime(a.starttime))) >= 0` + tk.MustQuery(q) +}