• unknown's avatar
    Fix for bug #31249: Assertion `!table || (!table->write_set || · 1a5f13a1
    unknown authored
    bitmap_is_set(table->write_set, fiel
    
    Problem: creating a temporary table we allocate the group buffer if needed
    followed by table bitmaps (see create_tmp_table()). Reserving less memory for 
    the group buffer than actually needed (used) for values retrieval may lead 
    to overlapping with followed bitmaps in the memory pool that in turn leads 
    to unpredictable consequences.
    
    As we use Item->max_length sometimes to calculate group buffer size,
    it must be set to proper value. In this particular case 
    Item_datetime_typecast::max_length is too small.
    
    Another problem is that we use max_length to calculate the group buffer
    key length for items represented as DATE/TIME fields which is superfluous.
    
    Fix: set Item_datetime_typecast::max_length properly,
    accurately calculate the group buffer key length for items 
    represented as DATE/TIME fields in the buffer.
    
    
    mysql-test/r/type_datetime.result:
      Fix for bug #31249: Assertion `!table || (!table->write_set || 
      bitmap_is_set(table->write_set, fiel
        - test result.
    mysql-test/t/type_datetime.test:
      Fix for bug #31249: Assertion `!table || (!table->write_set || 
      bitmap_is_set(table->write_set, fiel
        - test case.
    sql/item_timefunc.h:
      Fix for bug #31249: Assertion `!table || (!table->write_set || 
      bitmap_is_set(table->write_set, fiel
        - set Item_datetime_typecast::max_length properly.
    sql/sql_select.cc:
      Fix for bug #31249: Assertion `!table || (!table->write_set || 
      bitmap_is_set(table->write_set, fiel
        - the group buffer key length for items represented as 
      DATE/TIME fields in the buffer should be calculated using
      the maximum pack length of such fields (== 8), using 
      max_length here is redundant.
    1a5f13a1
sql_select.cc 493 KB