From 4c2b9732ccbdb0d8a56b60ec5634a23d0681ad6f Mon Sep 17 00:00:00 2001 From: Yiding Cui Date: Tue, 15 Aug 2023 15:14:01 +0900 Subject: [PATCH] This is an automated cherry-pick of #46092 Signed-off-by: ti-chi-bot --- planner/core/issuetest/BUILD.bazel | 16 +++++++++++++++ planner/core/issuetest/planner_issue_test.go | 21 ++++++++++++++++++++ planner/core/logical_plan_builder.go | 4 ++++ 3 files changed, 41 insertions(+) diff --git a/planner/core/issuetest/BUILD.bazel b/planner/core/issuetest/BUILD.bazel index a359423ee66ef..a67e62279f65f 100644 --- a/planner/core/issuetest/BUILD.bazel +++ b/planner/core/issuetest/BUILD.bazel @@ -5,6 +5,22 @@ go_test( timeout = "short", srcs = ["planner_issue_test.go"], flaky = True, +<<<<<<< HEAD shard_count = 5, deps = ["//testkit"], +======= + race = "on", + shard_count = 9, + deps = [ + "//parser", + "//planner", + "//planner/core", + "//testkit", + "//testkit/testdata", + "//testkit/testmain", + "//testkit/testsetup", + "@com_github_stretchr_testify//require", + "@org_uber_go_goleak//:goleak", + ], +>>>>>>> a15c0177af2 (planner: DML queries might panic when CTE exists (#46092)) ) diff --git a/planner/core/issuetest/planner_issue_test.go b/planner/core/issuetest/planner_issue_test.go index 14807f128b9f1..b732e60a8fd45 100644 --- a/planner/core/issuetest/planner_issue_test.go +++ b/planner/core/issuetest/planner_issue_test.go @@ -107,3 +107,24 @@ func TestIssue45036(t *testing.T) { " └─TableReader_9 10000.00 root partition:all data:TableRangeScan_8", " └─TableRangeScan_8 10000.00 cop[tikv] table:s range:[1,100000], keep order:false, stats:pseudo")) } +<<<<<<< HEAD +======= + +func TestIssue45758(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE tb1 (cid INT, code INT, class VARCHAR(10))") + tk.MustExec("CREATE TABLE tb2 (cid INT, code INT, class VARCHAR(10))") + // 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;") +} +>>>>>>> a15c0177af2 (planner: DML queries might panic when CTE exists (#46092)) diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 2dd2e4aa038e5..bbefe0c008cec 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -4187,6 +4187,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)