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

fanjia 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 eb46c489d9 [Bug] Fix minus constant error in SQLTransform (#6533)
eb46c489d9 is described below

commit eb46c489d965ef95f4c77917a11cf59a720a998e
Author: Marvin <[email protected]>
AuthorDate: Tue Mar 19 17:42:31 2024 +0800

    [Bug] Fix minus constant error in SQLTransform (#6533)
---
 .../test/resources/sql_transform/func_numeric.conf  |  9 ++++++++-
 .../transform/sql/zeta/ZetaSQLFunction.java         | 21 +++++++++++++++++++++
 .../seatunnel/transform/sql/zeta/ZetaSQLType.java   |  4 ++++
 3 files changed, 33 insertions(+), 1 deletion(-)

diff --git 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_numeric.conf
 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_numeric.conf
index e61faa803f..87c25f6a47 100644
--- 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_numeric.conf
+++ 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_numeric.conf
@@ -53,7 +53,7 @@ transform {
   Sql {
     source_table_name = "fake"
     result_table_name = "fake1"
-    query = "select abs(c1) as c1_1, acos(id) as id1, asin(c2) as c2_1, 
atan(c2) as c2_2, cos(c2) as c2_3, cosh(c2) as c2_4, sin(c2) as c2_5, sinh(c2) 
as c2_6, tan(c3/4) as c3_1, tanh(c2) as c2_7, mod(c4, 5) as c4_1, mod(c4, 5.4) 
as c4_2, ceil(c5) as c5_1, exp(c10) as c10_1, floor(c5) as c5_2, ln(c5) as 
c5_3, log(10,c5) as c5_4, log10(c6) as c6_1, radians(c7) as c7_1, sqrt(c8) as 
c8_1, pi() as pi, power(c5,2) as c5_5, rand() as rand, round(c9,2) as c9_1, 
sign(c1) as c1_2, trunc(c9,2) as  [...]
+    query = "select abs(-10.3) as c0_1, abs(c1) as c1_1, acos(id) as id1, 
asin(c2) as c2_1, atan(c2) as c2_2, cos(c2) as c2_3, cosh(c2) as c2_4, sin(c2) 
as c2_5, sinh(c2) as c2_6, tan(c3/4) as c3_1, tanh(c2) as c2_7, mod(c4, 5) as 
c4_1, mod(c4, 5.4) as c4_2, ceil(c5) as c5_1, exp(c10) as c10_1, floor(c5) as 
c5_2, ln(c5) as c5_3, log(10,c5) as c5_4, log10(c6) as c6_1, radians(c7) as 
c7_1, sqrt(c8) as c8_1, pi() as pi, power(c5,2) as c5_5, rand() as rand, 
round(c9,2) as c9_1, sign(c1) as c [...]
   }
 }
 
@@ -62,6 +62,13 @@ sink {
     source_table_name = "fake1"
     rules = {
       field_rules = [
+        {
+          field_name = "c0_1"
+          field_type = "double"
+          field_value = [
+            {equals_to = 10.3}
+          ]
+        },
         {
           field_name = "c1_1"
           field_type = "double"
diff --git 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
index 30794af42f..7a8b83d4db 100644
--- 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
+++ 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java
@@ -42,6 +42,7 @@ import net.sf.jsqlparser.expression.Function;
 import net.sf.jsqlparser.expression.LongValue;
 import net.sf.jsqlparser.expression.NullValue;
 import net.sf.jsqlparser.expression.Parenthesis;
+import net.sf.jsqlparser.expression.SignedExpression;
 import net.sf.jsqlparser.expression.StringValue;
 import net.sf.jsqlparser.expression.TimeKeyExpression;
 import net.sf.jsqlparser.expression.WhenClause;
@@ -187,6 +188,26 @@ public class ZetaSQLFunction {
         if (expression instanceof NullValue) {
             return null;
         }
+        if (expression instanceof SignedExpression) {
+            SignedExpression signedExpression = (SignedExpression) expression;
+            if (signedExpression.getSign() == '-') {
+                Object value = 
computeForValue(signedExpression.getExpression(), inputFields);
+                if (value instanceof Integer) {
+                    return -((Integer) value);
+                }
+                if (value instanceof Long) {
+                    return -((Long) value);
+                }
+                if (value instanceof Double) {
+                    return -((Double) value);
+                }
+                if (value instanceof Number) {
+                    return -((Number) value).doubleValue();
+                }
+            } else {
+                return computeForValue(signedExpression, inputFields);
+            }
+        }
         if (expression instanceof DoubleValue) {
             return ((DoubleValue) expression).getValue();
         }
diff --git 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
index 635ce3274f..4529dfffcc 100644
--- 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
+++ 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java
@@ -39,6 +39,7 @@ import net.sf.jsqlparser.expression.Function;
 import net.sf.jsqlparser.expression.LongValue;
 import net.sf.jsqlparser.expression.NullValue;
 import net.sf.jsqlparser.expression.Parenthesis;
+import net.sf.jsqlparser.expression.SignedExpression;
 import net.sf.jsqlparser.expression.StringValue;
 import net.sf.jsqlparser.expression.TimeKeyExpression;
 import net.sf.jsqlparser.expression.WhenClause;
@@ -88,6 +89,9 @@ public class ZetaSQLType {
         if (expression instanceof NullValue) {
             return BasicType.VOID_TYPE;
         }
+        if (expression instanceof SignedExpression) {
+            return getExpressionType(((SignedExpression) 
expression).getExpression());
+        }
         if (expression instanceof DoubleValue) {
             return BasicType.DOUBLE_TYPE;
         }

Reply via email to