return conversion.toMap(fromClass.cast(datum), schema, type); case FIXED: return conversion.toFixed(fromClass.cast(datum), schema, type); case STRING: return conversion.toCharSequence(fromClass.cast(datum), schema, type);
return conversion.toMap(fromClass.cast(datum), schema, type); case FIXED: return conversion.toFixed(fromClass.cast(datum), schema, type); case STRING: return conversion.toCharSequence(fromClass.cast(datum), schema, type);
@Test public void testReadDecimalFixed() throws IOException { LogicalType decimal = LogicalTypes.decimal(9, 2); Schema fixedSchema = Schema.createFixed("aFixed", null, null, 4); Schema decimalSchema = decimal.addToSchema( Schema.createFixed("aFixed", null, null, 4)); 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 GenericFixed d1fixed = conversion.toFixed(d1, fixedSchema, decimal); GenericFixed d2fixed = conversion.toFixed(d2, fixedSchema, decimal); File test = write(fixedSchema, d1fixed, d2fixed); Assert.assertEquals("Should convert fixed to BigDecimals", expected, read(GENERIC.createDatumReader(decimalSchema), test)); }
@Test public void testWriteDecimalFixed() throws IOException { LogicalType decimal = LogicalTypes.decimal(9, 2); Schema fixedSchema = Schema.createFixed("aFixed", null, null, 4); Schema decimalSchema = decimal.addToSchema( Schema.createFixed("aFixed", null, null, 4)); BigDecimal d1 = new BigDecimal("-34.34"); BigDecimal d2 = new BigDecimal("117230.00"); Conversion<BigDecimal> conversion = new Conversions.DecimalConversion(); GenericFixed d1fixed = conversion.toFixed(d1, fixedSchema, decimal); GenericFixed d2fixed = conversion.toFixed(d2, fixedSchema, decimal); List<GenericFixed> expected = Arrays.asList(d1fixed, d2fixed); File test = write(GENERIC, decimalSchema, d1, d2); Assert.assertEquals("Should read BigDecimals as fixed", expected, read(GenericData.get().createDatumReader(fixedSchema), 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.toMap(fromClass.cast(datum), schema, type); case FIXED: return conversion.toFixed(fromClass.cast(datum), schema, type); case STRING: return conversion.toCharSequence(fromClass.cast(datum), schema, type);