diff options
author | unknown <sanja@askmonty.org> | 2009-12-08 23:47:54 +0200 |
---|---|---|
committer | unknown <sanja@askmonty.org> | 2009-12-08 23:47:54 +0200 |
commit | 08e4635fbabb4a4bea3a9b44057a2cd9b12d580f (patch) | |
tree | 9de56c7859229fc3e173370d434fb24e1a367a1d /sql/handler.cc | |
parent | e4e1ae0d13da399d53bd91df791b149f3eae796b (diff) | |
parent | 27f4f67bd2f35bf710f1a4e4ddde0e42738a195d (diff) | |
download | mariadb-git-08e4635fbabb4a4bea3a9b44057a2cd9b12d580f.tar.gz |
merge 5.1-> 5.2
Diffstat (limited to 'sql/handler.cc')
-rw-r--r-- | sql/handler.cc | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 3ff9a63b76e..d511aa154ce 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1317,7 +1317,8 @@ int ha_rollback_trans(THD *thd, bool all) } trans->ha_list= 0; trans->no_2pc=0; - if (is_real_trans && thd->transaction_rollback_request) + if (is_real_trans && thd->transaction_rollback_request && + thd->transaction.xid_state.xa_state != XA_NOTR) thd->transaction.xid_state.rm_error= thd->main_da.sql_errno(); if (all) thd->variables.tx_isolation=thd->session_tx_isolation; @@ -1891,12 +1892,42 @@ bool ha_flush_logs(handlerton *db_type) return FALSE; } + +/** + @brief make canonical filename + + @param[in] file table handler + @param[in] path original path + @param[out] tmp_path buffer for canonized path + + @details Lower case db name and table name path parts for + non file based tables when lower_case_table_names + is 2 (store as is, compare in lower case). + Filesystem path prefix (mysql_data_home or tmpdir) + is left intact. + + @note tmp_path may be left intact if no conversion was + performed. + + @retval canonized path + + @todo This may be done more efficiently when table path + gets built. Convert this function to something like + ASSERT_CANONICAL_FILENAME. +*/ const char *get_canonical_filename(handler *file, const char *path, char *tmp_path) { + uint i; if (lower_case_table_names != 2 || (file->ha_table_flags() & HA_FILE_BASED)) return path; + for (i= 0; i <= mysql_tmpdir_list.max; i++) + { + if (is_prefix(path, mysql_tmpdir_list.list[i])) + return path; + } + /* Ensure that table handler get path in lower case */ if (tmp_path != path) strmov(tmp_path, path); @@ -3483,14 +3514,10 @@ int handler::index_next_same(uchar *buf, const uchar *key, uint keylen) if (!(error=index_next(buf))) { my_ptrdiff_t ptrdiff= buf - table->record[0]; - uchar *save_record_0; - KEY *key_info; - KEY_PART_INFO *key_part; - KEY_PART_INFO *key_part_end; - LINT_INIT(save_record_0); - LINT_INIT(key_info); - LINT_INIT(key_part); - LINT_INIT(key_part_end); + uchar *UNINIT_VAR(save_record_0); + KEY *UNINIT_VAR(key_info); + KEY_PART_INFO *UNINIT_VAR(key_part); + KEY_PART_INFO *UNINIT_VAR(key_part_end); /* key_cmp_if_same() compares table->record[0] against 'key'. |