From 7f1f66efa7ff5305b7069800cda27229750cc53e Mon Sep 17 00:00:00 2001 From: Zhang Jian Date: Tue, 10 Sep 2019 12:37:44 +0800 Subject: [PATCH] =?UTF-8?q?type:=20add=20db=20prefix=20to=20function=20nam?= =?UTF-8?q?e=20for=20not=20exist=20error=20messa=E2=80=A6=20(#12111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- executor/aggregate_test.go | 2 +- expression/integration_test.go | 20 ++++++++++++++++++++ expression/scalar_function.go | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index 9332b22985aa8..fca05420430ad 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 index 5b489059ec1cd..358f645c6652d 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -4781,3 +4781,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 index 77ce863a39406..dff91c56abd95 100644 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -80,7 +80,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) } funcArgs := make([]Expression, len(args)) copy(funcArgs, args)