tidb
tidb copied to clipboard
planner: do not remove the first row func if it is a constant | tidb-test=pr/2277 (#50020)
This is an automated cherry-pick of #50020
What problem does this PR solve?
Issue Number: close https://github.com/pingcap/tidb/issues/38756
Problem Summary:
What changed and how does it work?
Do not remove the first row func if the group by expr is a constant.
For instance, if you try SELECT DISTINCT SQRT(1) FROM t
mysql> explain SELECT DISTINCT SQRT(1) FROM t;
+---------------------------+----------+-----------+---------------+-------------------------------------------------------+
| id | estRows | task | access object | operator info |
+---------------------------+----------+-----------+---------------+-------------------------------------------------------+
| HashAgg_8 | 1.00 | root | | group by:Column#5, funcs:firstrow(Column#5)->Column#3 |
| └─TableReader_9 | 1.00 | root | | data:HashAgg_4 |
| └─HashAgg_4 | 1.00 | cop[tikv] | | group by:1, |
| └─TableFullScan_7 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+---------------------------+----------+-----------+---------------+-------------------------------------------------------+
4 rows in set (0.00 sec)
As you can see, we accidentally removed the first-row func because the group by expr is a constant 1 and the arg is also 1.
But if you try SELECT DISTINCT SQRT(2) FROM t, it works well.
Check List
Tests
- [x] Unit test
- [ ] Integration test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test
- [ ] I checked and no code files have been changed.
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.
Fix the TiDB issue with incorrect results when the function's argument matches the group by key
[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: elsa0520, hi-rustin
The full list of commands accepted by this bot can be found here.
The pull request process is described here
- ~~OWNERS~~ [hi-rustin]
Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment
[LGTM Timeline notifier]
Timeline:
/hold
/retest
Codecov Report
:exclamation: No coverage uploaded for pull request base (
release-7.1@061a7da). Click here to learn what that means. The diff coverage is0.0000%.
Additional details and impacted files
@@ Coverage Diff @@
## release-7.1 #50286 +/- ##
================================================
Coverage ? 73.4047%
================================================
Files ? 1209
Lines ? 378835
Branches ? 0
================================================
Hits ? 278083
Misses ? 82985
Partials ? 17767
/unhold
/hold