Skip to content

Commit e4f973d

Browse files
authored
[BugFix][Mysql-CDC] Fix Time data type is empty when reading from MySQL CDC (#4670)
1 parent 228257b commit e4f973d

File tree

1 file changed

+7
-13
lines changed
  • seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/reader/fetch/scan

1 file changed

+7
-13
lines changed

seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/mysql/source/reader/fetch/scan/MySqlSnapshotSplitReadTask.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@
3232
import io.debezium.connector.mysql.MySqlConnectorConfig;
3333
import io.debezium.connector.mysql.MySqlDatabaseSchema;
3434
import io.debezium.connector.mysql.MySqlOffsetContext;
35+
import io.debezium.connector.mysql.MysqlTextProtocolFieldReader;
3536
import io.debezium.pipeline.EventDispatcher;
3637
import io.debezium.pipeline.source.AbstractSnapshotChangeEventSource;
3738
import io.debezium.pipeline.source.spi.ChangeEventSource;
3839
import io.debezium.pipeline.source.spi.SnapshotProgressListener;
3940
import io.debezium.pipeline.spi.ChangeRecordEmitter;
4041
import io.debezium.pipeline.spi.OffsetContext;
4142
import io.debezium.pipeline.spi.SnapshotResult;
43+
import io.debezium.relational.Column;
4244
import io.debezium.relational.RelationalSnapshotChangeEventSource;
4345
import io.debezium.relational.SnapshotChangeRecordEmitter;
4446
import io.debezium.relational.Table;
@@ -50,9 +52,7 @@
5052

5153
import java.sql.PreparedStatement;
5254
import java.sql.ResultSet;
53-
import java.sql.ResultSetMetaData;
5455
import java.sql.SQLException;
55-
import java.sql.Types;
5656
import java.time.Duration;
5757

5858
import static org.apache.seatunnel.connectors.seatunnel.cdc.mysql.utils.MySqlConnectionUtils.currentBinlogOffset;
@@ -74,6 +74,8 @@ public class MySqlSnapshotSplitReadTask extends AbstractSnapshotChangeEventSourc
7474
private final SnapshotSplit snapshotSplit;
7575
private final MySqlOffsetContext offsetContext;
7676
private final SnapshotProgressListener snapshotProgressListener;
77+
private final MysqlTextProtocolFieldReader mysqlTextProtocolFieldReader =
78+
new MysqlTextProtocolFieldReader();
7779

7880
public MySqlSnapshotSplitReadTask(
7981
MySqlConnectorConfig connectorConfig,
@@ -217,7 +219,9 @@ private void createDataEventsForTable(
217219
rows++;
218220
final Object[] row = new Object[columnArray.getGreatestColumnPosition()];
219221
for (int i = 0; i < columnArray.getColumns().length; i++) {
220-
row[columnArray.getColumns()[i].position() - 1] = readField(rs, i + 1);
222+
Column actualColumn = table.columns().get(i);
223+
row[columnArray.getColumns()[i].position() - 1] =
224+
mysqlTextProtocolFieldReader.readField(rs, i + 1, actualColumn, table);
221225
}
222226
if (logTimer.expired()) {
223227
long stop = clock.currentTimeInMillis();
@@ -256,16 +260,6 @@ private Threads.Timer getTableScanLogTimer() {
256260
return Threads.timer(clock, LOG_INTERVAL);
257261
}
258262

259-
private Object readField(ResultSet rs, int columnIndex) throws SQLException {
260-
final ResultSetMetaData metaData = rs.getMetaData();
261-
final int columnType = metaData.getColumnType(columnIndex);
262-
if (columnType == Types.TIME) {
263-
return rs.getTimestamp(columnIndex);
264-
} else {
265-
return rs.getObject(columnIndex);
266-
}
267-
}
268-
269263
private static class MySqlSnapshotContext
270264
extends RelationalSnapshotChangeEventSource.RelationalSnapshotContext {
271265
public MySqlSnapshotContext() throws SQLException {

0 commit comments

Comments
 (0)