diff options
| author | chaochaoc <[email protected]> | 2024-04-02 14:29:45 +0800 |
|---|---|---|
| committer | chaochaoc <[email protected]> | 2024-04-02 14:32:38 +0800 |
| commit | fea7c7a8245b334734e9b8f6b60f44383ead338d (patch) | |
| tree | 892b7fb76db7a32c8d1a629e46338d23fc51dc26 | |
| parent | fd2bf1af7dfc965323281672e9ec88ce0019f571 (diff) | |
[CN-1617] fix: 'EVAL' function bitwise operation type conversion errorfeature/eval-func-enhance
2 files changed, 13 insertions, 4 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 2109bb3..bb6b826 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 @@ -98,16 +98,16 @@ public class EvalCodeGenerator implements ExpressionVisitor<String> { code += String.format("%s / %s", leftTerm, rightTerm); break; case LEFT_SHIFT: - code += String.format("%s.intValue() << %s.intValue()", leftTerm, rightTerm); + code += String.format("((java.lang.Integer)%s).intValue() << ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm); break; case RIGHT_SHIFT: - code += String.format("%s.intValue() >> %s.intValue()", leftTerm, rightTerm); + code += String.format("((java.lang.Integer)%s).intValue() >> ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm); break; case BITWISE_AND: - code += String.format("%s.intValue() & %s.intValue()", leftTerm, rightTerm); + code += String.format("((java.lang.Integer)%s).intValue() & ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm); break; case BITWISE_OR: - code += String.format("%s.intValue() | %s.intValue()", leftTerm, rightTerm); + code += String.format("((java.lang.Integer)%s).intValue() | ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm); break; } ctx.addEvalCodeStatements(code + ";"); 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 4826ca0..8572db2 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 @@ -104,6 +104,15 @@ class CalcCodeConvertorTest { 2, CalcCodeConvertor.convert("5 / 2").eval(map)); assertEquals( 2, CalcCodeConvertor.convert("5 % 3").eval(map)); + + + final Map<String, Object> map1 = new HashMap<>(); + map1.put("flags", 8); + + assertEquals("B", + CalcCodeConvertor.convert(" flags & 8 == 9 ? 'A' : 'B'").eval(map1)); + assertEquals("A", + CalcCodeConvertor.convert(" 5 | flags == 13 ? 'A' : 'B'").eval(map1)); } @Test |
