Skip to content

Commit 1383726

Browse files
committed
Respond to PR feedback
1 parent 78eaa58 commit 1383726

File tree

3 files changed

+28
-30
lines changed

3 files changed

+28
-30
lines changed

src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TableMapEventDataDeserializer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626
public class TableMapEventDataDeserializer implements EventDataDeserializer<TableMapEventData> {
2727

28+
private final TableMapEventMetadataDeserializer metadataDeserializer = new TableMapEventMetadataDeserializer();
29+
2830
@Override
2931
public TableMapEventData deserialize(ByteArrayInputStream inputStream) throws IOException {
3032
TableMapEventData eventData = new TableMapEventData();
@@ -38,7 +40,7 @@ public TableMapEventData deserialize(ByteArrayInputStream inputStream) throws IO
3840
inputStream.readPackedInteger(); // metadata length
3941
eventData.setColumnMetadata(readMetadata(inputStream, eventData.getColumnTypes()));
4042
eventData.setColumnNullability(inputStream.readBitSet(numberOfColumns, true));
41-
eventData.setEventMetadata(new TableMapEventMetadataDeserializer(numberOfColumns).deserialize(inputStream));
43+
eventData.setEventMetadata(metadataDeserializer.deserialize(inputStream, numberOfColumns));
4244
return eventData;
4345
}
4446

src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TableMapEventMetadataDeserializer.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,66 +30,66 @@
3030
/**
3131
* @author <a href="mailto:[email protected]">Ahmed Abdul Hamid</a>
3232
*/
33-
public class TableMapEventMetadataDeserializer implements EventDataDeserializer<TableMapEventMetadata> {
33+
public class TableMapEventMetadataDeserializer {
3434

35-
private final int numberOfColumns;
36-
37-
public TableMapEventMetadataDeserializer(int numberOfColumns) {
38-
this.numberOfColumns = numberOfColumns;
39-
}
40-
41-
@Override
42-
public TableMapEventMetadata deserialize(ByteArrayInputStream inputStream) throws IOException {
43-
44-
if (inputStream.available() <= 0) {
35+
public TableMapEventMetadata deserialize(ByteArrayInputStream inputStream, int numberOfColumns) throws IOException {
36+
int remainingBytes = inputStream.available();
37+
if (remainingBytes <= 0) {
4538
return null;
4639
}
4740

48-
TableMapEventMetadata eventData = new TableMapEventMetadata();
41+
TableMapEventMetadata result = new TableMapEventMetadata();
4942

50-
while (inputStream.available() > 0) {
43+
for (; remainingBytes > 0; inputStream.enterBlock(remainingBytes)) {
5144
MetadataFieldType fieldType = MetadataFieldType.byCode(inputStream.readInteger(1));
5245
int fieldLength = inputStream.readPackedInteger();
5346

47+
remainingBytes = inputStream.available();
48+
inputStream.enterBlock(fieldLength);
49+
5450
switch (fieldType) {
5551
case SIGNEDNESS:
56-
eventData.setSignedness(readSignedness(inputStream, numberOfColumns));
52+
result.setSignedness(readSignedness(inputStream, numberOfColumns));
5753
break;
5854
case DEFAULT_CHARSET:
59-
eventData.setDefaultCharset(readDefaultCharset(inputStream.readAsNewStream(fieldLength)));
55+
result.setDefaultCharset(readDefaultCharset(inputStream));
6056
break;
6157
case COLUMN_CHARSET:
62-
eventData.setColumnCharsets(readIntegers(inputStream.readAsNewStream(fieldLength)));
58+
result.setColumnCharsets(readIntegers(inputStream));
6359
break;
6460
case COLUMN_NAME:
65-
eventData.setColumnNames(readColumnNames(inputStream.readAsNewStream(fieldLength)));
61+
result.setColumnNames(readColumnNames(inputStream));
6662
break;
6763
case SET_STR_VALUE:
68-
eventData.setSetStrValues(readTypeValues(inputStream.readAsNewStream(fieldLength)));
64+
result.setSetStrValues(readTypeValues(inputStream));
6965
break;
7066
case ENUM_STR_VALUE:
71-
eventData.setEnumStrValues(readTypeValues(inputStream.readAsNewStream(fieldLength)));
67+
result.setEnumStrValues(readTypeValues(inputStream));
7268
break;
7369
case GEOMETRY_TYPE:
74-
eventData.setGeometryTypes(readIntegers(inputStream.readAsNewStream(fieldLength)));
70+
result.setGeometryTypes(readIntegers(inputStream));
7571
break;
7672
case SIMPLE_PRIMARY_KEY:
77-
eventData.setSimplePrimaryKeys(readIntegers(inputStream.readAsNewStream(fieldLength)));
73+
result.setSimplePrimaryKeys(readIntegers(inputStream));
7874
break;
7975
case PRIMARY_KEY_WITH_PREFIX:
80-
eventData.setPrimaryKeysWithPrefix(readIntegerPairs(inputStream.readAsNewStream(fieldLength)));
76+
result.setPrimaryKeysWithPrefix(readIntegerPairs(inputStream));
8177
break;
8278
case ENUM_AND_SET_DEFAULT_CHARSET:
83-
eventData.setEnumAndSetDefaultCharset(readDefaultCharset(inputStream.readAsNewStream(fieldLength)));
79+
result.setEnumAndSetDefaultCharset(readDefaultCharset(inputStream));
8480
break;
8581
case ENUM_AND_SET_COLUMN_CHARSET:
86-
eventData.setEnumAndSetColumnCharsets(readIntegers(inputStream.readAsNewStream(fieldLength)));
82+
result.setEnumAndSetColumnCharsets(readIntegers(inputStream));
8783
break;
8884
default:
85+
// set the remaining bytes before throwing so the main event deserializer
86+
// knows how many bytes to skip in order to skip this entire Table Map event
87+
inputStream.enterBlock(remainingBytes);
8988
throw new IOException("Unsupported table metadata field type " + fieldType);
9089
}
90+
remainingBytes -= fieldLength;
9191
}
92-
return eventData;
92+
return result;
9393
}
9494

9595
private static BitSet readSignedness(ByteArrayInputStream inputStream, int length) throws IOException {

src/main/java/com/github/shyiko/mysql/binlog/io/ByteArrayInputStream.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@ public byte[] read(int length) throws IOException {
9090
return bytes;
9191
}
9292

93-
public ByteArrayInputStream readAsNewStream(int length) throws IOException {
94-
return new ByteArrayInputStream(read(length));
95-
}
96-
9793
public void fill(byte[] bytes, int offset, int length) throws IOException {
9894
int remaining = length;
9995
while (remaining != 0) {

0 commit comments

Comments
 (0)