@JsonCreator public static DataSize valueOf(String size) throws IllegalArgumentException { requireNonNull(size, "size is null"); checkArgument(!size.isEmpty(), "size is empty"); Matcher matcher = PATTERN.matcher(size); if (!matcher.matches()) { throw new IllegalArgumentException("size is not a valid data size string: " + size); } double value = Double.parseDouble(matcher.group(1)); String unitString = matcher.group(2); for (Unit unit : Unit.values()) { if (unit.getUnitString().equals(unitString)) { return new DataSize(value, unit); } } throw new IllegalArgumentException("Unknown unit: " + unitString); }
@Description("Converts a string representing data size in airlift's DataSize format to a double representing size in the specified size unit") @ScalarFunction("from_datasize") @SqlType(StandardTypes.DOUBLE) public static double fromDataSize(@SqlType(StandardTypes.VARCHAR) Slice size, @SqlType(StandardTypes.VARCHAR) Slice sizeUnit) { String sizeUnitString = sizeUnit.toStringUtf8(); DataSize dataSize = DataSize.valueOf(size.toStringUtf8()); for (DataSize.Unit unit : DataSize.Unit.values()) { if (unit.getUnitString().equals(sizeUnitString)) { return dataSize.getValue(unit); } } throw new IllegalArgumentException("Unknown unit: " + sizeUnitString); } }
@JsonValue @Override public String toString() { //noinspection FloatingPointEquality if (floor(value) == value) { return (long) (floor(value)) + unit.getUnitString(); } return String.format(Locale.ENGLISH, "%.2f%s", value, unit.getUnitString()); }