in xtable-core/src/main/java/org/apache/xtable/hudi/HudiPartitionValuesExtractor.java [121:173]
private static PartialResult parseValue(
String remainingPath, InternalType sourceFieldType, boolean isSlashDelimited) {
if (remainingPath.isEmpty()) {
throw new PartitionValuesExtractorException("Missing partition value");
}
int endCharIndex;
if (isSlashDelimited) {
int slashIndex = remainingPath.indexOf("/");
endCharIndex = slashIndex == -1 ? remainingPath.length() : slashIndex;
} else {
endCharIndex = remainingPath.length();
}
String valueAsString = remainingPath.substring(0, endCharIndex);
String unParsedPath =
remainingPath.substring(Math.min(endCharIndex + 1, remainingPath.length()));
Object parsedValue;
switch (sourceFieldType) {
case STRING:
case ENUM:
parsedValue = valueAsString;
break;
case INT:
case DATE:
parsedValue = Integer.parseInt(valueAsString);
break;
case LONG:
case TIMESTAMP:
case TIMESTAMP_NTZ:
parsedValue = Long.parseLong(valueAsString);
break;
case DOUBLE:
parsedValue = Double.parseDouble(valueAsString);
break;
case FLOAT:
parsedValue = Float.parseFloat(valueAsString);
break;
case DECIMAL:
parsedValue = new BigDecimal(valueAsString);
break;
case FIXED:
case BYTES:
case UUID:
parsedValue = valueAsString.getBytes(StandardCharsets.UTF_8);
break;
case BOOLEAN:
parsedValue = Boolean.parseBoolean(valueAsString);
break;
default:
throw new PartitionValuesExtractorException(
"Unexpected source field type in partition parser: " + sourceFieldType);
}
return new PartialResult(parsedValue, unParsedPath);
}