• Jon Olav Hauglid's avatar
    Bug #58730 Assertion failed: table->key_read == 0 in close_thread_table, · 28a5059a
    Jon Olav Hauglid authored
               temptable views
    
    The TABLE::key_read field indicates if the optimizer has found that row
    retrieval only should access the index tree. The triggered assert
    inside close_thread_table() checks that this field has been reset when
    the table is about to be closed.
    
    During normal execution, these fields are reset right before tables are
    closed at the end of mysql_execute_command(). But in the case of errors,
    tables are closed earlier. The patch for Bug#52044 refactored the open
    tables code so that close_thread_tables() is called immediately if
    opening of tables fails. At this point in the execution, it could
    happend that all TABLE::key_read fields had not been properly reset,
    therefore triggering the assert.
    
    The problematic statement in this case was EXPLAIN where the query
    accessed two derived tables and where the first derived table was
    processed successfully while the second derived table was not.
    Since it was an EXPLAIN, TABLE::key_read fields were not reset after
    successful derived table processing since the state needs to be 
    accessible afterwards. When processing of the second derived table
    failed, it's corresponding SELECT_LEX_UNIT was cleaned, which caused
    it's TABLE::key_read fields to be reset. Since processing failed,
    the error path of open_and_lock_tables() was entered and
    close_thread_tables() was called. The assert was then triggered due
    to the TABLE::key_read fields set during processing of the first
    derived table.
    
    This patch fixes the problem by adding a new derived table processor,
    mysql_derived_cleanup() that is called after mysql_derived_filling().
    It causes cleanup of all SELECT_LEX_UNITs to be called, resetting
    all relevant TABLE::key_read fields.
    
    Test case added to derived.test.
    28a5059a
sql_derived.h 1.5 KB