Cherry-picked from #46541 Co-authored-by: Lijia Liu <liutang123@yeah.net> Co-authored-by: liutang123 <liulijia@gmail.com>
This commit is contained in:
committed by
GitHub
parent
b99ef07a3b
commit
ebb425dd84
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user