Commit e99b11d3 authored by unknown's avatar unknown
Browse files

Bug #14673: Wrong InnoDB default row format

  Make partitioned tables report the row format of the underlying
  tables (when they are all the same).


mysql-test/r/partition.result:
  Add new results
mysql-test/t/partition.test:
  Add regression test
sql/ha_partition.cc:
  Add get_row_type(), which peeks at the underlying tables and returns
  the row_type if they are consistent.
sql/ha_partition.h:
  Add get_row_type() method
parent 56df7223
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -422,4 +422,9 @@ partition_name partition_description table_rows
x123	11,12	1
x234	NULL,1	1
drop table t1;
create table t1 (a int) engine=innodb partition by hash(a) ;
show table status like 't1';
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	PARTITION	10	Compact	2	8192	16384	0	0	0	NULL	NULL	NULL	NULL	latin1_swedish_ci	NULL		
drop table t1;
End of 5.1 tests
+7 −0
Original line number Diff line number Diff line
@@ -540,4 +540,11 @@ select partition_name, partition_description, table_rows
from information_schema.partitions where table_schema ='test';
drop table t1;

#
# Bug #14673: Wrong InnoDB default row format
#
create table t1 (a int) engine=innodb partition by hash(a) ;
show table status like 't1';
drop table t1;

--echo End of 5.1 tests
+16 −0
Original line number Diff line number Diff line
@@ -5115,6 +5115,22 @@ const char *ha_partition::index_type(uint inx)
}


enum row_type ha_partition::get_row_type() const
{
  handler **file;
  enum row_type type= (*m_file)->get_row_type();

  for (file= m_file, file++; *file; file++)
  {
    enum row_type part_type= (*file)->get_row_type();
    if (part_type != type)
      return ROW_TYPE_NOT_USED;
  }

  return type;
}


void ha_partition::print_error(int error, myf errflag)
{
  DBUG_ENTER("ha_partition::print_error");
+3 −0
Original line number Diff line number Diff line
@@ -527,6 +527,9 @@ class ha_partition :public handler
  virtual const char *table_type() const
  { return "PARTITION"; }

  /* The name of the row type used for the underlying tables. */
  virtual enum row_type get_row_type() const;

  /*
     Handler specific error messages
  */