## Proposed changes pick from master #40532 <!--Describe your changes.-->
This commit is contained in:
@ -24,6 +24,7 @@ import org.apache.doris.nereids.rules.RuleType;
|
||||
import org.apache.doris.nereids.trees.expressions.Alias;
|
||||
import org.apache.doris.nereids.trees.expressions.ExprId;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.Match;
|
||||
import org.apache.doris.nereids.trees.expressions.NamedExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.Slot;
|
||||
import org.apache.doris.nereids.trees.expressions.SlotNotFromChildren;
|
||||
@ -38,6 +39,9 @@ import org.apache.doris.nereids.trees.expressions.functions.window.WindowFunctio
|
||||
import org.apache.doris.nereids.trees.plans.Plan;
|
||||
import org.apache.doris.nereids.trees.plans.algebra.Generate;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalDeferMaterializeOlapScan;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalSort;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalWindow;
|
||||
@ -60,6 +64,7 @@ public class CheckAfterRewrite extends OneAnalysisRuleFactory {
|
||||
checkAllSlotReferenceFromChildren(plan);
|
||||
checkUnexpectedExpression(plan);
|
||||
checkMetricTypeIsUsedCorrectly(plan);
|
||||
checkMatchIsUsedCorrectly(plan);
|
||||
return null;
|
||||
}).toRule(RuleType.CHECK_ANALYSIS);
|
||||
}
|
||||
@ -176,4 +181,19 @@ public class CheckAfterRewrite extends OneAnalysisRuleFactory {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void checkMatchIsUsedCorrectly(Plan plan) {
|
||||
for (Expression expression : plan.getExpressions()) {
|
||||
if (expression instanceof Match) {
|
||||
if (plan instanceof LogicalFilter && (plan.child(0) instanceof LogicalOlapScan
|
||||
|| plan.child(0) instanceof LogicalDeferMaterializeOlapScan)) {
|
||||
return;
|
||||
} else {
|
||||
throw new AnalysisException(String.format(
|
||||
"Not support match in %s in plan: %s, only support in olapScan filter",
|
||||
plan.child(0), plan));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user