case OTHER: case SQLXML: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().floatType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().doubleType().endUnion().noDefault(); break; case ARRAY:
.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
assembler.name(propertyName).type().stringBuilder().prop(PROP_JAVA_STRING_KEY, PROP_JAVA_STRING_VALUE).endString().noDefault(); } else { assembler.name(propertyName).type().unionOf().nullType().and().stringBuilder().prop(PROP_JAVA_STRING_KEY, PROP_JAVA_STRING_VALUE).endString().endUnion().noDefault();
case STRUCT: case JAVA_OBJECT: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().floatType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().doubleType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break;
case CLOB: case NCLOB: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().floatType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().doubleType().endUnion().noDefault(); break; case ARRAY:
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();
|| dataType.equals(DataType.list(firstArg))) { builder.name(columnDefinitions.getName(i)).type().unionOf().nullBuilder().endNull().and().array() .items(getUnionFieldType(getPrimitiveAvroTypeFromCassandraType(firstArg))).endUnion().noDefault(); } else { if (dataType.equals(DataType.map(firstArg, secondArg))) { builder.name(columnDefinitions.getName(i)).type().unionOf().nullBuilder().endNull().and().map().values( getUnionFieldType(getPrimitiveAvroTypeFromCassandraType(secondArg))).endUnion().noDefault();
.name("e_double").type().doubleType().noDefault() .name("f_bytes").type().bytesType().noDefault() .name("g_null").type().nullType().noDefault() .name("h_boolean").type().booleanType().noDefault() .endRecord();
.name("e_double").type().doubleType().noDefault() .name("f_bytes").type().bytesType().noDefault() .name("g_null").type().nullType().noDefault() .name("h_boolean").type().booleanType().noDefault() .name("i_union").type().optional().doubleType()
.name("e_double").type().doubleType().noDefault() .name("f_bytes").type().bytesType().noDefault() .name("g_null").type().nullType().noDefault() .name("h_boolean").type().booleanType().noDefault() .name("i_union").type().unionOf().doubleType().and().longType().endUnion().noDefault()
@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)) ); }
/** * Build a null type that can set custom properties. If custom properties * are not needed it is simpler to use {@link #nullType()}. */ public final NullBuilder<NullDefault<R>> nullBuilder() { return NullBuilder.create(wrap(new NullDefault<R>(bldr)), names); }
private static void addNullableField( FieldAssembler<Schema> builder, String columnName, Function<BaseTypeBuilder<UnionAccumulator<NullDefault<Schema>>>, UnionAccumulator<NullDefault<Schema>>> func ) { final BaseTypeBuilder<UnionAccumulator<NullDefault<Schema>>> and = builder.name(columnName).type().unionOf().nullBuilder().endNull().and(); func.apply(and).endUnion().noDefault(); }
/** * Build a null type that can set custom properties. If custom properties * are not needed it is simpler to use {@link #nullType()}. */ public NullBuilder<UnionAccumulator<NullDefault<R>>> nullBuilder() { return NullBuilder.create(completion(new NullDefault<R>(bldr)), names); }
/** * Build a null type that can set custom properties. If custom properties * are not needed it is simpler to use {@link #nullType()}. */ public NullBuilder<UnionAccumulator<NullDefault<R>>> nullBuilder() { return NullBuilder.create(completion(new NullDefault<R>(bldr)), names); }
/** * Build a null type that can set custom properties. If custom properties * are not needed it is simpler to use {@link #nullType()}. */ public final NullBuilder<NullDefault<R>> nullBuilder() { return NullBuilder.create(wrap(new NullDefault<R>(bldr)), names); }
.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)
case OTHER: case SQLXML: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().floatType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().doubleType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break;
case OTHER: case SQLXML: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); } else { builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); builder.name(columnName).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().floatType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().doubleType().endUnion().noDefault(); break; builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break;
|| dataType.equals(DataType.list(firstArg))) { builder.name(columnDefinitions.getName(i)).type().unionOf().nullBuilder().endNull().and().array() .items(getUnionFieldType(getPrimitiveAvroTypeFromCassandraType(firstArg))).endUnion().noDefault(); } else { if (dataType.equals(DataType.map(firstArg, secondArg))) { builder.name(columnDefinitions.getName(i)).type().unionOf().nullBuilder().endNull().and().map().values( getUnionFieldType(getPrimitiveAvroTypeFromCassandraType(secondArg))).endUnion().noDefault();