in seatunnel-connectors-v2/connector-cassandra/src/main/java/org/apache/seatunnel/connectors/seatunnel/cassandra/util/TypeConvertUtil.java [132:291]
public static SeaTunnelRow buildSeaTunnelRow(Row row) {
DataType subType;
Class<?> typeClass;
Object[] fields = new Object[row.size()];
ColumnDefinitions metaData = row.getColumnDefinitions();
for (int i = 0; i < row.size(); i++) {
switch (metaData.get(i).getType().getProtocolCode()) {
case ProtocolConstants.DataType.ASCII:
case ProtocolConstants.DataType.VARCHAR:
fields[i] = row.getString(i);
break;
case ProtocolConstants.DataType.VARINT:
fields[i] = Objects.requireNonNull(row.getBigInteger(i)).toString();
break;
case ProtocolConstants.DataType.TIMEUUID:
case ProtocolConstants.DataType.UUID:
fields[i] = Objects.requireNonNull(row.getUuid(i)).toString();
break;
case ProtocolConstants.DataType.INET:
fields[i] = Objects.requireNonNull(row.getInetAddress(i)).getHostAddress();
break;
case ProtocolConstants.DataType.TINYINT:
fields[i] = row.getByte(i);
break;
case ProtocolConstants.DataType.SMALLINT:
fields[i] = row.getShort(i);
break;
case ProtocolConstants.DataType.INT:
fields[i] = row.getInt(i);
break;
case ProtocolConstants.DataType.BIGINT:
fields[i] = row.getLong(i);
break;
case ProtocolConstants.DataType.FLOAT:
fields[i] = row.getFloat(i);
break;
case ProtocolConstants.DataType.DOUBLE:
fields[i] = row.getDouble(i);
break;
case ProtocolConstants.DataType.DECIMAL:
fields[i] = Objects.requireNonNull(row.getBigDecimal(i)).doubleValue();
break;
case ProtocolConstants.DataType.BOOLEAN:
fields[i] = row.getBoolean(i);
break;
case ProtocolConstants.DataType.TIME:
fields[i] = row.getLocalTime(i);
break;
case ProtocolConstants.DataType.DATE:
fields[i] = row.getLocalDate(i);
break;
case ProtocolConstants.DataType.TIMESTAMP:
fields[i] =
Timestamp.from(Objects.requireNonNull(row.getInstant(i)))
.toLocalDateTime();
break;
case ProtocolConstants.DataType.BLOB:
fields[i] =
ArrayUtils.toObject(
Objects.requireNonNull(row.getByteBuffer(i)).array());
break;
case ProtocolConstants.DataType.MAP:
subType = metaData.get(i).getType();
fields[i] =
row.getMap(
i,
convert(((DefaultMapType) subType).getKeyType()).getTypeClass(),
convert(((DefaultMapType) subType).getValueType())
.getTypeClass());
break;
case ProtocolConstants.DataType.LIST:
typeClass =
convert(((DefaultListType) metaData.get(i).getType()).getElementType())
.getTypeClass();
if (String.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, String.class))
.toArray(new String[0]);
} else if (Byte.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Byte.class))
.toArray(new Byte[0]);
} else if (Short.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Short.class))
.toArray(new Short[0]);
} else if (Integer.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Integer.class))
.toArray(new Integer[0]);
} else if (Long.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Long.class))
.toArray(new Long[0]);
} else if (Float.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Float.class))
.toArray(new Float[0]);
} else if (Double.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Double.class))
.toArray(new Double[0]);
} else if (Boolean.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getList(i, Boolean.class))
.toArray(new Boolean[0]);
} else {
throw new CassandraConnectorException(
CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
"List unsupported this data type: " + typeClass.toString());
}
break;
case ProtocolConstants.DataType.SET:
typeClass =
convert(((DefaultSetType) metaData.get(i).getType()).getElementType())
.getTypeClass();
if (String.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, String.class))
.toArray(new String[0]);
} else if (Byte.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Byte.class))
.toArray(new Byte[0]);
} else if (Short.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Short.class))
.toArray(new Short[0]);
} else if (Integer.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Integer.class))
.toArray(new Integer[0]);
} else if (Long.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Long.class))
.toArray(new Long[0]);
} else if (Float.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Float.class))
.toArray(new Float[0]);
} else if (Double.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Double.class))
.toArray(new Double[0]);
} else if (Boolean.class.equals(typeClass)) {
fields[i] =
Objects.requireNonNull(row.getSet(i, Boolean.class))
.toArray(new Boolean[0]);
} else {
throw new CassandraConnectorException(
CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
"List unsupported this data type: " + typeClass.toString());
}
break;
default:
fields[i] = row.getObject(i);
}
}
return new SeaTunnelRow(fields);
}