diff --git a/planner/core/issuetest/BUILD.bazel b/planner/core/issuetest/BUILD.bazel index 2b47603d99176..1f2f353355dee 100644 --- a/planner/core/issuetest/BUILD.bazel +++ b/planner/core/issuetest/BUILD.bazel @@ -10,7 +10,7 @@ go_test( data = glob(["testdata/**"]), flaky = True, race = "on", - shard_count = 8, + shard_count = 9, deps = [ "//parser", "//planner", diff --git a/planner/core/issuetest/planner_issue_test.go b/planner/core/issuetest/planner_issue_test.go index f72db6a2c5ae6..08c945ff5ea24 100644 --- a/planner/core/issuetest/planner_issue_test.go +++ b/planner/core/issuetest/planner_issue_test.go @@ -190,3 +190,11 @@ func TestIssue45758(t *testing.T) { // result ok tk.MustExec("UPDATE tb1, (SELECT code AS cid, code, MAX(class) AS class FROM tb2 GROUP BY code) tb3 SET tb1.cid = tb3.cid, tb1.code = tb3.code, tb1.class = tb3.class") } + +func TestIssue46083(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TEMPORARY TABLE v0(v1 int)") + tk.MustExec("INSERT INTO v0 WITH ta2 AS (TABLE v0) TABLE ta2 FOR UPDATE OF ta2;") +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index d0794186e2245..b0216c1b7f320 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -4466,6 +4466,10 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p L b.ctx.GetSessionVars().StmtCtx.AppendWarning(err) } for _, tName := range l.Tables { + // CTE has no *model.TableInfo, we need to skip it. + if tName.TableInfo == nil { + continue + } b.ctx.GetSessionVars().StmtCtx.LockTableIDs[tName.TableInfo.ID] = struct{}{} } p, err = b.buildSelectLock(p, l)