planner: disable SQL_CALC_FOUND_ROWS/LOCK IN SHARE MODE by default (#19506)

This commit is contained in:
Null not nil
2020-09-18 05:18:37 -06:00
committed by GitHub
parent 653dffe814
commit 9876de8961
2 changed files with 26 additions and 2 deletions

View File

@ -7226,6 +7226,23 @@ func (s *testIntegrationSerialSuite) TestIssue19116(c *C) {
tk.MustQuery("select coercibility(1=1);").Check(testkit.Rows("5"))
}
func (s *testIntegrationSerialSuite) TestIssue14448and19383(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")
tk.MustExec("DROP TABLE IF EXISTS t1")
tk.MustExec("CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY)")
tk.MustExec("INSERT INTO t1 VALUES (1),(2),(3)")
_, err := tk.Exec("SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1")
message := `function SQL_CALC_FOUND_ROWS has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions`
c.Assert(strings.Contains(err.Error(), message), IsTrue)
_, err = tk.Exec("SELECT * FROM t1 LOCK IN SHARE MODE")
message = `function LOCK IN SHARE MODE has only noop implementation in tidb now, use tidb_enable_noop_functions to enable these functions`
c.Assert(strings.Contains(err.Error(), message), IsTrue)
tk.MustExec("SET tidb_enable_noop_functions=1")
tk.MustExec("SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1")
tk.MustExec("SELECT * FROM t1 LOCK IN SHARE MODE")
}
func (s *testIntegrationSerialSuite) TestIssue19315(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")

View File

@ -2604,8 +2604,12 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L
// table hints are only visible in the current SELECT statement.
b.popTableHints()
}()
enableNoopFuncs := b.ctx.GetSessionVars().EnableNoopFuncs
if sel.SelectStmtOpts != nil {
if sel.SelectStmtOpts.CalcFoundRows && !enableNoopFuncs {
err = expression.ErrFunctionsNoopImpl.GenWithStackByArgs("SQL_CALC_FOUND_ROWS")
return nil, err
}
origin := b.inStraightJoin
b.inStraightJoin = sel.SelectStmtOpts.StraightJoin
defer func() { b.inStraightJoin = origin }()
@ -2671,8 +2675,11 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L
return nil, err
}
}
if sel.LockInfo != nil && sel.LockInfo.LockType != ast.SelectLockNone {
if sel.LockInfo.LockType == ast.SelectLockInShareMode && !enableNoopFuncs {
err = expression.ErrFunctionsNoopImpl.GenWithStackByArgs("LOCK IN SHARE MODE")
return nil, err
}
p = b.buildSelectLock(p, sel.LockInfo)
}
b.handleHelper.popMap()