[Enhancement](functions) change some nullable mode and clear some smooth upgrade (#25334)

This commit is contained in:
zclllyybb
2023-10-16 19:50:17 +08:00
committed by GitHub
parent 7fd876f3a2
commit f9df3bae61
24 changed files with 152 additions and 834 deletions

View File

@ -2387,6 +2387,12 @@ public abstract class Expr extends TreeNode<Expr> implements ParseNode, Cloneabl
}
return false;
}
if (fn.functionName().equalsIgnoreCase("array_contains") || fn.functionName().equalsIgnoreCase("array_position")
|| fn.functionName().equalsIgnoreCase("countequal")
|| fn.functionName().equalsIgnoreCase("map_contains_key")
|| fn.functionName().equalsIgnoreCase("map_contains_value")) {
return children.get(0).isNullable();
}
return true;
}

View File

@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@ -37,7 +36,7 @@ import java.util.List;
* ScalarFunction 'array_contains'. This class is generated by GenerateFunction.
*/
public class ArrayContains extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BooleanType.INSTANCE)
@ -60,6 +59,11 @@ public class ArrayContains extends ScalarFunction
return new ArrayContains(children.get(0), children.get(1));
}
@Override
public boolean nullable() {
return child(0).nullable();
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitArrayContains(this, context);

View File

@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@ -37,7 +36,7 @@ import java.util.List;
* ScalarFunction 'array_position'. This class is generated by GenerateFunction.
*/
public class ArrayPosition extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@ -60,6 +59,11 @@ public class ArrayPosition extends ScalarFunction
return new ArrayPosition(children.get(0), children.get(1));
}
@Override
public boolean nullable() {
return child(0).nullable();
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitArrayPosition(this, context);

View File

@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@ -37,7 +36,7 @@ import java.util.List;
* ScalarFunction 'countequal'. This class is generated by GenerateFunction.
*/
public class CountEqual extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE)
@ -60,6 +59,11 @@ public class CountEqual extends ScalarFunction
return new CountEqual(children.get(0), children.get(1));
}
@Override
public boolean nullable() {
return child(0).nullable();
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitCountEqual(this, context);

View File

@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@ -37,7 +36,7 @@ import java.util.List;
* ScalarFunction 'map_contains_key'. This class is generated by GenerateFunction.
*/
public class MapContainsKey extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BooleanType.INSTANCE)
@ -61,6 +60,11 @@ public class MapContainsKey extends ScalarFunction
return new MapContainsKey(children.get(0), children.get(1));
}
@Override
public boolean nullable() {
return child(0).nullable();
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMapContainsKey(this, context);

View File

@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
@ -37,7 +36,7 @@ import java.util.List;
* ScalarFunction 'map_contains_value'. This class is generated by GenerateFunction.
*/
public class MapContainsValue extends ScalarFunction
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BooleanType.INSTANCE)
@ -61,6 +60,11 @@ public class MapContainsValue extends ScalarFunction
return new MapContainsValue(children.get(0), children.get(1));
}
@Override
public boolean nullable() {
return child(0).nullable();
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitMapContainsValue(this, context);