• Mattias Jonsson's avatar
    Bug#46362: Endpoint should be set to false for TO_DAYS(DATE) · 4655118b
    Mattias Jonsson authored
    There were a problem since pruning uses the field
    for comparison (while evaluate_join_record uses longlong),
    resulting in pruning failures when comparing DATE to DATETIME.
    
    Fix was to always comparing DATE vs DATETIME as DATETIME,
    by adding ' 00:00:00' to the DATE string.
    
    And adding optimization for comparing with 23:59:59, so that
    DATETIME_col > '2001-02-03 23:59:59' ->
    TO_DAYS(DATETIME_col) > TO_DAYS('2001-02-03 23:59:59') instead
    of '>='.
    
    mysql-test/r/partition_pruning.result:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Updated result-file
    mysql-test/t/partition_pruning.test:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Added testcases.
    sql-common/my_time.c:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      removed duplicate assignment.
    sql/item.cc:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Changed field_is_equal_to_item into field_cmp_to_item, to
      better handling DATE vs DATETIME comparision.
    sql/item.h:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Updated comment
    sql/item_timefunc.cc:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Added optimization (pruning) of DATETIME where time-part is
      23:59:59
    sql/opt_range.cc:
      Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
      
      Using the new stored_field_cmp_to_item for better pruning.
    4655118b
item_timefunc.cc 88.1 KB