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

zero_date is considered as NULL, depending on optimizer_switch

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 5.5(EOL), 10.0(EOL), 10.1(EOL), 10.2(EOL)
    • 5.5.59
    • Optimizer
    • None

    Description

       
      DROP TABLE IF EXISTS  t1;
       
      SELECT  CAST('0000-00-00 00:00:00' as datetime) is null;
      CREATE TABLE t1 (d1 datetime NOT NULL);
      INSERT INTO t1 VALUES ('0000-00-00 00:00:00'), ('0000-00-00 00:00:00'), ('1979-09-03 20:49:36');
       
      SET SESSION optimizer_switch='derived_merge=off';
      SELECT count(*) FROM ( SELECT * FROM t1 ) AS a1 WHERE d1 IS NULL ;  ## result 2, expected result 2
      SET SESSION optimizer_switch='derived_merge=on';
      SELECT count(*) FROM ( SELECT * FROM t1 ) AS a1 WHERE d1 IS NULL ;  ## result 0, expected result 2
      DROP TABLE t1;
      
      

      MariaDB [test]> SELECT  CAST('0000-00-00 00:00:00' as datetime) is null;
      +-------------------------------------------------+
      | CAST('0000-00-00 00:00:00' as datetime) is null |
      +-------------------------------------------------+
      |                                               0 |
      +-------------------------------------------------+
      1 row in set (0.00 sec)
       
      MariaDB [test]> CREATE TABLE t1 (d1 datetime NOT NULL);
      Query OK, 0 rows affected (0.13 sec)
       
      MariaDB [test]> INSERT INTO t1 VALUES ('0000-00-00 00:00:00'), ('0000-00-00 00:00:00'), ('1979-09-03 20:49:36');
      Query OK, 3 rows affected (0.03 sec)
      Records: 3  Duplicates: 0  Warnings: 0
       
      MariaDB [test]> SET SESSION optimizer_switch='derived_merge=off';
      Query OK, 0 rows affected (0.00 sec)
       
      MariaDB [test]> SELECT count(*) FROM ( SELECT * FROM t1 ) AS a1 WHERE d1 IS NULL ;
      +----------+
      | count(*) |
      +----------+
      |        2 |
      +----------+
      1 row in set (0.00 sec)
       
      MariaDB [test]> SET SESSION optimizer_switch='derived_merge=on';  
      Query OK, 0 rows affected (0.00 sec)
       
      MariaDB [test]> SELECT count(*) FROM ( SELECT * FROM t1 ) AS a1 WHERE d1 IS NULL ;
      +----------+
      | count(*) |
      +----------+
      |        0 |
      +----------+
      1 row in set (0.00 sec)
      

      Attachments

        Issue Links

          Activity

            We have the following for the table t1

            MariaDB [test]> select * from t1;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            | 1979-09-03 20:49:36 |
            +---------------------+
            MariaDB [test]> select * from t1 where d1 is null;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            +---------------------+
            MariaDB [test]> create view v1 as select * from t1;
            Query OK, 0 rows affected (0.00 sec)
            MariaDB [test]> select * from v1;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            | 1979-09-03 20:49:36 |
            +---------------------+
            MariaDB [test]> select * from v1 where d1 is null;
            Empty set (0.00 sec)
            MariaDB [test]> create algorithm=merge view v2 as select * from t1;
            Query OK, 0 rows affected (0.00 sec)
            MariaDB [test]> select * from v2;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            | 1979-09-03 20:49:36 |
            +---------------------+
            MariaDB [test]> select * from v2 where d1 is null;
            MariaDB [test]> create algorithm=temptable view v3 as select * from t1;
            Query OK, 0 rows affected (0.01 sec)
             
            MariaDB [test]> select * from v3;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            | 1979-09-03 20:49:36 |
            +---------------------+
            MariaDB [test]> select * from v3 where d1 is null;
            +---------------------+
            | d1                  |
            +---------------------+
            | 0000-00-00 00:00:00 |
            | 0000-00-00 00:00:00 |
            +---------------------+
            

            So for the views v1,v2 we have wrong results for the query
            select * from v1/v2 where d1 is null.

            igor Igor Babaev (Inactive) added a comment - We have the following for the table t1 MariaDB [test]> select * from t1; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | | 1979-09-03 20:49:36 | +---------------------+ MariaDB [test]> select * from t1 where d1 is null; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | +---------------------+ MariaDB [test]> create view v1 as select * from t1; Query OK, 0 rows affected (0.00 sec) MariaDB [test]> select * from v1; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | | 1979-09-03 20:49:36 | +---------------------+ MariaDB [test]> select * from v1 where d1 is null; Empty set (0.00 sec) MariaDB [test]> create algorithm=merge view v2 as select * from t1; Query OK, 0 rows affected (0.00 sec) MariaDB [test]> select * from v2; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | | 1979-09-03 20:49:36 | +---------------------+ MariaDB [test]> select * from v2 where d1 is null; MariaDB [test]> create algorithm=temptable view v3 as select * from t1; Query OK, 0 rows affected (0.01 sec)   MariaDB [test]> select * from v3; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | | 1979-09-03 20:49:36 | +---------------------+ MariaDB [test]> select * from v3 where d1 is null; +---------------------+ | d1 | +---------------------+ | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | +---------------------+ So for the views v1,v2 we have wrong results for the query select * from v1/v2 where d1 is null.

            OK to push

            sanja Oleksandr Byelkin added a comment - OK to push

            A fix for this bug was pushed into the 5.5 tree.

            igor Igor Babaev (Inactive) added a comment - A fix for this bug was pushed into the 5.5 tree.

            People

              igor Igor Babaev (Inactive)
              alice Alice Sherepa
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

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