summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"));