return conversion.toCharSequence(fromClass.cast(datum), schema, type); case BYTES: return conversion.toBytes(fromClass.cast(datum), schema, type); case INT: return conversion.toInt(fromClass.cast(datum), schema, type);
return conversion.toCharSequence(fromClass.cast(datum), schema, type); case BYTES: return conversion.toBytes(fromClass.cast(datum), schema, type); case INT: return conversion.toInt(fromClass.cast(datum), schema, type);
@Test public void testReadDecimalBytes() throws IOException { LogicalType decimal = LogicalTypes.decimal(9, 2); Schema bytesSchema = Schema.create(Schema.Type.BYTES); Schema decimalSchema = decimal.addToSchema(Schema.create(Schema.Type.BYTES)); BigDecimal d1 = new BigDecimal("-34.34"); BigDecimal d2 = new BigDecimal("117230.00"); List<BigDecimal> expected = Arrays.asList(d1, d2); Conversion<BigDecimal> conversion = new Conversions.DecimalConversion(); // use the conversion directly instead of relying on the write side ByteBuffer d1bytes = conversion.toBytes(d1, bytesSchema, decimal); ByteBuffer d2bytes = conversion.toBytes(d2, bytesSchema, decimal); File test = write(bytesSchema, d1bytes, d2bytes); Assert.assertEquals("Should convert bytes to BigDecimals", expected, read(GENERIC.createDatumReader(decimalSchema), test)); }
@Test public void testWriteDecimalBytes() throws IOException { LogicalType decimal = LogicalTypes.decimal(9, 2); Schema bytesSchema = Schema.create(Schema.Type.BYTES); Schema decimalSchema = decimal.addToSchema(Schema.create(Schema.Type.BYTES)); BigDecimal d1 = new BigDecimal("-34.34"); BigDecimal d2 = new BigDecimal("117230.00"); Conversion<BigDecimal> conversion = new Conversions.DecimalConversion(); // use the conversion directly instead of relying on the write side ByteBuffer d1bytes = conversion.toBytes(d1, bytesSchema, decimal); ByteBuffer d2bytes = conversion.toBytes(d2, bytesSchema, decimal); List<ByteBuffer> expected = Arrays.asList(d1bytes, d2bytes); File test = write(GENERIC, decimalSchema, d1bytes, d2bytes); Assert.assertEquals("Should read BigDecimals as bytes", expected, read(GenericData.get().createDatumReader(bytesSchema), test)); }
private <D> Object convert(Schema schema, LogicalType logicalType, Conversion<D> conversion, Object datum) { if (conversion == null) { return datum; } Class<D> fromClass = conversion.getConvertedType(); switch (schema.getType()) { case RECORD: return conversion.toRecord(fromClass.cast(datum), schema, logicalType); case ENUM: return conversion.toEnumSymbol(fromClass.cast(datum), schema, logicalType); case ARRAY: return conversion.toArray(fromClass.cast(datum), schema, logicalType); case MAP: return conversion.toMap(fromClass.cast(datum), schema, logicalType); case FIXED: return conversion.toFixed(fromClass.cast(datum), schema, logicalType); case STRING: return conversion.toCharSequence(fromClass.cast(datum), schema, logicalType); case BYTES: return conversion.toBytes(fromClass.cast(datum), schema, logicalType); case INT: return conversion.toInt(fromClass.cast(datum), schema, logicalType); case LONG: return conversion.toLong(fromClass.cast(datum), schema, logicalType); case FLOAT: return conversion.toFloat(fromClass.cast(datum), schema, logicalType); case DOUBLE: return conversion.toDouble(fromClass.cast(datum), schema, logicalType); case BOOLEAN: return conversion.toBoolean(fromClass.cast(datum), schema, logicalType); } return datum; }
return conversion.toCharSequence(fromClass.cast(datum), schema, type); case BYTES: return conversion.toBytes(fromClass.cast(datum), schema, type); case INT: return conversion.toInt(fromClass.cast(datum), schema, type);