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;
}