[MDEV-8795] Equal expression propagation does not work for temporal literals Created: 2015-09-13  Updated: 2015-09-13  Resolved: 2015-09-13

Status: Closed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 10.0, 10.1
Fix Version/s: 10.1.8

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: upstream


 Description   

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a VARCHAR(20));
INSERT INTO t1 VALUES ('a'),('b');
EXPLAIN EXTENDED SELECT * FROM t1 WHERE COALESCE(a)='a' AND COALESCE(a)>='a'; 
SHOW WARNINGS;

returns

+-------+------+----------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                |
+-------+------+----------------------------------------------------------------------------------------+
| Note  | 1003 | select `test`.`t1`.`a` AS `a` from `test`.`t1` where (coalesce(`test`.`t1`.`a`) = 'a') |
+-------+------+----------------------------------------------------------------------------------------+

I.e. the right AND part with COALESCE() was optimized away from the condition by equal expression propagation.

If I do the same for DATE data type:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a DATE);
INSERT INTO t1 VALUES ('2001-01-01'),('2001-01-02');
EXPLAIN EXTENDED SELECT * FROM t1 WHERE COALESCE(a)=DATE'2001-01-01' AND COALESCE(a)>=DATE'2001-01-01';
SHOW WARNINGS;

it returns:

+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                   |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((coalesce(`test`.`t1`.`a`) = DATE'2001-01-01') and (coalesce(`test`.`t1`.`a`) >= DATE'2001-01-01')) |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+

i.e. equal expression propagation was not applied.



 Comments   
Comment by Alexander Barkov [ 2015-09-13 ]

Repeatable with MySQL-5.7.8

Generated at Thu Feb 08 07:29:51 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.