mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Fix bug# 18274 InnoDB auto_increment field reset on OPTIMIZE TABLE
OPTIMIZE TABLE recreates the whole table. That is why the counter gets reset. Making the next autoinc column persistent is a separate issue from resetting the value after an OPTIMIZE TABLE. We already have a check for ALTER TABLE and CREATE INDEX to preserve the value on table recreate. We should be able to add an additional check for OPTIMIZE TABLE to preserve the next value. rb://519 Approved by Jimmy Yang.
This commit is contained in:
@@ -6808,23 +6808,25 @@ ha_innobase::create(
|
||||
setup at this stage and so we use thd. */
|
||||
|
||||
/* We need to copy the AUTOINC value from the old table if
|
||||
this is an ALTER TABLE or CREATE INDEX because CREATE INDEX
|
||||
does a table copy too. */
|
||||
this is an ALTER|OPTIMIZE TABLE or CREATE INDEX because CREATE INDEX
|
||||
does a table copy too. If query was one of :
|
||||
|
||||
CREATE TABLE ...AUTO_INCREMENT = x; or
|
||||
ALTER TABLE...AUTO_INCREMENT = x; or
|
||||
OPTIMIZE TABLE t; or
|
||||
CREATE INDEX x on t(...);
|
||||
|
||||
Find out a table definition from the dictionary and get
|
||||
the current value of the auto increment field. Set a new
|
||||
value to the auto increment field if the value is greater
|
||||
than the maximum value in the column. */
|
||||
|
||||
if (((create_info->used_fields & HA_CREATE_USED_AUTO)
|
||||
|| thd_sql_command(thd) == SQLCOM_ALTER_TABLE
|
||||
|| thd_sql_command(thd) == SQLCOM_OPTIMIZE
|
||||
|| thd_sql_command(thd) == SQLCOM_CREATE_INDEX)
|
||||
&& create_info->auto_increment_value > 0) {
|
||||
|
||||
/* Query was one of :
|
||||
CREATE TABLE ...AUTO_INCREMENT = x; or
|
||||
ALTER TABLE...AUTO_INCREMENT = x; or
|
||||
CREATE INDEX x on t(...);
|
||||
Find out a table definition from the dictionary and get
|
||||
the current value of the auto increment field. Set a new
|
||||
value to the auto increment field if the value is greater
|
||||
than the maximum value in the column. */
|
||||
|
||||
auto_inc_value = create_info->auto_increment_value;
|
||||
|
||||
dict_table_autoinc_lock(innobase_table);
|
||||
|
||||
Reference in New Issue
Block a user