.equals(PrimitiveType.PrimitiveTypeName.BINARY) || !keyType.getOriginalType().equals(OriginalType.UTF8)) { throw new UnsupportedOperationException(
/** * {@inheritDoc} */ @Override protected boolean typeEquals(Type other) { if (other.isPrimitive()) { PrimitiveType primitiveType = other.asPrimitiveType(); return getRepetition() == primitiveType.getRepetition() && getPrimitiveTypeName().equals(primitiveType.getPrimitiveTypeName()) && getName().equals(primitiveType.getName()); } else { return false; } }
public static PrimitiveConverter getNewConverter(final PrimitiveType type, final int index, final ConverterParent parent) { if (type.isPrimitive() && (type.asPrimitiveType().getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT96))) { //TODO- cleanup once parquet support Timestamp type annotation. return ETypeConverter.ETIMESTAMP_CONVERTER.getConverter(type, index, parent); } if (OriginalType.DECIMAL == type.getOriginalType()) { return EDECIMAL_CONVERTER.getConverter(type, index, parent); } else if (OriginalType.UTF8 == type.getOriginalType()) { return ESTRING_CONVERTER.getConverter(type, index, parent); } else if (OriginalType.DATE == type.getOriginalType()) { return EDATE_CONVERTER.getConverter(type, index, parent); } Class<?> javaType = type.getPrimitiveTypeName().javaType; for (final ETypeConverter eConverter : values()) { if (eConverter.getType() == javaType) { return eConverter.getConverter(type, index, parent); } } throw new IllegalArgumentException("Converter not found ... for type : " + type); }
@Override protected Type union(Type toMerge, boolean strict) { if (!toMerge.isPrimitive() || (strict && !primitive.equals(toMerge.asPrimitiveType().getPrimitiveTypeName()))) { throw new IncompatibleSchemaModificationException("can not merge type " + toMerge + " into " + this); } Types.PrimitiveBuilder<PrimitiveType> builder = Types.primitive( primitive, toMerge.getRepetition()); if (PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY == primitive) { builder.length(length); } return builder.named(getName()); } }
@Override protected void readValue(BlockBuilder blockBuilder, Type type) { if (definitionLevel == columnDescriptor.getMaxDefinitionLevel()) { long decimalValue; // When decimals are encoded with primitive types Parquet stores unscaled values if (columnDescriptor.getType().equals(INT32)) { decimalValue = valuesReader.readInteger(); } else if (columnDescriptor.getType().equals(INT64)) { decimalValue = valuesReader.readLong(); } else { decimalValue = getShortDecimalValue(valuesReader.readBytes().getBytes()); } type.writeLong(blockBuilder, decimalValue); } else if (isValueNull()) { blockBuilder.appendNull(); } }
@Override protected void skipValue() { if (definitionLevel == columnDescriptor.getMaxDefinitionLevel()) { if (columnDescriptor.getType().equals(INT32)) { valuesReader.readInteger(); } else if (columnDescriptor.getType().equals(INT64)) { valuesReader.readLong(); } else { valuesReader.readBytes(); } } } }