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