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

luchunliang 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 5d4128d826 [INLONG-10607][SDK] Transform SQL support arithmetic 
functions(Including log10, log2, log and exp) (#10615)
5d4128d826 is described below

commit 5d4128d8266e745a5df8580e7e1a886308d20b12
Author: LeeWY <61183968+yfsn...@users.noreply.github.com>
AuthorDate: Sat Jul 13 16:36:20 2024 +0800

    [INLONG-10607][SDK] Transform SQL support arithmetic functions(Including 
log10, log2, log and exp) (#10615)
    
    * [INLONG-10607][SDK] Transform SQL support arithmetic functions(Including 
log10, log2, log and exp)
    
    * [INLONG-10607][SDK] Rename some variables and optimize the test code
    
    ---------
    
    Co-authored-by: jameswyli <jamesw...@tencent.com>
---
 .../transform/process/function/AbsFunction.java    |  6 +-
 .../{AbsFunction.java => ExpFunction.java}         | 16 ++--
 .../sdk/transform/process/function/LnFunction.java |  6 +-
 .../{AbsFunction.java => Log10Function.java}       | 16 ++--
 .../{AbsFunction.java => Log2Function.java}        | 16 ++--
 .../{AbsFunction.java => LogFunction.java}         | 33 +++++++--
 .../transform/process/function/PowerFunction.java  | 12 +--
 .../transform/process/function/SqrtFunction.java   |  6 +-
 .../transform/process/operator/OperatorTools.java  |  8 ++
 .../TestTransformArithmeticFunctionsProcessor.java | 86 +++++++++++++++++++---
 10 files changed, 149 insertions(+), 56 deletions(-)

diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
index cc56afb85e..a94d662eae 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
  */
 public class AbsFunction implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
     public AbsFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,7 +49,7 @@ public class AbsFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
         return numberValue.abs();
     }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
similarity index 77%
copy from 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
index cc56afb85e..5f542413e2 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/ExpFunction.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
 import java.math.BigDecimal;
 
 /**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * ExpFunction
+ * description: exp(numeric)--returns e raised to the power of numeric
  */
-public class AbsFunction implements ValueParser {
+public class ExpFunction implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
-    public AbsFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+    public ExpFunction(Function expr) {
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
-        return numberValue.abs();
+        return Math.exp(numberValue.doubleValue());
     }
 }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
index fde53b6db1..d5e5ecf80b 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LnFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
  */
 public class LnFunction implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
     public LnFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,7 +49,7 @@ public class LnFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
         return Math.log(numberValue.doubleValue());
     }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
similarity index 76%
copy from 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
index cc56afb85e..d390893af2 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log10Function.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
 import java.math.BigDecimal;
 
 /**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * Log10Function
+ * description: log10(numeric)--returns the base 10 logarithm of numeric
  */
-public class AbsFunction implements ValueParser {
+public class Log10Function implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
-    public AbsFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+    public Log10Function(Function expr) {
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
-        return numberValue.abs();
+        return Math.log10(numberValue.doubleValue());
     }
 }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
similarity index 76%
copy from 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
index cc56afb85e..9c502f25a5 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/Log2Function.java
@@ -26,19 +26,19 @@ import net.sf.jsqlparser.expression.Function;
 import java.math.BigDecimal;
 
 /**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * Log2Function
+ * description: log2(numeric)--returns the base 2 logarithm of numeric
  */
-public class AbsFunction implements ValueParser {
+public class Log2Function implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
-    public AbsFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+    public Log2Function(Function expr) {
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,8 +49,8 @@ public class AbsFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
-        return numberValue.abs();
+        return Math.log(numberValue.doubleValue()) / Math.log(2);
     }
 }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
similarity index 52%
copy from 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
copy to 
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
index cc56afb85e..bc0e200255 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/AbsFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/LogFunction.java
@@ -21,24 +21,35 @@ import org.apache.inlong.sdk.transform.decode.SourceData;
 import org.apache.inlong.sdk.transform.process.operator.OperatorTools;
 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.util.List;
 
 /**
- * AbsFunction
- * description: abs(numeric)--returns the absolute value of numeric
+ * LogFunction
+ * description: log(numeric) or log(numeric1, numeric2)--When called with one 
argument, returns the natural logarithm
+ * of numeric. When called with two arguments, this function returns the 
logarithm of numeric2 to the base numeric1
  */
-public class AbsFunction implements ValueParser {
+public class LogFunction implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser baseParser;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
-    public AbsFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+    public LogFunction(Function expr) {
+        List<Expression> expressions = expr.getParameters().getExpressions();
+        // Determine the number of arguments and build parser
+        if (expressions.size() == 1) {
+            numberParser = OperatorTools.buildParser(expressions.get(0));
+        } else {
+            baseParser = OperatorTools.buildParser(expressions.get(0));
+            numberParser = OperatorTools.buildParser(expressions.get(1));
+        }
     }
 
     /**
@@ -49,8 +60,14 @@ public class AbsFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
-        return numberValue.abs();
+        if (baseParser != null) {
+            Object baseObj = baseParser.parse(sourceData, rowIndex);
+            BigDecimal baseValue = OperatorTools.parseBigDecimal(baseObj);
+            return Math.log(numberValue.doubleValue()) / 
Math.log(baseValue.doubleValue());
+        } else {
+            return Math.log(numberValue.doubleValue());
+        }
     }
 }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
index 598c8c45f1..94835f9d7b 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/PowerFunction.java
@@ -31,16 +31,16 @@ import java.math.BigDecimal;
  */
 public class PowerFunction implements ValueParser {
 
-    private ValueParser base;
-    private ValueParser exponent;
+    private ValueParser baseParser;
+    private ValueParser exponentParser;
 
     /**
      * Constructor
      * @param expr
      */
     public PowerFunction(Function expr) {
-        base = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
-        exponent = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(1));
+        baseParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+        exponentParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(1));
     }
 
     /**
@@ -51,8 +51,8 @@ public class PowerFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object baseObj = base.parse(sourceData, rowIndex);
-        Object exponentObj = exponent.parse(sourceData, rowIndex);
+        Object baseObj = baseParser.parse(sourceData, rowIndex);
+        Object exponentObj = exponentParser.parse(sourceData, rowIndex);
         BigDecimal baseValue = OperatorTools.parseBigDecimal(baseObj);
         BigDecimal exponentValue = OperatorTools.parseBigDecimal(exponentObj);
         return Math.pow(baseValue.doubleValue(), exponentValue.doubleValue());
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
index b3038ecaba..f9e277acbd 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/SqrtFunction.java
@@ -31,14 +31,14 @@ import java.math.BigDecimal;
  */
 public class SqrtFunction implements ValueParser {
 
-    private ValueParser number;
+    private ValueParser numberParser;
 
     /**
      * Constructor
      * @param expr
      */
     public SqrtFunction(Function expr) {
-        number = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
+        numberParser = 
OperatorTools.buildParser(expr.getParameters().getExpressions().get(0));
     }
 
     /**
@@ -49,7 +49,7 @@ public class SqrtFunction implements ValueParser {
      */
     @Override
     public Object parse(SourceData sourceData, int rowIndex) {
-        Object numberObj = number.parse(sourceData, rowIndex);
+        Object numberObj = numberParser.parse(sourceData, rowIndex);
         BigDecimal numberValue = OperatorTools.parseBigDecimal(numberObj);
         return Math.sqrt(numberValue.doubleValue());
     }
diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
index 6e4dbace0f..de8c9b499c 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/OperatorTools.java
@@ -19,7 +19,11 @@ package org.apache.inlong.sdk.transform.process.operator;
 
 import org.apache.inlong.sdk.transform.process.function.AbsFunction;
 import org.apache.inlong.sdk.transform.process.function.ConcatFunction;
+import org.apache.inlong.sdk.transform.process.function.ExpFunction;
 import org.apache.inlong.sdk.transform.process.function.LnFunction;
+import org.apache.inlong.sdk.transform.process.function.Log10Function;
+import org.apache.inlong.sdk.transform.process.function.Log2Function;
+import org.apache.inlong.sdk.transform.process.function.LogFunction;
 import org.apache.inlong.sdk.transform.process.function.NowFunction;
 import org.apache.inlong.sdk.transform.process.function.PowerFunction;
 import org.apache.inlong.sdk.transform.process.function.SqrtFunction;
@@ -77,6 +81,10 @@ public class OperatorTools {
         functionMap.put("abs", AbsFunction::new);
         functionMap.put("sqrt", SqrtFunction::new);
         functionMap.put("ln", LnFunction::new);
+        functionMap.put("log10", Log10Function::new);
+        functionMap.put("log2", Log2Function::new);
+        functionMap.put("log", LogFunction::new);
+        functionMap.put("exp", ExpFunction::new);
     }
 
     public static ExpressionOperator buildOperator(Expression expr) {
diff --git 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
index fef3d23e1f..b291d2b685 100644
--- 
a/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
+++ 
b/inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/TestTransformArithmeticFunctionsProcessor.java
@@ -61,15 +61,15 @@ public class TestTransformArithmeticFunctionsProcessor {
         // case1: 2^4
         TransformProcessor processor = new TransformProcessor(config);
         List<String> output1 = processor.transform("2|4|6|8", new HashMap<>());
-        Assert.assertTrue(output1.size() == 1);
+        Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=16.0");
         // case2: 2^(-2)
         List<String> output2 = processor.transform("2|-2|6|8", new 
HashMap<>());
-        Assert.assertTrue(output2.size() == 1);
+        Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=0.25");
         // case3: 4^(0.5)
         List<String> output3 = processor.transform("4|0.5|6|8", new 
HashMap<>());
-        Assert.assertTrue(output3.size() == 1);
+        Assert.assertEquals(1, output3.size());
         Assert.assertEquals(output3.get(0), "result=2.0");
     }
 
@@ -80,11 +80,11 @@ public class TestTransformArithmeticFunctionsProcessor {
         // case1: |2|
         TransformProcessor processor = new TransformProcessor(config);
         List<String> output1 = processor.transform("2|4|6|8", new HashMap<>());
-        Assert.assertTrue(output1.size() == 1);
+        Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=2");
         // case2: |-4.25|
         List<String> output2 = processor.transform("-4.25|4|6|8", new 
HashMap<>());
-        Assert.assertTrue(output2.size() == 1);
+        Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=4.25");
     }
 
@@ -95,11 +95,11 @@ public class TestTransformArithmeticFunctionsProcessor {
         // case1: sqrt(9)
         TransformProcessor processor = new TransformProcessor(config);
         List<String> output1 = processor.transform("9|4|6|8", new HashMap<>());
-        Assert.assertTrue(output1.size() == 1);
+        Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=3.0");
         // case2: sqrt(5)
         List<String> output2 = processor.transform("5|4|6|8", new HashMap<>());
-        Assert.assertTrue(output2.size() == 1);
+        Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=2.23606797749979");
     }
 
@@ -110,11 +110,79 @@ public class TestTransformArithmeticFunctionsProcessor {
         // case1: ln(1)
         TransformProcessor processor = new TransformProcessor(config);
         List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
-        Assert.assertTrue(output1.size() == 1);
+        Assert.assertEquals(1, output1.size());
         Assert.assertEquals(output1.get(0), "result=0.0");
         // case2: ln(10)
         List<String> output2 = processor.transform("10|4|6|8", new 
HashMap<>());
-        Assert.assertTrue(output2.size() == 1);
+        Assert.assertEquals(1, output2.size());
         Assert.assertEquals(output2.get(0), "result=2.302585092994046");
     }
+
+    @Test
+    public void testLog10Function() throws Exception {
+        String transformSql = "select log10(numeric1) from source";
+        TransformConfig config = new TransformConfig(csvSource, kvSink, 
transformSql);
+        // case1: log10(1)
+        TransformProcessor processor = new TransformProcessor(config);
+        List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
+        Assert.assertEquals(1, output1.size());
+        Assert.assertEquals(output1.get(0), "result=0.0");
+        // case2: log10(1000)
+        List<String> output2 = processor.transform("1000|4|6|8", new 
HashMap<>());
+        Assert.assertEquals(1, output2.size());
+        Assert.assertEquals(output2.get(0), "result=3.0");
+    }
+
+    @Test
+    public void testLog2Function() throws Exception {
+        String transformSql = "select log2(numeric1) from source";
+        TransformConfig config = new TransformConfig(csvSource, kvSink, 
transformSql);
+        // case1: log2(1)
+        TransformProcessor processor = new TransformProcessor(config);
+        List<String> output1 = processor.transform("1|4|6|8", new HashMap<>());
+        Assert.assertEquals(1, output1.size());
+        Assert.assertEquals(output1.get(0), "result=0.0");
+        // case2: log2(32)
+        List<String> output2 = processor.transform("32|4|6|8", new 
HashMap<>());
+        Assert.assertEquals(1, output2.size());
+        Assert.assertEquals(output2.get(0), "result=5.0");
+    }
+
+    @Test
+    public void testLogFunction() throws Exception {
+        String transformSql1 = "select log(numeric1) from source";
+        TransformConfig config1 = new TransformConfig(csvSource, kvSink, 
transformSql1);
+        // case1: ln(1)
+        TransformProcessor processor1 = new TransformProcessor(config1);
+        List<String> output1 = processor1.transform("1|4|6|8", new 
HashMap<>());
+        Assert.assertEquals(1, output1.size());
+        Assert.assertEquals(output1.get(0), "result=0.0");
+        String transformSql2 = "select log(numeric1, numeric2) from source";
+        TransformConfig config2 = new TransformConfig(csvSource, kvSink, 
transformSql2);
+        // case2: log2(8)
+        TransformProcessor processor2 = new TransformProcessor(config2);
+        List<String> output2 = processor2.transform("2|8|6|8", new 
HashMap<>());
+        Assert.assertEquals(1, output2.size());
+        Assert.assertEquals(output2.get(0), "result=3.0");
+        // case3: log10(100)
+        TransformProcessor processor3 = new TransformProcessor(config2);
+        List<String> output3 = processor3.transform("10|100|6|8", new 
HashMap<>());
+        Assert.assertEquals(1, output3.size());
+        Assert.assertEquals(output3.get(0), "result=2.0");
+    }
+
+    @Test
+    public void testExpFunction() throws Exception {
+        String transformSql = "select exp(numeric1) from source";
+        TransformConfig config = new TransformConfig(csvSource, kvSink, 
transformSql);
+        // case1: e^0
+        TransformProcessor processor = new TransformProcessor(config);
+        List<String> output1 = processor.transform("0|4|6|8", new HashMap<>());
+        Assert.assertEquals(1, output1.size());
+        Assert.assertEquals(output1.get(0), "result=1.0");
+        // case2: e^2
+        List<String> output2 = processor.transform("2|4|6|8", new HashMap<>());
+        Assert.assertEquals(1, output2.size());
+        Assert.assertEquals(output2.get(0), "result=7.38905609893065");
+    }
 }

Reply via email to