-
Notifications
You must be signed in to change notification settings - Fork 5.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
expression: fix a bug caused by cast function signature wrong in aggregation push down (#28805) #29345
Conversation
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
[REVIEW NOTIFICATION] This pull request has been approved by:
To complete the pull request process, please ask the reviewers in the list to review by filling The full list of commands accepted by this bot can be found here. Reviewer can indicate their review by submitting an approval review. |
/run-all-tests |
@tiancaiamao you're already a collaborator in bot's repo. |
This pull request is closed because it's related version has closed automatic cherry-picking. You can find more details at: |
cherry-pick #28805 to release-5.2
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/29345
After apply modifications, you can push your change to this PR via:
What problem does this PR solve?
Issue Number: close #28804
Problem Summary:
What is changed and how it works?
Remove the special handle of cast function in
ColumnSubstituteImpl
The bug is caused by this:
Before ColumnSubstitute, the function signature of
cast(floor(hour(ts) / 4) as char)
is cast(Int -> Varstring) ...Then, the ColumnSubstitute will substitute the column
ts
of expressionfloor(hour(ts) / 4)
After that, the expression
floor(hour(ts) / 4)
signature changed, it's return type is not Int any more.Expression
floor(hour(ts) / 4)
returns Decimal instead.But the signature of
cast()
function is stillcast(Int -> Varstring)
, so the cast expectfloor(hour(ts) / 4)
to return Int and the later returns Decimal, the error is throw finally.What's Changed:
Remove the special handle of the cast function.
How it Works:
The bug is caused by the special handle of the
Cast
function.Its function args are re-generated (signature re-calculated), but the Cast function it self does not refresh.
So the signature mismatch...
OK, "why the signature change from Int to Decimal" is another story, it's caused by the wrong Flen and that's another big issue.
I'm not meant to solve it here.
Check List
Tests
Side effects
Documentation
Release note