diff options
| author | 窦凤虎 <[email protected]> | 2024-04-26 10:38:10 +0000 |
|---|---|---|
| committer | 窦凤虎 <[email protected]> | 2024-04-26 10:38:10 +0000 |
| commit | e2dc8c277af7b60c7ff76047c58266ef816469e7 (patch) | |
| tree | 1d0d4e68e3b3f1a4841691910452f1dcb2fe016d | |
| parent | 61d3a6b07058e12934eb1e1ba848489a8e2736df (diff) | |
| parent | 879bd0ead3a6c886e1f1cc3047518c4c06a69466 (diff) | |
Merge branch 'hotfix/arithmetic-operations' into 'develop'
[GAL-556] hotfix: Eval function supports addition and subtraction operations.
See merge request galaxy/platform/groot-stream!41
4 files changed, 83 insertions, 51 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..5bb924c 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 @@ -79,17 +79,36 @@ public class EvalCodeGenerator implements ExpressionVisitor<String> { ArithmeticOperator operator = expression.getOperator(); String leftTerm = visit(expression.getLeft()); String rightTerm = visit(expression.getRight()); - String name = ctx.addLocalObjectVariable(true); + + // Only Plus + String value1 = ctx.addLocalObjectVariable(true); + String value2 = ctx.addLocalObjectVariable(true); + + String name = ctx.addLocalObjectVariable(false); String code = name + " = "; switch (operator) { case PLUS: - code += String.format("%s + %s", leftTerm, rightTerm); + code += "null;\n"; + + code += String.format("%s = %s;", value1, leftTerm); + code += String.format("%s = %s;", value2, rightTerm); + + code += String.format("if ( (%s instanceof java.lang.String) || (%s instanceof java.lang.String) ) {\n" + + "%s = %s.toString() + %s.toString();\n" + + "}", value1, value2, name, value1, value2); + code += String.format("else if ( (%s instanceof java.lang.Number) && (%s instanceof java.lang.Number) ) {\n" + + "%s = ((java.lang.Number)%s).intValue() + ((java.lang.Number)%s).intValue();\n" + + "}", value1, value2, name, value1, value2); + code += String.format("else {" + + "throw new com.geedgenetworks.core.expressions.InvalidProgramException(" + + "\"Addition operation is not supported, values: [\" + %s + \", \" + %s + \"]\");\n" + + "}\n", value1, value2); 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..01ef9db 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 @@ -1,6 +1,6 @@ package com.geedgenetworks.core.udf.test.eval.codegen; - +import com.geedgenetworks.core.expressions.Calc; import com.geedgenetworks.core.expressions.InvalidProgramException; import com.geedgenetworks.core.expressions.SyntaxErrorException; import com.geedgenetworks.core.expressions.codegen.CalcCodeConvertor; @@ -81,6 +81,7 @@ class CalcCodeConvertorTest { commonC2sPktNum > commonS2cPktNum && commonC2sByteNum > commonS2cByteNum ? commonClientPort : commonServerPort ); + } @Test @@ -116,12 +117,24 @@ 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")); assertThrows(SyntaxErrorException.class, () -> CalcCodeConvertor.convert("2 = 3")); - assertThrows(InvalidProgramException.class, - () -> CalcCodeConvertor.convert("common_client_ip - 10")); + + final Map<String, Object> map = new HashMap<>(origin); + map.put("has_address", true); + Calc convert = CalcCodeConvertor.convert("common_c2s_pkt_num + has_address"); + assertThrows(InvalidProgramException.class, () -> convert.eval(map)); } }
\ No newline at end of file diff --git a/groot-formats/pom.xml b/groot-formats/pom.xml index 3b38eac..7a6295e 100644 --- a/groot-formats/pom.xml +++ b/groot-formats/pom.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>com.geedgenetworks</groupId>
- <artifactId>groot-stream</artifactId>
- <version>${revision}</version>
- </parent>
-
- <artifactId>groot-formats</artifactId>
- <packaging>pom</packaging>
- <name>Groot : Formats :</name>
- <modules>
- <module>format-json</module>
- <module>format-protobuf</module>
- <module>format-msgpack</module>
- <module>format-raw</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>com.geedgenetworks</groupId>
- <artifactId>groot-common</artifactId>
- <version>${revision}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.geedgenetworks</groupId>
- <artifactId>groot-core</artifactId>
- <version>${revision}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.flink</groupId>
- <artifactId>flink-table-api-java-bridge_${scala.version}</artifactId>
- </dependency>
-
- </dependencies>
-
-
+<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.geedgenetworks</groupId> + <artifactId>groot-stream</artifactId> + <version>${revision}</version> + </parent> + + <artifactId>groot-formats</artifactId> + <packaging>pom</packaging> + <name>Groot : Formats :</name> + <modules> + <module>format-json</module> + <module>format-protobuf</module> + <module>format-msgpack</module> + <module>format-raw</module> + </modules> + + <dependencies> + <dependency> + <groupId>com.geedgenetworks</groupId> + <artifactId>groot-common</artifactId> + <version>${revision}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>com.geedgenetworks</groupId> + <artifactId>groot-core</artifactId> + <version>${revision}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.apache.flink</groupId> + <artifactId>flink-table-api-java-bridge_${scala.version}</artifactId> + </dependency> + + </dependencies> + + </project>
\ No newline at end of file @@ -23,7 +23,7 @@ </modules> <properties> - <revision>1.2.3</revision> + <revision>1.2.4</revision> <java.version>11</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>${java.version}</maven.compiler.source> |
