From: Alexander Nozdrin Date: June 9 2011 9:36am Subject: bzr commit into mysql-trunk branch (alexander.nozdrin:3172) Bug#11763162 List-Archive: http://lists.mysql.com/commits/138925 X-Bug: 11763162 Message-Id: <201106090936.p599aTuM011858@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3957862962635074668==" --===============3957862962635074668== 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/mysql-trunk-bug55843-03/ based on revid:alexander.nozdrin@stripped 3172 Alexander Nozdrin 2011-06-09 Pre-requisite patch for Bug#11763162 (55843 - Handled condition appears as not handled). The goal of this patch is to change 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() and THD::set_warning_info(), so that they still work to minimize side changes. Those functions will be removed later in a separate patch. NOTE: - Diagnostics_area is pushed in the following cases: - sql_prepare.cc Here it's pushed along with a new instance of Warning_info. - rpl_master.cc Here Diagnostics_area is pushed alone. The comment says: Dump thread sends ER_MASTER_FATAL_ERROR_READING_BINLOG instead of the real errors happend on master to slave when erorr is encountered. So set a temporary Diagnostics_area to thd. The low level error is always set into the temporary Diagnostics_area and be ingored. The original Diagnostics_area will be restored at the end of this function. ER_MASTER_FATAL_ERROR_READING_BINLOG will be set to the original Diagnostics_area. - Warning_info is pushed in sp_head.cc, sql_admin.cc, sql_show.cc. The idea is to provide an intermediate Warning_info for an operation and ignore/process thrown warnings later. modified: sql/sql_class.cc sql/sql_class.h sql/sql_error.cc sql/sql_error.h sql/sql_prepare.cc sql/sql_prepare.h === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-06-09 08:58:41 +0000 +++ b/sql/sql_class.cc 2011-06-09 09:36:20 +0000 @@ -753,8 +753,7 @@ THD::THD(bool enable_plugins) debug_sync_control(0), #endif /* defined(ENABLED_DEBUG_SYNC) */ m_enable_plugins(enable_plugins), - main_warning_info(0, false), - m_warning_info(&main_warning_info), + main_da(0, false), m_stmt_da(&main_da) { ulong tmp; === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2011-06-09 08:58:41 +0000 +++ b/sql/sql_class.h 2011-06-09 09:36:20 +0000 @@ -2834,7 +2834,7 @@ public: /// Returns Warning-information-area for the current statement. Warning_info *get_warning_info() - { return m_warning_info; } + { return get_stmt_da()->get_warning_info(); } /// Returns Warning-information-area for the current statement. const Warning_info *get_warning_info() const @@ -2842,7 +2842,7 @@ public: /// Sets Warning-information-area for the current statement. void set_warning_info(Warning_info *wi) - { m_warning_info= wi; } + { get_stmt_da()->set_warning_info(wi); } /// Returns Diagnostics-area for the current statement. Diagnostics_area *get_stmt_da() @@ -3247,10 +3247,7 @@ private: tree itself is reused between executions and thus is stored elsewhere. */ 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.cc' --- a/sql/sql_error.cc 2011-06-09 08:58:41 +0000 +++ b/sql/sql_error.cc 2011-06-09 09:36:20 +0000 @@ -318,6 +318,23 @@ MYSQL_ERROR::set_sqlstate(const char* sq m_returned_sqlstate[SQLSTATE_LENGTH]= '\0'; } +Diagnostics_area::Diagnostics_area() +: + m_main_wi(0, false), + m_current_wi(&m_main_wi) +{ + reset_diagnostics_area(); +} + +Diagnostics_area::Diagnostics_area(ulonglong warn_id, + bool allow_unlimited_warnings) +: + m_main_wi(warn_id, allow_unlimited_warnings), + m_current_wi(&m_main_wi) +{ + reset_diagnostics_area(); +} + /** Clear this diagnostics area. === modified file 'sql/sql_error.h' --- a/sql/sql_error.h 2011-06-09 09:03:18 +0000 +++ b/sql/sql_error.h 2011-06-09 09:36:20 +0000 @@ -485,7 +485,19 @@ public: return m_statement_warn_count; } - Diagnostics_area() { reset_diagnostics_area(); } +public: + Diagnostics_area(); + Diagnostics_area(ulonglong warn_id, bool allow_unlimited_warnings); + +public: + inline Warning_info *get_warning_info() + { return m_current_wi; } + + inline const Warning_info *get_warning_info() const + { return m_current_wi; } + + inline void set_warning_info(Warning_info *wi) + { m_current_wi= wi; } private: /** Message buffer. Can be used by OK or ERROR status. */ @@ -524,6 +536,9 @@ private: */ uint m_statement_warn_count; enum_diagnostics_status m_status; + + Warning_info m_main_wi; + Warning_info *m_current_wi; }; /////////////////////////////////////////////////////////////////////////// === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2011-06-09 08:58:41 +0000 +++ b/sql/sql_prepare.cc 2011-06-09 09:36:20 +0000 @@ -2850,12 +2850,10 @@ 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(thd->query_id, false); + 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)); @@ -2869,7 +2867,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->get_command(), NullS); @@ -3918,7 +3915,7 @@ Ed_result_set::Ed_result_set(Listquery_id, false), + :m_diagnostics_area(thd->query_id, false), m_thd(thd), m_rsets(0), m_current_rset(0) @@ -3944,7 +3941,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); } @@ -3982,7 +3979,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"); @@ -3990,14 +3986,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 2010-07-02 18:15:21 +0000 +++ b/sql/sql_prepare.h 2011-06-09 09:36:20 +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. @@ -310,7 +312,6 @@ public: ~Ed_connection() { free_old_result(); } private: Diagnostics_area m_diagnostics_area; - Warning_info m_warning_info; /** Execute direct interface does not support multi-statements, only multi-results. So we never have a situation when we have --===============3957862962635074668== 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\ # 28ln6jstgmgy4v9b # target_branch: file:///home/alik/MySQL/bzr/00/bug55843/mysql-trunk-\ # bug55843-03/ # testament_sha1: 36dc472bed9d8ca02f8a93cbe8477f2cc1321bbf # timestamp: 2011-06-09 13:36:25 +0400 # base_revision_id: alexander.nozdrin@stripped\ # 06lrupk3f8wnz9ps # # Begin bundle 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 --===============3957862962635074668==--