diff options
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")); |
