|
35 | 35 | import org.apache.doris.nereids.trees.plans.logical.LogicalProject; |
36 | 36 | import org.apache.doris.qe.ConnectContext; |
37 | 37 | import org.apache.doris.qe.OriginStatement; |
| 38 | +import org.apache.doris.qe.SessionVariable; |
38 | 39 |
|
39 | 40 | import com.google.common.base.Strings; |
40 | 41 | import com.google.common.collect.ImmutableList; |
|
50 | 51 | * relation util |
51 | 52 | */ |
52 | 53 | public class RelationUtil { |
| 54 | + private static final String SYNC_MV_PLANER_DISABLE_RULES = "OLAP_SCAN_PARTITION_PRUNE, PRUNE_EMPTY_PARTITION, " |
| 55 | + + "ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, HAVING_TO_FILTER, ELIMINATE_GROUP_BY, SIMPLIFY_AGG_GROUP_BY, " |
| 56 | + + "MERGE_PERCENTILE_TO_ARRAY, VARIANT_SUB_PATH_PRUNING, INFER_PREDICATES, INFER_AGG_NOT_NULL, " |
| 57 | + + "INFER_SET_OPERATOR_DISTINCT, INFER_FILTER_NOT_NULL, INFER_JOIN_NOT_NULL, MAX_MIN_FILTER_PUSH_DOWN, " |
| 58 | + + "ELIMINATE_SORT, ELIMINATE_AGGREGATE, ELIMINATE_LIMIT, ELIMINATE_SEMI_JOIN, ELIMINATE_NOT_NULL, " |
| 59 | + + "ELIMINATE_JOIN_BY_UK, ELIMINATE_JOIN_BY_FK, ELIMINATE_GROUP_BY_KEY, ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, " |
| 60 | + + "ELIMINATE_FILTER_GROUP_BY_KEY"; |
53 | 61 |
|
54 | 62 | /** |
55 | 63 | * get table qualifier |
@@ -138,15 +146,29 @@ public static Set<String> getMvUsedColumnNames(MaterializedIndexMeta meta) { |
138 | 146 | Optional<String> querySql = new NereidsParser().parseForSyncMv(createMvSql); |
139 | 147 | if (querySql.isPresent()) { |
140 | 148 | LogicalPlan unboundMvPlan = new NereidsParser().parseSingle(querySql.get()); |
141 | | - StatementContext statementContext = new StatementContext(ConnectContext.get(), |
| 149 | + ConnectContext connectContext = ConnectContext.get(); |
| 150 | + StatementContext statementContext = new StatementContext(connectContext, |
142 | 151 | new OriginStatement(querySql.get(), 0)); |
143 | 152 | NereidsPlanner planner = new NereidsPlanner(statementContext); |
144 | 153 | if (statementContext.getConnectContext().getStatementContext() == null) { |
145 | 154 | statementContext.getConnectContext().setStatementContext(statementContext); |
146 | 155 | } |
147 | | - planner.planWithLock(unboundMvPlan, PhysicalProperties.ANY, ExplainCommand.ExplainLevel.REWRITTEN_PLAN); |
148 | | - LogicalPlan logicalPlan = (LogicalPlan) planner.getCascadesContext().getRewritePlan(); |
149 | | - |
| 156 | + Set<String> tempDisableRules = connectContext.getSessionVariable().getDisableNereidsRuleNames(); |
| 157 | + connectContext.getSessionVariable().setDisableNereidsRules(SYNC_MV_PLANER_DISABLE_RULES); |
| 158 | + connectContext.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES); |
| 159 | + LogicalPlan logicalPlan; |
| 160 | + try { |
| 161 | + // disable rbo sync mv rewrite |
| 162 | + connectContext.getSessionVariable().setVarOnce(SessionVariable.ENABLE_SYNC_MV_COST_BASED_REWRITE, "true"); |
| 163 | + // disable constant fold |
| 164 | + connectContext.getSessionVariable().setVarOnce(SessionVariable.DEBUG_SKIP_FOLD_CONSTANT, "true"); |
| 165 | + planner.planWithLock(unboundMvPlan, PhysicalProperties.ANY, ExplainCommand.ExplainLevel.REWRITTEN_PLAN); |
| 166 | + logicalPlan = (LogicalPlan) planner.getCascadesContext().getRewritePlan(); |
| 167 | + } finally { |
| 168 | + // after operate, roll back the disable rules |
| 169 | + connectContext.getSessionVariable().setDisableNereidsRules(String.join(",", tempDisableRules)); |
| 170 | + connectContext.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES); |
| 171 | + } |
150 | 172 | Map<Boolean, List<Object>> partitionedPlan = logicalPlan |
151 | 173 | .collect(plan -> true) |
152 | 174 | .stream() |
|
0 commit comments