From: Alexander Nozdrin Date: May 19 2011 10:12am Subject: bzr commit into mysql-5.5 branch (alexander.nozdrin:3389) Bug#11763162 List-Archive: http://lists.mysql.com/commits/137683 X-Bug: 11763162 Message-Id: <201105191012.p4JACXFX009793@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8699357278979512741==" --===============8699357278979512741== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/alik/MySQL/bzr/00/bug55843/2011.05.19/mysql-5.5/ based on revid:alexander.nozdrin@stripped 3389 Alexander Nozdrin 2011-05-19 Pre-requisite patch for Bug#11763162 (55843 - Handled condition appears as not handled). The patch changes the relationship between THD, Diagnostics_area and Warning_info classes: - before the patch, THD owned both Diagnostics_area and Warning_info instances. - after the patch THD owns Diagnostics_area instance, and Diagnostics_area owns Warning_info instance. The patch changes THD::get_warning_info() so that it still works (to save code changes) and eliminates THD::set_warning_info(). Users should use Diagnostics_area::set_warning_info() instead. modified: sql/sp_head.cc sql/sql_admin.cc sql/sql_class.cc sql/sql_class.h sql/sql_error.h sql/sql_prepare.cc sql/sql_prepare.h sql/sql_show.cc === modified file 'sql/sp_head.cc' --- a/sql/sp_head.cc 2011-05-19 10:10:49 +0000 +++ b/sql/sp_head.cc 2011-05-19 10:12:31 +0000 @@ -1291,7 +1291,7 @@ sp_head::execute(THD *thd, bool merge_da /* Push a new warning information area. */ warning_info.append_warning_info(thd, thd->get_warning_info()); saved_warning_info= thd->get_warning_info(); - thd->set_warning_info(&warning_info); + thd->get_stmt_da()->set_warning_info(&warning_info); /* Switch query context. This has to be done early as this is sometimes @@ -1500,7 +1500,7 @@ sp_head::execute(THD *thd, bool merge_da */ if (err_status || merge_da_on_success) saved_warning_info->merge_with_routine_info(thd, thd->get_warning_info()); - thd->set_warning_info(saved_warning_info); + thd->get_stmt_da()->set_warning_info(saved_warning_info); done: DBUG_PRINT("info", ("err_status: %d killed: %d is_slave_error: %d report_error: %d", === modified file 'sql/sql_admin.cc' --- a/sql/sql_admin.cc 2011-05-19 10:10:49 +0000 +++ b/sql/sql_admin.cc 2011-05-19 10:12:31 +0000 @@ -346,14 +346,15 @@ static bool mysql_admin_table(THD* thd, because it's already known that the table is badly damaged. */ + Diagnostics_area *da= thd->get_stmt_da(); Warning_info wi(thd->query_id, false); Warning_info *wi_saved= thd->get_warning_info(); - thd->set_warning_info(&wi); + da->set_warning_info(&wi); open_error= open_and_lock_tables(thd, table, TRUE, 0); - thd->set_warning_info(wi_saved); + da->set_warning_info(wi_saved); } else { === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-05-19 10:10:49 +0000 +++ b/sql/sql_class.cc 2011-05-19 10:12:31 +0000 @@ -520,7 +520,7 @@ THD::THD() debug_sync_control(0), #endif /* defined(ENABLED_DEBUG_SYNC) */ main_warning_info(0, false), - m_warning_info(&main_warning_info), + main_da(&main_warning_info), m_stmt_da(&main_da) { ulong tmp; @@ -783,7 +783,7 @@ MYSQL_ERROR* THD::raise_condition(uint s (level == MYSQL_ERROR::WARN_LEVEL_NOTE)) DBUG_RETURN(NULL); - m_warning_info->opt_clear_warning_info(query_id); + get_warning_info()->opt_clear_warning_info(query_id); /* TODO: replace by DBUG_ASSERT(sql_errno != 0) once all bugs similar to @@ -856,7 +856,7 @@ MYSQL_ERROR* THD::raise_condition(uint s /* When simulating OOM, skip writing to error log to avoid mtr errors */ DBUG_EXECUTE_IF("simulate_out_of_memory", DBUG_RETURN(NULL);); - cond= m_warning_info->push_warning(this, sql_errno, sqlstate, level, msg); + cond= get_warning_info()->push_warning(this, sql_errno, sqlstate, level, msg); DBUG_RETURN(cond); } === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2011-05-19 10:10:49 +0000 +++ b/sql/sql_class.h 2011-05-19 10:12:31 +0000 @@ -1895,8 +1895,8 @@ public: auto_inc_intervals_forced.append(next_id, ULONGLONG_MAX, 0); } - inline Warning_info *get_warning_info() { return m_warning_info; } - inline void set_warning_info(Warning_info *wi) { m_warning_info= wi; } + inline Warning_info *get_warning_info() + { return get_stmt_da()->get_warning_info(); } inline Diagnostics_area *get_stmt_da() { return m_stmt_da; } inline void set_stmt_da(Diagnostics_area *da) { m_stmt_da= da; } @@ -2838,8 +2838,6 @@ private: MEM_ROOT main_mem_root; Warning_info main_warning_info; Diagnostics_area main_da; - - Warning_info *m_warning_info; Diagnostics_area *m_stmt_da; /** === modified file 'sql/sql_error.h' --- a/sql/sql_error.h 2011-04-15 12:02:22 +0000 +++ b/sql/sql_error.h 2011-05-19 10:12:31 +0000 @@ -90,7 +90,22 @@ public: return m_statement_warn_count; } - Diagnostics_area() { reset_diagnostics_area(); } +public: + inline Diagnostics_area(class Warning_info *wi) : + m_current_wi(wi) + { + reset_diagnostics_area(); + } + +public: + inline class Warning_info *get_warning_info() + { return m_current_wi; } + + inline const class Warning_info *get_warning_info() const + { return m_current_wi; } + + inline void set_warning_info(class Warning_info *wi) + { m_current_wi= wi; } private: /** Message buffer. Can be used by OK or ERROR status. */ @@ -129,6 +144,8 @@ private: */ uint m_statement_warn_count; enum_diagnostics_status m_status; + + class Warning_info *m_current_wi; }; /////////////////////////////////////////////////////////////////////////// === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2011-05-19 10:10:49 +0000 +++ b/sql/sql_prepare.cc 2011-05-19 10:12:31 +0000 @@ -2841,12 +2841,11 @@ void mysql_stmt_get_longdata(THD *thd, c param= stmt->param_array[param_number]; - Diagnostics_area new_stmt_da, *save_stmt_da= thd->get_stmt_da(); Warning_info new_warnning_info(thd->query_id, false); - Warning_info *save_warinig_info= thd->get_warning_info(); + Diagnostics_area new_stmt_da(&new_warnning_info); + Diagnostics_area *save_stmt_da= thd->get_stmt_da(); thd->set_stmt_da(&new_stmt_da); - thd->set_warning_info(&new_warnning_info); #ifndef EMBEDDED_LIBRARY param->set_longdata(packet, (ulong) (packet_end - packet)); @@ -2860,7 +2859,6 @@ void mysql_stmt_get_longdata(THD *thd, c strncpy(stmt->last_error, thd->get_stmt_da()->message(), MYSQL_ERRMSG_SIZE); } thd->set_stmt_da(save_stmt_da); - thd->set_warning_info(save_warinig_info); general_log_print(thd, thd->command, NullS); @@ -3900,8 +3898,9 @@ Ed_result_set::Ed_result_set(Listquery_id, false), +Ed_connection::Ed_connection(THD *thd) : + m_warning_info(thd->query_id, false), + m_diagnostics_area(&m_warning_info), m_thd(thd), m_rsets(0), m_current_rset(0) @@ -3927,7 +3926,7 @@ Ed_connection::free_old_result() } m_current_rset= m_rsets; m_diagnostics_area.reset_diagnostics_area(); - m_warning_info.clear_warning_info(m_thd->query_id); + m_diagnostics_area.get_warning_info()->clear_warning_info(m_thd->query_id); } @@ -3965,7 +3964,6 @@ bool Ed_connection::execute_direct(Serve Prepared_statement stmt(m_thd); Protocol *save_protocol= m_thd->protocol; Diagnostics_area *save_diagnostics_area= m_thd->get_stmt_da(); - Warning_info *save_warning_info= m_thd->get_warning_info(); DBUG_ENTER("Ed_connection::execute_direct"); @@ -3973,14 +3971,12 @@ bool Ed_connection::execute_direct(Serve m_thd->protocol= &protocol_local; m_thd->set_stmt_da(&m_diagnostics_area); - m_thd->set_warning_info(&m_warning_info); rc= stmt.execute_server_runnable(server_runnable); m_thd->protocol->end_statement(); m_thd->protocol= save_protocol; m_thd->set_stmt_da(save_diagnostics_area); - m_thd->set_warning_info(save_warning_info); /* Protocol_local makes use of m_current_rset to keep track of the last result set, while adding result sets to the end. === modified file 'sql/sql_prepare.h' --- a/sql/sql_prepare.h 2009-10-21 20:02:06 +0000 +++ b/sql/sql_prepare.h 2011-05-19 10:12:31 +0000 @@ -252,7 +252,7 @@ public: */ ulong get_warn_count() const { - return m_warning_info.warn_count(); + return m_diagnostics_area.get_warning_info()->warn_count(); } /** Get the server warnings as a result set. @@ -261,7 +261,9 @@ public: The second is a numeric code. The third is warning text. */ - List *get_warn_list() { return &m_warning_info.warn_list(); } + List *get_warn_list() + { return &m_diagnostics_area.get_warning_info()->warn_list(); } + /** The following members are only valid if execute_direct() or move_to_next_result() returned an error. @@ -309,8 +311,8 @@ public: ~Ed_connection() { free_old_result(); } private: - Diagnostics_area m_diagnostics_area; Warning_info m_warning_info; + Diagnostics_area m_diagnostics_area; /** Execute direct interface does not support multi-statements, only multi-results. So we never have a situation when we have === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2011-05-19 10:10:49 +0000 +++ b/sql/sql_show.cc 2011-05-19 10:12:31 +0000 @@ -6773,25 +6773,26 @@ static bool do_fill_table(THD *thd, // Warning_info, so "useful warnings" get rejected. In order to avoid // that problem we create a Warning_info instance, which is capable of // storing "unlimited" number of warnings. + Diagnostics_area *da= thd->get_stmt_da(); Warning_info wi(thd->query_id, true); Warning_info *wi_saved= thd->get_warning_info(); - thd->set_warning_info(&wi); + da->set_warning_info(&wi); bool res= table_list->schema_table->fill_table( thd, table_list, join_table->select_cond); - thd->set_warning_info(wi_saved); + da->set_warning_info(wi_saved); // Pass an error if any. - if (thd->get_stmt_da()->is_error()) + if (da->is_error()) { - thd->get_warning_info()->push_warning(thd, - thd->get_stmt_da()->sql_errno(), - thd->get_stmt_da()->get_sqlstate(), - MYSQL_ERROR::WARN_LEVEL_ERROR, - thd->get_stmt_da()->message()); + wi_saved->push_warning(thd, + da->sql_errno(), + da->get_sqlstate(), + MYSQL_ERROR::WARN_LEVEL_ERROR, + da->message()); } // Pass warnings (if any). @@ -6806,7 +6807,7 @@ static bool do_fill_table(THD *thd, while ((err= it++)) { if (err->get_level() != MYSQL_ERROR::WARN_LEVEL_ERROR) - thd->get_warning_info()->push_warning(thd, err); + wi_saved->push_warning(thd, err); } return res; --===============8699357278979512741== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.nozdrin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.nozdrin@stripped\ # pzl6mt0yn3irksbl # target_branch: file:///home/alik/MySQL/bzr/00/bug55843/2011.05.19\ # /mysql-5.5/ # testament_sha1: 38af5994ca6582abe039d21f6074a23b41d5ffff # timestamp: 2011-05-19 14:12:36 +0400 # base_revision_id: alexander.nozdrin@stripped\ # y86nho7b8rn8b21q # # Begin bundle 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 --===============8699357278979512741==--