return SchemaBuilder.float32(); case Types.FLOAT: case Types.DOUBLE:
return new SchemaAndValue(SchemaBuilder.bool().optional(), value); } else if (cls.isAssignableFrom(Float.class)) { return new SchemaAndValue(SchemaBuilder.float32().optional(), value); } else if (cls.isAssignableFrom(BigDecimal.class)) { return new SchemaAndValue(SchemaBuilder.float64().optional(), value == null ? null : ((BigDecimal) value).doubleValue());
private SchemaBuilder convertFieldType(Schema.Type type) { switch (type) { case INT8: return SchemaBuilder.int8(); case INT16: return SchemaBuilder.int16(); case INT32: return SchemaBuilder.int32(); case INT64: return SchemaBuilder.int64(); case FLOAT32: return SchemaBuilder.float32(); case FLOAT64: return SchemaBuilder.float64(); case BOOLEAN: return SchemaBuilder.bool(); case STRING: return SchemaBuilder.string(); default: throw new DataException("Unexpected type in Cast transformation: " + type); } }
@Override public SchemaBuilder schemaBuilder(Column column) { logger.debug("Building schema for column {} of type {} named {} with constraints ({},{})", column.name(), column.jdbcType(), column.typeName(), column.length(), column.scale() ); switch (column.jdbcType()) { // Oracle's float is not float as in Java but a NUMERIC without scale case Types.FLOAT: return VariableScaleDecimal.builder(); case Types.NUMERIC: return getNumericSchema(column); case OracleTypes.BINARY_FLOAT: return SchemaBuilder.float32(); case OracleTypes.BINARY_DOUBLE: return SchemaBuilder.float64(); case OracleTypes.TIMESTAMPTZ: case OracleTypes.TIMESTAMPLTZ: return ZonedTimestamp.builder(); case OracleTypes.INTERVALYM: case OracleTypes.INTERVALDS: return MicroDuration.builder(); default: return super.schemaBuilder(column); } }
@TestFactory @DisplayName("tests for float32 field conversions") public List<DynamicTest> testFloat32FieldConverter() { SinkFieldConverter converter = new Float32FieldConverter(); List<DynamicTest> tests = new ArrayList<>(); new ArrayList<>(Arrays.asList(Float.MIN_VALUE,0f,Float.MAX_VALUE)).forEach( el -> tests.add(dynamicTest("conversion with " + converter.getClass().getSimpleName() + " for "+el, () -> assertEquals((float)el, ((BsonDouble)converter.toBson(el)).getValue()) )) ); tests.add(dynamicTest("optional type conversions", () -> { Schema valueOptionalDefault = SchemaBuilder.float32().optional().defaultValue(0.0f); assertAll("checks", () -> assertThrows(DataException.class, () -> converter.toBson(null, Schema.FLOAT32_SCHEMA)), () -> assertEquals(new BsonNull(), converter.toBson(null, Schema.OPTIONAL_FLOAT32_SCHEMA)), () -> assertEquals(((Float)valueOptionalDefault.defaultValue()).doubleValue(), ((BsonDouble)converter.toBson(null, valueOptionalDefault)).getValue()) ); })); return tests; }
return SchemaBuilder.float32(); case Types.FLOAT: case Types.DOUBLE:
builder = SchemaBuilder.float32(); break;