diff options
author | Annamalai Gurusami <annamalai.gurusami@oracle.com> | 2013-07-25 15:31:06 +0530 |
---|---|---|
committer | Annamalai Gurusami <annamalai.gurusami@oracle.com> | 2013-07-25 15:31:06 +0530 |
commit | b89e6ccfc4b8022ebc42d0493b5b77b66e1231b0 (patch) | |
tree | bff54b1de90456823e5d09d4c4babbab3720252a /storage | |
parent | 03940a7bd88131d3d9eacd1b2827f346d24e1483 (diff) | |
parent | a1ccfcf84d6528134d6c2b1e51182822821ca6ab (diff) | |
download | mariadb-git-b89e6ccfc4b8022ebc42d0493b5b77b66e1231b0.tar.gz |
Merge from mysql-5.1 to mysql-5.5
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 6 | ||||
-rw-r--r-- | storage/innobase/row/row0mysql.c | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index cd6ef0adb5a..eb6fc5f3537 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1205,7 +1205,8 @@ innobase_convert_from_id( } /********************************************************************** -Converts an identifier from my_charset_filename to UTF-8 charset. */ +Converts an identifier from my_charset_filename to UTF-8 charset. +@return result string length, as returned by strconvert() */ extern "C" uint innobase_convert_to_system_charset( @@ -12022,7 +12023,8 @@ test_innobase_convert_name() #endif /* UNIV_COMPILE_TEST_FUNCS */ /********************************************************************** -Converts an identifier from my_charset_filename to UTF-8 charset. */ +Converts an identifier from my_charset_filename to UTF-8 charset. +@return result string length, as returned by strconvert() */ extern "C" uint innobase_convert_to_filename_charset( diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c index 5c9eadeb71a..8555054b86f 100644 --- a/storage/innobase/row/row0mysql.c +++ b/storage/innobase/row/row0mysql.c @@ -3958,12 +3958,28 @@ row_rename_table_for_mysql( } else if (!new_is_tmp) { /* Rename all constraints. */ char new_table_name[MAX_TABLE_NAME_LEN] = ""; + char old_table_utf8[MAX_TABLE_NAME_LEN] = ""; uint errors = 0; + strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN); + innobase_convert_to_system_charset( + strchr(old_table_utf8, '/') + 1, + strchr(old_name, '/') +1, + MAX_TABLE_NAME_LEN, &errors); + + if (errors) { + /* Table name could not be converted from charset + my_charset_filename to UTF-8. This means that the + table name is already in UTF-8 (#mysql#50). */ + strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN); + } + info = pars_info_create(); pars_info_add_str_literal(info, "new_table_name", new_name); pars_info_add_str_literal(info, "old_table_name", old_name); + pars_info_add_str_literal(info, "old_table_name_utf8", + old_table_utf8); strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN); innobase_convert_to_system_charset( @@ -4000,6 +4016,8 @@ row_rename_table_for_mysql( "new_db_name := SUBSTR(:new_table_name, 0,\n" " new_db_name_len);\n" "old_t_name_len := LENGTH(:old_table_name);\n" + "gen_constr_prefix := CONCAT(:old_table_name_utf8,\n" + " '_ibfk_');\n" "WHILE found = 1 LOOP\n" " SELECT ID INTO foreign_id\n" " FROM SYS_FOREIGN\n" @@ -4016,7 +4034,7 @@ row_rename_table_for_mysql( " id_len := LENGTH(foreign_id);\n" " IF (INSTR(foreign_id, '/') > 0) THEN\n" " IF (INSTR(foreign_id,\n" - " '_ibfk_') > 0)\n" + " gen_constr_prefix) > 0)\n" " THEN\n" " offset := INSTR(foreign_id, '_ibfk_') - 1;\n" " new_foreign_id :=\n" |