Commit 198578d6 authored by unknown's avatar unknown
Browse files

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 b0cc9d7a
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -1714,6 +1714,26 @@ innobase_close_connection(
** 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. */

+5 −0
Original line number Diff line number Diff line
@@ -96,6 +96,11 @@ class ha_innobase: public handler
  	{
  	}
  	~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 *index_type(uint key_number) { return "BTREE"; }
+6 −0
Original line number Diff line number Diff line
@@ -385,6 +385,12 @@ class handler :public Sql_alloc
  virtual ha_rows estimate_rows_upper_bound()
  { 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 "";}

  int ha_index_init(uint idx)
+25 −4
Original line number Diff line number Diff line
@@ -2046,10 +2046,31 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
    tmp_buff= file->table_type();
    table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
    table->field[5]->store((longlong) share->frm_version);
    enum row_type row_type = file->get_row_type();
    switch (row_type) {
    case ROW_TYPE_NOT_USED:
    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);
    if (!tables->schema_table)
    {