Skip to content

Commit eb46c48

Browse files
authored
[Bug] Fix minus constant error in SQLTransform (#6533)
1 parent b0abbd2 commit eb46c48

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

Diff for: seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-2/src/test/resources/sql_transform/func_numeric.conf

+8-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ transform {
5353
Sql {
5454
source_table_name = "fake"
5555
result_table_name = "fake1"
56-
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 c9_2 from fake"
56+
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 c1_2, trunc(c9,2) as c9_2 from fake"
5757
}
5858
}
5959

@@ -62,6 +62,13 @@ sink {
6262
source_table_name = "fake1"
6363
rules = {
6464
field_rules = [
65+
{
66+
field_name = "c0_1"
67+
field_type = "double"
68+
field_value = [
69+
{equals_to = 10.3}
70+
]
71+
},
6572
{
6673
field_name = "c1_1"
6774
field_type = "double"

Diff for: seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFunction.java

+21
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import net.sf.jsqlparser.expression.LongValue;
4343
import net.sf.jsqlparser.expression.NullValue;
4444
import net.sf.jsqlparser.expression.Parenthesis;
45+
import net.sf.jsqlparser.expression.SignedExpression;
4546
import net.sf.jsqlparser.expression.StringValue;
4647
import net.sf.jsqlparser.expression.TimeKeyExpression;
4748
import net.sf.jsqlparser.expression.WhenClause;
@@ -187,6 +188,26 @@ public Object computeForValue(Expression expression, Object[] inputFields) {
187188
if (expression instanceof NullValue) {
188189
return null;
189190
}
191+
if (expression instanceof SignedExpression) {
192+
SignedExpression signedExpression = (SignedExpression) expression;
193+
if (signedExpression.getSign() == '-') {
194+
Object value = computeForValue(signedExpression.getExpression(), inputFields);
195+
if (value instanceof Integer) {
196+
return -((Integer) value);
197+
}
198+
if (value instanceof Long) {
199+
return -((Long) value);
200+
}
201+
if (value instanceof Double) {
202+
return -((Double) value);
203+
}
204+
if (value instanceof Number) {
205+
return -((Number) value).doubleValue();
206+
}
207+
} else {
208+
return computeForValue(signedExpression, inputFields);
209+
}
210+
}
190211
if (expression instanceof DoubleValue) {
191212
return ((DoubleValue) expression).getValue();
192213
}

Diff for: seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLType.java

+4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import net.sf.jsqlparser.expression.LongValue;
4040
import net.sf.jsqlparser.expression.NullValue;
4141
import net.sf.jsqlparser.expression.Parenthesis;
42+
import net.sf.jsqlparser.expression.SignedExpression;
4243
import net.sf.jsqlparser.expression.StringValue;
4344
import net.sf.jsqlparser.expression.TimeKeyExpression;
4445
import net.sf.jsqlparser.expression.WhenClause;
@@ -88,6 +89,9 @@ public SeaTunnelDataType<?> getExpressionType(Expression expression) {
8889
if (expression instanceof NullValue) {
8990
return BasicType.VOID_TYPE;
9091
}
92+
if (expression instanceof SignedExpression) {
93+
return getExpressionType(((SignedExpression) expression).getExpression());
94+
}
9195
if (expression instanceof DoubleValue) {
9296
return BasicType.DOUBLE_TYPE;
9397
}

0 commit comments

Comments
 (0)