@@ -77,20 +77,23 @@ protected Serializable[] deserializeRow(long tableId, BitSet includedColumns, By
7777 }
7878 int index = i - numberOfSkippedColumns ;
7979 if (!nullColumns .get (index )) {
80+ // mysql-5.6.24 sql/log_event.cc log_event_print_value (line 1980)
8081 int typeCode = types [i ] & 0xFF , meta = metadata [i ], length = 0 ;
81- if (typeCode == ColumnType .STRING .getCode () && meta > 256 ) {
82- int meta0 = meta >> 8 , meta1 = meta & 0xFF ;
83- if ((meta0 & 0x30 ) != 0x30 ) { // long CHAR field
84- typeCode = meta0 | 0x30 ;
85- length = meta1 | (((meta0 & 0x30 ) ^ 0x30 ) << 4 );
86- } else {
87- if (meta0 == ColumnType .SET .getCode () || meta0 == ColumnType .ENUM .getCode () ||
88- meta0 == ColumnType .STRING .getCode ()) {
89- typeCode = meta0 ;
90- length = meta1 ;
82+ if (typeCode == ColumnType .STRING .getCode ()) {
83+ if (meta >= 256 ) {
84+ int meta0 = meta >> 8 , meta1 = meta & 0xFF ;
85+ if ((meta0 & 0x30 ) != 0x30 ) {
86+ typeCode = meta0 | 0x30 ;
87+ length = meta1 | (((meta0 & 0x30 ) ^ 0x30 ) << 4 );
9188 } else {
92- throw new IOException ("Unexpected meta " + meta + " for column of type " + typeCode );
89+ // mysql-5.6.24 sql/rpl_utility.h enum_field_types (line 278)
90+ if (meta0 == ColumnType .ENUM .getCode () || meta0 == ColumnType .SET .getCode ()) {
91+ typeCode = meta0 ;
92+ }
93+ length = meta1 ;
9394 }
95+ } else {
96+ length = meta ;
9497 }
9598 }
9699 result [index ] = deserializeCell (ColumnType .byCode (typeCode ), meta , length , inputStream );
0 commit comments