diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index 43329e425a396..6f353215dca9f 100644 --- a/executor/aggregate_test.go +++ b/executor/aggregate_test.go @@ -343,7 +343,7 @@ func (s *testSuite1) TestAggregation(c *C) { c.Assert(errors.Cause(err).Error(), Equals, "unsupported agg function: stddev_pop") _, err = tk.Exec("select std_samp(a) from t") // TODO: Fix this error message. - c.Assert(errors.Cause(err).Error(), Equals, "[expression:1305]FUNCTION std_samp does not exist") + c.Assert(errors.Cause(err).Error(), Equals, "[expression:1305]FUNCTION test.std_samp does not exist") _, err = tk.Exec("select variance(a) from t") // TODO: Fix this error message. c.Assert(errors.Cause(err).Error(), Equals, "unsupported agg function: var_pop") diff --git a/expression/integration_test.go b/expression/integration_test.go old mode 100644 new mode 100755 index 77ccfe441f199..d67e6b8d3765b --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -4921,3 +4921,23 @@ func (s *testIntegrationSuite) TestIssue11309And11319(c *C) { tk.MustQuery(`SELECT DATE_ADD('2007-03-28 22:08:28',INTERVAL 2.2 DAY_HOUR)`).Check(testkit.Rows("2007-03-31 00:08:28")) tk.MustQuery(`SELECT DATE_ADD('2007-03-28 22:08:28',INTERVAL 2.2 YEAR_MONTH)`).Check(testkit.Rows("2009-05-28 22:08:28")) } + +func (s *testIntegrationSuite) TestNotExistFunc(c *C) { + tk := testkit.NewTestKit(c, s.store) + + // current db is empty + _, err := tk.Exec("SELECT xxx(1)") + c.Assert(err.Error(), Equals, "[planner:1046]No database selected") + + _, err = tk.Exec("SELECT yyy()") + c.Assert(err.Error(), Equals, "[planner:1046]No database selected") + + // current db is not empty + tk.MustExec("use test") + _, err = tk.Exec("SELECT xxx(1)") + c.Assert(err.Error(), Equals, "[expression:1305]FUNCTION test.xxx does not exist") + + _, err = tk.Exec("SELECT yyy()") + c.Assert(err.Error(), Equals, "[expression:1305]FUNCTION test.yyy does not exist") + +} diff --git a/expression/scalar_function.go b/expression/scalar_function.go old mode 100644 new mode 100755 index a0ca38e3b5678..29a5933741b03 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -120,7 +120,12 @@ func newFunctionImpl(ctx sessionctx.Context, fold bool, funcName string, retType } fc, ok := funcs[funcName] if !ok { - return nil, errFunctionNotExists.GenWithStackByArgs("FUNCTION", funcName) + db := ctx.GetSessionVars().CurrentDB + if db == "" { + return nil, terror.ClassOptimizer.New(mysql.ErrNoDB, mysql.MySQLErrName[mysql.ErrNoDB]) + } + + return nil, errFunctionNotExists.GenWithStackByArgs("FUNCTION", db+"."+funcName) } if !ctx.GetSessionVars().EnableNoopFuncs { if _, ok := noopFuncs[funcName]; ok { diff --git a/expression/scalar_function_test.go b/expression/scalar_function_test.go old mode 100644 new mode 100755