| 13498 | #endif |
| 13499 | |
| 13500 | int ha_mroonga::rename_table(const char *from, const char *to) |
| 13501 | { |
| 13502 | int error = 0; |
| 13503 | TABLE_LIST table_list; |
| 13504 | TABLE_SHARE *tmp_table_share; |
| 13505 | TABLE tmp_table; |
| 13506 | MRN_SHARE *tmp_share; |
| 13507 | MRN_DBUG_ENTER_METHOD(); |
| 13508 | mrn::PathMapper to_mapper(to); |
| 13509 | mrn::PathMapper from_mapper(from); |
| 13510 | if (strcmp(from_mapper.db_name(), to_mapper.db_name())) |
| 13511 | DBUG_RETURN(HA_ERR_WRONG_COMMAND); |
| 13512 | |
| 13513 | LEX_CSTRING db_name= { from_mapper.db_name(), strlen(from_mapper.db_name()) }; |
| 13514 | LEX_CSTRING table_name= { from_mapper.mysql_table_name(), |
| 13515 | strlen(from_mapper.mysql_table_name()) }; |
| 13516 | table_list.init_one_table(&db_name, &table_name, 0,TL_WRITE); |
| 13517 | mrn_open_mutex_lock(NULL); |
| 13518 | tmp_table_share = mrn_create_tmp_table_share(&table_list, from, &error); |
| 13519 | mrn_open_mutex_unlock(NULL); |
| 13520 | if (!tmp_table_share) { |
| 13521 | DBUG_RETURN(error); |
| 13522 | } |
| 13523 | tmp_table.s = tmp_table_share; |
| 13524 | #ifdef WITH_PARTITION_STORAGE_ENGINE |
| 13525 | tmp_table.part_info = NULL; |
| 13526 | #endif |
| 13527 | if (!(tmp_share = mrn_get_share(from, &tmp_table, &error))) |
| 13528 | { |
| 13529 | mrn_open_mutex_lock(NULL); |
| 13530 | mrn_free_tmp_table_share(tmp_table_share); |
| 13531 | mrn_open_mutex_unlock(NULL); |
| 13532 | DBUG_RETURN(error); |
| 13533 | } |
| 13534 | |
| 13535 | if (tmp_share->wrapper_mode) |
| 13536 | { |
| 13537 | error = wrapper_rename_table(from, to, tmp_share, |
| 13538 | from_mapper.table_name(), |
| 13539 | to_mapper.table_name()); |
| 13540 | } else { |
| 13541 | error = storage_rename_table(from, to, tmp_share, |
| 13542 | from_mapper.table_name(), |
| 13543 | to_mapper.table_name()); |
| 13544 | } |
| 13545 | |
| 13546 | if (!error && to_mapper.table_name()[0] == '#') { |
| 13547 | error = add_wrap_hton(to, tmp_share->hton); |
| 13548 | } else if (error && from_mapper.table_name()[0] == '#') { |
| 13549 | add_wrap_hton(from, tmp_share->hton); |
| 13550 | } |
| 13551 | if (!error) { |
| 13552 | mrn_free_long_term_share(tmp_share->long_term_share); |
| 13553 | tmp_share->long_term_share = NULL; |
| 13554 | } |
| 13555 | mrn_free_share(tmp_share); |
| 13556 | mrn_open_mutex_lock(NULL); |
| 13557 | mrn_free_tmp_table_share(tmp_table_share); |
nothing calls this directly
no test coverage detected