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

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 6811d69eb1 [INLONG-10776][SDK] Fix incorrect parsing of parameter 
types in DateFormatFunction (#10794)
6811d69eb1 is described below

commit 6811d69eb1a7d2dcb4aafddf927a573c9f29b54a
Author: yfsn666 <61183968+yfsn...@users.noreply.github.com>
AuthorDate: Fri Aug 16 14:54:29 2024 +0800

    [INLONG-10776][SDK] Fix incorrect parsing of parameter types in 
DateFormatFunction (#10794)
---
 .../process/function/DateFormatFunction.java       |  7 ++--
 .../TestTransformTemporalFunctionsProcessor.java   | 40 ++++++++++++++++------
 2 files changed, 32 insertions(+), 15 deletions(-)

diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
index 9e233ff882..f5ae9bfd88 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/DateFormatFunction.java
@@ -25,7 +25,7 @@ import 
org.apache.inlong.sdk.transform.process.parser.ValueParser;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.Function;
 
-import java.math.BigDecimal;
+import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -65,11 +65,10 @@ public class DateFormatFunction implements ValueParser {
     public Object parse(SourceData sourceData, int rowIndex, Context context) {
         Object timestampObj = timestampParser.parse(sourceData, rowIndex, 
context);
         Object formatObj = formatParser.parse(sourceData, rowIndex, context);
-        BigDecimal timestamp = OperatorTools.parseBigDecimal(timestampObj);
+        Timestamp timestamp = OperatorTools.parseTimestamp(timestampObj);
         String format = OperatorTools.parseString(formatObj);
         SimpleDateFormat sdf = getSimpleDateFormat(format);
-        // the timestamp is in seconds, multiply 1000 to get milliseconds
-        Date date = new Date(timestamp.longValue() * 1000);
+        Date date = new Date(timestamp.getTime());
         return sdf.format(date);
     }
 
diff --git 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
index 9acf27ca70..7760428ed4 100644
--- 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
+++ 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformTemporalFunctionsProcessor.java
@@ -98,25 +98,43 @@ public class TestTransformTemporalFunctionsProcessor {
 
     @Test
     public void testDateFormatFunction() throws Exception {
-        String transformSql = "select date_format(numeric1, string1) from 
source";
-        TransformConfig config = new TransformConfig(transformSql);
+        String transformSql1 = "select date_format(string1, 'yyyy-MM-dd 
HH:mm:ss') from source";
+        TransformConfig config1 = new TransformConfig(transformSql1);
         TransformProcessor<String, String> processor1 = TransformProcessor
-                .create(config, 
SourceDecoderFactory.createCsvDecoder(csvSource),
+                .create(config1, 
SourceDecoderFactory.createCsvDecoder(csvSource),
                         SinkEncoderFactory.createKvEncoder(kvSink));
-        // case1: date_format(1722524216, 'yyyy-MM-dd HH:mm:ss')
-        List<String> output1 = processor1.transform("yyyy-MM-dd 
HH:mm:ss|apple|cloud|1722524216|1|3", new HashMap<>());
+        // case1: date_format('2024-08-01 22:56:56', 'yyyy-MM-dd HH:mm:ss')
+        List<String> output1 = processor1.transform("2024-08-01 22:56:56", new 
HashMap<>());
         Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=2024-08-01 22:56:56");
-        // case2: date_format(1722524216, 'yyyy-MM-dd')
-        List<String> output2 = 
processor1.transform("yyyy-MM-dd|apple|cloud|1722524216|1|3", new HashMap<>());
+
+        String transformSql2 = "select date_format(string1, 'yyyy-MM-dd') from 
source";
+        TransformConfig config2 = new TransformConfig(transformSql2);
+        TransformProcessor<String, String> processor2 = TransformProcessor
+                .create(config2, 
SourceDecoderFactory.createCsvDecoder(csvSource),
+                        SinkEncoderFactory.createKvEncoder(kvSink));
+        // case2: date_format('2024-08-01 22:56:56', 'yyyy-MM-dd')
+        List<String> output2 = processor2.transform("2024-08-01 22:56:56", new 
HashMap<>());
         Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=2024-08-01");
-        // case3: date_format(1722524216, 'yyyyMMddHHmmss')
-        List<String> output3 = 
processor1.transform("yyyyMMddHHmmss|apple|cloud|1722524216|1|3", new 
HashMap<>());
+
+        String transformSql3 = "select date_format(string1, 'yyyyMMddHHmmss') 
from source";
+        TransformConfig config3 = new TransformConfig(transformSql3);
+        TransformProcessor<String, String> processor3 = TransformProcessor
+                .create(config3, 
SourceDecoderFactory.createCsvDecoder(csvSource),
+                        SinkEncoderFactory.createKvEncoder(kvSink));
+        // case3: date_format('2024-08-01 22:56:56', 'yyyyMMddHHmmss')
+        List<String> output3 = processor3.transform("2024-08-01 22:56:56", new 
HashMap<>());
         Assert.assertEquals(1, output3.size());
         Assert.assertEquals(output3.get(0), "result=20240801225656");
-        // case4: date_format(1722524216, 'yyyy/MM/dd HH:mm:ss')
-        List<String> output4 = processor1.transform("yyyy/MM/dd 
HH:mm:ss|apple|cloud|1722524216|1|3", new HashMap<>());
+
+        String transformSql4 = "select date_format(string1, 'yyyy/MM/dd 
HH:mm:ss') from source";
+        TransformConfig config4 = new TransformConfig(transformSql4);
+        TransformProcessor<String, String> processor4 = TransformProcessor
+                .create(config4, 
SourceDecoderFactory.createCsvDecoder(csvSource),
+                        SinkEncoderFactory.createKvEncoder(kvSink));
+        // case4: date_format('2024-08-01 22:56:56', 'yyyy/MM/dd HH:mm:ss')
+        List<String> output4 = processor4.transform("2024-08-01 22:56:56", new 
HashMap<>());
         Assert.assertEquals(1, output4.size());
         Assert.assertEquals(output4.get(0), "result=2024/08/01 22:56:56");
     }

Reply via email to