Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-8709

Row equality elements do not get propagated

    XMLWordPrintable

    Details

      Description

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

      returns:

      +-------+------+---------------------------------------------------------------------------------------------------------------------------------+
      | Level | Code | Message                                                                                                                         |
      +-------+------+---------------------------------------------------------------------------------------------------------------------------------+
      | Note  | 1003 | select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`a` = 10) and (`test`.`t1`.`b` = 10)) |
      +-------+------+---------------------------------------------------------------------------------------------------------------------------------+

      Notice, the a>=10 part was removed from the condition.

      Now if I rewrite the same query using ROW comparison syntax:

      EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a,b)=(10,10) AND a>=10;
      SHOW WARNINGS;

      It returns:

      +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
      | Level | Code | Message                                                                                                                                                     |
      +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
      | Note  | 1003 | select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`a` = 10) and (`test`.`t1`.`b` = 10) and (`test`.`t1`.`a` >= 10)) |
      +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+

      Notice, the a>=10 part is still there.

      The problem was that the items that participate in the (a,b)=(10,10) equality did not have cmp_context set properly.
      With the changes made under the terms of MDEV-8728 this problem does not seem to exists any more in 10.1.8.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              bar Alexander Barkov
              Reporter:
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: