This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new c6d78c2d7b [fix](Nereids) cannot get output when partitioned table 
without any parititon (#20937)
c6d78c2d7b is described below

commit c6d78c2d7bd604d8f17b7849d56d18cf73e26201
Author: morrySnow <[email protected]>
AuthorDate: Sun Jun 18 12:44:36 2023 +0800

    [fix](Nereids) cannot get output when partitioned table without any 
parititon (#20937)
---
 .../LogicalOlapScanToPhysicalOlapScan.java               |  4 ++--
 .../rewrite/mv/AbstractSelectMaterializedIndexRule.java  |  2 +-
 .../rewrite/mv/SelectMaterializedIndexWithAggregate.java | 16 ++++++++--------
 .../nereids/trees/plans/logical/LogicalOlapScan.java     |  7 ++++---
 .../apache/doris/planner/MaterializedViewSelector.java   |  2 +-
 5 files changed, 16 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
index ed1cbaf731..4619e05f15 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
@@ -58,7 +58,7 @@ public class LogicalOlapScanToPhysicalOlapScan extends 
OneImplementationRuleFact
                         olapScan.getSelectedPartitionIds(),
                         convertDistribution(olapScan),
                         olapScan.getPreAggStatus(),
-                        
olapScan.getOutputByMvIndex(olapScan.getTable().getBaseIndexId()),
+                        
olapScan.getOutputByIndex(olapScan.getTable().getBaseIndexId()),
                         Optional.empty(),
                         olapScan.getLogicalProperties())
         ).toRule(RuleType.LOGICAL_OLAP_SCAN_TO_PHYSICAL_OLAP_SCAN_RULE);
@@ -83,7 +83,7 @@ public class LogicalOlapScanToPhysicalOlapScan extends 
OneImplementationRuleFact
                 if (olapScan.getSelectedIndexId() != 
olapScan.getTable().getBaseIndexId()) {
                     HashDistributionInfo hashDistributionInfo = 
(HashDistributionInfo) distributionInfo;
                     List<Slot> output = olapScan.getOutput();
-                    List<Slot> baseOutput = 
olapScan.getOutputByMvIndex(olapScan.getTable().getBaseIndexId());
+                    List<Slot> baseOutput = 
olapScan.getOutputByIndex(olapScan.getTable().getBaseIndexId());
                     List<ExprId> hashColumns = Lists.newArrayList();
                     for (int i = 0; i < output.size(); i++) {
                         for (Column column : 
hashDistributionInfo.getDistributionColumns()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
index c216b0b15c..46a57271d2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
@@ -386,7 +386,7 @@ public abstract class AbstractSelectMaterializedIndexRule {
         if (mvPlan.getSelectedIndexId() == mvPlan.getTable().getBaseIndexId()) 
{
             return new SlotContext(baseSlotToMvSlot, mvNameToMvSlot);
         }
-        for (Slot mvSlot : 
mvPlan.getOutputByMvIndex(mvPlan.getSelectedIndexId())) {
+        for (Slot mvSlot : 
mvPlan.getOutputByIndex(mvPlan.getSelectedIndexId())) {
             boolean isPushed = false;
             for (Slot baseSlot : mvPlan.getOutput()) {
                 if 
(org.apache.doris.analysis.CreateMaterializedViewStmt.isMVColumnAggregate(mvSlot.getName()))
 {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
index 0bcee51c1c..94348b7156 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
@@ -1172,7 +1172,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     Column mvColumn = 
context.checkContext.scan.getTable().getVisibleColumn(bitmapUnionColumn);
                     // has bitmap_union column
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                        Slot bitmapUnionSlot = 
context.checkContext.scan.getOutputByMvIndex(context.checkContext.index)
+                        Slot bitmapUnionSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
bitmapUnionColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1199,7 +1199,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     Column mvColumn = 
context.checkContext.scan.getTable().getVisibleColumn(countColumn);
                     // has bitmap_union_count column
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                        Slot countSlot = 
context.checkContext.scan.getOutputByMvIndex(context.checkContext.index)
+                        Slot countSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
countColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1235,7 +1235,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
 
                         Slot bitmapUnionCountSlot = context.checkContext.scan
-                                .getOutputByMvIndex(context.checkContext.index)
+                                .getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
bitmapUnionCountColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1262,7 +1262,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
 
                         Slot bitmapUnionCountSlot = context.checkContext.scan
-                                .getOutputByMvIndex(context.checkContext.index)
+                                .getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
bitmapUnionCountColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1297,7 +1297,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     Column mvColumn = 
context.checkContext.scan.getTable().getVisibleColumn(hllUnionColumn);
                     // has hll_union column
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                        Slot hllUnionSlot = 
context.checkContext.scan.getOutputByMvIndex(context.checkContext.index)
+                        Slot hllUnionSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
hllUnionColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1332,7 +1332,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                     Column mvColumn = 
context.checkContext.scan.getTable().getVisibleColumn(hllUnionColumn);
                     // has hll_union column
                     if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                        Slot hllUnionSlot = 
context.checkContext.scan.getOutputByMvIndex(context.checkContext.index)
+                        Slot hllUnionSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
                                 .stream()
                                 .filter(s -> 
hllUnionColumn.equalsIgnoreCase(normalizeName(s.getName())))
                                 .findFirst()
@@ -1367,7 +1367,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 Column mvColumn = 
context.checkContext.scan.getTable().getVisibleColumn(hllUnionColumn);
                 // has hll_union column
                 if (mvColumn != null && 
context.checkContext.valueNameToColumn.containsValue(mvColumn)) {
-                    Slot hllUnionSlot = 
context.checkContext.scan.getOutputByMvIndex(context.checkContext.index)
+                    Slot hllUnionSlot = 
context.checkContext.scan.getOutputByIndex(context.checkContext.index)
                             .stream()
                             .filter(s -> 
hllUnionColumn.equalsIgnoreCase(normalizeName(s.getName())))
                             .findFirst()
@@ -1470,7 +1470,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
             return outputs;
         }
         return ImmutableList.<NamedExpression>builder()
-                .addAll(mvPlan.getOutputByMvIndex(mvPlan.getSelectedIndexId()))
+                .addAll(mvPlan.getOutputByIndex(mvPlan.getSelectedIndexId()))
                 .addAll(outputs.stream()
                         .filter(s -> !(s instanceof Slot))
                         .collect(ImmutableList.toImmutableList()))
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index e83ddd1cc7..84cdeab1ba 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -298,7 +298,7 @@ public class LogicalOlapScan extends LogicalRelation 
implements CatalogRelation,
     @Override
     public List<Slot> computeOutput() {
         if (selectedIndexId != ((OlapTable) table).getBaseIndexId()) {
-            return getOutputByMvIndex(selectedIndexId);
+            return getOutputByIndex(selectedIndexId);
         }
         List<Column> otherColumns = new ArrayList<>();
         if (!Util.showHiddenColumns() && getTable().hasDeleteSign()
@@ -322,10 +322,11 @@ public class LogicalOlapScan extends LogicalRelation 
implements CatalogRelation,
      * Get the slot under the index,
      * and create a new slotReference for the slot that has not appeared in 
the materialized view.
      */
-    public List<Slot> getOutputByMvIndex(long indexId) {
+    public List<Slot> getOutputByIndex(long indexId) {
         OlapTable olapTable = (OlapTable) table;
         // PhysicalStorageLayerAggregateTest has no visible index
-        if (-1 == indexId) {
+        // when we have a partitioned table without any partition, visible 
index is empty
+        if (-1 == indexId || olapTable.getVisibleIndexIdToMeta().get(indexId) 
== null) {
             return olapTable.getIndexMetaByIndexId(indexId).getSchema()
                 .stream().map(s -> generateUniqueSlot(s, indexId == 
((OlapTable) table).getBaseIndexId()))
                 .collect(Collectors.toList());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/MaterializedViewSelector.java
 
b/fe/fe-core/src/main/java/org/apache/doris/planner/MaterializedViewSelector.java
index 48153bab5d..a86b406d5c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/MaterializedViewSelector.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/MaterializedViewSelector.java
@@ -143,7 +143,7 @@ public class MaterializedViewSelector {
     }
 
     private Map<Long, List<Column>> predicates(OlapScanNode scanNode) throws 
AnalysisException {
-        // Step1: all of predicates is compensating predicates
+        // Step1: all predicates is compensating predicates
         Map<Long, MaterializedIndexMeta> candidateIndexIdToMeta = 
scanNode.getOlapTable().getVisibleIndexIdToMeta();
         OlapTable table = scanNode.getOlapTable();
         Preconditions.checkState(table != null);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to