diff options
author | unknown <gluh@mysql.com/eagle.(none)> | 2007-01-09 18:14:04 +0400 |
---|---|---|
committer | unknown <gluh@mysql.com/eagle.(none)> | 2007-01-09 18:14:04 +0400 |
commit | 2afe42d3e33a78ba74d92e45317349ceb9490d23 (patch) | |
tree | e2e6975152075eaf32aae90fa9810dfd901ec673 /storage/innobase | |
parent | 83951925925f49b2cdcb3b8ce685fc25998c16f6 (diff) | |
download | mariadb-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.cc | 22 |
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]; |