private static ParsedGeneratedExpr buildFromString()

in xtable-core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java [460:517]


    private static ParsedGeneratedExpr buildFromString(String partitionColumnName, String expr) {
      if (expr.contains("YEAR")) {
        return ParsedGeneratedExpr.builder()
            .generatedExprType(GeneratedExprType.YEAR)
            .partitionColumnName(partitionColumnName)
            .sourceColumn(extractColumnName(expr, YEAR_PATTERN))
            .internalPartitionTransformType(PartitionTransformType.YEAR)
            .build();
      } else if (expr.contains("MONTH")) {
        return ParsedGeneratedExpr.builder()
            .generatedExprType(GeneratedExprType.MONTH)
            .partitionColumnName(partitionColumnName)
            .sourceColumn(extractColumnName(expr, MONTH_PATTERN))
            .internalPartitionTransformType(PartitionTransformType.MONTH)
            .build();
      } else if (expr.contains("DAY")) {
        return ParsedGeneratedExpr.builder()
            .generatedExprType(GeneratedExprType.DAY)
            .partitionColumnName(partitionColumnName)
            .sourceColumn(extractColumnName(expr, DAY_PATTERN))
            .internalPartitionTransformType(PartitionTransformType.DAY)
            .build();
      } else if (expr.contains("HOUR")) {
        return ParsedGeneratedExpr.builder()
            .generatedExprType(GeneratedExprType.HOUR)
            .partitionColumnName(partitionColumnName)
            .sourceColumn(extractColumnName(expr, HOUR_PATTERN))
            .internalPartitionTransformType(PartitionTransformType.HOUR)
            .build();
      } else if (expr.contains("CAST")) {
        return ParsedGeneratedExpr.builder()
            .generatedExprType(GeneratedExprType.CAST)
            .partitionColumnName(partitionColumnName)
            .sourceColumn(extractColumnName(expr, CAST_PATTERN))
            .internalPartitionTransformType(PartitionTransformType.DAY)
            .build();
      } else if (expr.contains("DATE_FORMAT")) {
        Matcher matcher = DATE_FORMAT_PATTERN.matcher(expr);
        if (matcher.find()) {
          /*
           * from DATE_FORMAT(source_col, 'yyyy-MM-dd-HH') the code below extracts yyyy-MM-dd-HH.
           */
          String fieldName = matcher.group(1);
          String dateFormatExpr = matcher.group(2);
          return ParsedGeneratedExpr.builder()
              .generatedExprType(GeneratedExprType.DATE_FORMAT)
              .partitionColumnName(partitionColumnName)
              .sourceColumn(fieldName)
              .internalPartitionTransformType(computeInternalPartitionTransform(dateFormatExpr))
              .build();
        } else {
          throw new IllegalArgumentException("Could not extract values from: " + expr);
        }
      } else {
        throw new IllegalArgumentException(
            "Unsupported expression for generated expression: " + expr);
      }
    }