• unknown's avatar
    Apply InnoDB snapshot innodb-5.1-ss1726. · 6d4b3c58
    unknown authored
    Bug #16979: AUTO_INC lock in InnoDB works a table level lock
      - this is a major change in InnoDB auto-inc handling.
    Bug #27950: Duplicate entry error in auto-inc after mysqld restart
      - Init AUTOINC from delete_row().
    Bug #28781: InnoDB increments auto-increment value incorrectly with ON DUPLICATE KEY UPDATE
      - Use value specified by MySQL, in update_row().
    
    
    mysql-test/r/innodb.result:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1655:
      Fix the innodb.test failure mentioned in r1654.
    storage/innobase/dict/dict0dict.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
    storage/innobase/dict/dict0mem.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
    storage/innobase/handler/ha_innodb.cc:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1718:
      Replace mysql_byte with uchar and remove the #define mysql_byte from
      ha_innodb.cc.  This cleanup was made possible as of r1550:
      
      
      Revision r1658:
      check_trx_exists(): Remove a redundant function call and assignment that
      was added by someone at MySQL.
      
      
      Revision r1656:
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
      
      
      Revision r1654:
      
      One test case in innodb.test fails because of auto-increment
      changes in r1562:1653:
      
      $diff innodb.result innodb.reject
      504c504
      < 3	test2		this will work
      ---
      > 4	test2		this will work
    storage/innobase/handler/ha_innodb.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1654:
      
      One test case in innodb.test fails because of auto-increment
      changes in r1562:1653:
      
      $diff innodb.result innodb.reject
      504c504
      < 3	test2		this will work
      ---
      > 4	test2		this will work
    storage/innobase/ibuf/ibuf0ibuf.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1715:
      ibuf0ibuf.c: Remove the unused prototype for dict_index_print_low()
      that was inadvertently added in r832.
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
    storage/innobase/include/dict0dict.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
    storage/innobase/include/dict0mem.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
      
      
      Revision r1719:
      Merge r1264 from branches/zip: Avoid memory fragmentation when
      adding column definitions to tables.
      
      dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
      allocation.  Allow it and "name" to be NULL.  These parameters are NULL
      when creating dummy indexes.
      
      dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
      
      dict_table_get_col_name(): Allow table->col_names to be NULL.
      
      dict_table_add_system_columns(), dict_table_add_to_cache():
      Add the parameter "heap".
      ---
      Additional changes that had to be merged from branches/zip:
      
      dict_table_add_system_columns(): New function, factored out from
      dict_table_add_to_cache().
      
      mlog_parse_index(): Add some consistency checks, and make use of
      dict_table_add_system_columns().
    storage/innobase/include/lock0lock.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1664:
      lock_number_of_rows_locked(): Fix a typo in comment, and make the comments
      in lock0lock.c and lock0lock.h identical.  The typo was incorrectly fixed in
      r1623.
    storage/innobase/include/row0mysql.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    storage/innobase/include/row0sel.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    storage/innobase/include/trx0trx.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    storage/innobase/include/ut0mem.h:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1713:
      Fix typo in comment.
    storage/innobase/log/log0recv.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1657:
      recv_init_crash_recovery(): remove trailing white space
    storage/innobase/row/row0mysql.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    storage/innobase/row/row0sel.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    storage/innobase/trx/trx0trx.c:
      Apply InnoDB snapshot innodb-5.1-ss1726.
      
      Revision r1645:
      Fix for bug# 16979, this is a major change in InnoDB auto-inc handling. There
      is one test that fails as of this commit. The updated test case should be
      part of the snapshot from MySQL shortly.
      
      Fix for bug# 27950 - Init AUTOINC from delete_row().
      
      Fix for bug# 28781 - Use value specified by MySQL, in update_row().
      
      Summary of structural changes:
      ==============================
      InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
      the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix 
      for simple INSERT statements (including multi-value inserts), we try and avoid
      acquiring the special AUTOINC table level lock unless another transaction has
      already reserved the AUTOINC table level lock, in which case we fall back
      to the old behavior of acquiring the AUTOINC table level lock.
      
      The max AUTOINC value is now read directly using the low level interface
      of InnoDB.
    6d4b3c58
row0mysql.c 108 KB