private long getObjByteSize()

in holo-client/src/main/java/com/alibaba/hologres/client/model/Record.java [142:213]


	private long getObjByteSize(int index, Object obj) {
		if (obj == null) {
			return 4;
		}
		long ret = 0;
		Column column = schema.getColumnSchema()[index];
		switch (column.getType()) {
			case Types.BOOLEAN:
			case Types.TINYINT:
			case Types.BIT:
				ret = 1;
				break;
			case Types.SMALLINT:
				ret = 2;
				break;
			case Types.BIGINT:
			case Types.DOUBLE:
				ret = 8;
				break;
			case Types.TIMESTAMP:
			case Types.TIME_WITH_TIMEZONE:
				ret = 12;
				break;
			case Types.NUMERIC:
			case Types.DECIMAL:
				ret = 24;
				break;
			case Types.CHAR:
			case Types.VARCHAR:
				ret = String.valueOf(obj).length();
				break;
			case Types.ARRAY:
				if (obj instanceof int[]) {
					ret = ((int[]) obj).length * 4L;
				} else if (obj instanceof long[]) {
					ret = ((long[]) obj).length * 8L;
				} else if (obj instanceof float[]) {
					ret = ((float[]) obj).length * 4L;
				} else if (obj instanceof double[]) {
					ret = ((double[]) obj).length * 8L;
				} else if (obj instanceof boolean[]) {
					ret = ((boolean[]) obj).length;
				} else if (obj instanceof String[]) {
					ret = ArrayUtil.getArrayLength((String[]) obj);
				} else if (obj instanceof Object[]) {
					ret = ArrayUtil.getArrayLength((Object[]) obj, column.getTypeName());
				} else if (obj instanceof List) {
					ret = ArrayUtil.getArrayLength((List<?>) obj, column.getTypeName());
				} else if (obj instanceof PgArray) {
					ret = ArrayUtil.getArrayLength((PgArray) obj);
				} else {
					ret = 1024;
				}
				break;
			default:
				if ("json".equalsIgnoreCase(column.getTypeName()) || "jsonb".equalsIgnoreCase(column.getTypeName())) { // json, jsonb 等类型
					ret = String.valueOf(obj).length();
					break;
				}
				if (obj instanceof PGobject) { // PGmoney 等类型
					PGobject pObj = (PGobject) obj;
					if (pObj.getValue() != null) {
						ret = pObj.getValue().length();
					}
				} else if (obj instanceof byte[]) { // RoaringBitmap, bytea 等类型
					ret = ((byte[]) obj).length;
				} else {
					ret = 4;
				}
		}
		return ret;
	}