diff options
-rw-r--r-- | mysql-test/r/partition.result | 8 | ||||
-rw-r--r-- | mysql-test/t/partition.test | 10 | ||||
-rw-r--r-- | sql/ha_partition.cc | 13 |
3 files changed, 27 insertions, 4 deletions
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index e95489864f7..1d186f0a56a 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -1,5 +1,13 @@ drop table if exists t1; create table t1 (a int) +engine = innodb +partition by key (a); +insert into t1 values (0); +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 InnoDB 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned +drop table t1; +create table t1 (a int) partition by list (a) (partition p0 values in (1)); create procedure pz() diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index d4e930f91ec..dc1d96298d2 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -10,6 +10,16 @@ drop table if exists t1; --enable_warnings # +# Bug 21173: SHOW TABLE STATUS crashes server in InnoDB +# +create table t1 (a int) +engine = innodb +partition by key (a); +insert into t1 values (0); +show table status; +drop table t1; + +# # Bug 19309 Partitions: Crash if double procedural alter # create table t1 (a int) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 615c4bfb1bf..042b23632a6 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -4183,9 +4183,15 @@ void ha_partition::info(uint flag) ulonglong nb_reserved_values; DBUG_PRINT("info", ("HA_STATUS_AUTO")); /* we don't want to reserve any values, it's pure information */ - get_auto_increment(0, 0, 0, &stats.auto_increment_value, - &nb_reserved_values); - release_auto_increment(); + + if (table->found_next_number_field) + { + get_auto_increment(0, 0, 0, &stats.auto_increment_value, + &nb_reserved_values); + release_auto_increment(); + } + else + stats.auto_increment_value= ~(ulonglong)(0); } if (flag & HA_STATUS_VARIABLE) { @@ -5363,7 +5369,6 @@ void ha_partition::get_auto_increment(ulonglong offset, ulonglong increment, if (increment) // If not check for values *nb_reserved_values= (last_value == ULONGLONG_MAX) ? ULONGLONG_MAX : ((last_value - *first_value) / increment); - DBUG_VOID_RETURN; } |