• unknown's avatar
    Fix for LP BUG#676411 and MySQL BUG#52317 · bd5c45dc
    unknown authored
    This is a backport of the fix for
    MySQL BUG#52317: Assertion failing in Field_varstring::store () at field.cc:6833
    
    The orginal comment by Oystein is:
    
    In order for EXPLAIN to print const-refs, a Store_key_const_item object
    is created. This is different for normal execution of subqueries where
    a temporary store_key_item object is used instead. The problem is that
    EXPLAIN will execute subqueries.  This leads to a scenario where a
    store_key_const_item object it told to write to its underlying field.
    This results in a failing assert since the write set of the underlying
    table does not reflect this.  
    
    The resolution is to do the same trick as for store_key_item::copy_inner().
    That is, temporarily change the write set to allow writes to all columns.
    This is only necessary in debug version since non-debug version does not
    contain asserts on write_set.
    
    sql/sql_select.h:
      Temporarily change write_set in store_key_const_item::copy_inner() to
      allow initialization of underlying field.  This is necessary since 
      subqueries are executed for EXPLAIN.  (For normal execution, 
      store_key_item::copy_inner is used.)
    bd5c45dc
sql_select.h 70 KB