• unknown's avatar
    A pre-requisite for the fix for Bug#12713 "Error in a stored function · 0fbc29c1
    unknown authored
    called from a SELECT doesn't cause ROLLBACK of state"
    Make private all class handler methods (PSEA API) that may modify
    data. Introduce and deploy public ha_* wrappers for these methods in 
    all sql/.
    This necessary to keep track of all data modifications in sql/,
    which is in turn necessary to be able to optimize two-phase
    commit of those transactions that do not modify data.
    
    
    sql/ha_partition.cc:
      Class ha_partition is no longer a friend of class handler.
      Use the public handler interface (handler::ha_ methods) for partition
      operations.
      Remove unnecessary casts from char[] to const char *.ppзи выафвыаafa
    sql/handler.cc:
      Function ha_create_table() is no longer a friend of class handler.
      Use public handler::change_table_ptr() to access private members.
      This fixes a subtle bug (no test case in the test suite) when a
      deletion error occurs inside one partition of a partitioned engine. 
      The old code would crash in handler::print_error() in this case.
      
      Implement the newly introduced public ha_* wrappers of the private
      virtual handler methods.
    sql/handler.h:
      Introduce ha_* wrappers to all class handler methods that may
      modify data. This is necessary to be able to keep track of
      data modifying operations of class handler and optimize read-only
      transactions.
    sql/item_sum.cc:
      delete_all_rows -> ha_delete_all_rows
    sql/sql_base.cc:
      Use the new public wrappers.
    sql/sql_delete.cc:
      delete_all_rows -> ha_delete_all_rows
    sql/sql_partition.cc:
      Use the new public wrappers.
    sql/sql_select.cc:
      delete_all_rows -> ha_delete_all_rows
      delete_table -> ha_delete_table
      disabe_indexes -> ha_disable_idnexes
    sql/sql_show.cc:
      delete_all_rows -> ha_delete_all_rows
    sql/sql_table.cc:
      Use the public wrappers for class handler DDL methods.
      All methods which may change handler data are now accessed via a public
      wrapper.
    sql/sql_union.cc:
      delete_all_rows -> ha_delete_all_rows
      {enable,disable}_indexes -> ha_{enable,disable}_indexes
    sql/sql_update.cc:
      bulk_update_row -> ha_bulk_update_row
    sql/unireg.cc:
      create_handler_files -> ha_create_handler_files
    0fbc29c1
sql_update.cc 61.4 KB