• Jorgen Loland's avatar
    Bug#54812: assert in Diagnostics_area::set_ok_status · 1945734c
    Jorgen Loland authored
               during EXPLAIN
    
    Before the patch, send_eof() of some subclasses of 
    select_result (e.g., select_send::send_eof()) could 
    handle being called after an error had occured while others 
    could not. The methods that were not well-behaved would trigger
    an ASSERT on debug builds. Release builds were not affected.
    
    Consider the following query as an example for how the ASSERT
    could be triggered:
    
    A user without execute privilege on f() does
       SELECT MAX(key1) INTO @dummy FROM t1 WHERE f() < 1;
    resulting in "ERROR 42000: execute command denied to user..." 
    
    The server would end the query by calling send_eof(). The 
    fact that the error had occured would make the ASSERT trigger. 
    
    select_dumpvar::send_eof() was the offending method in the
    bug report, but the problem also applied to other 
    subclasses of select_result. This patch uniforms send_eof() 
    of all subclasses of select_result to handle being called 
    after an error has occured. 
    
    mysql-test/r/not_embedded_server.result:
      Added test for BUG#54812
    mysql-test/t/not_embedded_server.test:
      Added test for BUG#54812
    sql/sql_class.cc:
      send_eof() of all subclasses of select_result can now handle being
      called after an error has occured.
    sql/sql_insert.cc:
      send_eof() of all subclasses of select_result can now handle being
      called after an error has occured.
      Also fix call to abort() in select_create::send_eof(), which was supposed to abort the result set, not terminate the server. This call to abort() should have been changed when the function was renamed from abort_result_set() but was forgotten. New test case added by BUG#54812 covered this line and terminated server.
    sql/sql_prepare.cc:
      send_eof() of all subclasses of select_result can now handle being
      called after an error has occured.
    sql/sql_update.cc:
      send_eof() of all subclasses of select_result can now handle being
      called after an error has occured.
    1945734c
sql_prepare.cc 123 KB