This is an automated email from the ASF dual-hosted git repository.

corgy 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 0369c7a883 [Fix][Transform] Support integer input for from_unixtime 
function (#9738)
0369c7a883 is described below

commit 0369c7a8834ff1bd595b42203215e3fc11eadc8f
Author: Jast <[email protected]>
AuthorDate: Tue Aug 26 17:58:00 2025 +0800

    [Fix][Transform] Support integer input for from_unixtime function (#9738)
---
 .../sql/zeta/functions/DateTimeFunction.java       |  5 ++-
 .../transform/sql/zeta/DateTimeFunctionTest.java   | 45 ++++++++++++++++++++++
 2 files changed, 48 insertions(+), 2 deletions(-)

diff --git 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
index 262fb2129c..2758f232cb 100644
--- 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
+++ 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/DateTimeFunction.java
@@ -701,10 +701,11 @@ public class DateTimeFunction {
     }
 
     public static String fromUnixTime(List<Object> args) {
-        Long unixTime = (Long) args.get(0);
-        if (unixTime == null) {
+        Object unixTimeObj = args.get(0);
+        if (unixTimeObj == null) {
             return null;
         }
+        long unixTime = ((Number) unixTimeObj).longValue();
         String format = (String) args.get(1);
         ZoneId zoneId = ZoneId.systemDefault();
         if (args.size() == 3) {
diff --git 
a/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/zeta/DateTimeFunctionTest.java
 
b/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/zeta/DateTimeFunctionTest.java
index 6030e3918d..c10856a47f 100644
--- 
a/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/zeta/DateTimeFunctionTest.java
+++ 
b/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/zeta/DateTimeFunctionTest.java
@@ -62,4 +62,49 @@ public class DateTimeFunctionTest {
         Object field1 = outRow1.getField(0);
         Assertions.assertEquals("2023-01-01 10:00:00", field1.toString());
     }
+
+    @Test
+    public void testFromUnixtimeFunctionWithIntegerInput() {
+        SQLEngine sqlEngine = 
SQLEngineFactory.getSQLEngine(SQLEngineFactory.EngineType.ZETA);
+
+        // Test with Integer type (simulating MySQL INT field)
+        SeaTunnelRowType rowTypeInt =
+                new SeaTunnelRowType(
+                        new String[] {"unixtime"}, new SeaTunnelDataType[] 
{BasicType.INT_TYPE});
+
+        // 1672545600 means `2023-01-01 12:00:00 UTC+8` in unix time (as 
Integer)
+        Integer unixTimeInt = 1672545600;
+        SeaTunnelRow inputRowInt = new SeaTunnelRow(new Integer[] 
{unixTimeInt});
+
+        // Transform by `from_unixtime` function with Integer input
+        sqlEngine.init(
+                "test",
+                null,
+                rowTypeInt,
+                "select from_unixtime(unixtime,'yyyy-MM-dd HH:mm:ss') as ts 
from dual");
+        SeaTunnelRow outRowInt = sqlEngine.transformBySQL(inputRowInt, 
rowTypeInt).get(0);
+        Object fieldInt = outRowInt.getField(0);
+        Assertions.assertNotNull(fieldInt.toString());
+
+        // Test with Long type (original working case)
+        SeaTunnelRowType rowTypeLong =
+                new SeaTunnelRowType(
+                        new String[] {"unixtime"}, new SeaTunnelDataType[] 
{BasicType.LONG_TYPE});
+
+        Long unixTimeLong = 1672545600L;
+        SeaTunnelRow inputRowLong = new SeaTunnelRow(new Long[] 
{unixTimeLong});
+
+        // Transform by `from_unixtime` function with Long input
+        sqlEngine.init(
+                "test",
+                null,
+                rowTypeLong,
+                "select from_unixtime(unixtime,'yyyy-MM-dd HH:mm:ss') as ts 
from dual");
+        SeaTunnelRow outRowLong = sqlEngine.transformBySQL(inputRowLong, 
rowTypeLong).get(0);
+        Object fieldLong = outRowLong.getField(0);
+        Assertions.assertNotNull(fieldLong.toString());
+
+        // Both Integer and Long inputs should produce the same result
+        Assertions.assertEquals(fieldInt.toString(), fieldLong.toString());
+    }
 }

Reply via email to