• unknown's avatar
    Fix for bug #13825 "Triggers: crash if release savepoint" and for general · 11d4d7e6
    unknown authored
    handling of savepoints in stored routines.
    
    Fixed ha_rollback_to_savepoint()/ha_savepoint()/ha_release_savepoint()
    functions to properly handle savepoints inside of stored functions and
    triggers.
    Also now when we invoke stored function or trigger we create new savepoint
    level. We destroy it at the end of function/trigger execution and return back
    to old savepoint level.
    
    
    mysql-test/r/sp_trans.result:
      Added test for bug #13825 "Triggers: crash if release savepoint" and for
      general handling of savepoints in stored routines.
    mysql-test/t/sp_trans.test:
      Added test for bug #13825 "Triggers: crash if release savepoint" and for
      general handling of savepoints in stored routines.
    sql/ha_innodb.cc:
      innobase_savepoint():
        Replaced check which always failed due to similar check in caller
        with assertion.
    sql/handler.cc:
      ha_rollback_to_savepoint()/ha_savepoint()/ha_release_savepoint():
        Changed functions to properly support handling of savepoints
        inside of stored functions and triggers.
    sql/sql_class.cc:
      THD::reset_sub_statement_state()/restore_sub_statement_state():
        When we invoke stored function or trigger we should create new savepoint
        level. We should destroy it at the end of function/trigger execution and
        return back to old savepoint level. To support this behavior we should
        save and reset list of current savepoints on entering function and restore
        old list when we leave it.
    sql/sql_class.h:
      Sub_statement_state:
        When we invoke stored function or trigger we should create new savepoint
        level. We should destroy it at the end of function/trigger execution and
        return back to old savepoint level. To support this behavior added "savepoint"
        member which is used to save/restore list of current savepoints on
        entering/leaving function.
    sql/sql_parse.cc:
      mysql_execute_command():
        Changed processing of SQLCOM_SAVEPOINT so now it is not ignored when
        we are in autocommit mode and savepoint is set inside of stored
        function or trigger.
    11d4d7e6
sql_class.cc 54.1 KB