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;
}