mariadb/sql/rpl_utility.cc
unknown abbf5941d9 BUG#24954 (Last_errno and Last_error not set after master_retry_count has
been reached):

Post-merge patch to handle all the changes to the tree since the tree
was cloned.


mysql-test/extra/rpl_tests/rpl_log.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/extra/rpl_tests/rpl_reset_slave.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/include/show_slave_status.inc:
  Column change.
mysql-test/r/rpl_000015.result:
  Result file change.
mysql-test/r/rpl_change_master.result:
  Result file change.
mysql-test/r/rpl_empty_master_crash.result:
  Result file change.
mysql-test/r/rpl_extraCol_innodb.result:
  Result file change.
mysql-test/r/rpl_extraCol_myisam.result:
  Result file change.
mysql-test/r/rpl_flushlog_loop.result:
  Result file change.
mysql-test/r/rpl_incident.result:
  Result file change.
mysql-test/r/rpl_known_bugs_detection.result:
  Result file change.
mysql-test/r/rpl_loaddata.result:
  Result file change.
mysql-test/r/rpl_loaddata_fatal.result:
  Result file change.
mysql-test/r/rpl_log_pos.result:
  Result file change.
mysql-test/r/rpl_ndb_basic.result:
  Result file change.
mysql-test/r/rpl_ndb_circular.result:
  Result file change.
mysql-test/r/rpl_ndb_extraCol.result:
  Result file change.
mysql-test/r/rpl_ndb_idempotent.result:
  Result file change.
mysql-test/r/rpl_ndb_log.result:
  Result file change.
mysql-test/r/rpl_ndb_sync.result:
  Result file change.
mysql-test/r/rpl_rbr_to_sbr.result:
  Result file change.
mysql-test/r/rpl_redirect.result:
  Result file change.
mysql-test/r/rpl_replicate_do.result:
  Result file change.
mysql-test/r/rpl_rotate_logs.result:
  Result file change.
mysql-test/r/rpl_row_inexist_tbl.result:
  Result file change.
mysql-test/r/rpl_row_log.result:
  Result file change.
mysql-test/r/rpl_row_log_innodb.result:
  Result file change.
mysql-test/r/rpl_row_max_relay_size.result:
  Result file change.
mysql-test/r/rpl_row_reset_slave.result:
  Result file change.
mysql-test/r/rpl_row_tabledefs_2myisam.result:
  Result file change.
mysql-test/r/rpl_row_tabledefs_3innodb.result:
  Result file change.
mysql-test/r/rpl_row_until.result:
  Result file change.
mysql-test/r/rpl_server_id1.result:
  Result file change.
mysql-test/r/rpl_server_id2.result:
  Result file change.
mysql-test/r/rpl_slave_skip.result:
  Result file change.
mysql-test/r/rpl_ssl.result:
  Result file change.
mysql-test/r/rpl_ssl1.result:
  Result file change.
mysql-test/r/rpl_stm_log.result:
  Result file change.
mysql-test/r/rpl_stm_max_relay_size.result:
  Result file change.
mysql-test/r/rpl_stm_reset_slave.result:
  Result file change.
mysql-test/r/rpl_stm_until.result:
  Result file change.
mysql-test/t/rpl_000015.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_change_master.test:
  Column position change.
  Making result of SHOW SLAVE STATUS vertical.
mysql-test/t/rpl_empty_master_crash.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_log_pos.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_ndb_basic.test:
  Column position change.
mysql-test/t/rpl_ndb_idempotent.test:
  Column position change.
mysql-test/t/rpl_ndb_sync.test:
  Column position change.
  Making result of SHOW SLAVE STATUS vertical.
mysql-test/t/rpl_redirect.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_replicate_do.test:
  Column position change.
  Making result of SHOW SLAVE STATUS vertical.
mysql-test/t/rpl_rotate_logs.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_row_inexist_tbl.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_row_until.test:
  Replacing SHOW SLAVE STATUS with include file.
mysql-test/t/rpl_server_id1.test:
  Column position change.
  Making result of SHOW SLAVE STATUS vertical.
mysql-test/t/rpl_server_id2.test:
  Column position change.
  Making result of SHOW SLAVE STATUS vertical.
mysql-test/t/rpl_slave_status.test:
  Column position change.
mysql-test/t/rpl_ssl.test:
  Column position change.
mysql-test/t/rpl_ssl1.test:
  Column position change.
mysql-test/t/rpl_stm_until.test:
  Replacing SHOW SLAVE STATUS with include file.
sql/log_event.cc:
  Using member function last_error() instead of member variable.
  Replacing use of 'table' with 'm_table'.
  Suppressing warnings in debug printout.
  Setting thd->net.last_error on error return from unpack_row() to get
  a non-zero error message.  The error codes for are being harmonized
  in another worklog.
  Replacing use of slave_print_msg() with RELAY_LOG_INFO::report().
sql/rpl_mi.h:
  Moving order of include files since they are dependent (!).
sql/rpl_record.cc:
  Adding missing include file.
  Replacing use of slave_print_msg() with RELAY_LOG_INFO::report().
sql/rpl_record_old.cc:
  Adding missing include file.
  Replacing use of slave_print_msg() with RELAY_LOG_INFO::report().
sql/rpl_reporting.cc:
  Adding const modifier to member function.
  Using renamed member variable m_last_error.
sql/rpl_reporting.h:
  Adding missing constant MAX_SLAVE_ERRMSG.
  Adding const modifier to Slave_reporting_capability::report().
  Hiding and renaming member variable last_error and incorporating
  member function for access in order to make it mutable.
sql/rpl_rli.h:
  Moving constant MAX_SLAVE_ERRMSG.
sql/rpl_utility.cc:
  Adding missing include file rpl_rli.h.
sql/slave.cc:
  Replacing use of member variable last_error with call to member function
  last_error().
  Replacing use of slave_print_msg() with RELAY_LOG_INFO::report().
2007-06-11 22:15:39 +02:00

159 lines
4.2 KiB
C++

/* Copyright (C) 2006 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include "rpl_utility.h"
#include "rpl_rli.h"
uint32
field_length_from_packed(enum_field_types const field_type,
uchar const *const data)
{
uint32 length;
switch (field_type) {
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
length= ~(uint32) 0;
break;
case MYSQL_TYPE_YEAR:
case MYSQL_TYPE_TINY:
length= 1;
break;
case MYSQL_TYPE_SHORT:
length= 2;
break;
case MYSQL_TYPE_INT24:
length= 3;
break;
case MYSQL_TYPE_LONG:
length= 4;
break;
#ifdef HAVE_LONG_LONG
case MYSQL_TYPE_LONGLONG:
length= 8;
break;
#endif
case MYSQL_TYPE_FLOAT:
length= sizeof(float);
break;
case MYSQL_TYPE_DOUBLE:
length= sizeof(double);
break;
case MYSQL_TYPE_NULL:
length= 0;
break;
case MYSQL_TYPE_NEWDATE:
length= 3;
break;
case MYSQL_TYPE_DATE:
length= 4;
break;
case MYSQL_TYPE_TIME:
length= 3;
break;
case MYSQL_TYPE_TIMESTAMP:
length= 4;
break;
case MYSQL_TYPE_DATETIME:
length= 8;
break;
break;
case MYSQL_TYPE_BIT:
length= ~(uint32) 0;
break;
default:
/* This case should never be chosen */
DBUG_ASSERT(0);
/* If something goes awfully wrong, it's better to get a string than die */
case MYSQL_TYPE_STRING:
length= uint2korr(data);
break;
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_SET:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_VARCHAR:
length= ~(uint32) 0; // NYI
break;
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_GEOMETRY:
length= ~(uint32) 0; // NYI
break;
}
return length;
}
/*********************************************************************
* table_def member definitions *
*********************************************************************/
/*
Is the definition compatible with a table?
*/
int
table_def::compatible_with(RELAY_LOG_INFO const *rli_arg, TABLE *table)
const
{
/*
We only check the initial columns for the tables.
*/
uint const cols_to_check= min(table->s->fields, size());
int error= 0;
RELAY_LOG_INFO const *rli= const_cast<RELAY_LOG_INFO*>(rli_arg);
TABLE_SHARE const *const tsh= table->s;
/*
To get proper error reporting for all columns of the table, we
both check the width and iterate over all columns.
*/
if (tsh->fields < size())
{
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
error= 1;
char buf[256];
my_snprintf(buf, sizeof(buf), "Table width mismatch - "
"received %u columns, %s.%s has %u columns",
(uint) size(), tsh->db.str, tsh->table_name.str,
tsh->fields);
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
}
for (uint col= 0 ; col < cols_to_check ; ++col)
{
if (table->field[col]->type() != type(col))
{
DBUG_ASSERT(col < size() && col < tsh->fields);
DBUG_ASSERT(tsh->db.str && tsh->table_name.str);
error= 1;
char buf[256];
my_snprintf(buf, sizeof(buf), "Column %d type mismatch - "
"received type %d, %s.%s has type %d",
col, type(col), tsh->db.str, tsh->table_name.str,
table->field[col]->type());
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
}
}
return error;
}