public ConversionDefn analyze()

in exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/scan/convert/StandardConversions.java [221:388]


  public ConversionDefn analyze(MinorType inputType, ColumnMetadata outputSchema) {
    if (inputType == outputSchema.type()) {
      return new ConversionDefn(ConversionType.NONE);
    }

    switch (inputType) {
      case VARCHAR:
        return new ConversionDefn(convertFromVarchar(outputSchema));
      case BIT:
        switch (outputSchema.type()) {
        case TINYINT:
        case SMALLINT:
        case INT:
          return IMPLICIT;
        case VARCHAR:
          return new ConversionDefn(ConvertBooleanToString.class);
        default:
          break;
        }
        break;
      case TINYINT:
        switch (outputSchema.type()) {
        case SMALLINT:
        case INT:
        case BIGINT:
        case FLOAT4:
        case FLOAT8:
          return IMPLICIT;
        case VARDECIMAL:
          return new ConversionDefn(ConvertIntToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertIntToString.class);
        default:
          break;
        }
        break;
      case SMALLINT:
        switch (outputSchema.type()) {
        case TINYINT:
          return IMPLICIT_UNSAFE;
        case INT:
        case BIGINT:
        case FLOAT4:
        case FLOAT8:
          return IMPLICIT;
        case VARDECIMAL:
          return new ConversionDefn(ConvertIntToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertIntToString.class);
       default:
          break;
        }
        break;
      case INT:
        switch (outputSchema.type()) {
        case TINYINT:
        case SMALLINT:
          return IMPLICIT_UNSAFE;
        case BIGINT:
        case FLOAT4:
        case FLOAT8:
        case TIME:
          return IMPLICIT;
        case VARDECIMAL:
          return new ConversionDefn(ConvertIntToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertIntToString.class);
        default:
          break;
        }
        break;
      case BIGINT:
        switch (outputSchema.type()) {
        case TINYINT:
        case SMALLINT:
        case INT:
          return IMPLICIT_UNSAFE;
        case FLOAT4:
        case FLOAT8:
        case DATE:
        case TIMESTAMP:
          return IMPLICIT;
        case VARDECIMAL:
          return new ConversionDefn(ConvertLongToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertLongToString.class);
        default:
          break;
        }
        break;
      case FLOAT4:
        switch (outputSchema.type()) {
        case TINYINT:
        case SMALLINT:
        case INT:
        case BIGINT:
          return IMPLICIT_UNSAFE;
        case FLOAT8:
          return IMPLICIT;
        case VARDECIMAL:
          return new ConversionDefn(ConvertFloatToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertDoubleToString.class);
        default:
          break;
        }
        break;
      case FLOAT8:
        switch (outputSchema.type()) {
        case TINYINT:
        case SMALLINT:
        case INT:
        case BIGINT:
        case FLOAT4:
          return IMPLICIT_UNSAFE;
        case VARDECIMAL:
          return new ConversionDefn(ConvertDoubleToDecimal.class);
        case VARCHAR:
          return new ConversionDefn(ConvertDoubleToString.class);
        default:
          break;
        }
        break;
      case DATE:
        switch (outputSchema.type()) {
        case BIGINT:
          return IMPLICIT;
        case VARCHAR:
          return new ConversionDefn(ConvertDateToString.class);
        default:
          break;
        }
        break;
      case TIME:
        switch (outputSchema.type()) {
        case INT:
          return IMPLICIT;
        case VARCHAR:
          return new ConversionDefn(ConvertTimeToString.class);
        default:
          break;
        }
        break;
      case TIMESTAMP:
        switch (outputSchema.type()) {
        case BIGINT:
          return IMPLICIT;
        case VARCHAR:
          return new ConversionDefn(ConvertTimeStampToString.class);
        default:
          break;
        }
        break;
      case INTERVAL:
      case INTERVALYEAR:
      case INTERVALDAY:
        switch (outputSchema.type()) {
        case VARCHAR:
          return new ConversionDefn(ConvertIntervalToString.class);
        default:
          break;
        }
        break;
      default:
        break;
    }
    return EXPLICIT;
  }