tidb icon indicating copy to clipboard operation
tidb copied to clipboard

planner: do not remove the first row func if it is a constant | tidb-test=pr/2277 (#50020)

Open ti-chi-bot opened this issue 1 year ago • 3 comments

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

ti-chi-bot avatar Jan 10 '24 09:01 ti-chi-bot

[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

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment Approvers can cancel approval by writing /approve cancel in a comment

ti-chi-bot[bot] avatar Feb 23 '24 08:02 ti-chi-bot[bot]

[LGTM Timeline notifier]

Timeline:

  • 2024-02-23 08:18:31.596764922 +0000 UTC m=+604400.344388030: :ballot_box_with_check: agreed by hi-rustin.
  • 2024-02-23 08:19:20.649575638 +0000 UTC m=+604449.397198750: :ballot_box_with_check: agreed by elsa0520.

ti-chi-bot[bot] avatar Feb 23 '24 08:02 ti-chi-bot[bot]

/hold

0xPoe avatar Feb 26 '24 02:02 0xPoe

/retest

0xPoe avatar Feb 26 '24 03:02 0xPoe

Codecov Report

:exclamation: No coverage uploaded for pull request base (release-7.1@061a7da). Click here to learn what that means. The diff coverage is 0.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           

codecov[bot] avatar Feb 26 '24 03:02 codecov[bot]

/unhold

0xPoe avatar Feb 26 '24 03:02 0xPoe

/hold

0xPoe avatar Feb 26 '24 03:02 0xPoe