Commit b04dd7e2 authored by unknown's avatar unknown
Browse files

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.


mysql-test/r/partition.result:
  Fix for bug#18753 Partitions: auto_increment fails
  test case
mysql-test/t/partition.test:
  Fix for bug#18753 Partitions: auto_increment fails
  test case
parent e0a19fd9
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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
+15 −0
Original line number Diff line number Diff line
@@ -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
+8 −6
Original line number Diff line number Diff line
@@ -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);
}