public void init()

in pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/CastTransformFunction.java [45:122]


  public void init(List<TransformFunction> arguments, Map<String, ColumnContext> columnContextMap) {
    super.init(arguments, columnContextMap);
    // Check that there are more than 1 arguments
    if (arguments.size() != 2) {
      throw new IllegalArgumentException("Exactly 2 arguments are required for CAST transform function");
    }

    _transformFunction = arguments.get(0);
    TransformResultMetadata sourceMetadata = _transformFunction.getResultMetadata();
    _sourceDataType = sourceMetadata.getDataType();
    boolean sourceSV = sourceMetadata.isSingleValue();
    TransformFunction castFormatTransformFunction = arguments.get(1);
    if (castFormatTransformFunction instanceof LiteralTransformFunction) {
      String targetType = ((LiteralTransformFunction) castFormatTransformFunction).getStringLiteral().toUpperCase();
      switch (targetType) {
        case "BYTES":
        case "VARBINARY":
          _resultMetadata = sourceSV ? BYTES_SV_NO_DICTIONARY_METADATA : BYTES_MV_NO_DICTIONARY_METADATA;
          break;
        case "INT":
        case "INTEGER":
          _resultMetadata = sourceSV ? INT_SV_NO_DICTIONARY_METADATA : INT_MV_NO_DICTIONARY_METADATA;
          break;
        case "LONG":
        case "BIGINT":
          _resultMetadata = sourceSV ? LONG_SV_NO_DICTIONARY_METADATA : LONG_MV_NO_DICTIONARY_METADATA;
          break;
        case "FLOAT":
          _resultMetadata = sourceSV ? FLOAT_SV_NO_DICTIONARY_METADATA : FLOAT_MV_NO_DICTIONARY_METADATA;
          break;
        case "DOUBLE":
          _resultMetadata = sourceSV ? DOUBLE_SV_NO_DICTIONARY_METADATA : DOUBLE_MV_NO_DICTIONARY_METADATA;
          break;
        case "DECIMAL":
        case "BIGDECIMAL":
        case "BIG_DECIMAL":
          // TODO: Support MV BIG_DECIMAL
          Preconditions.checkState(sourceSV, "Cannot cast from MV to BIG_DECIMAL");
          _resultMetadata = BIG_DECIMAL_SV_NO_DICTIONARY_METADATA;
          break;
        case "BOOL":
        case "BOOLEAN":
          _resultMetadata = sourceSV ? BOOLEAN_SV_NO_DICTIONARY_METADATA : BOOLEAN_MV_NO_DICTIONARY_METADATA;
          break;
        case "TIMESTAMP":
          _resultMetadata = sourceSV ? TIMESTAMP_SV_NO_DICTIONARY_METADATA : TIMESTAMP_MV_NO_DICTIONARY_METADATA;
          break;
        case "STRING":
        case "VARCHAR":
          _resultMetadata = sourceSV ? STRING_SV_NO_DICTIONARY_METADATA : STRING_MV_NO_DICTIONARY_METADATA;
          break;
        case "INT_ARRAY":
        case "INTEGER_ARRAY":
          _resultMetadata = INT_MV_NO_DICTIONARY_METADATA;
          break;
        case "LONG_ARRAY":
          _resultMetadata = LONG_MV_NO_DICTIONARY_METADATA;
          break;
        case "FLOAT_ARRAY":
          _resultMetadata = FLOAT_MV_NO_DICTIONARY_METADATA;
          break;
        case "DOUBLE_ARRAY":
          _resultMetadata = DOUBLE_MV_NO_DICTIONARY_METADATA;
          break;
        case "STRING_ARRAY":
        case "VARCHAR_ARRAY":
          _resultMetadata = STRING_MV_NO_DICTIONARY_METADATA;
          break;
        case "JSON":
          _resultMetadata = sourceSV ? JSON_SV_NO_DICTIONARY_METADATA : JSON_MV_NO_DICTIONARY_METADATA;
          break;
        default:
          throw new IllegalArgumentException("Unable to cast expression to type - " + targetType);
      }
    } else {
      throw new IllegalArgumentException("Invalid cast to type - " + castFormatTransformFunction.getName());
    }
  }