From: Alexander Nozdrin Date: June 7 2011 4:20pm Subject: bzr commit into mysql-trunk branch (alexander.nozdrin:3169) Bug#11763162 List-Archive: http://lists.mysql.com/commits/138801 X-Bug: 11763162 Message-Id: <201106071620.p57GKcFq022928@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2434549061077931451==" --===============2434549061077931451== 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-01/ based on revid:alexander.nozdrin@stripped 3169 Alexander Nozdrin 2011-06-07 Pre-requisite patch for Bug#11763162 (55843 - Handled condition appears as not handled). The patch: - Removes THD::get_warning_info(); - Creates facade of Warning_info in Diagnostics_area. modified: sql/event_scheduler.cc sql/field.cc sql/ha_ndbcluster_binlog.cc sql/log_event.cc sql/protocol.cc sql/rpl_slave.cc sql/sp.cc sql/sp_head.cc sql/sql_admin.cc sql/sql_audit.h sql/sql_base.cc sql/sql_class.cc sql/sql_class.h sql/sql_error.cc sql/sql_error.h sql/sql_insert.cc sql/sql_load.cc sql/sql_parse.cc sql/sql_prepare.cc sql/sql_select.cc sql/sql_show.cc sql/sql_signal.cc sql/sql_table.cc sql/sql_time.cc sql/sql_update.cc sql/sys_vars.cc === modified file 'sql/event_scheduler.cc' --- a/sql/event_scheduler.cc 2011-06-07 13:09:47 +0000 +++ b/sql/event_scheduler.cc 2011-06-07 16:20:10 +0000 @@ -77,7 +77,7 @@ Event_worker_thread::print_warnings(THD { MYSQL_ERROR *err; DBUG_ENTER("evex_print_warnings"); - if (thd->get_warning_info()->is_empty()) + if (thd->get_stmt_da()->is_empty()) DBUG_VOID_RETURN; char msg_buf[10 * STRING_BUFFER_USUAL_SIZE]; @@ -93,7 +93,7 @@ Event_worker_thread::print_warnings(THD prefix.append(et->name.str, et->name.length, system_charset_info); prefix.append("] ", 2); - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); while ((err= it++)) { String err_msg(msg_buf, sizeof(msg_buf), system_charset_info); === modified file 'sql/field.cc' --- a/sql/field.cc 2011-06-07 13:09:47 +0000 +++ b/sql/field.cc 2011-06-07 16:20:10 +0000 @@ -1163,7 +1163,7 @@ int Field_num::check_int(const CHARSET_I ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), "integer", err.ptr(), field_name, - (ulong) table->in_use->get_warning_info()-> + (ulong) table->in_use->get_stmt_da()-> current_row_for_warning()); return 1; } @@ -2649,7 +2649,7 @@ int Field_new_decimal::store(const char ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), "decimal", errmsg.ptr(), field_name, - (ulong) table->in_use->get_warning_info()-> + (ulong) table->in_use->get_stmt_da()-> current_row_for_warning()); DBUG_RETURN(err); @@ -2670,7 +2670,7 @@ int Field_new_decimal::store(const char ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), "decimal", errmsg.ptr(), field_name, - (ulong) table->in_use->get_warning_info()-> + (ulong) table->in_use->get_stmt_da()-> current_row_for_warning()); my_decimal_set_zero(&decimal_value); break; @@ -5233,7 +5233,7 @@ bool Field_time::get_date(MYSQL_TIME *lt push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, ER(ER_WARN_DATA_OUT_OF_RANGE), field_name, - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); return 1; } return Field_time::get_time(ltime); @@ -6232,7 +6232,7 @@ check_string_copy_error(Field_str *field ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), "string", tmp, field->field_name, - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); return TRUE; } @@ -10080,7 +10080,7 @@ Field::set_warning(MYSQL_ERROR::enum_war { thd->cuted_fields+= cuted_increment; push_warning_printf(thd, level, code, ER(code), field_name, - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); return 0; } return level >= MYSQL_ERROR::WARN_LEVEL_WARN; === modified file 'sql/ha_ndbcluster_binlog.cc' --- a/sql/ha_ndbcluster_binlog.cc 2011-06-07 13:09:47 +0000 +++ b/sql/ha_ndbcluster_binlog.cc 2011-06-07 16:20:10 +0000 @@ -982,7 +982,7 @@ static void print_could_not_discover_err "my_errno: %d", schema->db, schema->name, schema->query, schema->node_id, my_errno); - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; while ((err= it++)) sql_print_warning("NDB Binlog: (%d)%s", err->get_sql_errno(), === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-06-07 13:09:47 +0000 +++ b/sql/log_event.cc 2011-06-07 16:20:10 +0000 @@ -208,7 +208,7 @@ static void inline slave_rows_error_repo char buff[MAX_SLAVE_ERRMSG], *slider; const char *buff_end= buff + sizeof(buff); uint len; - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; buff[0]= 0; @@ -5300,7 +5300,7 @@ int Load_log_event::do_apply_event(NET* { thd->set_time((time_t)when); thd->set_query_id(next_query_id()); - thd->get_warning_info()->opt_clear_warning_info(thd->query_id); + thd->get_stmt_da()->opt_clear_warning_info(thd->query_id); TABLE_LIST tables; char table_buf[NAME_LEN + 1]; === modified file 'sql/protocol.cc' --- a/sql/protocol.cc 2011-06-07 16:14:06 +0000 +++ b/sql/protocol.cc 2011-06-07 16:20:10 +0000 @@ -802,7 +802,7 @@ bool Protocol::send_result_set_metadata( Send no warning information, as it will be sent at statement end. */ if (write_eof_packet(thd, &thd->net, thd->server_status, - thd->get_warning_info()->statement_warn_count())) + thd->get_stmt_da()->statement_warn_count())) DBUG_RETURN(1); } DBUG_RETURN(prepare_for_send(list->elements)); === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-06-07 13:09:47 +0000 +++ b/sql/rpl_slave.cc 2011-06-07 16:20:10 +0000 @@ -3747,7 +3747,7 @@ log '%s' at position %s, relay log '%s' } /* Print any warnings issued */ - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; /* Added controlled slave thread cancel for replication === modified file 'sql/sp.cc' --- a/sql/sp.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sp.cc 2011-06-07 16:20:10 +0000 @@ -1727,7 +1727,7 @@ sp_exist_routines(THD *thd, TABLE_LIST * sp_find_routine(thd, TYPE_ENUM_FUNCTION, name, &thd->sp_func_cache, FALSE) != NULL; - thd->get_warning_info()->clear_warning_info(thd->query_id); + thd->get_stmt_da()->clear_warning_info(thd->query_id); if (! sp_object_found) { my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "FUNCTION or PROCEDURE", === modified file 'sql/sp_head.cc' --- a/sql/sp_head.cc 2011-06-07 13:29:37 +0000 +++ b/sql/sp_head.cc 2011-06-07 16:20:10 +0000 @@ -1146,9 +1146,9 @@ find_handler_after_execution(THD *thd, s MYSQL_ERROR::WARN_LEVEL_ERROR, thd->get_stmt_da()->message()); } - else if (thd->get_warning_info()->statement_warn_count()) + else if (thd->get_stmt_da()->statement_warn_count()) { - List_iterator it(thd->get_warning_info()->warn_list()); + List_iterator it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; while ((err= it++)) { @@ -1215,7 +1215,7 @@ sp_head::execute(THD *thd, bool merge_da Reprepare_observer *save_reprepare_observer= thd->m_reprepare_observer; Object_creation_ctx *saved_creation_ctx; Warning_info *saved_warning_info; - Warning_info warning_info(thd->get_warning_info()->warn_id(), false); + Warning_info warning_info(thd->get_stmt_da()->warn_id(), false); /* Just reporting a stack overrun error @@ -1286,8 +1286,8 @@ sp_head::execute(THD *thd, bool merge_da old_arena= thd->stmt_arena; /* Push a new warning information area. */ - warning_info.append_warning_info(thd, thd->get_warning_info()); - saved_warning_info= thd->get_warning_info(); + saved_warning_info= thd->get_stmt_da()->get_warning_info(); + warning_info.append_warning_info(thd, saved_warning_info); thd->get_stmt_da()->set_warning_info(&warning_info); /* @@ -1388,7 +1388,7 @@ sp_head::execute(THD *thd, bool merge_da } /* Reset number of warnings for this query. */ - thd->get_warning_info()->reset_for_next_command(); + thd->get_stmt_da()->reset_for_next_command(); DBUG_PRINT("execute", ("Instruction %u", ip)); @@ -1496,7 +1496,10 @@ sp_head::execute(THD *thd, bool merge_da propagated to the caller in any case. */ if (err_status || merge_da_on_success) - saved_warning_info->merge_with_routine_info(thd, thd->get_warning_info()); + { + saved_warning_info->merge_with_routine_info( + thd, thd->get_stmt_da()->get_warning_info()); + } thd->get_stmt_da()->set_warning_info(saved_warning_info); done: === modified file 'sql/sql_admin.cc' --- a/sql/sql_admin.cc 2011-06-07 13:29:37 +0000 +++ b/sql/sql_admin.cc 2011-06-07 16:20:10 +0000 @@ -353,7 +353,7 @@ static bool mysql_admin_table(THD* thd, Diagnostics_area *da= thd->get_stmt_da(); Warning_info wi(thd->query_id, false); - Warning_info *wi_saved= thd->get_warning_info(); + Warning_info *wi_saved= da->get_warning_info(); da->set_warning_info(&wi); @@ -480,7 +480,7 @@ static bool mysql_admin_table(THD* thd, if (!table->table) { DBUG_PRINT("admin", ("open table failed")); - if (thd->get_warning_info()->is_empty()) + if (thd->get_stmt_da()->is_empty()) push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_CHECK_NO_SUCH_TABLE, ER(ER_CHECK_NO_SUCH_TABLE)); /* if it was a view will check md5 sum */ @@ -639,7 +639,7 @@ send_result: lex->cleanup_after_one_table_open(); thd->clear_error(); // these errors shouldn't get client { - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; while ((err= it++)) { @@ -653,7 +653,7 @@ send_result: if (protocol->write()) goto err; } - thd->get_warning_info()->clear_warning_info(thd->query_id); + thd->get_stmt_da()->clear_warning_info(thd->query_id); } protocol->prepare_for_resend(); protocol->store(table_name, system_charset_info); === modified file 'sql/sql_audit.h' --- a/sql/sql_audit.h 2011-06-07 13:09:47 +0000 +++ b/sql/sql_audit.h 2011-06-07 16:20:10 +0000 @@ -117,7 +117,7 @@ void mysql_audit_general(THD *thd, uint query= thd->query_string; user= user_buff; userlen= make_user_name(thd, user_buff); - rows= thd->get_warning_info()->current_row_for_warning(); + rows= thd->get_stmt_da()->current_row_for_warning(); } else { === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_base.cc 2011-06-07 16:20:10 +0000 @@ -4016,7 +4016,7 @@ recover_from_failed_open(THD *thd) ha_create_table_from_engine(thd, m_failed_table->db, m_failed_table->table_name); - thd->get_warning_info()->clear_warning_info(thd->query_id); + thd->get_stmt_da()->clear_warning_info(thd->query_id); thd->clear_error(); // Clear error message thd->mdl_context.release_transactional_locks(); break; === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-06-07 13:29:37 +0000 +++ b/sql/sql_class.cc 2011-06-07 16:20:10 +0000 @@ -596,7 +596,7 @@ int thd_tx_isolation(const THD *thd) extern "C" void thd_inc_row_count(THD *thd) { - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); } @@ -1016,7 +1016,7 @@ MYSQL_ERROR* THD::raise_condition(uint s (level == MYSQL_ERROR::WARN_LEVEL_NOTE)) DBUG_RETURN(NULL); - get_warning_info()->opt_clear_warning_info(query_id); + get_stmt_da()->opt_clear_warning_info(query_id); /* TODO: replace by DBUG_ASSERT(sql_errno != 0) once all bugs similar to @@ -1089,7 +1089,9 @@ 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= get_warning_info()->push_warning(this, sql_errno, sqlstate, level, msg); + cond= m_stmt_da->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-06-07 13:29:37 +0000 +++ b/sql/sql_class.h 2011-06-07 16:20:10 +0000 @@ -2178,9 +2178,6 @@ public: auto_inc_intervals_forced.append(next_id, ULONGLONG_MAX, 0); } - 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; } === modified file 'sql/sql_error.cc' --- a/sql/sql_error.cc 2011-06-07 16:14:06 +0000 +++ b/sql/sql_error.cc 2011-06-07 16:20:10 +0000 @@ -372,7 +372,7 @@ Diagnostics_area::set_ok_status(THD *thd if (is_error() || is_disabled()) return; - m_da_statement_warn_count= thd->get_warning_info()->statement_warn_count(); + m_da_statement_warn_count= thd->get_stmt_da()->statement_warn_count(); m_affected_rows= affected_rows_arg; m_last_insert_id= last_insert_id_arg; if (message_arg) @@ -407,7 +407,7 @@ Diagnostics_area::set_eof_status(THD *th anyway. */ m_da_statement_warn_count= (thd->spcont ? - 0 : thd->get_warning_info()->statement_warn_count()); + 0 : thd->get_stmt_da()->statement_warn_count()); m_status= DA_EOF; DBUG_VOID_RETURN; @@ -676,7 +676,7 @@ bool mysqld_show_warnings(THD *thd, ulon List field_list; DBUG_ENTER("mysqld_show_warnings"); - DBUG_ASSERT(thd->get_warning_info()->is_read_only()); + DBUG_ASSERT(thd->get_stmt_da()->is_read_only()); field_list.push_back(new Item_empty_string("Level", 7)); field_list.push_back(new Item_return_int("Code",4, MYSQL_TYPE_LONG)); @@ -694,7 +694,7 @@ bool mysqld_show_warnings(THD *thd, ulon unit->set_limit(sel); - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); while ((err= it++)) { /* Skip levels that the user is not interested in */ @@ -717,7 +717,7 @@ bool mysqld_show_warnings(THD *thd, ulon } my_eof(thd); - thd->get_warning_info()->set_read_only(FALSE); + thd->get_stmt_da()->set_read_only(FALSE); DBUG_RETURN(FALSE); } === modified file 'sql/sql_error.h' --- a/sql/sql_error.h 2011-06-07 16:14:06 +0000 +++ b/sql/sql_error.h 2011-06-07 16:20:10 +0000 @@ -384,6 +384,7 @@ private: bool m_read_only; friend class Sql_cmd_resignal; + friend class Diagnostics_area; }; extern char *err_conv(char *buff, uint to_length, const char *from, @@ -498,6 +499,52 @@ public: inline void set_warning_info(Warning_info *wi) { m_current_wi= wi; } +public: + ulonglong warn_id() const + { return get_warning_info()->warn_id(); } + + void set_warn_id(ulonglong warn_id) + { get_warning_info()->m_warn_id= warn_id; } + + bool is_empty() const + { return get_warning_info()->is_empty(); } + + void inc_current_row_for_warning() + { get_warning_info()->inc_current_row_for_warning(); } + + void reset_current_row_for_warning() + { get_warning_info()->reset_current_row_for_warning(); } + + ulong current_row_for_warning() const + { return get_warning_info()->current_row_for_warning(); } + + void opt_clear_warning_info(ulonglong query_id) + { get_warning_info()->opt_clear_warning_info(query_id); } + + void clear_warning_info(ulonglong warn_id) + { get_warning_info()->clear_warning_info(warn_id); } + + List &warn_list() + { return get_warning_info()->warn_list(); } + + ulong warn_count() const + { return get_warning_info()->warn_count(); } + + ulong statement_warn_count() const + { return get_warning_info()->statement_warn_count(); } + + ulong error_count() const + { return get_warning_info()->error_count(); } + + bool is_read_only() const + { return get_warning_info()->is_read_only(); } + + void set_read_only(bool read_only) + { get_warning_info()->set_read_only(read_only); } + + void reset_for_next_command() + { get_warning_info()->reset_for_next_command(); } + private: /** Message buffer. Can be used by OK or ERROR status. */ char m_message[MYSQL_ERRMSG_SIZE]; === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_insert.cc 2011-06-07 16:20:10 +0000 @@ -931,7 +931,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t error=write_record(thd, table ,&info); if (error) break; - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); } free_underlaid_joins(thd, &thd->lex->select_lex); @@ -1086,11 +1086,11 @@ bool mysql_insert(THD *thd,TABLE_LIST *t sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records, (lock_type == TL_WRITE_DELAYED) ? (ulong) 0 : (ulong) (info.records - info.copied), - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); else sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records, (ulong) (info.deleted + updated), - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); ::my_ok(thd, info.copied + info.deleted + updated, id, buff); } thd->abort_on_warning= 0; @@ -3573,11 +3573,11 @@ bool select_insert::send_eof() if (info.ignore) sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records, (ulong) (info.records - info.copied), - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); else sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records, (ulong) (info.deleted+info.updated), - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); row_count= info.copied + info.deleted + ((thd->client_capabilities & CLIENT_FOUND_ROWS) ? info.touched : info.updated); === modified file 'sql/sql_load.cc' --- a/sql/sql_load.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_load.cc 2011-06-07 16:20:10 +0000 @@ -590,7 +590,7 @@ int mysql_load(THD *thd,sql_exchange *ex } sprintf(name, ER(ER_LOAD_INFO), (ulong) info.records, (ulong) info.deleted, (ulong) (info.records - info.copied), - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); #ifndef EMBEDDED_LIBRARY if (mysql_bin_log.is_open()) @@ -833,7 +833,7 @@ read_fixed_length(THD *thd, COPY_INFO &i push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_FEW_RECORDS, ER(ER_WARN_TOO_FEW_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); if (!field->maybe_null() && field->type() == FIELD_TYPE_TIMESTAMP) ((Field_timestamp*) field)->set_time(); } @@ -857,7 +857,7 @@ read_fixed_length(THD *thd, COPY_INFO &i push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_MANY_RECORDS, ER(ER_WARN_TOO_MANY_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); } if (thd->killed || @@ -893,9 +893,9 @@ read_fixed_length(THD *thd, COPY_INFO &i push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_MANY_RECORDS, ER(ER_WARN_TOO_MANY_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); } - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); continue_loop:; } DBUG_RETURN(test(read_info.error)); @@ -959,7 +959,7 @@ read_sep_field(THD *thd, COPY_INFO &info if (field->reset()) { my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0), field->field_name, - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); DBUG_RETURN(1); } field->set_null(); @@ -1031,7 +1031,7 @@ read_sep_field(THD *thd, COPY_INFO &info if (field->reset()) { my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),field->field_name, - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); DBUG_RETURN(1); } if (!field->maybe_null() && field->type() == FIELD_TYPE_TIMESTAMP) @@ -1046,7 +1046,7 @@ read_sep_field(THD *thd, COPY_INFO &info push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_FEW_RECORDS, ER(ER_WARN_TOO_FEW_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); } else if (item->type() == Item::STRING_ITEM) { @@ -1092,11 +1092,11 @@ read_sep_field(THD *thd, COPY_INFO &info thd->cuted_fields++; /* To long row */ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_MANY_RECORDS, ER(ER_WARN_TOO_MANY_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); if (thd->killed) DBUG_RETURN(1); } - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); continue_loop:; } DBUG_RETURN(test(read_info.error)); @@ -1230,7 +1230,7 @@ read_xml_field(THD *thd, COPY_INFO &info push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_FEW_RECORDS, ER(ER_WARN_TOO_FEW_RECORDS), - thd->get_warning_info()->current_row_for_warning()); + thd->get_stmt_da()->current_row_for_warning()); } else ((Item_user_var_as_out_param *)item)->set_null_value(cs); @@ -1260,7 +1260,7 @@ read_xml_field(THD *thd, COPY_INFO &info We don't need to reset auto-increment field since we are restoring its default value at the beginning of each loop iteration. */ - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); continue_loop:; } DBUG_RETURN(test(read_info.error) || thd->is_error()); === modified file 'sql/sql_parse.cc' --- a/sql/sql_parse.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_parse.cc 2011-06-07 16:20:10 +0000 @@ -2025,12 +2025,12 @@ mysql_execute_command(THD *thd) variables, but for now this is probably good enough. */ if ((sql_command_flags[lex->sql_command] & CF_DIAGNOSTIC_STMT) != 0) - thd->get_warning_info()->set_read_only(TRUE); + thd->get_stmt_da()->set_read_only(TRUE); else { - thd->get_warning_info()->set_read_only(FALSE); + thd->get_stmt_da()->set_read_only(FALSE); if (all_tables) - thd->get_warning_info()->opt_clear_warning_info(thd->query_id); + thd->get_stmt_da()->opt_clear_warning_info(thd->query_id); } #ifdef HAVE_REPLICATION @@ -5444,7 +5444,7 @@ void THD::reset_for_next_command() } thd->clear_error(); thd->get_stmt_da()->reset_diagnostics_area(); - thd->get_warning_info()->reset_for_next_command(); + thd->get_stmt_da()->reset_for_next_command(); thd->rand_used= 0; thd->m_sent_row_count= thd->m_examined_row_count= 0; thd->thd_marker.emb_on_expr_nest= NULL; === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2011-06-07 13:29:37 +0000 +++ b/sql/sql_prepare.cc 2011-06-07 16:20:10 +0000 @@ -340,7 +340,7 @@ static bool send_prep_stmt(Prepared_stat int2store(buff+5, columns); int2store(buff+7, stmt->param_count); buff[9]= 0; // Guard against a 4.1 client - tmp= min(stmt->thd->get_warning_info()->statement_warn_count(), 65535); + tmp= min(stmt->thd->get_stmt_da()->statement_warn_count(), 65535); int2store(buff+10, tmp); /* @@ -1957,7 +1957,7 @@ static bool check_prepared_statement(Pre /* Reset warning count for each query that uses tables */ if (tables) - thd->get_warning_info()->opt_clear_warning_info(thd->query_id); + thd->get_stmt_da()->opt_clear_warning_info(thd->query_id); if (sql_command_flags[sql_command] & CF_HA_CLOSE) mysql_ha_rm_tables(thd, tables); @@ -3553,7 +3553,7 @@ Prepared_statement::reprepare() Sic: we can't simply silence warnings during reprepare, because if it's failed, we need to return all the warnings to the user. */ - thd->get_warning_info()->clear_warning_info(thd->query_id); + thd->get_stmt_da()->clear_warning_info(thd->query_id); } return error; } @@ -3941,7 +3941,7 @@ Ed_connection::free_old_result() } m_current_rset= m_rsets; m_diagnostics_area.reset_diagnostics_area(); - m_diagnostics_area.get_warning_info()->clear_warning_info(m_thd->query_id); + m_diagnostics_area.clear_warning_info(m_thd->query_id); } === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_select.cc 2011-06-07 16:20:10 +0000 @@ -17661,7 +17661,7 @@ sub_select(JOIN *join,JOIN_TAB *join_tab /* Set first_unmatched for the last inner table of this group */ join_tab->last_inner->first_unmatched= join_tab; } - join->thd->get_warning_info()->reset_current_row_for_warning(); + join->thd->get_stmt_da()->reset_current_row_for_warning(); error= (*join_tab->read_first_record)(join_tab); @@ -17988,7 +17988,7 @@ evaluate_join_record(JOIN *join, JOIN_TA enum enum_nested_loop_state rc; /* A match from join_tab is found for the current partial join. */ rc= (*join_tab->next_select)(join, join_tab+1, 0); - join->thd->get_warning_info()->inc_current_row_for_warning(); + join->thd->get_stmt_da()->inc_current_row_for_warning(); if (rc != NESTED_LOOP_OK && rc != NESTED_LOOP_NO_MORE_ROWS) DBUG_RETURN(rc); @@ -18020,7 +18020,7 @@ evaluate_join_record(JOIN *join, JOIN_TA } else { - join->thd->get_warning_info()->inc_current_row_for_warning(); + join->thd->get_stmt_da()->inc_current_row_for_warning(); if (join_tab->not_null_compl) { /* a NULL-complemented row is not in a table so cannot be locked */ @@ -18035,7 +18035,7 @@ evaluate_join_record(JOIN *join, JOIN_TA with the beginning coinciding with the current partial join. */ join->examined_rows++; - join->thd->get_warning_info()->inc_current_row_for_warning(); + join->thd->get_stmt_da()->inc_current_row_for_warning(); if (join_tab->not_null_compl) join_tab->read_record.unlock_row(join_tab); } === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2011-06-07 13:29:37 +0000 +++ b/sql/sql_show.cc 2011-06-07 16:20:10 +0000 @@ -6805,7 +6805,7 @@ static bool do_fill_table(THD *thd, // 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(); + Warning_info *wi_saved= da->get_warning_info(); da->set_warning_info(&wi); === modified file 'sql/sql_signal.cc' --- a/sql/sql_signal.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_signal.cc 2011-06-07 16:20:10 +0000 @@ -469,7 +469,7 @@ bool Sql_cmd_signal::execute(THD *thd) thd->get_stmt_da()->reset_diagnostics_area(); thd->set_row_count_func(0); - thd->get_warning_info()->clear_warning_info(thd->query_id); + thd->get_stmt_da()->clear_warning_info(thd->query_id); result= raise_condition(thd, &cond); @@ -484,7 +484,7 @@ bool Sql_cmd_resignal::execute(THD *thd) DBUG_ENTER("Sql_cmd_resignal::execute"); - thd->get_warning_info()->m_warn_id= thd->query_id; + thd->get_stmt_da()->set_warn_id(thd->query_id); if (! thd->spcont || ! (signaled= thd->spcont->raised_condition())) { === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_table.cc 2011-06-07 16:20:10 +0000 @@ -2942,7 +2942,7 @@ const CHARSET_INFO* get_sql_field_charse bool check_duplicate_warning(THD *thd, char *msg, ulong length) { - List_iterator_fast it(thd->get_warning_info()->warn_list()); + List_iterator_fast it(thd->get_stmt_da()->warn_list()); MYSQL_ERROR *err; while ((err= it++)) { @@ -7053,7 +7053,7 @@ bool mysql_alter_table(THD *thd,char *ne end_temporary: my_snprintf(tmp_name, sizeof(tmp_name), ER(ER_INSERT_INFO), (ulong) (copied + deleted), (ulong) deleted, - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); my_ok(thd, copied + deleted, 0L, tmp_name); DBUG_RETURN(FALSE); @@ -7080,7 +7080,7 @@ err: Report error here. */ if (alter_info->error_if_not_empty && - thd->get_warning_info()->current_row_for_warning()) + thd->get_stmt_da()->current_row_for_warning()) { const char *f_val= 0; enum enum_mysql_timestamp_type t_type= MYSQL_TIMESTAMP_DATE; @@ -7285,7 +7285,7 @@ copy_data_between_tables(TABLE *from,TAB init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1, 1, FALSE); if (ignore) to->file->extra(HA_EXTRA_IGNORE_DUP_KEY); - thd->get_warning_info()->reset_current_row_for_warning(); + thd->get_stmt_da()->reset_current_row_for_warning(); restore_record(to, s->default_values); // Create empty record while (!(error=info.read_record(&info))) { @@ -7344,7 +7344,7 @@ copy_data_between_tables(TABLE *from,TAB } else found_count++; - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); } end_read_record(&info); free_io_cache(from); === modified file 'sql/sql_time.cc' --- a/sql/sql_time.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_time.cc 2011-06-07 16:20:10 +0000 @@ -817,7 +817,7 @@ void make_truncated_value_warning(THD *t cs->cset->snprintf(cs, warn_buff, sizeof(warn_buff), ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), type_str, str.c_ptr(), field_name, - (ulong) thd->get_warning_info()->current_row_for_warning()); + (ulong) thd->get_stmt_da()->current_row_for_warning()); else { if (time_type > MYSQL_TIMESTAMP_ERROR) === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sql_update.cc 2011-06-07 16:20:10 +0000 @@ -791,7 +791,7 @@ int mysql_update(THD *thd, } else table->file->unlock_row(); - thd->get_warning_info()->inc_current_row_for_warning(); + thd->get_stmt_da()->inc_current_row_for_warning(); if (thd->is_error()) { error= 1; @@ -897,7 +897,7 @@ int mysql_update(THD *thd, char buff[MYSQL_ERRMSG_SIZE]; my_snprintf(buff, sizeof(buff), ER(ER_UPDATE_INFO), (ulong) found, (ulong) updated, - (ulong) thd->get_warning_info()->statement_warn_count()); + (ulong) thd->get_stmt_da()->statement_warn_count()); my_ok(thd, (thd->client_capabilities & CLIENT_FOUND_ROWS) ? found : updated, id, buff); DBUG_PRINT("info",("%ld records updated", (long) updated)); === modified file 'sql/sys_vars.cc' --- a/sql/sys_vars.cc 2011-06-07 13:09:47 +0000 +++ b/sql/sys_vars.cc 2011-06-07 16:20:10 +0000 @@ -2838,7 +2838,7 @@ static Sys_var_session_special Sys_rand_ static ulonglong read_error_count(THD *thd) { - return thd->get_warning_info()->error_count(); + return thd->get_stmt_da()->error_count(); } // this really belongs to the SHOW STATUS static Sys_var_session_special Sys_error_count( @@ -2850,7 +2850,7 @@ static Sys_var_session_special Sys_error static ulonglong read_warning_count(THD *thd) { - return thd->get_warning_info()->warn_count(); + return thd->get_stmt_da()->warn_count(); } // this really belongs to the SHOW STATUS static Sys_var_session_special Sys_warning_count( --===============2434549061077931451== 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\ # 4g19t4syr65bq3ku # target_branch: file:///home/alik/MySQL/bzr/00/bug55843/mysql-trunk-\ # bug55843-01/ # testament_sha1: 22220b73ba5ff18d1675d3b33b0903d90d8742c7 # timestamp: 2011-06-07 20:20:22 +0400 # base_revision_id: alexander.nozdrin@stripped\ # u8m8vpv5fvdd1801 # # Begin bundle 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 --===============2434549061077931451==--