You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/12/19 16:54:47 UTC

[doris] branch master updated: [feature](nereids) add scalar function is_null_pred and is_not_null_pred (#15163)

This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 81c06e8edc [feature](nereids) add scalar function is_null_pred and is_not_null_pred (#15163)
81c06e8edc is described below

commit 81c06e8edc80558bc6fc9e7dfbd978078710d86a
Author: minghong <mi...@163.com>
AuthorDate: Tue Dec 20 00:54:40 2022 +0800

    [feature](nereids) add scalar function is_null_pred and is_not_null_pred (#15163)
---
 fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4   | 2 ++
 fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4  | 5 ++++-
 .../java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java    | 6 ++++++
 3 files changed, 12 insertions(+), 1 deletion(-)

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 5f2628e656..d16bf96b30 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
@@ -217,6 +217,8 @@ INTERVAL: 'INTERVAL';
 INTO: 'INTO';
 IS: 'IS';
 ISNULL: 'ISNULL';
+IS_NULL_PRED: 'IS_NULL_PRED';
+IS_NOT_NULL_PRED: 'IS_NOT_NULL_PRED';
 ITEMS: 'ITEMS';
 JOIN: 'JOIN';
 KEYS: 'KEYS';
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 8e36202897..9672e651dd 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
@@ -241,7 +241,8 @@ expression
 booleanExpression
     : NOT booleanExpression                                         #logicalNot
     | EXISTS LEFT_PAREN query RIGHT_PAREN                           #exist
-    | ISNULL LEFT_PAREN valueExpression RIGHT_PAREN        #isnull
+    | (ISNULL | IS_NULL_PRED) LEFT_PAREN valueExpression RIGHT_PAREN        #isnull
+    | IS_NOT_NULL_PRED LEFT_PAREN valueExpression RIGHT_PAREN        #is_not_null_pred
     | valueExpression predicate?                                    #predicated
     | left=booleanExpression operator=AND right=booleanExpression   #logicalBinary
     | left=booleanExpression operator=OR right=booleanExpression    #logicalBinary
@@ -478,6 +479,8 @@ ansiNonReserved
     | LAZY
     | LIKE
     | ILIKE
+    | IS_NOT_NULL_PRED
+    | IS_NULL_PRED
     | LIMIT
     | OFFSET
     | LINES
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 7194fccabf..65e1773fe4 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
@@ -47,6 +47,7 @@ import org.apache.doris.nereids.DorisParser.IdentifierListContext;
 import org.apache.doris.nereids.DorisParser.IdentifierSeqContext;
 import org.apache.doris.nereids.DorisParser.IntegerLiteralContext;
 import org.apache.doris.nereids.DorisParser.IntervalContext;
+import org.apache.doris.nereids.DorisParser.Is_not_null_predContext;
 import org.apache.doris.nereids.DorisParser.IsnullContext;
 import org.apache.doris.nereids.DorisParser.JoinCriteriaContext;
 import org.apache.doris.nereids.DorisParser.JoinRelationContext;
@@ -1357,6 +1358,11 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
         return ParserUtils.withOrigin(context, () -> new IsNull(typedVisit(context.valueExpression())));
     }
 
+    @Override
+    public Expression visitIs_not_null_pred(Is_not_null_predContext context) {
+        return ParserUtils.withOrigin(context, () -> new Not(new IsNull(typedVisit(context.valueExpression()))));
+    }
+
     public List<Expression> withInList(PredicateContext ctx) {
         return ctx.expression().stream().map(this::getExpression).collect(ImmutableList.toImmutableList());
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org