Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1634,8 +1634,6 @@ lambdaExpression
booleanExpression
: LOGICALNOT booleanExpression #logicalNot
| EXISTS LEFT_PAREN query RIGHT_PAREN #exist
| (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
| NOT booleanExpression #logicalNot
| left=booleanExpression operator=(AND | LOGICALAND) right=booleanExpression #logicalBinary
Expand Down Expand Up @@ -1689,8 +1687,8 @@ primaryExpression
| CASE whenClause+ (ELSE elseExpression=expression)? END #searchedCase
| CASE value=expression whenClause+ (ELSE elseExpression=expression)? END #simpleCase
| name=CAST LEFT_PAREN expression AS castDataType RIGHT_PAREN #cast
| name=TRY_CAST LEFT_PAREN expression AS castDataType RIGHT_PAREN #tryCast
| DEFAULT LEFT_PAREN qualifiedName RIGHT_PAREN #defaultValue
| name=TRY_CAST LEFT_PAREN expression AS castDataType RIGHT_PAREN #tryCast
| DEFAULT LEFT_PAREN qualifiedName RIGHT_PAREN #defaultValue
| constant #constantDefault
| interval #intervalLiteral
| ASTERISK (exceptOrReplace)* #star
Expand All @@ -1712,6 +1710,8 @@ primaryExpression
| (SUBSTR | SUBSTRING | MID) LEFT_PAREN
expression FROM expression (FOR expression)? RIGHT_PAREN #substring
| POSITION LEFT_PAREN expression IN expression RIGHT_PAREN #position
| (ISNULL | IS_NULL_PRED) LEFT_PAREN expression RIGHT_PAREN #isnull
| IS_NOT_NULL_PRED LEFT_PAREN expression RIGHT_PAREN #is_not_null_pred
| functionCallExpression #functionCall
| value=primaryExpression LEFT_BRACKET index=valueExpression RIGHT_BRACKET #elementAt
| value=primaryExpression LEFT_BRACKET begin=valueExpression
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5138,12 +5138,12 @@ public Expression visitExist(ExistContext context) {

@Override
public Expression visitIsnull(IsnullContext context) {
return ParserUtils.withOrigin(context, () -> new IsNull(typedVisit(context.valueExpression())));
return ParserUtils.withOrigin(context, () -> new IsNull(typedVisit(context.expression())));
}

@Override
public Expression visitIs_not_null_pred(Is_not_null_predContext context) {
return ParserUtils.withOrigin(context, () -> new Not(new IsNull(typedVisit(context.valueExpression()))));
return ParserUtils.withOrigin(context, () -> new Not(new IsNull(typedVisit(context.expression()))));
}

public List<Expression> withInList(PredicateContext ctx) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@
import org.apache.doris.nereids.exceptions.SyntaxParseException;
import org.apache.doris.nereids.glue.LogicalPlanAdapter;
import org.apache.doris.nereids.trees.expressions.Cast;
import org.apache.doris.nereids.trees.expressions.EqualTo;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.IsNull;
import org.apache.doris.nereids.trees.expressions.Not;
import org.apache.doris.nereids.trees.expressions.OrderExpression;
import org.apache.doris.nereids.trees.expressions.functions.generator.Unnest;
import org.apache.doris.nereids.trees.expressions.literal.DecimalLiteral;
Expand Down Expand Up @@ -1631,4 +1634,25 @@ public void testUpdateWithOrderByAndLimit() {
plan = nereidsParser.parseSingle(sql);
Assertions.assertInstanceOf(UpdateCommand.class, plan);
}

@Test
public void testIsNullAndIsNotNullExpression() {
NereidsParser nereidsParser = new NereidsParser();
String sql = "ISNULL(X) = 1";
Expression expression = nereidsParser.parseExpression(sql);

Assertions.assertInstanceOf(EqualTo.class, expression);
Assertions.assertInstanceOf(IsNull.class, expression.child(0));

sql = "IS_NULL_PRED(X) = 1";
expression = nereidsParser.parseExpression(sql);
Assertions.assertInstanceOf(EqualTo.class, expression);
Assertions.assertInstanceOf(IsNull.class, expression.child(0));

sql = "IS_NOT_NULL_PRED(X) = 1";
expression = nereidsParser.parseExpression(sql);
Assertions.assertInstanceOf(EqualTo.class, expression);
Assertions.assertInstanceOf(Not.class, expression.child(0));
Assertions.assertInstanceOf(IsNull.class, expression.child(0).child(0));
}
}
Loading