in seatunnel-api/src/main/java/org/apache/seatunnel/api/table/type/SeaTunnelRow.java [128:210]
private int getBytesForValue(Object v, SeaTunnelDataType<?> dataType) {
if (v == null) {
return 0;
}
SqlType sqlType = dataType.getSqlType();
switch (sqlType) {
case STRING:
return ((String) v).length();
case BOOLEAN:
case TINYINT:
return 1;
case SMALLINT:
return 2;
case INT:
case FLOAT:
return 4;
case BIGINT:
case DOUBLE:
return 8;
case DECIMAL:
return 36;
case NULL:
return 0;
case BYTES:
return ((byte[]) v).length;
case DATE:
return 24;
case TIME:
return 12;
case TIMESTAMP:
case TIMESTAMP_TZ:
return 48;
case FLOAT_VECTOR:
case FLOAT16_VECTOR:
case BFLOAT16_VECTOR:
case BINARY_VECTOR:
return ((ByteBuffer) v).capacity();
case SPARSE_FLOAT_VECTOR:
return ((Map<?, ?>) v).entrySet().size() * 8;
case ARRAY:
SeaTunnelDataType elementType = ((ArrayType) dataType).getElementType();
if (elementType instanceof DecimalType) {
return ((Object[]) v).length * 36;
}
if (elementType instanceof LocalTimeType) {
SqlType eleSqlType = elementType.getSqlType();
switch (eleSqlType) {
case DATE:
return ((Object[]) v).length * 24;
case TIME:
return ((Object[]) v).length * 12;
case TIMESTAMP:
case TIMESTAMP_TZ:
return ((Object[]) v).length * 48;
default:
throw new UnsupportedOperationException(
"Unsupported type in LocalTimeArrayType: " + eleSqlType);
}
}
return getBytesForArray(v, ((ArrayType) dataType).getElementType());
case MAP:
int size = 0;
MapType<?, ?> mapType = ((MapType<?, ?>) dataType);
for (Map.Entry<?, ?> entry : ((Map<?, ?>) v).entrySet()) {
size +=
getBytesForValue(entry.getKey(), mapType.getKeyType())
+ getBytesForValue(entry.getValue(), mapType.getValueType());
}
return size;
case ROW:
int rowSize = 0;
SeaTunnelRowType rowType = ((SeaTunnelRowType) dataType);
SeaTunnelDataType<?>[] types = rowType.getFieldTypes();
SeaTunnelRow row = (SeaTunnelRow) v;
for (int i = 0; i < types.length; i++) {
rowSize += getBytesForValue(row.fields[i], types[i]);
}
return rowSize;
default:
throw new UnsupportedOperationException("Unsupported type: " + sqlType);
}
}