public static void copyAliases(final Schema from, final Schema to) { switch (from.getType()) { // only named types. case RECORD: case ENUM: case FIXED: Set<String> aliases = from.getAliases(); for (String alias : aliases) { to.addAlias(alias); } } }
/** Rewrite a writer's schema using the aliases from a reader's schema. This * permits reading records, enums and fixed schemas whose names have changed, * and records whose field names have changed. The returned schema always * contains the same data elements in the same order, but with possibly * different names. */ public static Schema applyAliases(Schema writer, Schema reader) { if (writer == reader) return writer; // same schema // create indexes of names Map<Schema,Schema> seen = new IdentityHashMap<>(1); Map<Name,Name> aliases = new HashMap<>(1); Map<Name,Map<String,String>> fieldAliases = new HashMap<>(1); getAliases(reader, seen, aliases, fieldAliases); if (aliases.size() == 0 && fieldAliases.size() == 0) return writer; // no aliases seen.clear(); return applyAliases(writer, seen, aliases, fieldAliases); }
/** Rewrite a writer's schema using the aliases from a reader's schema. This * permits reading records, enums and fixed schemas whose names have changed, * and records whose field names have changed. The returned schema always * contains the same data elements in the same order, but with possibly * different names. */ public static Schema applyAliases(Schema writer, Schema reader) { if (writer == reader) return writer; // same schema // create indexes of names Map<Schema,Schema> seen = new IdentityHashMap<Schema,Schema>(1); Map<Name,Name> aliases = new HashMap<Name, Name>(1); Map<Name,Map<String,String>> fieldAliases = new HashMap<Name, Map<String,String>>(1); getAliases(reader, seen, aliases, fieldAliases); if (aliases.size() == 0 && fieldAliases.size() == 0) return writer; // no aliases seen.clear(); return applyAliases(writer, seen, aliases, fieldAliases); }
recordAliases.put(fieldAlias, field.name); getAliases(field.schema, seen, aliases, fieldAliases); break; case ARRAY: getAliases(schema.getElementType(), seen, aliases, fieldAliases); break; case MAP: getAliases(schema.getValueType(), seen, aliases, fieldAliases); break; case UNION: for (Schema s : schema.getTypes()) getAliases(s, seen, aliases, fieldAliases); break;
recordAliases.put(fieldAlias, field.name); getAliases(field.schema, seen, aliases, fieldAliases); break; case ARRAY: getAliases(schema.getElementType(), seen, aliases, fieldAliases); break; case MAP: getAliases(schema.getValueType(), seen, aliases, fieldAliases); break; case UNION: for (Schema s : schema.getTypes()) getAliases(s, seen, aliases, fieldAliases); break;
/** * Tests the equality of two Avro named schemas. * * <p> Matching includes reader name aliases. </p> * * @param reader Named reader schema. * @param writer Named writer schema. * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (objectsEqual(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }
/** * Tests the equality of two Avro named schemas. * * <p> Matching includes reader name aliases. </p> * * @param reader Named reader schema. * @param writer Named writer schema. * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (objectsEqual(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }
result = Schema.createRecord(s.getFullName(), s.getDoc(), null, s.isError()); for (String alias : s.getAliases())
@Test public void testRecord() { Schema schema = SchemaBuilder .record("myrecord").namespace("org.example").aliases("oldrecord").fields() .name("f0").aliases("f0alias").type().stringType().noDefault() .name("f1").doc("This is f1").type().longType().noDefault() .name("f2").type().nullable().booleanType().booleanDefault(true) .endRecord(); Assert.assertEquals("myrecord", schema.getName()); Assert.assertEquals("org.example", schema.getNamespace()); Assert.assertEquals("org.example.oldrecord", schema.getAliases().iterator().next()); Assert.assertFalse(schema.isError()); List<Schema.Field> fields = schema.getFields(); Assert.assertEquals(3, fields.size()); Assert.assertEquals( new Schema.Field("f0", Schema.create(Schema.Type.STRING), null, null), fields.get(0)); Assert.assertTrue(fields.get(0).aliases().contains("f0alias")); Assert.assertEquals( new Schema.Field("f1", Schema.create(Schema.Type.LONG), "This is f1", null), fields.get(1)); List<Schema> types = new ArrayList<>(); types.add(Schema.create(Schema.Type.BOOLEAN)); types.add(Schema.create(Schema.Type.NULL)); Schema optional = Schema.createUnion(types); Assert.assertEquals(new Schema.Field("f2", optional, null, true), fields.get(2)); }
Schema s2 = Schema.parse(t2); assertEquals(s1.getAliases(), Collections.emptySet()); assertEquals(s1.getField("f").aliases(), Collections.emptySet()); assertEquals(s2.getAliases(), Collections.singleton("a.b")); assertEquals(s2.getField("g").aliases(), Collections.singleton("f"));
@Override public Set<String> getAliases() { return wrapped.getAliases(); }
/** Register a new schema with this repository. **/ public AvroSchemaComposer add (Schema schema) { for (String alias: schema.getAliases()) { schemas.put(alias, schema); } schemas.put(schema.getFullName(), schema); mostRecent = schema; return this; }
public static void copyAliases(final Schema from, final Schema to) { //CHECKSTYLE:OFF switch (from.getType()) { // only named types. case RECORD: case ENUM: case FIXED: Set<String> aliases = from.getAliases(); for (String alias : aliases) { to.addAlias(alias); } break; default: //ignore unnamed one's } //CHECKSTYLE:OFF }
/** Rewrite a writer's schema using the aliases from a reader's schema. This * permits reading records, enums and fixed schemas whose names have changed, * and records whose field names have changed. The returned schema always * contains the same data elements in the same order, but with possibly * different names. */ public static Schema applyAliases(Schema writer, Schema reader) { if (writer == reader) return writer; // same schema // create indexes of names Map<Schema,Schema> seen = new IdentityHashMap<Schema,Schema>(1); Map<Name,Name> aliases = new HashMap<Name, Name>(1); Map<Name,Map<String,String>> fieldAliases = new HashMap<Name, Map<String,String>>(1); getAliases(reader, seen, aliases, fieldAliases); if (aliases.size() == 0 && fieldAliases.size() == 0) return writer; // no aliases seen.clear(); return applyAliases(writer, seen, aliases, fieldAliases); }
/** Rewrite a writer's schema using the aliases from a reader's schema. This * permits reading records, enums and fixed schemas whose names have changed, * and records whose field names have changed. The returned schema always * contains the same data elements in the same order, but with possibly * different names. */ public static Schema applyAliases(Schema writer, Schema reader) { if (writer == reader) return writer; // same schema // create indexes of names Map<Schema,Schema> seen = new IdentityHashMap<Schema,Schema>(1); Map<Name,Name> aliases = new HashMap<Name, Name>(1); Map<Name,Map<String,String>> fieldAliases = new HashMap<Name, Map<String,String>>(1); getAliases(reader, seen, aliases, fieldAliases); if (aliases.size() == 0 && fieldAliases.size() == 0) return writer; // no aliases seen.clear(); return applyAliases(writer, seen, aliases, fieldAliases); }
/** Rewrite a writer's schema using the aliases from a reader's schema. This * permits reading records, enums and fixed schemas whose names have changed, * and records whose field names have changed. The returned schema always * contains the same data elements in the same order, but with possibly * different names. */ public static Schema applyAliases(Schema writer, Schema reader) { if (writer == reader) return writer; // same schema // create indexes of names Map<Schema,Schema> seen = new IdentityHashMap<Schema,Schema>(1); Map<Name,Name> aliases = new HashMap<Name, Name>(1); Map<Name,Map<String,String>> fieldAliases = new HashMap<Name, Map<String,String>>(1); getAliases(reader, seen, aliases, fieldAliases); if (aliases.size() == 0 && fieldAliases.size() == 0) return writer; // no aliases seen.clear(); return applyAliases(writer, seen, aliases, fieldAliases); }
/** * Tests the equality of two Avro named schemas. * * <p> Matching includes reader name aliases. </p> * * @param reader Named reader schema. * @param writer Named writer schema. * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (Objects.equal(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }
/** * Tests the equality of two Avro named schemas. * <p> * Matching includes reader name aliases. * </p> * * @param reader Named reader schema. * @param writer Named writer schema. * * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (objectsEqual(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }
/** * Tests the equality of two Avro named schemas. * * <p> Matching includes reader name aliases. </p> * * @param reader Named reader schema. * @param writer Named writer schema. * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (objectsEqual(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }
/** * Tests the equality of two Avro named schemas. * <p> * Matching includes reader name aliases. * </p> * * @param reader Named reader schema. * @param writer Named writer schema. * * @return whether the names of the named schemas match or not. */ public static boolean schemaNameEquals(final Schema reader, final Schema writer) { final String writerFullName = writer.getFullName(); if (objectsEqual(reader.getFullName(), writerFullName)) { return true; } // Apply reader aliases: if (reader.getAliases().contains(writerFullName)) { return true; } return false; }