@@ -69,7 +69,8 @@ public TableMapEventMetadata deserialize(ByteArrayInputStream inputStream, int n
69
69
switch (fieldType ) {
70
70
case SIGNEDNESS :
71
71
result .setSignedness (
72
- convertColumnOrder (readBooleanList (inputStream , nNumericColumns ), numericColumIdxList ));
72
+ convertColumnOrder (readBooleanList (inputStream , nNumericColumns ), nColumns ,
73
+ numericColumIdxList ));
73
74
break ;
74
75
case DEFAULT_CHARSET :
75
76
result .setDefaultCharset (readDefaultCharset (inputStream ));
@@ -112,22 +113,21 @@ public TableMapEventMetadata deserialize(ByteArrayInputStream inputStream, int n
112
113
return result ;
113
114
}
114
115
115
- private static BitSet convertColumnOrder (BitSet numericOrderBitSet , List <Integer > numericColumIdxList ) {
116
+ private static BitSet convertColumnOrder (BitSet numericOrderBitSet , int nColumns ,
117
+ List <Integer > numericColumIdxList ) {
116
118
// Case SIGNEDNESS The order of indices in the Inputstream corresponds to the order of numeric columns
117
- // So we need to map the index to all columns index (include non numeric type columns)
118
- Map <Integer , Integer > mappingColumnOrderMap = new HashMap <>();
119
-
120
- for (int numericColumnOrder = 0 ; numericColumnOrder < numericColumIdxList .size ();
121
- numericColumnOrder ++) {
122
- int allColumnIndex = numericColumIdxList .get (numericColumnOrder );
123
- mappingColumnOrderMap .put (numericColumnOrder , allColumnIndex );
124
- }
119
+ // So we need to change the index to all columns index (include non numeric type columns)
125
120
126
121
BitSet columnOrderBitSet = new BitSet ();
127
- for (int i = 0 ; i < numericOrderBitSet .length (); i ++) {
128
- int numericColumnOrder = numericOrderBitSet .nextSetBit (i );
129
- int allColumnIndex = mappingColumnOrderMap .get (numericColumnOrder );
130
- columnOrderBitSet .set (allColumnIndex );
122
+ int position = 0 ;
123
+ for (int columnIndex = 0 ; columnIndex < nColumns ; columnIndex ++) {
124
+ if (numericColumIdxList .contains (columnIndex )) {
125
+ if (numericOrderBitSet .get (position ++)) {
126
+ columnOrderBitSet .set (columnIndex );
127
+ }
128
+
129
+ }
130
+
131
131
}
132
132
return columnOrderBitSet ;
133
133
}
@@ -206,15 +206,16 @@ private enum MetadataFieldType {
206
206
ENUM_AND_SET_DEFAULT_CHARSET (10 ), // Charsets of ENUM and SET columns
207
207
ENUM_AND_SET_COLUMN_CHARSET (11 ), // Charsets of ENUM and SET columns
208
208
VISIBILITY (12 ), // Column visibility (8.0.23 and newer)
209
- UNKNOWN_METADATA_FIELD_TYPE (128 ); // Returned with binlog-row-metadata=FULL from MySQL 8.0 in some cases
209
+ UNKNOWN_METADATA_FIELD_TYPE (
210
+ 128 ); // Returned with binlog-row-metadata=FULL from MySQL 8.0 in some cases
210
211
211
212
private final int code ;
212
213
213
214
private MetadataFieldType (int code ) {
214
215
this .code = code ;
215
216
}
216
217
217
- public int getCode () { return code ; }
218
+ public int getCode () {return code ;}
218
219
219
220
private static final Map <Integer , MetadataFieldType > INDEX_BY_CODE ;
220
221
0 commit comments