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 <[email protected]>
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");
}