private int getBytesForValue()

in seatunnel-api/src/main/java/org/apache/seatunnel/api/table/type/SeaTunnelRow.java [276:354]


    private int getBytesForValue(Object v) {
        if (v == null) {
            return 0;
        }
        String clazz = v.getClass().getSimpleName();
        switch (clazz) {
            case "String":
                return ((String) v).length();
            case "Boolean":
            case "Byte":
                return 1;
            case "Short":
                return 2;
            case "Integer":
            case "Float":
                return 4;
            case "Long":
            case "Double":
                return 8;
            case "BigDecimal":
                return 36;
            case "byte[]":
                return ((byte[]) v).length;
            case "LocalDate":
                return 24;
            case "LocalTime":
                return 12;
            case "LocalDateTime":
            case "OffsetDateTime":
                return 48;
            case "String[]":
                return getBytesForArray(v, BasicType.STRING_TYPE);
            case "Boolean[]":
                return getBytesForArray(v, BasicType.BOOLEAN_TYPE);
            case "Byte[]":
                return getBytesForArray(v, BasicType.BYTE_TYPE);
            case "Short[]":
                return getBytesForArray(v, BasicType.SHORT_TYPE);
            case "Integer[]":
                return getBytesForArray(v, BasicType.INT_TYPE);
            case "Long[]":
                return getBytesForArray(v, BasicType.LONG_TYPE);
            case "Float[]":
                return getBytesForArray(v, BasicType.FLOAT_TYPE);
            case "Double[]":
                return getBytesForArray(v, BasicType.DOUBLE_TYPE);
            case "Map[]":
                return getBytesForArray(
                        v, new MapType<>(BasicType.STRING_TYPE, BasicType.INT_TYPE));
            case "HashMap":
            case "LinkedHashMap":
                int size = 0;
                for (Map.Entry<?, ?> entry : ((Map<?, ?>) v).entrySet()) {
                    size += getBytesForValue(entry.getKey()) + getBytesForValue(entry.getValue());
                }
                return size;
            case "HeapByteBuffer":
            case "ByteBuffer":
                return ((ByteBuffer) v).capacity();
            case "SeaTunnelRow":
                int rowSize = 0;
                SeaTunnelRow row = (SeaTunnelRow) v;
                for (int i = 0; i < row.fields.length; i++) {
                    rowSize += getBytesForValue(row.fields[i]);
                }
                return rowSize;
            default:
                if (v instanceof Map) {
                    int mapSize = 0;
                    for (Map.Entry<?, ?> entry : ((Map<?, ?>) v).entrySet()) {
                        mapSize +=
                                getBytesForValue(entry.getKey())
                                        + getBytesForValue(entry.getValue());
                    }
                    return mapSize;
                }
                throw new UnsupportedOperationException("Unsupported type: " + clazz);
        }
    }