From ed16015d3962b0bdde795e1c812bb0a89b342e12 Mon Sep 17 00:00:00 2001 From: Yi Hu Date: Tue, 21 Jul 2026 15:45:37 -0400 Subject: [PATCH] Fix inconsistent AvroSchema type and value for SqlType.Date values --- .../beam/sdk/extensions/avro/schemas/utils/AvroUtils.java | 2 +- .../beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java index 854b0d3c8bb0..3c9064466d52 100644 --- a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java +++ b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java @@ -1380,7 +1380,7 @@ private static org.apache.avro.Schema getFieldSchema( return Days.daysBetween(Instant.EPOCH, (Instant) value).getDays(); } else if (SqlTypes.DATE.getIdentifier().equals(identifier)) { // portable SqlTypes.DATE is backed by java.time.LocalDate - return ((java.time.LocalDate) value).toEpochDay(); + return (int) ((java.time.LocalDate) value).toEpochDay(); } else if ("TIME".equals(identifier)) { return (int) ((Instant) value).getMillis(); } else if (SqlTypes.TIMESTAMP.getIdentifier().equals(identifier)) { diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index 6db5206c3cf6..d2452452f14f 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -1077,7 +1077,9 @@ public void testSqlTypesToGenericRecord() { org.apache.avro.Schema avroSchema = AvroUtils.toAvroSchema(beamSchema); GenericRecord expectedRecord = - new GenericRecordBuilder(avroSchema).set("local_date", localDate.toEpochDay()).build(); + new GenericRecordBuilder(avroSchema) + .set("local_date", (int) localDate.toEpochDay()) + .build(); assertEquals(expectedRecord, AvroUtils.toGenericRecord(rowData, avroSchema)); }