morrySnow commented on code in PR #13046:
URL: https://github.com/apache/doris/pull/13046#discussion_r1011467239


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java:
##########
@@ -109,6 +114,14 @@ public void setChildren(ImmutableList<Group> children) {
         this.children = children;
     }
 
+    public boolean isHasCalculateCost() {
+        return hasCalculateCost;
+    }
+
+    public void setHasCalculateCost(boolean hasCalculateCost) {
+        this.hasCalculateCost = hasCalculateCost;
+    }
+

Review Comment:
   remove it in this PR



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java:
##########
@@ -164,74 +167,96 @@ public void execute() {
                 if (curTotalCost > context.getCostUpperBound()) {
                     break;
                 }
+                // the request child properties will be covered by the output 
properties
+                // that corresponding to the request properties. so if we run 
a costAndEnforceJob of the same
+                // group expression, that request child properties will be 
different of this.
             }
 
             // This mean that we successfully optimize all child groups.
+            // if break when running the loop above, the condition must be 
false.
             if (curChildIndex == groupExpression.arity()) {
-
-                // to ensure distributionSpec has been added sufficiently.
-                ChildrenPropertiesRegulator regulator = new 
ChildrenPropertiesRegulator(groupExpression,
-                        lowestCostChildren, requestChildrenProperties, 
requestChildrenProperties, context);
-                double enforceCost = regulator.adjustChildrenProperties();
-                if (enforceCost < 0) {
-                    // invalid enforce, return.
-                    return;
-                }
-                curTotalCost += enforceCost;
-
-                // Not need to do pruning here because it has been done when 
we get the
-                // best expr from the child group
-                ChildOutputPropertyDeriver childOutputPropertyDeriver
-                        = new 
ChildOutputPropertyDeriver(requestChildrenProperties);
-                PhysicalProperties outputProperty = 
childOutputPropertyDeriver.getOutputProperties(groupExpression);
-
-                // update current group statistics and re-compute costs.
-                if (groupExpression.children().stream().anyMatch(group -> 
group.getStatistics() == null)) {
-                    // if we come here, mean that we have some error in stats 
calculator and should fix it.
+                if (!calculateEnforce(requestChildrenProperties)) {
                     return;
                 }
-                StatsCalculator.estimate(groupExpression);
-                curTotalCost -= curNodeCost;
-                curNodeCost = CostCalculator.calculateCost(groupExpression);
-                groupExpression.setCost(curNodeCost);
-                curTotalCost += curNodeCost;
-
-                // record map { outputProperty -> outputProperty }, { ANY -> 
outputProperty },
-                recordPropertyAndCost(groupExpression, outputProperty, 
PhysicalProperties.ANY,
-                        requestChildrenProperties);
-                recordPropertyAndCost(groupExpression, outputProperty, 
outputProperty, requestChildrenProperties);
-                enforce(outputProperty, requestChildrenProperties);
-
                 if (curTotalCost < context.getCostUpperBound()) {
                     context.setCostUpperBound(curTotalCost);
                 }
             }
-
             clear();
         }
     }
 
+    private boolean calculateEnforce(List<PhysicalProperties> 
requestChildrenProperties) {

Review Comment:
   add some comment to explain return value



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java:
##########
@@ -168,25 +182,24 @@ public List<PhysicalProperties> 
getInputPropertiesList(PhysicalProperties requir
 
     /**
      * Add a (outputProperties) -> (cost, childrenInputProperties) in 
lowestCostTable.
+     * if the outputProperties exists, will be covered.
+     * @return true if lowest cost table change.
      */
     public boolean updateLowestCostTable(PhysicalProperties outputProperties,
             List<PhysicalProperties> childrenInputProperties, double cost) {
         if (lowestCostTable.containsKey(outputProperties)) {
             if (lowestCostTable.get(outputProperties).first > cost) {
                 lowestCostTable.put(outputProperties, Pair.of(cost, 
childrenInputProperties));
                 return true;
-            } else {
-                return false;
             }
-        } else {
-            lowestCostTable.put(outputProperties, Pair.of(cost, 
childrenInputProperties));
-            return true;
+            return false;

Review Comment:
   do not remove else block. it is easy to do a accidentally modifying with out 
it



-- 
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

Reply via email to