diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 index 490fa43cf9a2fc..4eed98d82139b2 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 @@ -613,6 +613,7 @@ SUBTRACT: '-'; ASTERISK: '*'; SLASH: '/'; MOD: '%'; +MOD_ALT: 'MOD'; TILDE: '~'; AMPERSAND: '&'; LOGICALAND: '&&'; diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index 8bf46106d1507d..42169c902895ef 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -1599,7 +1599,7 @@ valueExpression | operator=(SUBTRACT | PLUS | TILDE) valueExpression #arithmeticUnary // split arithmeticBinary from 1 to 5 due to they have different operator precedence | left=valueExpression operator=HAT right=valueExpression #arithmeticBinary - | left=valueExpression operator=(ASTERISK | SLASH | MOD | DIV) right=valueExpression #arithmeticBinary + | left=valueExpression operator=(ASTERISK | SLASH | MOD | MOD_ALT | DIV) right=valueExpression #arithmeticBinary | left=valueExpression operator=(PLUS | SUBTRACT) right=valueExpression #arithmeticBinary | left=valueExpression operator=AMPERSAND right=valueExpression #arithmeticBinary | left=valueExpression operator=PIPE right=valueExpression #arithmeticBinary @@ -2104,6 +2104,7 @@ nonReserved | MIN | MINUTE | MINUTES + | MOD_ALT | MODIFY | MONTH | MTMV diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 0386fa6dbfc32a..1a9129fff0667b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -2960,6 +2960,8 @@ public Expression visitArithmeticBinary(ArithmeticBinaryContext ctx) { return new Divide(left, right); case DorisParser.MOD: return new Mod(left, right); + case DorisParser.MOD_ALT: + return new Mod(left, right); case DorisParser.PLUS: return new Add(left, right); case DorisParser.SUBTRACT: diff --git a/regression-test/data/nereids_p0/operator/test_arithmetic_operators.out b/regression-test/data/nereids_p0/operator/test_arithmetic_operators.out index 218d2376dddbcc..8e841fe2e54671 100644 --- a/regression-test/data/nereids_p0/operator/test_arithmetic_operators.out +++ b/regression-test/data/nereids_p0/operator/test_arithmetic_operators.out @@ -290,3 +290,13 @@ \N \N \N \N \N \N +-- !arith_op30 -- +0.123 0.1 0.3330001831054688 +1.500 0.2680000000000007 0.25 +0.325 1 0 + +-- !arith_op31 -- +0.123 0.1 0.3330001831054688 +1.500 0.2680000000000007 0.25 +0.325 1 0 + diff --git a/regression-test/suites/nereids_p0/operator/test_arithmetic_operators.groovy b/regression-test/suites/nereids_p0/operator/test_arithmetic_operators.groovy index 1cec22cbe4cbcb..3fbd15bd3bb60a 100644 --- a/regression-test/suites/nereids_p0/operator/test_arithmetic_operators.groovy +++ b/regression-test/suites/nereids_p0/operator/test_arithmetic_operators.groovy @@ -76,4 +76,7 @@ suite("test_arithmetic_operators", "query,p0") { qt_arith_op27 "select -10.2 / 0.0, -10.2 / 0, -10.2 % 0.0, -10.2 % 0" qt_arith_op28 "select k5 / 0, k8 / 0, k9 / 0 from ${tableName} order by k1,k2,k3,k4" qt_arith_op29 "select k5 % 0, k8 % 0, k9 % 0 from ${tableName} order by k1,k2,k3,k4" + + qt_arith_op30 "select k5 MOD 3, k8 mod 2, k9 Mod 1 from ${tableName} order by k1,k2,k3,k4" + qt_arith_op31 "select k5 MOD 3, MOD(k8, 2), (k9 MOD 1) as MOD from ${tableName} order by k1,k2,k3,k4" }