You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Meng Wang (JIRA)" <ji...@apache.org> on 2019/03/18 02:14:00 UTC
[jira] [Created] (CALCITE-2927) The javadoc and implement of
RuleQueue.computeImportance() is inconsistent
Meng Wang created CALCITE-2927:
----------------------------------
Summary: The javadoc and implement of RuleQueue.computeImportance() is inconsistent
Key: CALCITE-2927
URL: https://issues.apache.org/jira/browse/CALCITE-2927
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.18.0
Reporter: Meng Wang
Fix For: next
In the javadoc of _computeImportance()_, it shows the importance of node is Sum{_computeImportanceOfChild()_}, but in the implementation it shows Max{_computeImportanceOfChild()_}, this is inconsistent. The Javadoc has some errors, it will cause some confusion.
{code:java}
// /**
* Computes the <dfn>importance</dfn> of a node. Importance is defined as
* follows:
*
* <ul>
* <li>the root {@link RelSubset} has an importance of 1</li>
* <li>the importance of any other subset is the sum of its importance to
* its parents</li>
* <li>The importance of children is pro-rated according to the cost of the
* children. Consider a node which has a cost of 3, and children with costs
* of 2 and 5. The total cost is 10. If the node has an importance of .5,
* then the children will have importance of .1 and .25. The retains .15
* importance points, to reflect the fact that work needs to be done on the
* node's algorithm.</li>
* </ul>
*
* <p>The formula for the importance <i>I</i> of node n is:
*
* <blockquote>I<sub>n</sub> = Sum<sub>parents p of n</sub>{I<sub>p</sub> .
* W <sub>n, p</sub>}</blockquote>
*
* <p>where W<sub>n, p</sub>, the weight of n within its parent p, is
*
* <blockquote>W<sub>n, p</sub> = Cost<sub>n</sub> / (SelfCost<sub>p</sub> +
* Cost<sub>n0</sub> + ... + Cost<sub>nk</sub>)
* </blockquote>
*/
double computeImportance(RelSubset subset) {
double importance;
if (subset == planner.root) {
// The root always has importance = 1
importance = 1.0;
} else {
final RelMetadataQuery mq = subset.getCluster().getMetadataQuery();
// The importance of a subset is the max of its importance to its
// parents
importance = 0.0;
for (RelSubset parent : subset.getParentSubsets(planner)) {
final double childImportance =
computeImportanceOfChild(mq, subset, parent);
importance = Math.max(importance, childImportance);
}
}
LOGGER.trace("Importance of [{}] is {}", subset, importance);
return importance;
}
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)