-
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
Conversation
…egation push down
[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. |
f964f89
to
85de026
Compare
Unstable CI #24679
/run-check_dev_2 |
CI failed again, I can't reproduce it on my local environment:
|
/run-check_dev_2 |
/merge |
This pull request has been accepted and is ready to merge. Commit hash: b0072d9
|
"├─IndexRangeScan(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false", | ||
"├─Selection(Build) 0.80 cop[tikv] eq(length(cast(1, var_string(20))), 1)", | ||
"├─Selection(Build) 0.80 cop[tikv] 1", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change is expected, because after fixing the bug, the constant propagate can infer that
b = 1 and length(b) = 1
is always true.
So the this filter condition changes and the cost of the plan changes...
/run-check_dev_2 |
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
cherry pick to release-5.1 in PR #29316 |
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
cherry pick to release-5.2 in PR #29345 |
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