private int getBytesForValue()

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);
        }
    }