return NanoTime.builder(); return org.apache.kafka.connect.data.Time.builder(); case Types.TIMESTAMP: if (adaptiveTimePrecisionMode || adaptiveTimeMicrosecondsPrecisionMode) {
private Object maybeConvertLogicalType(final Schema connectSchema, final Object connectValue) { if (connectSchema.name() == null) { return connectValue; } switch (connectSchema.name()) { case Date.LOGICAL_NAME: return Date.fromLogical(connectSchema, (java.util.Date) connectValue); case Time.LOGICAL_NAME: return Time.fromLogical(connectSchema, (java.util.Date) connectValue); case Timestamp.LOGICAL_NAME: return Timestamp.fromLogical(connectSchema, (java.util.Date) connectValue); default: return connectValue; } }
calendar.set(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_MONTH, 1); return Time.toLogical(toSchema, (int) calendar.getTimeInMillis()); return Time.toLogical(toSchema, (int) numeric); long millis = Time.fromLogical(fromSchema, date); return Timestamp.toLogical(toSchema, millis);
static Object time(Schema schema, Object value) { if (value instanceof Number) { Number number = (Number) value; return Time.toLogical(schema, number.intValue()); } return value; }
static Object time(Schema schema, Object value) { if (value instanceof Number) { Number number = (Number) value; return Time.toLogical(schema, number.intValue()); } return value; }
static Schema schema(Class<?> logClass, String logFieldName) { final SchemaBuilder builder; if (LocalDate.class.equals(logClass)) { builder = Date.builder(); } else if (LocalTime.class.equals(logClass)) { builder = Time.builder(); } else if (Integer.class.equals(logClass)) { builder = SchemaBuilder.int32(); } else if (Long.class.equals(logClass)) { builder = SchemaBuilder.int64(); } else if (String.class.equals(logClass)) { builder = SchemaBuilder.string(); } else { throw new UnsupportedOperationException( String.format("%s is not a supported type.", logClass.getName()) ); } builder.optional(); return builder.build(); }
@Override public Object convert(Schema schema, Object value) { if (!(value instanceof Integer)) throw new DataException("Invalid type for Time, underlying representation should be int32 but was " + value.getClass()); return Time.toLogical(schema, (int) value); } });
@Override public Headers addTime(String key, java.util.Date value) { if (value != null) { // Check that this is a time ... Time.fromLogical(Time.SCHEMA, value); } return addWithoutValidating(key, value, Time.SCHEMA); }
@TestFactory @DisplayName("tests for logical type time field conversions") public List<DynamicTest> testTimeFieldConverter() { SinkFieldConverter converter = new TimeFieldConverter(); List<DynamicTest> tests = new ArrayList<>(); new ArrayList<>(Arrays.asList( java.util.Date.from(ZonedDateTime.of(LocalDate.of(1970,1,1), LocalTime.MIDNIGHT, ZoneOffset.systemDefault()).toInstant()), java.util.Date.from(ZonedDateTime.of(LocalDate.of(1970,1,1), LocalTime.NOON, ZoneOffset.systemDefault()).toInstant()) )).forEach( el -> tests.add(dynamicTest("conversion with " + converter.getClass().getSimpleName() + " for "+el, () -> assertEquals(el.toInstant().getEpochSecond()*1000, ((BsonDateTime)converter.toBson(el)).getValue()) )) ); tests.add(dynamicTest("optional type conversions", () -> { Schema valueOptionalDefault = Time.builder().optional().defaultValue( java.util.Date.from(ZonedDateTime.of(LocalDate.of(1970,1,1), LocalTime.MIDNIGHT, ZoneOffset.systemDefault()).toInstant()) ); assertAll("checks", () -> assertThrows(DataException.class, () -> converter.toBson(null, Time.SCHEMA)), () -> assertEquals(new BsonNull(), converter.toBson(null, Time.builder().optional())), () -> assertEquals(((java.util.Date)valueOptionalDefault.defaultValue()).toInstant().getEpochSecond()*1000, ((BsonDateTime)converter.toBson(null, valueOptionalDefault)).getValue()) ); })); return tests; }
return Time.fromLogical(fromSchema, (java.util.Date) value);
converter = new LocalDateLogFieldConverter(logFieldName, field); } else if (LocalTime.class.equals(logClass)) { fieldSchema = Time.builder() .optional() .parameter(LOGFIELD_PARAM, logFieldName)
SchemaBuilder timeSchemaBuilder = Time.builder(); if (optional) { timeSchemaBuilder.optional();
return NanoTime.builder(); return org.apache.kafka.connect.data.Time.builder(); case Types.TIMESTAMP: if (adaptiveTimePrecisionMode || adaptiveTimeMicrosecondsPrecisionMode) {