• Mattias Jonsson's avatar
    Bug#20577: Partitions: use of to_days() function leads to selection failures · 591141d9
    Mattias Jonsson authored
    Problem was that the partition containing NULL values
    was pruned away, since '2001-01-01' < '2001-02-00' but
    TO_DAYS('2001-02-00') is NULL.
    
    Added the NULL partition for RANGE/LIST partitioning on TO_DAYS()
    function to be scanned too.
    
    Also fixed a bug that added ALLOW_INVALID_DATES to sql_mode
    (SELECT * FROM t WHERE date_col < '1999-99-99' on a RANGE/LIST
    partitioned table would add it).
    
    mysql-test/include/partition_date_range.inc:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Added include file to decrease test code duplication
    mysql-test/r/partition_pruning.result:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Added test results
    mysql-test/r/partition_range.result:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Updated test result.
      This fix adds the partition containing NULL values to
      the list of partitions to be scanned.
    mysql-test/t/partition_pruning.test:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Added test case
    sql/item.h:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Added MONOTONIC_*INCREASE_NOT_NULL values to be used by TO_DAYS.
    sql/item_timefunc.cc:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Calculate the number of days as return value even for invalid dates.
      This is so that pruning can be used even for invalid dates.
    sql/opt_range.cc:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Fixed a bug that added ALLOW_INVALID_DATES to sql_mode
      (SELECT * FROM t WHERE date_col < '1999-99-99' on a RANGE/LIST
      partitioned table would add it).
    sql/partition_info.h:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Resetting ret_null_part when a single partition is to be used, this
      to avoid adding the NULL partition.
    sql/sql_partition.cc:
      Bug#20577: Partitions: use of to_days() function leads to selection failures
      
      Always include the NULL partition if RANGE or LIST.
      Use the returned value for the function for pruning, even if
      it is marked as NULL, so that even '2000-00-00' can be
      used for pruning, even if TO_DAYS('2000-00-00') is NULL.
      
      Changed == to >= in get_next_partition_id_list to avoid
      crash if part_iter->part_nums is not correctly setup.
    591141d9
partition_pruning.test 27.3 KB