Commit 57dcfd87 authored by unknown's avatar unknown

InnoDB: Make SHOW TABLE STATUS report Row_format=Compact and

Row_format=Redundant


sql/ha_innodb.cc:
  Implement get_row_type()
sql/ha_innodb.h:
  Declare get_row_type()
sql/handler.h:
  Declare get_row_type()
sql/sql_show.cc:
  get_schema_tables_record(): Primarily invoke handler::get_row_type()
  in order to determine the row type within the storage engine.
  Secondarily use the old method of examining the HA_OPTION flags.
parent ec6af0e0
...@@ -1714,6 +1714,26 @@ innobase_close_connection( ...@@ -1714,6 +1714,26 @@ innobase_close_connection(
** InnoDB database tables ** InnoDB database tables
*****************************************************************************/ *****************************************************************************/
/********************************************************************
Get the record format from the data dictionary. */
enum row_type
ha_innobase::get_row_type() const
/*=============================*/
/* out: ROW_TYPE_REDUNDANT or ROW_TYPE_COMPACT */
{
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
if (prebuilt && prebuilt->table) {
if (prebuilt->table->comp) {
return(ROW_TYPE_COMPACT);
} else {
return(ROW_TYPE_REDUNDANT);
}
}
ut_ad(0);
return(ROW_TYPE_NOT_USED);
}
/******************************************************************** /********************************************************************
Gives the file extension of an InnoDB single-table tablespace. */ Gives the file extension of an InnoDB single-table tablespace. */
......
...@@ -96,6 +96,11 @@ class ha_innobase: public handler ...@@ -96,6 +96,11 @@ class ha_innobase: public handler
{ {
} }
~ha_innobase() {} ~ha_innobase() {}
/*
Get the row type from the storage engine. If this method returns
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
*/
enum row_type get_row_type() const;
const char* table_type() const { return("InnoDB");} const char* table_type() const { return("InnoDB");}
const char *index_type(uint key_number) { return "BTREE"; } const char *index_type(uint key_number) { return "BTREE"; }
......
...@@ -385,6 +385,12 @@ class handler :public Sql_alloc ...@@ -385,6 +385,12 @@ class handler :public Sql_alloc
virtual ha_rows estimate_rows_upper_bound() virtual ha_rows estimate_rows_upper_bound()
{ return records+EXTRA_RECORDS; } { return records+EXTRA_RECORDS; }
/*
Get the row type from the storage engine. If this method returns
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
*/
virtual enum row_type get_row_type() const { return ROW_TYPE_NOT_USED; }
virtual const char *index_type(uint key_number) { DBUG_ASSERT(0); return "";} virtual const char *index_type(uint key_number) { DBUG_ASSERT(0); return "";}
int ha_index_init(uint idx) int ha_index_init(uint idx)
......
...@@ -2046,10 +2046,31 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables, ...@@ -2046,10 +2046,31 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
tmp_buff= file->table_type(); tmp_buff= file->table_type();
table->field[4]->store(tmp_buff, strlen(tmp_buff), cs); table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
table->field[5]->store((longlong) share->frm_version); table->field[5]->store((longlong) share->frm_version);
tmp_buff= ((share->db_options_in_use & enum row_type row_type = file->get_row_type();
HA_OPTION_COMPRESS_RECORD) ? "Compressed" : switch (row_type) {
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ? case ROW_TYPE_NOT_USED:
"Dynamic" : "Fixed"); case ROW_TYPE_DEFAULT:
tmp_buff= ((share->db_options_in_use &
HA_OPTION_COMPRESS_RECORD) ? "Compressed" :
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ?
"Dynamic" : "Fixed");
break;
case ROW_TYPE_FIXED:
tmp_buff= "Fixed";
break;
case ROW_TYPE_DYNAMIC:
tmp_buff= "Dynamic";
break;
case ROW_TYPE_COMPRESSED:
tmp_buff= "Compressed";
break;
case ROW_TYPE_REDUNDANT:
tmp_buff= "Redundant";
break;
case ROW_TYPE_COMPACT:
tmp_buff= "Compact";
break;
}
table->field[6]->store(tmp_buff, strlen(tmp_buff), cs); table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
if (!tables->schema_table) if (!tables->schema_table)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment