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 a38a56c160..87a452b699 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 @@ -215,6 +215,7 @@ INTERSECT: 'INTERSECT'; INTERVAL: 'INTERVAL'; INTO: 'INTO'; IS: 'IS'; +ISNULL: 'ISNULL'; 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 a5574ec63c..19543bce74 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,6 +241,7 @@ expression booleanExpression : NOT booleanExpression #logicalNot | EXISTS LEFT_PAREN query RIGHT_PAREN #exist + | ISNULL LEFT_PAREN valueExpression RIGHT_PAREN #isnull | valueExpression predicate? #predicated | left=booleanExpression operator=AND right=booleanExpression #logicalBinary | left=booleanExpression operator=OR right=booleanExpression #logicalBinary @@ -469,6 +470,7 @@ ansiNonReserved | INPUTFORMAT | INSERT | INTERVAL + | ISNULL | ITEMS | KEYS | LAST 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 300784cdff..f824f0e875 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 @@ -48,6 +48,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.IsnullContext; import org.apache.doris.nereids.DorisParser.JoinCriteriaContext; import org.apache.doris.nereids.DorisParser.JoinRelationContext; import org.apache.doris.nereids.DorisParser.LimitClauseContext; @@ -1329,6 +1330,11 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor { return ParserUtils.withOrigin(context, () -> new Exists(typedVisit(context.query()), false)); } + @Override + public Expression visitIsnull(IsnullContext context) { + return ParserUtils.withOrigin(context, () -> new IsNull(typedVisit(context.valueExpression()))); + } + public List withInList(PredicateContext ctx) { return ctx.expression().stream().map(this::getExpression).collect(ImmutableList.toImmutableList()); }