From 325bc16e98a9f6fa9a3ae4bc4eb49f4837f21fb4 Mon Sep 17 00:00:00 2001 From: Kenan Yao Date: Mon, 15 Jul 2019 16:27:31 +0800 Subject: [PATCH] planner: disable projection elimination for select plan of update (#10962) Conflicts: planner/core/cbo_test.go planner/core/logical_plan_builder.go --- planner/core/cbo_test.go | 15 +++++++++++++++ planner/core/logical_plan_builder.go | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/planner/core/cbo_test.go b/planner/core/cbo_test.go index 5e66f17bf74f4..64003eae89bea 100644 --- a/planner/core/cbo_test.go +++ b/planner/core/cbo_test.go @@ -849,3 +849,18 @@ func BenchmarkOptimize(b *testing.B) { }) } } + +func (s *testAnalyzeSuite) TestUpdateProjEliminate(c *C) { + store, dom, err := newStoreWithBootstrap() + c.Assert(err, IsNil) + tk := testkit.NewTestKit(c, store) + defer func() { + dom.Close() + store.Close() + }() + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("explain update t t1, (select distinct b from t) t2 set t1.b = t2.b") +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 228e6d7351054..aa95086bbbb24 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -2206,7 +2206,9 @@ func (b *planBuilder) buildUpdate(update *ast.UpdateStmt) (Plan, error) { updt := Update{OrderedList: orderedList}.init(b.ctx) updt.SetSchema(p.Schema()) - updt.SelectPlan, err = doOptimize(b.optFlag, p) + // We cannot apply projection elimination when building the subplan, because + // columns in orderedList cannot be resolved. + updt.SelectPlan, err = doOptimize(b.optFlag&^flagEliminateProjection, p) if err != nil { return nil, errors.Trace(err) }