.name("key") .type().unionOf().nullType().and().stringType().endUnion() .nullDefault() .name("value") .type().unionOf().nullType().and().longType().endUnion() .nullDefault() .endRecord(); final org.apache.avro.Schema avroSchema
.name("bytesF2").type().bytesType().bytesDefault(bufdef) .name("bytesF3").type().bytesType().bytesDefault(strdef) .name("nullF").type().nullType().nullDefault() .name("fixedF1").type().fixed("F1").size(1).fixedDefault(bytedef) .name("fixedF2").type().fixed("F2").size(1).fixedDefault(bufdef) .intType().endUnion().bytesDefault(bytedef) .name("nullU").type().unionOf().nullType().and() .intType().endUnion().nullDefault() .name("fixedU").type().unionOf().fixed("F4").size(1).and() .intType().endUnion().fixedDefault(bytedef)
@Test public void shouldSerializeStruct() { final org.apache.avro.Schema avroSchema = org.apache.avro.SchemaBuilder.record(KsqlConstants.AVRO_SCHEMA_NAME + "_field0") .namespace(KsqlConstants.AVRO_SCHEMA_NAMESPACE) .fields() .name("field1") .type().unionOf().nullType().and().intType().endUnion() .nullDefault() .name("field2") .type().unionOf().nullType().and().stringType().endUnion() .nullDefault() .endRecord(); final GenericRecord avroValue = new GenericData.Record(avroSchema); avroValue.put("field1", 123); avroValue.put("field2", "foobar"); final Schema ksqlSchema = SchemaBuilder.struct() .field("field1", Schema.OPTIONAL_INT32_SCHEMA) .field("field2", Schema.OPTIONAL_STRING_SCHEMA) .optional() .build(); final Struct value = new Struct(ksqlSchema); value.put("field1", 123); value.put("field2", "foobar"); shouldSerializeTypeCorrectly(ksqlSchema, value, avroSchema, avroValue); }
case LONGVARCHAR: case NCHAR: return field.stringType().endUnion().nullDefault(); case BIGINT: if (precision > 0 && precision <= JdbcAvroRecord.MAX_DIGITS_BIGINT) { return field.longType().endUnion().nullDefault(); } else { return field.stringType().endUnion().nullDefault(); return field.intType().endUnion().nullDefault(); case TIMESTAMP: case DATE: if (useLogicalTypes) { return field.longBuilder().prop("logicalType", "timestamp-millis") .endLong().endUnion().nullDefault(); } else { return field.longType().endUnion().nullDefault(); return field.booleanType().endUnion().nullDefault(); case BIT: if (precision <= 1) { return field.booleanType().endUnion().nullDefault(); } else { return field.bytesType().endUnion().nullDefault(); case ARRAY: case BLOB: return field.bytesType().endUnion().nullDefault();
@Test public void testSchemaMergeUnionTypes() throws Exception { String jsonArraySample = "{\"id\": 1}\n{\"id\": 2}" + "{\"id\": \"socket\", \"union\": [33, 34, 35]}" + "{\"id\": 3, \"union\": [\"badger\", \"porcupine\"]}"; String jsonMapSample = "{\"id\": 1}\n{\"id\": 2}" + "{\"id\": \"socket\", \"union\": {\"coffee\": 17}}" + "{\"id\": 3, \"union\": {\"badger\": \"porcupine\"}}"; Schema schema = SchemaBuilder.record("Test").fields() .name("id").type() .unionOf().intType().and().stringType().endUnion().noDefault() .name("union").type().unionOf() .nullType() .and() .array().items().unionOf().intType().and().stringType().endUnion() .and() .map().values().unionOf().intType().and().stringType().endUnion() .endUnion().nullDefault() .endRecord(); Assert.assertEquals("Should match expected schema", schema, SchemaUtil.merge( mergeSchemas(jsonArraySample), mergeSchemasWithMaps(jsonMapSample)) ); }