@ -17,14 +17,15 @@
|
||||
|
||||
package org.apache.doris.planner.external.paimon;
|
||||
|
||||
import org.apache.doris.analysis.BinaryPredicate;
|
||||
import org.apache.doris.analysis.CastExpr;
|
||||
import org.apache.doris.analysis.CompoundPredicate;
|
||||
import org.apache.doris.analysis.Expr;
|
||||
import org.apache.doris.analysis.FunctionCallExpr;
|
||||
import org.apache.doris.analysis.LiteralExpr;
|
||||
import org.apache.doris.analysis.SlotRef;
|
||||
import org.apache.doris.thrift.TExprOpcode;
|
||||
|
||||
import org.apache.paimon.data.BinaryString;
|
||||
import org.apache.paimon.predicate.Predicate;
|
||||
import org.apache.paimon.predicate.PredicateBuilder;
|
||||
import org.apache.paimon.types.DataField;
|
||||
@ -84,10 +85,9 @@ public class PaimonPredicateConverter {
|
||||
|
||||
private Predicate binaryExprDesc(Expr dorisExpr) {
|
||||
TExprOpcode opcode = dorisExpr.getOpcode();
|
||||
BinaryPredicate bp = (BinaryPredicate) dorisExpr;
|
||||
// Make sure the col slot is always first
|
||||
SlotRef slotRef = convertDorisExprToSlotRef(bp.getChild(0));
|
||||
LiteralExpr literalExpr = convertDorisExprToLiteralExpr(bp.getChild(1));
|
||||
SlotRef slotRef = convertDorisExprToSlotRef(dorisExpr.getChild(0));
|
||||
LiteralExpr literalExpr = convertDorisExprToLiteralExpr(dorisExpr.getChild(1));
|
||||
if (slotRef == null || literalExpr == null) {
|
||||
return null;
|
||||
}
|
||||
@ -113,6 +113,15 @@ public class PaimonPredicateConverter {
|
||||
return builder.lessOrEqual(idx, value);
|
||||
case LT:
|
||||
return builder.lessThan(idx, value);
|
||||
case INVALID_OPCODE:
|
||||
if (dorisExpr instanceof FunctionCallExpr) {
|
||||
String name = dorisExpr.getExprName().toLowerCase();
|
||||
String s = value.toString();
|
||||
if (name.equals("like") && !s.startsWith("%") && s.endsWith("%")) {
|
||||
return builder.startsWith(idx, BinaryString.fromString(s.substring(0, s.length() - 1)));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user