Skip to content

Commit

Permalink
planner: fix AccessPath.TableFilters got modified unexpectedly (#30966
Browse files Browse the repository at this point in the history
) (#30979)

close #30965
  • Loading branch information
ti-srebot authored Feb 22, 2022
1 parent b6d9a05 commit fa6a527
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
12 changes: 6 additions & 6 deletions planner/core/find_best_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -1425,15 +1425,15 @@ func (is *PhysicalIndexScan) addPushedDownSelection(copTask *copTask, p *DataSou
}

// SplitSelCondsWithVirtualColumn filter the select conditions which contain virtual column
func SplitSelCondsWithVirtualColumn(conds []expression.Expression) ([]expression.Expression, []expression.Expression) {
var filterConds []expression.Expression
for i := len(conds) - 1; i >= 0; i-- {
func SplitSelCondsWithVirtualColumn(conds []expression.Expression) (withoutVirt []expression.Expression, withVirt []expression.Expression) {
for i := range conds {
if expression.ContainVirtualColumn(conds[i : i+1]) {
filterConds = append(filterConds, conds[i])
conds = append(conds[:i], conds[i+1:]...)
withVirt = append(withVirt, conds[i])
} else {
withoutVirt = append(withoutVirt, conds[i])
}
}
return conds, filterConds
return withoutVirt, withVirt
}

func matchIndicesProp(idxCols []*expression.Column, colLens []int, propItems []property.SortItem) bool {
Expand Down
23 changes: 23 additions & 0 deletions planner/core/physical_plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2016,3 +2016,26 @@ func (s *testPlanSuite) TestIssue28316(c *C) {
tk.MustQuery("explain format='brief' " + ts).Check(testkit.Rows(output[i].Plan...))
}
}

func (s *testPlanSuite) TestIssue30965(c *C) {
store, dom, err := newStoreWithBootstrap()
c.Assert(err, IsNil)
defer func() {
dom.Close()
store.Close()
}()
tk := testkit.NewTestKit(c, store)
tk.MustExec("use test")
tk.MustExec("drop table if exists t30965")
tk.MustExec("CREATE TABLE `t30965` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, `d` int(11) GENERATED ALWAYS AS (`a` + 1) VIRTUAL, KEY `ib` (`b`));")
tk.MustExec("insert into t30965 (a,b,c) value(3,4,5);")
tk.MustQuery("select count(*) from t30965 where d = 2 and b = 4 and a = 3 and c = 5;").Check(testkit.Rows("0"))
tk.MustQuery("explain format = 'brief' select count(*) from t30965 where d = 2 and b = 4 and a = 3 and c = 5;").Check(
testkit.Rows(
"StreamAgg 1.00 root funcs:count(1)->Column#6",
"└─Selection 0.00 root eq(test.t30965.d, 2)",
" └─IndexLookUp 0.00 root ",
" ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t30965, index:ib(b) range:[4,4], keep order:false, stats:pseudo",
" └─Selection(Probe) 0.00 cop[tikv] eq(test.t30965.a, 3), eq(test.t30965.c, 5)",
" └─TableRowIDScan 10.00 cop[tikv] table:t30965 keep order:false, stats:pseudo"))
}

0 comments on commit fa6a527

Please sign in to comment.