/** * Returns a {@link SchemaBuilder} for a {@link MicroDuration}. The resulting schema will describe a field * with the {@value #SCHEMA_NAME} as the {@link Schema#name() name} and {@link SchemaBuilder#float64()} FLOAT64} for the literal * type storing the number of <em>microseconds</em> for that duration. * <p> * You can use the resulting SchemaBuilder to set or override additional schema settings such as required/optional, default * value, and documentation. * * @return the schema builder */ public static SchemaBuilder builder() { return SchemaBuilder.float64() .name(SCHEMA_NAME) .version(1); }
/** * Returns a {@link SchemaBuilder} for a decimal number depending on {@link JdbcValueConverters.DecimalMode}. You * can use the resulting schema builder to set additional schema settings such as required/optional, default value, * and documentation. * * @param mode the mode in which the number should be encoded * @param precision the precision of the decimal * @param scale scale of the decimal * @return the schema builder */ public static SchemaBuilder builder(DecimalMode mode, int precision, int scale) { switch (mode) { case DOUBLE: return SchemaBuilder.float64(); case PRECISE: return Decimal.builder(scale) .parameter(PRECISION_PARAMETER_KEY, String.valueOf(precision)); case STRING: return SchemaBuilder.string(); } throw new IllegalArgumentException("Unknown decimalMode"); }
protected List<SchemaAndValueField> schemasAndValuesForNumericTypesWithSourceColumnTypeInfo() { return Arrays.asList(new SchemaAndValueField("d", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "3") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "2") .build(), 1.1d ), new SchemaAndValueField("dzs", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "4") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "0") .build(), 10d ), new SchemaAndValueField("dvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 10.1111d), new SchemaAndValueField("n", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.22d), new SchemaAndValueField("nzs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22d), new SchemaAndValueField("nvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.2222d) ); }
case Types.DOUBLE: return SchemaBuilder.float64(); case Types.NUMERIC: case Types.DECIMAL:
/** * Returns a {@link SchemaBuilder} for a {@link MicroDuration}. The resulting schema will describe a field * with the {@value #SCHEMA_NAME} as the {@link Schema#name() name} and {@link SchemaBuilder#float64()} FLOAT64} for the literal * type storing the number of <em>microseconds</em> for that duration. * <p> * You can use the resulting SchemaBuilder to set or override additional schema settings such as required/optional, default * value, and documentation. * * @return the schema builder */ public static SchemaBuilder builder() { return SchemaBuilder.float64() .name(SCHEMA_NAME) .version(1); }
/** * Returns a {@link SchemaBuilder} for a decimal number depending on {@link JdbcValueConverters.DecimalMode}. You * can use the resulting schema builder to set additional schema settings such as required/optional, default value, * and documentation. * * @param mode the mode in which the number should be encoded * @param precision the precision of the decimal * @param scale scale of the decimal * @return the schema builder */ public static SchemaBuilder builder(DecimalMode mode, int precision, int scale) { switch (mode) { case DOUBLE: return SchemaBuilder.float64(); case PRECISE: return Decimal.builder(scale) .parameter(PRECISION_PARAMETER_KEY, String.valueOf(precision)); case STRING: return SchemaBuilder.string(); } throw new IllegalArgumentException("Unknown decimalMode"); }
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()); } else if (cls.isAssignableFrom(Double.class)) { return new SchemaAndValue(SchemaBuilder.float64().optional(), value); } else if (cls.isAssignableFrom(Instant.class)) { return new SchemaAndValue(SchemaBuilder.int64().optional(), value == null ? null : ((Instant) value).toEpochMilli());
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 float64 field conversions") public List<DynamicTest> testFloat64FieldConverter() { SinkFieldConverter converter = new Float64FieldConverter(); List<DynamicTest> tests = new ArrayList<>(); new ArrayList<>(Arrays.asList(Double.MIN_VALUE,0d,Double.MAX_VALUE)).forEach( el -> tests.add(dynamicTest("conversion with " + converter.getClass().getSimpleName() + " for "+el, () -> assertEquals((double)el, ((BsonDouble)converter.toBson(el)).getValue()) )) ); tests.add(dynamicTest("optional type conversions", () -> { Schema valueOptionalDefault = SchemaBuilder.float64().optional().defaultValue(0.0d); assertAll("checks", () -> assertThrows(DataException.class, () -> converter.toBson(null, Schema.FLOAT64_SCHEMA)), () -> assertEquals(new BsonNull(), converter.toBson(null, Schema.OPTIONAL_FLOAT64_SCHEMA)), () -> assertEquals(valueOptionalDefault.defaultValue(), ((BsonDouble)converter.toBson(null, valueOptionalDefault)).getValue()) ); })); return tests; }
converter = new PrimitiveLogFieldConverter(logFieldName, field); } else if (Double.class.equals(logClass)) { fieldSchema = SchemaBuilder.float64() .optional() .parameter(LOGFIELD_PARAM, logFieldName)
protected List<SchemaAndValueField> schemasAndValuesForNumericTypesWithSourceColumnTypeInfo() { return Arrays.asList(new SchemaAndValueField("d", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "3") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "2") .build(), 1.1d ), new SchemaAndValueField("dzs", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "4") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "0") .build(), 10d ), new SchemaAndValueField("dvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 10.1111d), new SchemaAndValueField("n", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.22d), new SchemaAndValueField("nzs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22d), new SchemaAndValueField("nvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.2222d) ); }
case Types.DOUBLE: return SchemaBuilder.float64(); case Types.NUMERIC: case Types.DECIMAL:
builder = SchemaBuilder.float64(); break;