in rm-datasource/src/main/java/org/apache/seata/rm/datasource/sql/struct/TableRecords.java [194:265]
public static TableRecords buildRecords(TableMeta tmeta, ResultSet resultSet) throws SQLException {
TableRecords records = new TableRecords(tmeta);
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
Set<String> ignoreCasePKs = tmeta.getCaseInsensitivePKs();
int columnCount = resultSetMetaData.getColumnCount();
while (resultSet.next()) {
List<Field> fields = new ArrayList<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
String colName = resultSetMetaData.getColumnName(i);
ColumnMeta col = getColumnMeta(tmeta,colName);
int dataType = col.getDataType();
Field field = new Field();
field.setName(col.getColumnName());
if (ignoreCasePKs.contains(colName)) {
field.setKeyType(KeyType.PRIMARY_KEY);
}
field.setType(dataType);
// mysql will not run in this code
// cause mysql does not use java.sql.Blob, java.sql.sql.Clob to process Blob and Clob column
if (dataType == Types.BLOB) {
Blob blob = resultSet.getBlob(i);
if (blob != null) {
field.setValue(new SerialBlob(blob));
}
} else if (dataType == Types.CLOB) {
Clob clob = resultSet.getClob(i);
if (clob != null) {
field.setValue(new SerialClob(clob));
}
} else if (dataType == Types.NCLOB) {
NClob object = resultSet.getNClob(i);
if (object != null) {
field.setValue(new SerialClob(object));
}
} else if (dataType == Types.ARRAY) {
Array array = resultSet.getArray(i);
if (array != null) {
field.setValue(new SerialArray(array));
}
} else if (dataType == Types.REF) {
Ref ref = resultSet.getRef(i);
if (ref != null) {
field.setValue(new SerialRef(ref));
}
} else if (dataType == Types.DATALINK) {
java.net.URL url = resultSet.getURL(i);
if (url != null) {
field.setValue(new SerialDatalink(url));
}
} else if (dataType == Types.JAVA_OBJECT) {
Object object = resultSet.getObject(i);
if (object != null) {
field.setValue(new SerialJavaObject(object));
}
} else if (dataType == TIMESTAMP_WITH_TIME_ZONE || dataType == TIMESTAMP_WITH_LOCAL_TIME_ZONE) {
field.setValue(convertOffSetTime(timeToOffsetDateTime(resultSet.getBytes(i))));
} else {
// JDBCType.DISTINCT, JDBCType.STRUCT etc...
field.setValue(holdSerialDataType(resultSet.getObject(i)));
}
fields.add(field);
}
Row row = new Row();
row.setFields(fields);
records.add(row);
}
return records;
}