From 683ce57f452fb08f27a9c089649a8a583f950bfc Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Mar 2006 01:02:44 -0600 Subject: [PATCH] BUG # 17631 SHOW TABLE STATUS reports wrong engine mysql-test/r/partition.result: results block for bug # 17631 mysql-test/t/partition.test: test block for bug #17631 sql/ha_partition.cc: move table_type func to .cc file and return table_type from the first handler. This is acceptable since we know we have at least one handler and we currently do not support multiple engine types. Later, we'll need to extend this to return some type of delimited list sql/ha_partition.h: removed inline version of this function sql/sql_show.cc: if the table is partitioned, we add the term "partitioned" to the create options. We make sure we are using the partitioned handlerton before we do this. When we support more native partition handlers then this will need to change. --- mysql-test/r/partition.result | 12 +++++++++++- mysql-test/t/partition.test | 13 +++++++++++++ sql/ha_partition.cc | 7 +++++++ sql/ha_partition.h | 3 +-- sql/sql_show.cc | 6 ++++++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index f5d8cc8f349..970e5234ca8 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -642,7 +642,7 @@ 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 +t1 InnoDB 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned drop table t1; create table t2 (s1 int not null auto_increment, primary key (s1)) partition by list (s1) (partition p1 values in (1),partition p2 values in (2),partition p3 values in (3),partition p4 values in (4)); insert into t2 values (null),(null),(null); @@ -819,4 +819,14 @@ explain partitions select * from t1 where a is null or a < 0 or a > 1; id select_type table partitions type possible_keys key key_len ref rows Extra 1 SIMPLE t1 pn,p2 ALL NULL NULL NULL NULL 2 Using where drop table t1; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20)) +ENGINE=MyISAM DEFAULT CHARSET=latin1 +PARTITION BY RANGE(id) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM, +PARTITION p1 VALUES LESS THAN (20) ENGINE = MyISAM, +PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM); +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 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned +DROP TABLE t1; End of 5.1 tests diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index c3e32e832bf..b3a6319643d 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -924,4 +924,17 @@ select * from t1 where a is null or a < 0 or a > 1; explain partitions select * from t1 where a is null or a < 0 or a > 1; drop table t1; +# +#Bug# 17631 SHOW TABLE STATUS reports wrong engine +# +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20)) +ENGINE=MyISAM DEFAULT CHARSET=latin1 +PARTITION BY RANGE(id) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM, +PARTITION p1 VALUES LESS THAN (20) ENGINE = MyISAM, +PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM); +--replace_column 6 0 7 0 8 0 9 0 12 NULL 13 NULL 14 NULL +SHOW TABLE STATUS; +DROP TABLE t1; + --echo End of 5.1 tests diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 0a8f92d6813..cc34ace546a 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -257,6 +257,13 @@ void ha_partition::init_handler_variables() } +const char *ha_partition::table_type() const +{ + // we can do this since we only support a single engine type + return m_file[0]->table_type(); +} + + /* Destructor method diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 32ea75fabf0..96b615df71a 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -524,8 +524,7 @@ public: virtual const char *index_type(uint inx); /* The name of the table type that will be used for display purposes */ - virtual const char *table_type() const - { return "PARTITION"; } + virtual const char *table_type() const; /* The name of the row type used for the underlying tables. */ virtual enum row_type get_row_type() const; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index da372d9063d..5c536714222 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2719,6 +2719,12 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables, ptr=strxmov(ptr, " row_format=", ha_row_type[(uint) share->row_type], NullS); +#ifdef WITH_PARTITION_STORAGE_ENGINE + if (share->db_type == &partition_hton && + share->partition_info != NULL && + ((partition_info*)share->partition_info)->no_parts > 0) + ptr= strmov(ptr, " partitioned"); +#endif table->field[19]->store(option_buff+1, (ptr == option_buff ? 0 : (uint) (ptr-option_buff)-1), cs);