Fix for bug#18753 Partitions: auto_increment fails

Current auto increment value is placed in partition in which latest
record was saved. So to get auto_increment they have to scan
all partitions and return max value.
parent d70035ca
......@@ -839,4 +839,21 @@ SHOW TABLE STATUS;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
DROP TABLE t1;
create table t1 (s1 int auto_increment primary key)
partition by list (s1)
(partition p1 values in (1),
partition p2 values in (2),
partition p3 values in (3));
insert into t1 values (null);
insert into t1 values (null);
insert into t1 values (null);
select auto_increment from information_schema.tables where table_name='t1';
auto_increment
4
select * from t1;
s1
1
2
3
drop table t1;
End of 5.1 tests
......@@ -956,4 +956,19 @@ PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM);
SHOW TABLE STATUS;
DROP TABLE t1;
#
# Bug#18753 Partitions: auto_increment fails
#
create table t1 (s1 int auto_increment primary key)
partition by list (s1)
(partition p1 values in (1),
partition p2 values in (2),
partition p3 values in (3));
insert into t1 values (null);
insert into t1 values (null);
insert into t1 values (null);
select auto_increment from information_schema.tables where table_name='t1';
select * from t1;
drop table t1;
--echo End of 5.1 tests
......@@ -4201,11 +4201,7 @@ void ha_partition::info(uint flag)
if (flag & HA_STATUS_AUTO)
{
DBUG_PRINT("info", ("HA_STATUS_AUTO"));
/*
The auto increment value is only maintained by the first handler
so we will only call this.
*/
m_file[0]->info(HA_STATUS_AUTO);
auto_increment_value= get_auto_increment();
}
if (flag & HA_STATUS_VARIABLE)
{
......@@ -5349,9 +5345,15 @@ void ha_partition::restore_auto_increment()
ulonglong ha_partition::get_auto_increment()
{
ulonglong auto_inc, max_auto_inc= 0;
DBUG_ENTER("ha_partition::get_auto_increment");
DBUG_RETURN(m_file[0]->get_auto_increment());
for (uint i= 0; i < m_tot_parts; i++)
{
auto_inc= m_file[i]->get_auto_increment();
set_if_bigger(max_auto_inc, auto_inc);
}
DBUG_RETURN(max_auto_inc);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment