diff options
author | Alexander Nozdrin <alik@sun.com> | 2010-02-24 16:52:27 +0300 |
---|---|---|
committer | Alexander Nozdrin <alik@sun.com> | 2010-02-24 16:52:27 +0300 |
commit | b3018e86132ff94ef7bde5d593b0c529cb10eced (patch) | |
tree | 46d0af1ca06ba43198a4cde04fa6f0a3937b0118 /sql/ha_partition.cc | |
parent | 5fb9f61e4faf24cbc364108c0709fa935f2c3a09 (diff) | |
parent | 4709825c608fdcf2af29a472a61be6cfe7040d5e (diff) | |
download | mariadb-git-b3018e86132ff94ef7bde5d593b0c529cb10eced.tar.gz |
Manual merge from mysql-trunk-merge.
Conflicts:
- client/mysql.cc
- client/mysqldump.c
- configure.in
- mysql-test/r/csv.result
- mysql-test/r/func_time.result
- mysql-test/r/show_check.result
- mysql-test/r/sp-error.result
- mysql-test/r/sp.result
- mysql-test/r/sp_trans.result
- mysql-test/r/type_blob.result
- mysql-test/r/type_timestamp.result
- mysql-test/r/warnings.result
- mysql-test/suite/rpl/r/rpl_sp.result
- sql/mysql_priv.h
- sql/mysqld.cc
- sql/sp.cc
- sql/sql_base.cc
- sql/sql_table.cc
- sql/sql_trigger.cc
- sql/sql_view.cc
- sql/table.h
- sql/share/errmsg.txt
- mysql-test/suite/sys_vars/r/log_bin_trust_routine_creators_basic.result
Diffstat (limited to 'sql/ha_partition.cc')
-rw-r--r-- | sql/ha_partition.cc | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 3289b529edf..877cf070abd 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -1803,13 +1803,23 @@ void ha_partition::update_create_info(HA_CREATE_INFO *create_info) void ha_partition::change_table_ptr(TABLE *table_arg, TABLE_SHARE *share) { - handler **file_array= m_file; + handler **file_array; table= table_arg; table_share= share; - do + /* + m_file can be NULL when using an old cached table in DROP TABLE, when the + table just has REMOVED PARTITIONING, see Bug#42438 + */ + if (m_file) { - (*file_array)->change_table_ptr(table_arg, share); - } while (*(++file_array)); + file_array= m_file; + DBUG_ASSERT(*file_array); + do + { + (*file_array)->change_table_ptr(table_arg, share); + } while (*(++file_array)); + } + if (m_added_file && m_added_file[0]) { /* if in middle of a drop/rename etc */ @@ -6226,7 +6236,13 @@ void ha_partition::print_error(int error, myf errflag) thd->lex->sql_command != SQLCOM_TRUNCATE) m_part_info->print_no_partition_found(table); else - m_file[m_last_part]->print_error(error, errflag); + { + /* In case m_file has not been initialized, like in bug#42438 */ + if (m_file) + m_file[m_last_part]->print_error(error, errflag); + else + handler::print_error(error, errflag); + } DBUG_VOID_RETURN; } @@ -6236,7 +6252,12 @@ bool ha_partition::get_error_message(int error, String *buf) DBUG_ENTER("ha_partition::get_error_message"); /* Should probably look for my own errors first */ - DBUG_RETURN(m_file[m_last_part]->get_error_message(error, buf)); + + /* In case m_file has not been initialized, like in bug#42438 */ + if (m_file) + DBUG_RETURN(m_file[m_last_part]->get_error_message(error, buf)); + DBUG_RETURN(handler::get_error_message(error, buf)); + } |