mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for bug #7220: information_schema: errors in "character_sets"
This commit is contained in:
@ -156,14 +156,14 @@ drop tables testtets.t4, testtets.t1, t2, t3;
|
|||||||
drop database testtets;
|
drop database testtets;
|
||||||
select * from information_schema.CHARACTER_SETS
|
select * from information_schema.CHARACTER_SETS
|
||||||
where CHARACTER_SET_NAME like 'latin1%';
|
where CHARACTER_SET_NAME like 'latin1%';
|
||||||
CHARACTER_SET_NAME DESCRIPTION DEFAULT_COLLATE_NAME MAXLEN
|
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 latin1_swedish_ci ISO 8859-1 West European 1
|
||||||
SHOW CHARACTER SET LIKE 'latin1%';
|
SHOW CHARACTER SET LIKE 'latin1%';
|
||||||
Charset Description Default collation Maxlen
|
Charset Description Default collation Maxlen
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||||
SHOW CHARACTER SET * LIKE 'latin1%';
|
SHOW CHARACTER SET * LIKE 'latin1%';
|
||||||
CHARACTER_SET_NAME DESCRIPTION DEFAULT_COLLATE_NAME MAXLEN
|
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 latin1_swedish_ci ISO 8859-1 West European 1
|
||||||
SHOW CHARACTER SET WHERE CHARACTER_SET_NAME like 'latin1%';
|
SHOW CHARACTER SET WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||||
Charset Description Default collation Maxlen
|
Charset Description Default collation Maxlen
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||||
@ -171,8 +171,8 @@ SHOW CHARACTER SET CHARACTER_SET_NAME WHERE CHARACTER_SET_NAME like 'latin1%';
|
|||||||
CHARACTER_SET_NAME
|
CHARACTER_SET_NAME
|
||||||
latin1
|
latin1
|
||||||
SHOW CHARACTER SET * WHERE CHARACTER_SET_NAME like 'latin1%';
|
SHOW CHARACTER SET * WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||||
CHARACTER_SET_NAME DESCRIPTION DEFAULT_COLLATE_NAME MAXLEN
|
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 latin1_swedish_ci ISO 8859-1 West European 1
|
||||||
select * from information_schema.COLLATIONS
|
select * from information_schema.COLLATIONS
|
||||||
where COLLATION_NAME like 'latin1%';
|
where COLLATION_NAME like 'latin1%';
|
||||||
COLLATION_NAME CHARSET ID DEFAULT COMPILED SORTLEN
|
COLLATION_NAME CHARSET ID DEFAULT COMPILED SORTLEN
|
||||||
@ -471,8 +471,8 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
|||||||
Table Create Table
|
Table Create Table
|
||||||
character_sets CREATE TEMPORARY TABLE `character_sets` (
|
character_sets CREATE TEMPORARY TABLE `character_sets` (
|
||||||
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
||||||
`DESCRIPTION` varchar(60) NOT NULL default '',
|
|
||||||
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
||||||
|
`DESCRIPTION` varchar(60) NOT NULL default '',
|
||||||
`MAXLEN` bigint(3) NOT NULL default '0'
|
`MAXLEN` bigint(3) NOT NULL default '0'
|
||||||
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=2252
|
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=2252
|
||||||
set names latin2;
|
set names latin2;
|
||||||
@ -480,23 +480,23 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
|||||||
Table Create Table
|
Table Create Table
|
||||||
character_sets CREATE TEMPORARY TABLE `character_sets` (
|
character_sets CREATE TEMPORARY TABLE `character_sets` (
|
||||||
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
||||||
`DESCRIPTION` varchar(60) NOT NULL default '',
|
|
||||||
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
||||||
|
`DESCRIPTION` varchar(60) NOT NULL default '',
|
||||||
`MAXLEN` bigint(3) NOT NULL default '0'
|
`MAXLEN` bigint(3) NOT NULL default '0'
|
||||||
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=2252
|
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=2252
|
||||||
set names latin1;
|
set names latin1;
|
||||||
create table t1 select * from information_schema.CHARACTER_SETS
|
create table t1 select * from information_schema.CHARACTER_SETS
|
||||||
where CHARACTER_SET_NAME like "latin1";
|
where CHARACTER_SET_NAME like "latin1";
|
||||||
select * from t1;
|
select * from t1;
|
||||||
CHARACTER_SET_NAME DESCRIPTION DEFAULT_COLLATE_NAME MAXLEN
|
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
latin1 latin1_swedish_ci ISO 8859-1 West European 1
|
||||||
alter table t1 default character set utf8;
|
alter table t1 default character set utf8;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
`CHARACTER_SET_NAME` varchar(30) NOT NULL default '',
|
||||||
`DESCRIPTION` varchar(60) NOT NULL default '',
|
|
||||||
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
`DEFAULT_COLLATE_NAME` varchar(60) NOT NULL default '',
|
||||||
|
`DESCRIPTION` varchar(60) NOT NULL default '',
|
||||||
`MAXLEN` bigint(3) NOT NULL default '0'
|
`MAXLEN` bigint(3) NOT NULL default '0'
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -2551,10 +2551,10 @@ int fill_schema_charsets(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
{
|
{
|
||||||
restore_record(table, default_values);
|
restore_record(table, default_values);
|
||||||
table->field[0]->store(tmp_cs->csname, strlen(tmp_cs->csname), scs);
|
table->field[0]->store(tmp_cs->csname, strlen(tmp_cs->csname), scs);
|
||||||
table->field[1]->store(tmp_cs->comment ? tmp_cs->comment : "",
|
table->field[1]->store(tmp_cs->name, strlen(tmp_cs->name), scs);
|
||||||
|
table->field[2]->store(tmp_cs->comment ? tmp_cs->comment : "",
|
||||||
strlen(tmp_cs->comment ? tmp_cs->comment : ""),
|
strlen(tmp_cs->comment ? tmp_cs->comment : ""),
|
||||||
scs);
|
scs);
|
||||||
table->field[2]->store(tmp_cs->name, strlen(tmp_cs->name), scs);
|
|
||||||
table->field[3]->store((longlong) tmp_cs->mbmaxlen);
|
table->field[3]->store((longlong) tmp_cs->mbmaxlen);
|
||||||
table->file->write_row(table->record[0]);
|
table->file->write_row(table->record[0]);
|
||||||
}
|
}
|
||||||
@ -3216,6 +3216,28 @@ int make_columns_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int make_character_sets_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
||||||
|
{
|
||||||
|
int fields_arr[]= {0, 2, 1, 3, -1};
|
||||||
|
int *field_num= fields_arr;
|
||||||
|
ST_FIELD_INFO *field_info;
|
||||||
|
for (; *field_num >= 0; field_num++)
|
||||||
|
{
|
||||||
|
field_info= &schema_table->fields_info[*field_num];
|
||||||
|
Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
|
||||||
|
if (field)
|
||||||
|
{
|
||||||
|
field->set_name(field_info->old_name,
|
||||||
|
strlen(field_info->old_name),
|
||||||
|
system_charset_info);
|
||||||
|
if (add_item_to_list(thd, field))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
||||||
{
|
{
|
||||||
int fields_arr[]= {2, 3, 4, 19, 16, 15, 14, 18, -1};
|
int fields_arr[]= {2, 3, 4, 19, 16, 15, 14, 18, -1};
|
||||||
@ -3439,8 +3461,8 @@ ST_FIELD_INFO columns_fields_info[]=
|
|||||||
ST_FIELD_INFO charsets_fields_info[]=
|
ST_FIELD_INFO charsets_fields_info[]=
|
||||||
{
|
{
|
||||||
{"CHARACTER_SET_NAME", 30, MYSQL_TYPE_STRING, 0, 0, "Charset"},
|
{"CHARACTER_SET_NAME", 30, MYSQL_TYPE_STRING, 0, 0, "Charset"},
|
||||||
{"DESCRIPTION", 60, MYSQL_TYPE_STRING, 0, 0, "Description"},
|
|
||||||
{"DEFAULT_COLLATE_NAME", 60, MYSQL_TYPE_STRING, 0, 0, "Default collation"},
|
{"DEFAULT_COLLATE_NAME", 60, MYSQL_TYPE_STRING, 0, 0, "Default collation"},
|
||||||
|
{"DESCRIPTION", 60, MYSQL_TYPE_STRING, 0, 0, "Description"},
|
||||||
{"MAXLEN", 3 ,MYSQL_TYPE_LONG, 0, 0, "Maxlen"},
|
{"MAXLEN", 3 ,MYSQL_TYPE_LONG, 0, 0, "Maxlen"},
|
||||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||||
};
|
};
|
||||||
@ -3621,7 +3643,7 @@ ST_SCHEMA_TABLE schema_tables[]=
|
|||||||
{"COLUMNS", columns_fields_info, create_schema_table,
|
{"COLUMNS", columns_fields_info, create_schema_table,
|
||||||
get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2},
|
get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2},
|
||||||
{"CHARACTER_SETS", charsets_fields_info, create_schema_table,
|
{"CHARACTER_SETS", charsets_fields_info, create_schema_table,
|
||||||
fill_schema_charsets, make_old_format, 0, -1, -1},
|
fill_schema_charsets, make_character_sets_old_format, 0, -1, -1},
|
||||||
{"COLLATIONS", collation_fields_info, create_schema_table,
|
{"COLLATIONS", collation_fields_info, create_schema_table,
|
||||||
fill_schema_collation, make_old_format, 0, -1, -1},
|
fill_schema_collation, make_old_format, 0, -1, -1},
|
||||||
{"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
|
{"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
|
||||||
|
Reference in New Issue
Block a user