return NanoTimestamp.builder(); return org.apache.kafka.connect.data.Timestamp.builder(); case Types.TIME_WITH_TIMEZONE: return ZonedTime.builder();
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; } }
static Object timestamp(Schema schema, Object value) { if (value instanceof Number) { Number number = (Number) value; return Timestamp.toLogical(schema, number.longValue()); } return value; }
static Object timestamp(Schema schema, Object value) { if (value instanceof Number) { Number number = (Number) value; return Timestamp.toLogical(schema, number.longValue()); } return value; }
public static SchemaBuilder builder(Object input) { Preconditions.checkNotNull(input, "input cannot be null."); final SchemaBuilder builder; if (PRIMITIVES.containsKey(input.getClass())) { final Schema.Type type = PRIMITIVES.get(input.getClass()); builder = SchemaBuilder.type(type); } else if (input instanceof Date) { builder = Timestamp.builder(); } else if (input instanceof BigDecimal) { builder = Decimal.builder(((BigDecimal) input).scale()); } else { throw new UnsupportedOperationException( String.format("Unsupported Type: %s", input.getClass()) ); } return builder.optional(); }
@Override public Date toRaw(Config config, Object orig) { if (!(orig instanceof Long)) throw new DataException("Expected Unix timestamp to be a Long, but found " + orig.getClass()); return Timestamp.toLogical(Timestamp.SCHEMA, (Long) orig); }
@Override public Long toType(Config config, Date orig) { return Timestamp.fromLogical(Timestamp.SCHEMA, orig); } });
public LogFieldConverter createDateTime(SchemaBuilder builder, String logEntryDateField, String logEntryTimeField, String connectTimestampField) { final Schema fieldSchema = Timestamp.builder() .optional() .parameter(LOGFIELD_PARAM, String.format("%s,%s", logEntryDateField, logEntryTimeField)) .build(); builder.field(connectTimestampField, fieldSchema); final Field field = builder.field(connectTimestampField); final LogFieldConverter converter = new TimestampLogFieldConverter( field, logEntryTimeField, logEntryDateField ); return converter; } }
@Override public Object convert(Schema schema, Object value) { if (!(value instanceof Long)) throw new DataException("Invalid type for Timestamp, underlying representation should be int64 but was " + value.getClass()); return Timestamp.toLogical(schema, (long) value); } });
@Override public Headers addTimestamp(String key, java.util.Date value) { if (value != null) { // Check that this is a timestamp ... Timestamp.fromLogical(Timestamp.SCHEMA, value); } return addWithoutValidating(key, value, Timestamp.SCHEMA); }
@TestFactory @DisplayName("tests for logical type timestamp field conversions") public List<DynamicTest> testTimestampFieldConverter() { SinkFieldConverter converter = new TimestampFieldConverter(); 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(1983,7,31), LocalTime.MIDNIGHT, ZoneOffset.systemDefault()).toInstant()), java.util.Date.from(ZonedDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT, 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 = Timestamp.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, Timestamp.SCHEMA)), () -> assertEquals(new BsonNull(), converter.toBson(null, Timestamp.builder().optional())), () -> assertEquals(((java.util.Date)valueOptionalDefault.defaultValue()).toInstant().getEpochSecond()*1000, ((BsonDateTime)converter.toBson(null, valueOptionalDefault)).getValue()) ); })); return tests; }
return Timestamp.fromLogical(fromSchema, (java.util.Date) value);
SchemaBuilder tsSchemaBuilder = Timestamp.builder(); if (optional) { tsSchemaBuilder.optional();
if (isProtobufTimestamp(schema)) { com.google.protobuf.Timestamp timestamp = (com.google.protobuf.Timestamp) value; return Timestamp.toLogical(schema, Timestamps.toMillis(timestamp));
if (isProtobufTimestamp(schema)) { final java.util.Date timestamp = (java.util.Date) value; builder.setField(fieldDescriptor, Timestamps.fromMillis(Timestamp.fromLogical(schema, timestamp))); return;
return NanoTimestamp.builder(); return org.apache.kafka.connect.data.Timestamp.builder(); case Types.TIME_WITH_TIMEZONE: return ZonedTime.builder();
String schemaName = schema.name(); if(Timestamp.LOGICAL_NAME.equals(schemaName)){ return JsonNodeFactory.instance.numberNode(Timestamp.fromLogical(schema, (java.util.Date) value));
builder = Timestamp.builder(); break;