mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
WL#3228 (NDB) : RBR using different table defs on slave/master
This patch corrects a problem found during testing on Solaris. The code changes how length values are retrieved on big endian machines. The patch allows the rpl_extraColmaster tests to run on these machines.
This commit is contained in:
@ -114,8 +114,43 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data)
|
||||
case MYSQL_TYPE_BLOB:
|
||||
case MYSQL_TYPE_GEOMETRY:
|
||||
{
|
||||
#if 1
|
||||
/*
|
||||
BUG#29549:
|
||||
This is currently broken for NDB, which is using big-endian
|
||||
order when packing length of BLOB. Once they have decided how to
|
||||
fix the issue, we can enable the code below to make sure to
|
||||
always read the length in little-endian order.
|
||||
*/
|
||||
Field_blob fb(m_field_metadata[col]);
|
||||
length= fb.get_packed_size(master_data);
|
||||
length= fb.get_packed_size(master_data, TRUE);
|
||||
#else
|
||||
/*
|
||||
Compute the length of the data. We cannot use get_length() here
|
||||
since it is dependent on the specific table (and also checks the
|
||||
packlength using the internal 'table' pointer) and replication
|
||||
is using a fixed format for storing data in the binlog.
|
||||
*/
|
||||
switch (m_field_metadata[col]) {
|
||||
case 1:
|
||||
length= *master_data;
|
||||
break;
|
||||
case 2:
|
||||
length= sint2korr(master_data);
|
||||
break;
|
||||
case 3:
|
||||
length= uint3korr(master_data);
|
||||
break;
|
||||
case 4:
|
||||
length= uint4korr(master_data);
|
||||
break;
|
||||
default:
|
||||
DBUG_ASSERT(0); // Should not come here
|
||||
break;
|
||||
}
|
||||
|
||||
length+= m_field_metadata[col];
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
Reference in New Issue
Block a user