BiteTheDDDDt commented on code in PR #65853:
URL: https://github.com/apache/doris/pull/65853#discussion_r3635938106


##########
fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java:
##########
@@ -1408,22 +1413,61 @@ private void setPartitionBoundaries(TOlapScanNode 
olapScanNode) {
             if (item == null) {
                 continue;
             }
-            if (item instanceof RangePartitionItem) {
-                addRangeBoundaries(boundaries, partitionId, 
(RangePartitionItem) item,
-                        partColumns, partColToSlotId);
-            } else if (item instanceof ListPartitionItem) {
-                addListBoundaries(boundaries, partitionId, (ListPartitionItem) 
item,
-                        partColumns, partColToSlotId);
+            for (Map.Entry<Integer, Integer> entry : 
pruningSlotToPartitionColumnIndex.entrySet()) {
+                int slotId = entry.getKey();
+                int partitionColumnIndex = entry.getValue();
+                if (item instanceof RangePartitionItem) {
+                    Preconditions.checkState(partitionColumnIndex == 0);
+                    addRangeBoundary(boundaries, partitionId, 
(RangePartitionItem) item,
+                            partColumns.size(), slotId);
+                } else if (item instanceof ListPartitionItem) {
+                    addListBoundary(boundaries, partitionId, 
(ListPartitionItem) item,
+                            partitionColumnIndex, slotId);
+                }
             }
         }
         if (!boundaries.isEmpty()) {
             olapScanNode.setPartitionBoundaries(boundaries);
         }
     }
 
-    private void addRangeBoundaries(List<TPartitionBoundary> boundaries, long 
partitionId,
-            RangePartitionItem rangeItem, List<Column> partColumns,
-            Map<String, Integer> partColToSlotId) {
+    private int findPartitionColumnIndex(Column targetColumn, List<Column> 
partitionColumns) {
+        targetColumn = getBaseColumn(targetColumn);
+        if (targetColumn == null) {
+            return -1;
+        }
+        for (int i = 0; i < partitionColumns.size(); i++) {
+            Column partitionColumn = partitionColumns.get(i);
+            if (targetColumn == partitionColumn) {
+                return i;
+            }
+            int targetUniqueId = targetColumn.getUniqueId();

Review Comment:
   不多余。元数据 reload/deep copy 后不保证保留 Column 对象身份;当两边都有有效 unique id 时,unique id 
才是稳定身份,而且 unique id 不一致时不能继续用不包含 unique id 的 Column.equals 误匹配。未开启 light schema 
change 的旧 schema 使用初始值 -1,这时仍需要结构相等兜底。我在两个匹配点补了说明,并新增了两类 distinct copied column 
的聚焦测试:有效 unique id 匹配,以及 legacy -1 下的 equals fallback。



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to