diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 2e293df50e2..324605faf79 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -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 diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index a3aa3f6f025..dee83f551a0 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -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 diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 7cf841a5d71..3f74b555f4a 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -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); }