diff --git a/executor/executor.go b/executor/executor.go index 75f1f595a681a..b74520f556b37 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -1026,7 +1026,7 @@ func filterTemporaryTableKeys(vars *variable.SessionVars, keys []kv.Key) []kv.Ke return keys } - newKeys := keys[:] + newKeys := keys[:0:len(keys)] for _, key := range keys { tblID := tablecodec.DecodeTableID(key) if _, ok := txnCtx.GlobalTemporaryTables[tblID]; !ok { diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index 5591dcefde54d..5b81b1afce095 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -29,15 +29,18 @@ import ( "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" + "github.com/pingcap/tidb/kv" plannerutil "github.com/pingcap/tidb/planner/util" txninfo "github.com/pingcap/tidb/session/txninfo" "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/ranger" + "github.com/pingcap/tidb/util/tableutil" ) var _ = Suite(&testExecSuite{}) @@ -549,3 +552,14 @@ func getGrowing(m aggPartialResultMapper) bool { value := *point return value.oldbuckets != nil } + +func (s *pkgTestSuite) TestFilterTemporaryTableKeys(c *C) { + vars := variable.NewSessionVars() + const tableID int64 = 3 + vars.TxnCtx = &variable.TransactionContext{ + GlobalTemporaryTables: map[int64]tableutil.TempTable{tableID: nil}, + } + + res := filterTemporaryTableKeys(vars, []kv.Key{tablecodec.EncodeTablePrefix(tableID), tablecodec.EncodeTablePrefix(42)}) + c.Assert(res, HasLen, 1) +}