[MDEV-18937] Wrong result caused by equality pushdown from HAVING Created: 2019-03-15 Updated: 2019-04-04 Resolved: 2019-04-04 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Optimizer |
| Affects Version/s: | 10.4 |
| Fix Version/s: | 10.4.4 |
| Type: | Bug | Priority: | Major |
| Reporter: | Galina Shalygina (Inactive) | Assignee: | Galina Shalygina (Inactive) |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||||||||||
| Description |
|
If to push an equality from HAVING that counteracts with equality in WHERE it replaces this equality.
If to push an equality from HAVING that counteracts with equality in WHERE which is a part of AND condition it desappears.
|
| Comments |
| Comment by Galina Shalygina (Inactive) [ 2019-03-25 ] | |||||
|
The bug is caused by the improper processing of equalities pushdown from HAVING into WHERE. E.g.:
(t1.a = 3) is pushed from HAVING into WHERE. The impossible multiple equality is marked with 'true' value in its field cond_false. Also it is transformed to '0' item. All its fields remain the same. In substitute_for_best_equal_field() for conds eliminate_item_equal() is called for the impossible equality. In this method impossible equality is either transformed back to the equality from WHERE from which it was got (if this equality from WHERE is a part of AND condition) or to the equality from HAVING from which it was got (if WHERE is a single equality). This causes wrong result. To fix it and_new_conditions_to_optimized_cond() should be changed. | |||||
| Comment by Galina Shalygina (Inactive) [ 2019-04-04 ] | |||||
|
Fixed in |