[feature](nereids) add scalar function is_null_pred and is_not_null_pred (#15163)

This commit is contained in:
minghong
2022-12-20 00:54:40 +08:00
committed by GitHub
parent 918698151a
commit 81c06e8edc
3 changed files with 12 additions and 1 deletions

View File

@ -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';

View File

@ -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

View File

@ -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());
}