summaryrefslogtreecommitdiff
path: root/storage/innobase
diff options
context:
space:
mode:
authorunknown <gluh@mysql.com/eagle.(none)>2007-01-09 18:14:04 +0400
committerunknown <gluh@mysql.com/eagle.(none)>2007-01-09 18:14:04 +0400
commit2afe42d3e33a78ba74d92e45317349ceb9490d23 (patch)
treee2e6975152075eaf32aae90fa9810dfd901ec673 /storage/innobase
parent83951925925f49b2cdcb3b8ce685fc25998c16f6 (diff)
downloadmariadb-git-2afe42d3e33a78ba74d92e45317349ceb9490d23.tar.gz
Fix for bug#25026 `information_schema.KEY_COLUMN_USAGE`.`REFERENCED_TABLE_NAME` returns garbage
Unencode internal db & table name mysql-test/r/information_schema_inno.result: test result mysql-test/t/information_schema_inno.test: test case storage/innobase/handler/ha_innodb.cc: Unencode internal db & table name
Diffstat (limited to 'storage/innobase')
-rw-r--r--storage/innobase/handler/ha_innodb.cc22
1 files changed, 17 insertions, 5 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 4d835b41863..f8facb40a89 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -5933,6 +5933,9 @@ ha_innobase::get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
uint i;
FOREIGN_KEY_INFO f_key_info;
LEX_STRING *name= 0;
+ uint ulen;
+ char uname[NAME_LEN*3+1]; /* Unencoded name */
+ char db_name[NAME_LEN*3+1];
const char *tmp_buff;
tmp_buff= foreign->id;
@@ -5943,14 +5946,23 @@ ha_innobase::get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
f_key_info.forein_id= make_lex_string(thd, 0, tmp_buff,
(uint) strlen(tmp_buff), 1);
tmp_buff= foreign->referenced_table_name;
+
+ /* Database name */
i= 0;
while (tmp_buff[i] != '/')
- i++;
- f_key_info.referenced_db= make_lex_string(thd, 0,
- tmp_buff, i, 1);
+ {
+ db_name[i]= tmp_buff[i];
+ i++;
+ }
+ db_name[i]= 0;
+ ulen= filename_to_tablename(db_name, uname, sizeof(uname));
+ f_key_info.referenced_db= make_lex_string(thd, 0, uname, ulen, 1);
+
+ /* Table name */
tmp_buff+= i + 1;
- f_key_info.referenced_table= make_lex_string(thd, 0, tmp_buff,
- (uint) strlen(tmp_buff), 1);
+ ulen= filename_to_tablename(tmp_buff, uname, sizeof(uname));
+ f_key_info.referenced_table= make_lex_string(thd, 0, uname,
+ ulen, 1);
for (i= 0;;) {
tmp_buff= foreign->foreign_col_names[i];