branch-2.1: [fix](planner) fix core when select and filter by slot in old planner #46541 (#46638)

Cherry-picked from #46541

Co-authored-by: Lijia Liu <liutang123@yeah.net>
Co-authored-by: liutang123 <liulijia@gmail.com>
This commit is contained in:
github-actions[bot]
2025-01-08 22:32:35 +08:00
committed by GitHub
parent b99ef07a3b
commit ebb425dd84

View File

@ -33,6 +33,7 @@ import org.apache.doris.analysis.TupleDescriptor;
import org.apache.doris.analysis.TupleId;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.Type;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.NotImplementedException;
import org.apache.doris.common.TreeNode;
@ -51,6 +52,8 @@ import com.google.common.base.Predicates;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.Collection;
@ -77,6 +80,7 @@ import java.util.stream.Collectors;
* its children (= are bound by tupleIds).
*/
public abstract class PlanNode extends TreeNode<PlanNode> implements PlanStats {
private static final Logger LOG = LogManager.getLogger(PlanNode.class);
protected String planNodeName;
@ -195,6 +199,7 @@ public abstract class PlanNode extends TreeNode<PlanNode> implements PlanStats {
this.tblRefIds = Lists.newArrayList(node.tblRefIds);
this.nullableTupleIds = Sets.newHashSet(node.nullableTupleIds);
this.conjuncts = Expr.cloneList(node.conjuncts, null);
this.cardinality = -1;
this.compactData = node.compactData;
this.planNodeName = "V" + planNodeName;
@ -792,6 +797,21 @@ public abstract class PlanNode extends TreeNode<PlanNode> implements PlanStats {
public void init(Analyzer analyzer) throws UserException {
assignConjuncts(analyzer);
createDefaultSmap(analyzer);
castConjuncts();
}
private void castConjuncts() throws AnalysisException {
for (int i = 0; i < conjuncts.size(); ++i) {
Expr expr = conjuncts.get(i);
if (!expr.getType().isBoolean()) {
try {
conjuncts.set(i, expr.castTo(Type.BOOLEAN));
} catch (AnalysisException e) {
LOG.warn("{} is not boolean and can not be cast to boolean", expr.toSql(), e);
throw new AnalysisException("conjuncts " + expr.toSql() + " is not boolean");
}
}
}
}
/**