Commit fc27d038 authored by Sergey Glukhov's avatar Sergey Glukhov

Bug#38909 CREATE_OPTIONS in information_schema produces wrong results

table->partition_info is unitialized when we open frm file only.
The fix is check share->partition_info_len which is set on
frm opening stage.


mysql-test/r/information_schema_part.result:
  test result
mysql-test/t/information_schema_part.test:
  test case
sql/sql_show.cc:
  table->partition_info is unitialized when we open frm file only.
  The fix is check share->partition_info_len which is set on
  frm opening stage.
parent 53b30523
...@@ -145,3 +145,9 @@ table_schema = "test" AND table_name = "t1"; ...@@ -145,3 +145,9 @@ table_schema = "test" AND table_name = "t1";
PARTITION_DESCRIPTION PARTITION_DESCRIPTION
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53
drop table t1; drop table t1;
drop table if exists t1;
create table t1 (f1 int key) partition by key(f1) partitions 2;
select create_options from information_schema.tables where table_schema="test";
create_options
partitioned
drop table t1;
...@@ -121,3 +121,13 @@ SHOW CREATE TABLE t1; ...@@ -121,3 +121,13 @@ SHOW CREATE TABLE t1;
SELECT PARTITION_DESCRIPTION FROM information_schema.partitions WHERE SELECT PARTITION_DESCRIPTION FROM information_schema.partitions WHERE
table_schema = "test" AND table_name = "t1"; table_schema = "test" AND table_name = "t1";
drop table t1; drop table t1;
#
# Bug#38909 CREATE_OPTIONS in information_schema produces wrong results
#
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1 (f1 int key) partition by key(f1) partitions 2;
select create_options from information_schema.tables where table_schema="test";
drop table t1;
...@@ -3511,6 +3511,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables, ...@@ -3511,6 +3511,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
TABLE_SHARE *share= show_table->s; TABLE_SHARE *share= show_table->s;
handler *file= show_table->file; handler *file= show_table->file;
handlerton *tmp_db_type= share->db_type(); handlerton *tmp_db_type= share->db_type();
bool is_partitioned= FALSE;
if (share->tmp_table == SYSTEM_TMP_TABLE) if (share->tmp_table == SYSTEM_TMP_TABLE)
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs); table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
else if (share->tmp_table) else if (share->tmp_table)
...@@ -3527,7 +3528,10 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables, ...@@ -3527,7 +3528,10 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
if (share->db_type() == partition_hton && if (share->db_type() == partition_hton &&
share->partition_info_len) share->partition_info_len)
{
tmp_db_type= share->default_part_db_type; tmp_db_type= share->default_part_db_type;
is_partitioned= TRUE;
}
#endif #endif
tmp_buff= (char *) ha_resolve_storage_engine_name(tmp_db_type); tmp_buff= (char *) ha_resolve_storage_engine_name(tmp_db_type);
table->field[4]->store(tmp_buff, strlen(tmp_buff), cs); table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
...@@ -3572,9 +3576,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables, ...@@ -3572,9 +3576,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
NullS); NullS);
} }
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
if (show_table->s->db_type() == partition_hton && if (is_partitioned)
show_table->part_info != NULL &&
show_table->part_info->no_parts > 0)
ptr= strmov(ptr, " partitioned"); ptr= strmov(ptr, " partitioned");
#endif #endif
if (share->transactional != HA_CHOICE_UNDEF) if (share->transactional != HA_CHOICE_UNDEF)
......
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