Commit 9cfcc214 authored by unknown's avatar unknown
Browse files

BUG#21173: SHOW TABLE STATUS crashes on InnoDB tables

Don't use get_auto_increment on tables without auto_increment fields


mysql-test/r/partition.result:
  new test case
mysql-test/t/partition.test:
  new test case
sql/ha_partition.cc:
  Don't use get_auto_increment on tables without auto_increment fields
parent 5e2babfe
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
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()
+10 −0
Original line number Diff line number Diff line
@@ -9,6 +9,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
#
+9 −4
Original line number Diff line number Diff line
@@ -4183,10 +4183,16 @@ 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 */

    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)
  {
    DBUG_PRINT("info", ("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;
}