[improvement](nereids) support convert_tz in partition prune (#40047) (#40127)

cherry-pick #40047 to branch-2.1
This commit is contained in:
feiniaofeiafei
2024-08-30 13:39:37 +08:00
committed by GitHub
parent 3ac8347e3d
commit 32a32808a7
3 changed files with 131 additions and 1 deletions

View File

@ -43,6 +43,7 @@ import org.apache.doris.nereids.trees.expressions.NullSafeEqual;
import org.apache.doris.nereids.trees.expressions.Or;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.functions.Monotonic;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ConvertTz;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Date;
import org.apache.doris.nereids.trees.expressions.functions.scalar.DateTrunc;
import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
@ -638,6 +639,19 @@ public class OneRangePartitionEvaluator
return computeMonotonicFunctionRange(result);
}
@Override
public EvaluateRangeResult visitConvertTz(ConvertTz convertTz, EvaluateRangeInput context) {
EvaluateRangeResult result = super.visitConvertTz(convertTz, context);
if (!(result.result instanceof ConvertTz)) {
return result;
}
Expression converTzChild = convertTz.child(0);
if (partitionSlotContainsNull.containsKey(converTzChild)) {
partitionSlotContainsNull.put(convertTz, true);
}
return computeMonotonicFunctionRange(result);
}
private boolean isPartitionSlot(Slot slot) {
return slotToType.containsKey(slot);
}

View File

@ -22,6 +22,8 @@ import org.apache.doris.nereids.trees.expressions.Cast;
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.functions.Monotonic;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
import org.apache.doris.nereids.trees.expressions.literal.StringLikeLiteral;
import org.apache.doris.nereids.trees.expressions.shape.TernaryExpression;
@ -39,7 +41,7 @@ import java.util.List;
* ScalarFunction 'convert_tz'. This class is generated by GenerateFunction.
*/
public class ConvertTz extends ScalarFunction
implements TernaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
implements TernaryExpression, ExplicitlyCastableSignature, AlwaysNullable, Monotonic {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
@ -84,4 +86,19 @@ public class ConvertTz extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitConvertTz(this, context);
}
@Override
public boolean isPositive() {
return true;
}
@Override
public int getMonotonicFunctionChildIndex() {
return 0;
}
@Override
public Expression withConstantArgs(Literal literal) {
return new ConvertTz(literal, child(1), child(2));
}
}