From 67c026bb3cdff2c23074b64091cedd88261adcaf Mon Sep 17 00:00:00 2001 From: chaochaoc <13051077615@126.com> Date: Thu, 25 Apr 2024 15:21:38 +0800 Subject: [GAL-556] feat: Eval function impl addition and subtraction operations on reference fields --- .../core/expressions/codegen/EvalCodeGenerator.java | 4 ++-- .../core/udf/test/eval/codegen/CalcCodeConvertorTest.java | 9 +++++++++ 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 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 @@ -115,6 +115,15 @@ class CalcCodeConvertorTest { CalcCodeConvertor.convert(" 5 | flags == 13 ? 'A' : 'B'").eval(map1)); } + @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, -- cgit v1.2.3