This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 65936d6e08 [Fix][Format] Preserve Avro field case during serialization
(#12009)
65936d6e08 is described below
commit 65936d6e08aa34f5cfa967dec0e4cdf96b9d101e
Author: Goutam Adwant <[email protected]>
AuthorDate: Tue Sep 1 14:58:18 2026 +0000
[Fix][Format] Preserve Avro field case during serialization (#12009)
Signed-off-by: Goutam Adwant <[email protected]>
---
.../seatunnel/format/avro/RowToAvroConverter.java | 5 ++-
.../format/avro/AvroSerializationSchemaTest.java | 38 ++++++++++++++++++++++
2 files changed, 40 insertions(+), 3 deletions(-)
diff --git
a/seatunnel-formats/seatunnel-format-avro/src/main/java/org/apache/seatunnel/format/avro/RowToAvroConverter.java
b/seatunnel-formats/seatunnel-format-avro/src/main/java/org/apache/seatunnel/format/avro/RowToAvroConverter.java
index 6c2e19f276..967d66b454 100644
---
a/seatunnel-formats/seatunnel-format-avro/src/main/java/org/apache/seatunnel/format/avro/RowToAvroConverter.java
+++
b/seatunnel-formats/seatunnel-format-avro/src/main/java/org/apache/seatunnel/format/avro/RowToAvroConverter.java
@@ -79,7 +79,7 @@ public class RowToAvroConverter implements Serializable {
for (int i = 0; i < fieldNames.length; i++) {
String fieldName = rowType.getFieldName(i);
Object value = element.getField(i);
- builder.set(fieldName.toLowerCase(), resolveObject(value,
rowType.getFieldType(i)));
+ builder.set(fieldName, resolveObject(value,
rowType.getFieldType(i)));
}
return builder.build();
}
@@ -147,8 +147,7 @@ public class RowToAvroConverter implements Serializable {
GenericRecordBuilder recordBuilder = new
GenericRecordBuilder(recordSchema);
for (int i = 0; i < fieldNames.length; i++) {
recordBuilder.set(
- fieldNames[i].toLowerCase(),
- resolveObject(seaTunnelRow.getField(i),
fieldTypes[i]));
+ fieldNames[i],
resolveObject(seaTunnelRow.getField(i), fieldTypes[i]));
}
return recordBuilder.build();
default:
diff --git
a/seatunnel-formats/seatunnel-format-avro/src/test/java/org/apache/seatunnel/format/avro/AvroSerializationSchemaTest.java
b/seatunnel-formats/seatunnel-format-avro/src/test/java/org/apache/seatunnel/format/avro/AvroSerializationSchemaTest.java
index 10eb85079f..6e01aa1a59 100644
---
a/seatunnel-formats/seatunnel-format-avro/src/test/java/org/apache/seatunnel/format/avro/AvroSerializationSchemaTest.java
+++
b/seatunnel-formats/seatunnel-format-avro/src/test/java/org/apache/seatunnel/format/avro/AvroSerializationSchemaTest.java
@@ -285,4 +285,42 @@ class AvroSerializationSchemaTest {
Assertions.assertEquals(1769504419000L, row.getField(1));
Assertions.assertNull(row.getField(2));
}
+
+ @Test
+ public void testMixedCaseFieldSerialization() throws IOException {
+ SeaTunnelRowType rowType =
+ new SeaTunnelRowType(
+ new String[] {"CustomerID", "customerid"},
+ new SeaTunnelDataType<?>[] {BasicType.INT_TYPE,
BasicType.INT_TYPE});
+ CatalogTable catalogTable = CatalogTableUtil.getCatalogTable("", "",
"", "test", rowType);
+ SeaTunnelRow sourceRow = new SeaTunnelRow(2);
+ sourceRow.setField(0, 42);
+ sourceRow.setField(1, 84);
+
+ byte[] bytes = new
AvroSerializationSchema(rowType).serialize(sourceRow);
+ SeaTunnelRow result = new
AvroDeserializationSchema(catalogTable).deserialize(bytes);
+
+ Assertions.assertEquals(42, result.getField(0));
+ Assertions.assertEquals(84, result.getField(1));
+ }
+
+ @Test
+ public void testNestedMixedCaseFieldSerialization() throws IOException {
+ SeaTunnelRowType nestedType =
+ new SeaTunnelRowType(
+ new String[] {"InnerID"}, new SeaTunnelDataType<?>[]
{BasicType.INT_TYPE});
+ SeaTunnelRowType rowType =
+ new SeaTunnelRowType(
+ new String[] {"payload"}, new SeaTunnelDataType<?>[]
{nestedType});
+ CatalogTable catalogTable = CatalogTableUtil.getCatalogTable("", "",
"", "test", rowType);
+ SeaTunnelRow nestedRow = new SeaTunnelRow(1);
+ nestedRow.setField(0, 42);
+ SeaTunnelRow sourceRow = new SeaTunnelRow(1);
+ sourceRow.setField(0, nestedRow);
+
+ byte[] bytes = new
AvroSerializationSchema(rowType).serialize(sourceRow);
+ SeaTunnelRow result = new
AvroDeserializationSchema(catalogTable).deserialize(bytes);
+
+ Assertions.assertEquals(42, ((SeaTunnelRow)
result.getField(0)).getField(0));
+ }
}