diff options
-rw-r--r-- | sql/rpl_record.cc | 11 | ||||
-rw-r--r-- | sql/rpl_utility.cc | 2 | ||||
-rw-r--r-- | sql/rpl_utility.h | 12 |
3 files changed, 15 insertions, 10 deletions
diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc index 8772729763f..36dcedb3b88 100644 --- a/sql/rpl_record.cc +++ b/sql/rpl_record.cc @@ -250,13 +250,14 @@ unpack_row(RELAY_LOG_INFO const *rli, We only unpack the field if it was non-null. Use the master's size information if available else call normal unpack operation. - */ + */ #if 0 - bool save= table->s->db_low_byte_first; - table->s->db_low_byte_first= TRUE; + bool save= table->s->db_low_byte_first; + table->s->db_low_byte_first= TRUE; #endif - if (tabledef && tabledef->field_metadata(i)) - pack_ptr= f->unpack(f->ptr, pack_ptr, tabledef->field_metadata(i)); + uint16 const metadata= tabledef->field_metadata(i); + if (tabledef && metadata) + pack_ptr= f->unpack(f->ptr, pack_ptr, metadata); else pack_ptr= f->unpack(f->ptr, pack_ptr); #if 0 diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index 9c0eb9891a0..85ed6089f56 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -97,7 +97,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) { uint from_len= (m_field_metadata[col] >> 8U) & 0x00ff; uint from_bit_len= m_field_metadata[col] & 0x00ff; - DBUG_ASSERT(from_bit_len >= 0 && from_bit_len <= 7); + DBUG_ASSERT(from_bit_len <= 7); length= from_len + ((from_bit_len > 0) ? 1 : 0); break; } diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h index 034b6e084af..d08f62363af 100644 --- a/sql/rpl_utility.h +++ b/sql/rpl_utility.h @@ -65,10 +65,14 @@ public: m_field_metadata(0), m_null_bits(0), m_memory(NULL) { m_memory= (uchar *)my_multi_malloc(MYF(MY_WME), - &m_type, size, - &m_field_metadata, size * sizeof(short), - &m_null_bits, (m_size + 7) / 8, - NULL); + &m_type, size, + &m_field_metadata, + size * sizeof(uint16), + &m_null_bits, (size + 7) / 8, + NULL); + + bzero(m_field_metadata, size * sizeof(uint16)); + if (m_type) memcpy(m_type, types, size); else |