diff --git a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/SyntheticRecordTypeBuilder.java b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/SyntheticRecordTypeBuilder.java index 3d0f52612d..1ac7543259 100644 --- a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/SyntheticRecordTypeBuilder.java +++ b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/SyntheticRecordTypeBuilder.java @@ -166,6 +166,7 @@ protected void addConstituentFields(@Nonnull DescriptorProtos.DescriptorProto.Bu for (Constituent constituent : constituents) { descriptorProto.addFieldBuilder() .setName(constituent.getName()) + .setJsonName(constituent.getName()) .setNumber(++fieldNumber) .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE) .setTypeName("." + constituent.getRecordType().getDescriptor().getFullName()); diff --git a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/UnnestedRecordTypeBuilder.java b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/UnnestedRecordTypeBuilder.java index eb7782986e..9e63e84d1e 100644 --- a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/UnnestedRecordTypeBuilder.java +++ b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/UnnestedRecordTypeBuilder.java @@ -317,6 +317,7 @@ public void buildDescriptor(@Nonnull final DescriptorProtos.FileDescriptorProto. .setLabel(DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL) .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT64) .setName(constituent.getName()) + .setJsonName(constituent.getName()) .setNumber(indexPosition++); } } @@ -325,6 +326,7 @@ public void buildDescriptor(@Nonnull final DescriptorProtos.FileDescriptorProto. .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE) .setTypeName(name + "." + indexesProto.getName()) .setName(UnnestedRecordType.POSITIONS_FIELD) + .setJsonName(UnnestedRecordType.POSITIONS_FIELD) .setNumber(getConstituents().size() + 1); } diff --git a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/MetaDataProtoEditor.java b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/MetaDataProtoEditor.java index 8c0a81496e..cc45dd4f88 100644 --- a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/MetaDataProtoEditor.java +++ b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/provider/foundationdb/MetaDataProtoEditor.java @@ -102,6 +102,7 @@ private static void addFieldToUnion(@Nonnull DescriptorProtos.DescriptorProto.Bu .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE) .setTypeName(fullyQualifiedTypeName(fileBuilder, typeName)) .setName("_" + typeName) + .setJsonName("_" + typeName) .setNumber(assignFieldNumber(unionBuilder)); unionBuilder.addField(fieldBuilder); } @@ -416,6 +417,7 @@ public static void renameRecordType(@Nonnull RecordMetaDataProto.MetaData.Builde .noneMatch(otherUnionField -> otherUnionField != unionFieldBuilder && otherUnionField.getName().equals(newFieldName))) { unionFieldBuilder.setName(newFieldName); + unionFieldBuilder.setJsonName(newFieldName); } } } diff --git a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java index e6cc85c390..1dd58006af 100644 --- a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java +++ b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java @@ -988,6 +988,7 @@ public void addProtoField(@Nonnull final TypeRepository.Builder typeRepositoryBu descriptorBuilder.addField(FieldDescriptorProto.newBuilder() .setNumber(fieldNumber) .setName(fieldName) + .setJsonName(fieldName) .setType(protoType) .setLabel(label) .build()); @@ -1634,6 +1635,7 @@ public void addProtoField(@Nonnull final TypeRepository.Builder typeRepositoryBu FieldDescriptorProto.Builder builder = FieldDescriptorProto.newBuilder() .setNumber(fieldNumber) .setName(fieldName) + .setJsonName(fieldName) .setType(protoType) .setLabel(label); typeNameOptional.ifPresent(builder::setTypeName); @@ -2067,9 +2069,11 @@ public void addProtoField(@Nonnull final TypeRepository.Builder typeRepositoryBu final var fieldDescriptorProto = FieldDescriptorProto.newBuilder(); fieldDescriptorProto .setName(fieldName) + .setJsonName(fieldName) .setNumber(fieldNumber) + .setType(FieldDescriptorProto.Type.TYPE_MESSAGE) .setLabel(label); - typeNameOptional.ifPresent(fieldDescriptorProto::setTypeName); + typeNameOptional.ifPresent(localName -> fieldDescriptorProto.setTypeName("." + localName)); descriptorBuilder.addField(fieldDescriptorProto.build()); } @@ -3036,7 +3040,9 @@ public void addProtoField(@Nonnull final TypeRepository.Builder typeRepositoryBu FieldDescriptorProto.Builder builder = FieldDescriptorProto.newBuilder() .setNumber(fieldNumber) .setName(fieldName) + .setJsonName(fieldName) .setLabel(label) + .setType(FieldDescriptorProto.Type.TYPE_MESSAGE) .setTypeName(TupleFieldsProto.UUID.getDescriptor().getFullName()); typeNameOptional.ifPresent(builder::setTypeName); descriptorBuilder.addField(builder); diff --git a/fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/metadata/serde/FileDescriptorSerializer.java b/fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/metadata/serde/FileDescriptorSerializer.java index f01d7abee0..8957d5f14d 100644 --- a/fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/metadata/serde/FileDescriptorSerializer.java +++ b/fdb-relational-core/src/main/java/com/apple/foundationdb/relational/recordlayer/metadata/serde/FileDescriptorSerializer.java @@ -101,11 +101,13 @@ public void visit(@Nonnull final Table table) { // add the table as an entry in the final 'RecordTypeUnion' entry of the record store metadata. There is one // field for each generation of the RecordLayerTable. for (var version : generations.entrySet()) { + final String name = recordLayerTable.getName() + "_" + (fieldCounter++); final var tableEntryInUnionDescriptor = DescriptorProtos.FieldDescriptorProto.newBuilder() .setNumber(version.getKey()) - .setName(recordLayerTable.getName() + "_" + (fieldCounter++)) + .setName(name) + .setJsonName(name) .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE) - .setTypeName(typeDescriptor) + .setTypeName("." + typeDescriptor) .setOptions(version.getValue()) .build(); unionDescriptorBuilder.addField(tableEntryInUnionDescriptor); diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ProtobufDataBuilderTest.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ProtobufDataBuilderTest.java index 7ccf1d4129..3c8a215cdb 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ProtobufDataBuilderTest.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ProtobufDataBuilderTest.java @@ -120,7 +120,7 @@ public static DescriptorProtos.FieldDescriptorProto newDescriptor(String name, String messageType, boolean isRepeated) { DescriptorProtos.FieldDescriptorProto.Builder proto = DescriptorProtos.FieldDescriptorProto.newBuilder() - .setName(name); + .setName(name).setJsonName(name); switch (javaType) { case INT: proto.setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT32); diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ddl/DdlTestUtil.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ddl/DdlTestUtil.java index be88a3fcea..5ba6e6d661 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ddl/DdlTestUtil.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/api/ddl/DdlTestUtil.java @@ -251,7 +251,11 @@ private void buildTypesAndTables() { if (extension != null && extension.hasUsage() && extension.getUsage() == RecordMetaDataOptionsProto.RecordTypeOptions.Usage.UNION) { //we found the Union Descriptor for (DescriptorProtos.FieldDescriptorProto tableDescs : typeDesc.getFieldList()) { - tableNames.add(tableDescs.getTypeName()); + String name = tableDescs.getTypeName(); + if (name.startsWith(".")) { + name = name.substring(1); + } + tableNames.add(name); } } } diff --git a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/metadata/SchemaTemplateSerDeTests.java b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/metadata/SchemaTemplateSerDeTests.java index 67d353afb7..e71e1b7cbf 100644 --- a/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/metadata/SchemaTemplateSerDeTests.java +++ b/fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/metadata/SchemaTemplateSerDeTests.java @@ -163,7 +163,7 @@ public void testGoodSchemaTemplate() { final var unionDesc = maybeUnionDesc.get(); // Check if all tables are part of union descriptor. - final var expectedTableNameSet = Set.of("T1", "T2"); + final var expectedTableNameSet = Set.of(".T1", ".T2"); Assertions.assertTrue(unionDesc.getFieldList().stream().allMatch(e -> expectedTableNameSet.contains(e.getTypeName()))); // Check if the number of fields in union descriptor are equal to the tables in the template. @@ -237,8 +237,10 @@ public void testGoodSchemaTemplateWithGenerations() { // Check if all generations are present in union descriptor for (final var unionField : unionDesc.getFieldList()) { final var typeName = unionField.getTypeName(); - Assertions.assertTrue(testcase.containsKey(typeName)); - final var expectedGenerations = testcase.get(typeName); + Assertions.assertTrue(typeName.startsWith(".")); + final var caseName = typeName.substring(1); + Assertions.assertTrue(testcase.containsKey(caseName)); + final var expectedGenerations = testcase.get(caseName); Assertions.assertTrue(expectedGenerations.contains(NonnullPair.of(unionField.getNumber(), unionField.getOptions()))); } }