morrySnow commented on code in PR #38527: URL: https://github.com/apache/doris/pull/38527#discussion_r1697824103
########## fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java: ########## @@ -224,35 +223,20 @@ public static List<StructInfo> extractStructInfo(Plan plan, Plan originalPlan, C * when query rewrite, because one plan may hit the materialized view repeatedly and the mv scan output * should be different */ - public static Plan generateMvScanPlan(MTMV materializedView, CascadesContext cascadesContext) { + public static Plan generateMvScanPlan(OlapTable table, long indexId, + List<Long> partitionIds, + PreAggStatus preAggStatus, + CascadesContext cascadesContext) { return new LogicalOlapScan( cascadesContext.getStatementContext().getNextRelationId(), - materializedView, - materializedView.getFullQualifiers(), + table, + ImmutableList.of(table.getQualifiedDbName()), ImmutableList.of(), - materializedView.getPartitionIds(), - materializedView.getBaseIndexId(), - PreAggStatus.on(), - ImmutableList.of(), - // this must be empty, or it will be used to sample - ImmutableList.of(), - Optional.empty()); - } - - /** - * LIke above but generate scan plan for sync materialized view - */ - public static Plan generateMvScanPlan(OlapTable olapTable, long indexId, CascadesContext cascadesContext) { - return new LogicalOlapScan( - cascadesContext.getStatementContext().getNextRelationId(), - olapTable, - ImmutableList.of(olapTable.getQualifiedDbName()), - // this must be empty, or it will be used to sample - ImmutableList.of(), - olapTable.getPartitionIds(), + partitionIds, indexId, - PreAggStatus.unset(), + preAggStatus, Review Comment: should be unset ########## fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/SyncMaterializationContext.java: ########## @@ -96,13 +99,29 @@ String getStringInfo() { @Override Optional<Pair<Id, Statistics>> getPlanStatistics(CascadesContext cascadesContext) { RelationId relationId = null; - Optional<LogicalOlapScan> scanObj = this.getScanPlan().collectFirst(LogicalOlapScan.class::isInstance); + Optional<LogicalOlapScan> scanObj = this.getScanPlan(null) + .collectFirst(LogicalOlapScan.class::isInstance); if (scanObj.isPresent()) { relationId = scanObj.get().getRelationId(); } return Optional.of(Pair.of(relationId, normalizeStatisticsColumnExpression(statistics))); } + @Override + public Plan getScanPlan(StructInfo queryStructInfo) { + if (queryStructInfo == null) { + return scanPlan; + } + if (queryStructInfo.getRelations().size() == 1 + && queryStructInfo.getRelations().get(0) instanceof LogicalOlapScan Review Comment: refer to `org.apache.doris.nereids.rules.rewrite.DeferMaterializeTopNResult`, maybe relation could be `LogicalDeferMaterializeOlapScan`? can we collect correct struct info? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org