diff options
author | unknown <heikki@hundin.mysql.fi> | 2002-11-15 22:59:16 +0200 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2002-11-15 22:59:16 +0200 |
commit | c17c9620efb0c7b4fe7efbe747bc918310771bbc (patch) | |
tree | 78becee45a7626cff603f7162007d0caa37f8f59 /sql | |
parent | 1ed60c671a79b652ba6c564a4246195f8bc97b42 (diff) | |
download | mariadb-git-c17c9620efb0c7b4fe7efbe747bc918310771bbc.tar.gz |
ha_innodb.cc:
Fix another bug introduced in 4.0.4 in AUTO_INCREMENT and deadlock or lock wait timeout
sql/ha_innodb.cc:
Fix another bug introduced in 4.0.4 in AUTO_INCREMENT and deadlock or lock wait timeout
Diffstat (limited to 'sql')
-rw-r--r-- | sql/ha_innodb.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index d473d27e1fc..46ddeb2c027 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -1800,6 +1800,8 @@ ha_innobase::write_row( goto func_exit; } + printf("Updated value to %lu + 1\n", (ulint)auto_inc); + dict_table_autoinc_update(prebuilt->table, auto_inc); } else { srv_conc_enter_innodb(prebuilt->trx); @@ -1865,8 +1867,12 @@ ha_innobase::write_row( introduced only in version 4.0.4. NOTE that a REPLACE command handles a duplicate key error itself, and we must not decrement the autoinc counter - if we are performing a REPLACE statement. This was fixed - in 4.0.6. */ + if we are performing a REPLACE statement. + NOTE 2: if there was an error, for example a deadlock, + which caused InnoDB to roll back the whole transaction + already in the call of row_insert_for_mysql(), we may no + longer have the AUTO-INC lock, and cannot decrement + the counter here. */ skip_auto_inc_decr = FALSE; @@ -1876,11 +1882,13 @@ ha_innobase::write_row( &skip_auto_inc_decr); } - if (!skip_auto_inc_decr && incremented_auto_inc_counter) { + if (!skip_auto_inc_decr && incremented_auto_inc_counter + && prebuilt->trx->auto_inc_lock) { dict_table_autoinc_decrement(prebuilt->table); } - if (!skip_auto_inc_decr && incremented_auto_inc_for_stat) { + if (!skip_auto_inc_decr && incremented_auto_inc_for_stat + && prebuilt->trx->auto_inc_lock) { auto_inc_counter_for_this_stat--; } } |