mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch adds functionality to row-based replication to ensure the slave's column sizes are >= to that of the master. It also includes some refactoring for the code from WL#3228.
This commit is contained in:
@ -156,6 +156,25 @@ table_def::compatible_with(RELAY_LOG_INFO const *rli_arg, TABLE *table)
|
||||
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
|
||||
}
|
||||
/*
|
||||
Check the slave's field size against that of the master.
|
||||
*/
|
||||
if (!error &&
|
||||
!table->field[col]->compatible_field_size(field_metadata(col)))
|
||||
{
|
||||
error= 1;
|
||||
char buf[256];
|
||||
my_snprintf(buf, sizeof(buf), "Column %d size mismatch - "
|
||||
"master has size %d, %s.%s on slave has size %d."
|
||||
" Master's column size should be <= the slave's "
|
||||
"column size.", col,
|
||||
table->field[col]->pack_length_from_metadata(
|
||||
m_field_metadata[col]),
|
||||
tsh->db.str, tsh->table_name.str,
|
||||
table->field[col]->row_pack_length());
|
||||
rli->report(ERROR_LEVEL, ER_BINLOG_ROW_WRONG_TABLE_DEF,
|
||||
ER(ER_BINLOG_ROW_WRONG_TABLE_DEF), buf);
|
||||
}
|
||||
}
|
||||
|
||||
return error;
|
||||
|
Reference in New Issue
Block a user