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));
+    }
 }

Reply via email to