tidb
tidb copied to clipboard
planner: fix panic when prepare and execute the insert on duplicate (#37924)
cherry-pick #37924 to release-6.1 You can switch your code base to this Pull Request by using git-extras:
# In tidb repo:
git pr https://github.com/pingcap/tidb/pull/38104
After apply modifications, you can push your change to this PR via:
git push [email protected]:ti-srebot/tidb.git pr/38104:release-6.1-d5b2c9b17d44
What problem does this PR solve?
Issue Number: close https://github.com/pingcap/tidb/issues/37187
Problem Summary:
The prepare and execute statements both will build the plan. But some code path in planBuilder
have some assumptions about they only execute once.
What is changed and how it works?
- Record the
actualColLen
inlast.InsertStmt
for reusing. - Initlizate the
actualColLen
to 0 not 1. Because it's safe and easy to handle.
Check List
Tests
- [ ] Unit test
- [x] Integration test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No code
Side effects
- [ ] Performance regression: Consumes more CPU
- [ ] Performance regression: Consumes more Memory
- [ ] Breaking backward compatibility
Documentation
- [ ] Affects user behaviors
- [ ] Contains syntax changes
- [ ] Contains variable changes
- [ ] Contains experimental features
- [ ] Changes MySQL compatibility
Release note
Please refer to Release Notes Language Style Guide to write a quality release note.
None
[REVIEW NOTIFICATION]
This pull request has been approved by:
- fixdb
- qw4990
To complete the pull request process, please ask the reviewers in the list to review by filling /cc @reviewer
in the comment.
After your PR has acquired the required number of LGTMs, you can assign this pull request to the committer in the list by filling /assign @committer
in the comment to help you merge this pull request.
The full list of commands accepted by this bot can be found here.
Reviewer can indicate their review by submitting an approval review. Reviewer can cancel approval by submitting a request changes review.
/run-all-tests
@Reminiscent you're already a collaborator in bot's repo.
/merge
This pull request has been accepted and is ready to merge.