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