Search in sources :

Example 1 with DataMode

use of org.apache.drill.common.types.TypeProtos.DataMode in project drill by apache.

the class MaterializedField method getOtherNullableVersion.

public MaterializedField getOtherNullableVersion() {
    MajorType mt = type;
    DataMode newDataMode;
    switch(mt.getMode()) {
        case OPTIONAL:
            newDataMode = DataMode.REQUIRED;
            break;
        case REQUIRED:
            newDataMode = DataMode.OPTIONAL;
            break;
        default:
            throw new UnsupportedOperationException();
    }
    return new MaterializedField(name, mt.toBuilder().setMode(newDataMode).build(), children);
}
Also used : MajorType(org.apache.drill.common.types.TypeProtos.MajorType) DataMode(org.apache.drill.common.types.TypeProtos.DataMode)

Example 2 with DataMode

use of org.apache.drill.common.types.TypeProtos.DataMode in project drill by apache.

the class JsonWriter method writeValue.

private void writeValue(FieldReader reader) throws JsonGenerationException, IOException {
    final DataMode m = reader.getType().getMode();
    final MinorType mt = reader.getType().getMinorType();
    switch(m) {
        case OPTIONAL:
        case REQUIRED:
            switch(mt) {
                case FLOAT4:
                    gen.writeFloat(reader);
                    break;
                case FLOAT8:
                    gen.writeDouble(reader);
                    break;
                case INT:
                    gen.writeInt(reader);
                    break;
                case SMALLINT:
                    gen.writeSmallInt(reader);
                    break;
                case TINYINT:
                    gen.writeTinyInt(reader);
                    break;
                case BIGINT:
                    gen.writeBigInt(reader);
                    break;
                case BIT:
                    gen.writeBoolean(reader);
                    break;
                case DATE:
                    gen.writeDate(reader);
                    break;
                case TIME:
                    gen.writeTime(reader);
                    break;
                case TIMESTAMP:
                    gen.writeTimestamp(reader);
                    break;
                case INTERVALYEAR:
                case INTERVALDAY:
                case INTERVAL:
                    gen.writeInterval(reader);
                    break;
                case DECIMAL28DENSE:
                case DECIMAL28SPARSE:
                case DECIMAL38DENSE:
                case DECIMAL38SPARSE:
                case DECIMAL9:
                case DECIMAL18:
                    gen.writeDecimal(reader);
                    break;
                case LIST:
                    // this is a pseudo class, doesn't actually contain the real reader so we have to drop down.
                    gen.writeStartArray();
                    while (reader.next()) {
                        writeValue(reader.reader());
                    }
                    gen.writeEndArray();
                    break;
                case MAP:
                    gen.writeStartObject();
                    if (reader.isSet()) {
                        for (String name : reader) {
                            FieldReader childReader = reader.reader(name);
                            if (childReader.isSet()) {
                                gen.writeFieldName(name);
                                writeValue(childReader);
                            }
                        }
                    }
                    gen.writeEndObject();
                    break;
                case NULL:
                case LATE:
                    gen.writeUntypedNull();
                    break;
                case VAR16CHAR:
                    gen.writeVar16Char(reader);
                    break;
                case VARBINARY:
                    gen.writeBinary(reader);
                    break;
                case VARCHAR:
                    gen.writeVarChar(reader);
                    break;
            }
            break;
        case REPEATED:
            gen.writeStartArray();
            switch(mt) {
                case FLOAT4:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeFloat(i, reader);
                    }
                    break;
                case FLOAT8:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeDouble(i, reader);
                    }
                    break;
                case INT:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeInt(i, reader);
                    }
                    break;
                case SMALLINT:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeSmallInt(i, reader);
                    }
                    break;
                case TINYINT:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeTinyInt(i, reader);
                    }
                    break;
                case BIGINT:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeBigInt(i, reader);
                    }
                    break;
                case BIT:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeBoolean(i, reader);
                    }
                    break;
                case DATE:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeDate(i, reader);
                    }
                    break;
                case TIME:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeTime(i, reader);
                    }
                    break;
                case TIMESTAMP:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeTimestamp(i, reader);
                    }
                    break;
                case INTERVALYEAR:
                case INTERVALDAY:
                case INTERVAL:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeInterval(i, reader);
                    }
                    break;
                case DECIMAL28DENSE:
                case DECIMAL28SPARSE:
                case DECIMAL38DENSE:
                case DECIMAL38SPARSE:
                case DECIMAL9:
                case DECIMAL18:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeDecimal(i, reader);
                    }
                    break;
                case LIST:
                    for (int i = 0; i < reader.size(); i++) {
                        while (reader.next()) {
                            writeValue(reader.reader());
                        }
                    }
                    break;
                case MAP:
                    while (reader.next()) {
                        gen.writeStartObject();
                        for (String name : reader) {
                            FieldReader mapField = reader.reader(name);
                            if (mapField.isSet()) {
                                gen.writeFieldName(name);
                                writeValue(mapField);
                            }
                        }
                        gen.writeEndObject();
                    }
                    break;
                case NULL:
                    break;
                case VAR16CHAR:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeVar16Char(i, reader);
                    }
                    break;
                case VARBINARY:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeBinary(i, reader);
                    }
                    break;
                case VARCHAR:
                    for (int i = 0; i < reader.size(); i++) {
                        gen.writeVarChar(i, reader);
                    }
                    break;
                default:
                    throw new IllegalStateException(String.format("Unable to handle type %s.", mt));
            }
            gen.writeEndArray();
            break;
    }
}
Also used : DataMode(org.apache.drill.common.types.TypeProtos.DataMode) MinorType(org.apache.drill.common.types.TypeProtos.MinorType) FieldReader(org.apache.drill.exec.vector.complex.reader.FieldReader)

Example 3 with DataMode

use of org.apache.drill.common.types.TypeProtos.DataMode in project drill by apache.

the class ParquetRecordWriter method getType.

private Type getType(MaterializedField field) {
    MinorType minorType = field.getType().getMinorType();
    DataMode dataMode = field.getType().getMode();
    switch(minorType) {
        case MAP:
            List<Type> types = Lists.newArrayList();
            for (MaterializedField childField : field.getChildren()) {
                types.add(getType(childField));
            }
            return new GroupType(dataMode == DataMode.REPEATED ? Repetition.REPEATED : Repetition.OPTIONAL, field.getLastName(), types);
        case LIST:
            throw new UnsupportedOperationException("Unsupported type " + minorType);
        default:
            return getPrimitiveType(field);
    }
}
Also used : PrimitiveType(org.apache.parquet.schema.PrimitiveType) GroupType(org.apache.parquet.schema.GroupType) MessageType(org.apache.parquet.schema.MessageType) MinorType(org.apache.drill.common.types.TypeProtos.MinorType) Type(org.apache.parquet.schema.Type) OriginalType(org.apache.parquet.schema.OriginalType) GroupType(org.apache.parquet.schema.GroupType) DataMode(org.apache.drill.common.types.TypeProtos.DataMode) MinorType(org.apache.drill.common.types.TypeProtos.MinorType) MaterializedField(org.apache.drill.exec.record.MaterializedField)

Example 4 with DataMode

use of org.apache.drill.common.types.TypeProtos.DataMode in project drill by apache.

the class FunctionImplementationRegistry method functionReplacement.

/**
   * Checks if this function replacement is needed.
   *
   * @param functionCall function call
   * @return new function name is replacement took place, otherwise original function name
   */
private String functionReplacement(FunctionCall functionCall) {
    String funcName = functionCall.getName();
    if (functionCall.args.size() == 0) {
        return funcName;
    }
    boolean castToNullableNumeric = optionManager != null && optionManager.getOption(ExecConstants.CAST_TO_NULLABLE_NUMERIC_OPTION);
    if (!castToNullableNumeric) {
        return funcName;
    }
    MajorType majorType = functionCall.args.get(0).getMajorType();
    DataMode dataMode = majorType.getMode();
    MinorType minorType = majorType.getMinorType();
    if (CastFunctions.isReplacementNeeded(funcName, minorType)) {
        funcName = CastFunctions.getReplacingCastFunction(funcName, dataMode, minorType);
    }
    return funcName;
}
Also used : MajorType(org.apache.drill.common.types.TypeProtos.MajorType) DataMode(org.apache.drill.common.types.TypeProtos.DataMode) MinorType(org.apache.drill.common.types.TypeProtos.MinorType)

Aggregations

DataMode (org.apache.drill.common.types.TypeProtos.DataMode)4 MinorType (org.apache.drill.common.types.TypeProtos.MinorType)3 MajorType (org.apache.drill.common.types.TypeProtos.MajorType)2 MaterializedField (org.apache.drill.exec.record.MaterializedField)1 FieldReader (org.apache.drill.exec.vector.complex.reader.FieldReader)1 GroupType (org.apache.parquet.schema.GroupType)1 MessageType (org.apache.parquet.schema.MessageType)1 OriginalType (org.apache.parquet.schema.OriginalType)1 PrimitiveType (org.apache.parquet.schema.PrimitiveType)1 Type (org.apache.parquet.schema.Type)1