Fix MySQL 8.0 optional metadata fields read in TableMapEvent

This commit is contained in:
BohuTANG 2020-05-23 18:42:21 +08:00 committed by zhang2014
parent 3477a467e6
commit 2a0e79c145
2 changed files with 7 additions and 3 deletions

View File

@ -161,8 +161,12 @@ namespace MySQLReplication
readLengthEncodedString(meta, payload);
parseMeta(meta);
size_t len = (column_count + 8) / 7;
payload.readStrict(reinterpret_cast<char *>(null_bitmap.data()), len);
size_t null_bitmap_size = (column_count + 8) / 7;
readBitmap(payload, null_bitmap, null_bitmap_size);
/// Ignore MySQL 8.0 optional metadata fields.
/// https://mysqlhighavailability.com/more-metadata-is-written-into-binary-log/
payload.ignore(payload.available() - CHECKSUM_CRC32_SIGNATURE_LENGTH);
}
void TableMapEvent::parseMeta(String meta)

View File

@ -384,7 +384,7 @@ namespace MySQLReplication
UInt32 column_count;
std::vector<UInt8> column_type;
std::vector<UInt16> column_meta;
String null_bitmap;
Bitmap null_bitmap;
void dump() const override;