summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchaochaoc <[email protected]>2024-04-25 15:21:38 +0800
committerchaochaoc <[email protected]>2024-04-25 15:21:38 +0800
commit67c026bb3cdff2c23074b64091cedd88261adcaf (patch)
treedd8174fbbb9da8c715c272f2506d47ba5c88f15a
parentfe9780b220799ef4622dfc966579f89b3eea91d6 (diff)
[GAL-556] feat: Eval function impl addition and subtraction operations on reference fields
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java4
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java9
2 files changed, 11 insertions, 2 deletions
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java b/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
index bb6b826..69325ef 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
@@ -83,13 +83,13 @@ public class EvalCodeGenerator implements ExpressionVisitor<String> {
String code = name + " = ";
switch (operator) {
case PLUS:
- code += String.format("%s + %s", leftTerm, rightTerm);
+ code += String.format("((java.lang.Number)%s).intValue() + ((java.lang.Number)%s).intValue()", leftTerm, rightTerm);
break;
case ASTERISK:
code += String.format("%s * %s", leftTerm, rightTerm);
break;
case MINUS:
- code += String.format("%s - %s", leftTerm, rightTerm);
+ code += String.format("((java.lang.Number)%s).intValue() - ((java.lang.Number)%s).intValue()", leftTerm, rightTerm);
break;
case PERCENT:
code += leftTerm + " % " + rightTerm;
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
index 8572db2..835ab8d 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
@@ -116,6 +116,15 @@ class CalcCodeConvertorTest {
}
@Test
+ public void testFieldArithmeticExpression() throws Exception {
+ assertEquals(1,
+ CalcCodeConvertor.convert("common_c2s_pkt_num - common_s2c_pkt_num").eval(origin));
+
+ assertEquals(17, CalcCodeConvertor.convert("common_c2s_pkt_num + 10 + 1D").eval(origin));
+
+ }
+
+ @Test
public void testError() {
assertThrows(SyntaxErrorException.class,
() -> CalcCodeConvertor.convert("common_c2s_pkt_num > common_s2c_pkt_num"));