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

Contradictory predicate LPAD(...)/TAN(...) AND NOT LPAD(...)/TAN(...) returns the incorrect result

    XMLWordPrintable

Details

    • Bug
    • Status: Open (View Workflow)
    • Critical
    • Resolution: Unresolved
    • 12.2.2
    • None
    • Optimizer, Server
    • None
    • Docker: mariadb:12.2.2
      Server version: 12.2.2-MariaDB-ubu2404
      Source revision: d26a6f44c1f2119377e79a9540886c6d8c01472f

    Description

      Hi, I found a logic bug in MariaDB 12.2.2.
      Two equivalent queries return different results.

      Expected results:

      Empty set (0.001 sec)
      

      Actual Results:

      +--------------------+------+
      | c0                 | c1   |
      +--------------------+------+
      | 0.7173867815810598 | 1    |
      +--------------------+------+
      

      How to repeat:

      -- create table
      DROP TABLE IF EXISTS `t0`;
      CREATE TABLE `t0` ( `c1` varchar(500) DEFAULT NULL, `c2` varchar(500) DEFAULT NULL, UNIQUE KEY `i1` (`c1`(4),`c2`) USING BTREE ) CHARSET=utf8mb4;
      INSERT INTO `t0` VALUES ('1',NULL),('1','-1839775031'),('1','0.18263104414081566'),('1',''),('1','-1956401184'),('1',NULL),('1','1733636218'),('1',NULL),('1','0.7173867815810598'),('1',NULL),('1',NULL),('1',NULL),('-112798560',NULL);
       
      DROP TABLE IF EXISTS `t1`;
      CREATE TABLE `t1` ( `c0` float unsigned DEFAULT NULL, `c1` varchar(500) DEFAULT NULL, `c2` varchar(500) DEFAULT NULL, UNIQUE KEY `i0` (`c1`(4),`c0`,`c2`(3)) USING BTREE ) CHARSET=utf8mb4;
      INSERT INTO `t1` VALUES (0.182631,NULL,NULL),(NULL,NULL,'0.31267065437591823'),(0,'','!\'})쥕%'),(NULL,'371099250',NULL),(162418000,'1945517619',NULL);
       
       
      -- query_A
      SELECT ref_0.c2 AS c0, ref_0.c1 AS c1
      FROM t0 AS ref_0
      WHERE EXISTS (
        SELECT ref_0.c1 AS c0, ref_0.c1 AS c1
        FROM t0 AS ref_1
        WHERE FALSE AND FALSE
      );
       
      -- query_B, bug-triggering case
      SELECT t.c2 AS c0, t.c1 AS c1
      FROM t0 AS t
      WHERE EXISTS (
        SELECT t.c1 AS c0, t.c1 AS c1
        FROM t0 AS ref_1
        WHERE FALSE AND FALSE
      )
      OR (
        (LPAD(DATABASE(), ABS((CAST(t.c2 AS DECIMAL(65,30)) * CAST(t.c2 AS DECIMAL(65,30)))) + 1, t.c1) / TAN(CAST(t.c1 AS SIGNED)))
        AND NOT (LPAD(DATABASE(), ABS((CAST(t.c2 AS DECIMAL(65,30)) * CAST(t.c2 AS DECIMAL(65,30)))) + 1, t.c1) / TAN(CAST(t.c1 AS SIGNED)))
      );
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            Yuxiao Guo Yuxiao Guo
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.