Cascades Planner: The children of partitionUnionAll will cause panic when add `addParentGEs`
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
Please answer these questions before submitting your issue. Thanks!
This was discovered while refactoring [TestAnalyze](https://github.com/pingcap/tidb/blob/master/pkg/planner/core/casetest/cbotest/cbo_test.go#L354).
When the partitioned table generates a parent plan using *logicalop.LogicalUnionAll, its child plans are actually merged into a single group. As a result, [intest.Assert(!ok)](https://github.com/pingcap/tidb/blob/master/pkg/planner/cascades/memo/group.go#L235) may fail because it attempts to repeatedly add the same parent group.
### 1. Minimal reproduce step (Required)
### 2. What did you expect to see? (Required)
test run success
### 3. What did you see instead (Required)
panic:
```
panic: assert failed [recovered]
panic: assert failed
goroutine 68 [running]:
testing.tRunner.func1.2({0x1083491a0, 0x1400817b590})
/opt/homebrew/Cellar/go/1.24.0/libexec/src/testing/testing.go:1734 +0x1ac
testing.tRunner.func1()
/opt/homebrew/Cellar/go/1.24.0/libexec/src/testing/testing.go:1737 +0x334
panic({0x1083491a0?, 0x1400817b590?})
/opt/homebrew/Cellar/go/1.24.0/libexec/src/runtime/panic.go:787 +0x124
github.com/pingcap/tidb/pkg/util/intest.doPanic(...)
/Users/dylanliu/Repo/tidb/pkg/util/intest/assert_common.go:58
github.com/pingcap/tidb/pkg/util/intest.doAssert(...)
/Users/dylanliu/Repo/tidb/pkg/util/intest/assert_common.go:30
github.com/pingcap/tidb/pkg/util/intest.Assert(...)
/Users/dylanliu/Repo/tidb/pkg/util/intest/assert.go:25
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Group).addParentGEs(0x1400bc23b80, 0x140082448c0)
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/group.go:235 +0xb0
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Memo).InsertGroupExpression.func1()
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/memo.go:191 +0x5c
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Memo).InsertGroupExpression(0x1400bc23a80, 0x140082448c0, 0x0)
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/memo.go:210 +0xc8
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Memo).CopyIn(0x1400bc23a80, 0x0, {0x108e7b9f8, 0x1400814d7a0})
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/memo.go:139 +0x204
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Memo).CopyIn(0x1400bc23a80, 0x0, {0x108e7b2c8, 0x14005fa3a00})
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/memo.go:124 +0xe8
github.com/pingcap/tidb/pkg/planner/cascades/memo.(*Memo).Init(0x1400bc23a80, {0x108e7b2c8?, 0x14005fa3a00?})
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/memo/memo.go:225 +0x60
github.com/pingcap/tidb/pkg/planner/cascades.NewOptimizer({0x108e7b2c8, 0x14005fa3a00})
/Users/dylanliu/Repo/tidb/pkg/planner/cascades/cascades.go:40 +0xac
github.com/pingcap/tidb/pkg/planner/core.CascadesOptimize({0x108de9c98, 0x10ca8e388}, {0x108e41208, 0x14008ecd950}, 0x65102, {0x108e7b2c8, 0x14005fa3a00})
/Users/dylanliu/Repo/tidb/pkg/planner/core/optimizer.go:305 +0xe4
github.com/pingcap/tidb/pkg/planner/core.doOptimize({0x108de9c98, 0x10ca8e388}, {0x108e41208, 0x14008ecd950}, 0x65102, {0x108e7b2c8, 0x14005fa3a00})
/Users/dylanliu/Repo/tidb/pkg/planner/core/optimizer.go:286 +0x68
github.com/pingcap/tidb/pkg/planner/core.DoOptimize({0x108de9c98, 0x10ca8e388}, {0x108e41208, 0x14008ecd950}, 0x65102, {0x108e7b2c8, 0x14005fa3a00})
/Users/dylanliu/Repo/tidb/pkg/planner/core/optimizer.go:400 +0xc8
github.com/pingcap/tidb/pkg/planner.optimize({0x108de9c98, 0x10ca8e388}, {0x108e41208, 0x14008ecd950}, 0x1400c2e5a40, {0x108e41dd0, 0x1400c1b7830})
/Users/dylanliu/Repo/tidb/pkg/planner/optimize.go:519 +0x694
github.com/pingcap/tidb/pkg/planner.optimizeNoCache({0x108de9c98, 0x10ca8e388}, {0x108e87180, 0x14006e2f8c8}, 0x1400c2e5e48, {0x108e41dd0, 0x1400c1b7830})
/Users/dylanliu/Repo/tidb/pkg/planner/optimize.go:351 +0xa58
github.com/pingcap/tidb/pkg/planner.Optimize({0x108de9c98, 0x10ca8e388}, {0x108e87180, 0x14006e2f8c8}, 0x1400c2e5e48, {0x108e41dd0, 0x1400c1b7830})
/Users/dylanliu/Repo/tidb/pkg/planner/optimize.go:215 +0x3d8
github.com/pingcap/tidb/pkg/planner/core/casetest/cbotest.TestAnalyze.func1(0x14001af4540, 0x14009169630, {0x1077118c3, 0x3}, {0x109d0493b, 0xb})
/Users/dylanliu/Repo/tidb/pkg/planner/core/casetest/cbotest/cbo_test.go:412 +0x8d4
github.com/pingcap/tidb/pkg/testkit.RunTestUnderCascades.func1(0x14001af4540)
/Users/dylanliu/Repo/tidb/pkg/testkit/mockstore.go:95 +0xb8
testing.tRunner(0x14001af4540, 0x14001b2a300)
/opt/homebrew/Cellar/go/1.24.0/libexec/src/testing/testing.go:1792 +0xe4
created by testing.(*T).Run in goroutine 67
/opt/homebrew/Cellar/go/1.24.0/libexec/src/testing/testing.go:1851 +0x374
FAIL github.com/pingcap/tidb/pkg/planner/core/casetest/cbotest 1.643s
```
### 4. What is your TiDB version? (Required)
Contributor guide
Assessment
This issue has not been assessed yet.