| <!DOCTYPE HTML> |
| <!-- NewPage --> |
| <html lang="en"> |
| <head> |
| <!-- Generated by javadoc --> |
| <title>org.apache.calcite.plan.volcano (Apache Calcite API)</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style"> |
| <link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style"> |
| <script type="text/javascript" src="../../../../../script.js"></script> |
| <script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script> |
| <script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script> |
| <!--[if IE]> |
| <script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script> |
| <![endif]--> |
| <script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script> |
| <script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script> |
| <script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script> |
| </head> |
| <body> |
| <script type="text/javascript"><!-- |
| try { |
| if (location.href.indexOf('is-external=true') == -1) { |
| parent.document.title="org.apache.calcite.plan.volcano (Apache Calcite API)"; |
| } |
| } |
| catch(err) { |
| } |
| //--> |
| var pathtoroot = "../../../../../"; |
| var useModuleDirectories = true; |
| loadScripts(document, 'script');</script> |
| <noscript> |
| <div>JavaScript is disabled on your browser.</div> |
| </noscript> |
| <header role="banner"> |
| <nav role="navigation"> |
| <div class="fixedNav"> |
| <!-- ========= START OF TOP NAVBAR ======= --> |
| <div class="topNav"><a id="navbar.top"> |
| <!-- --> |
| </a> |
| <div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div> |
| <a id="navbar.top.firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li><a href="../../../../../index.html">Overview</a></li> |
| <li class="navBarCell1Rev">Package</li> |
| <li>Class</li> |
| <li><a href="package-use.html">Use</a></li> |
| <li><a href="package-tree.html">Tree</a></li> |
| <li><a href="../../../../../deprecated-list.html">Deprecated</a></li> |
| <li><a href="../../../../../index-all.html">Index</a></li> |
| <li><a href="../../../../../help-doc.html">Help</a></li> |
| </ul> |
| </div> |
| <div class="subNav"> |
| <ul class="navList" id="allclasses_navbar_top"> |
| <li><a href="../../../../../allclasses.html">All Classes</a></li> |
| </ul> |
| <ul class="navListSearch"> |
| <li><label for="search">SEARCH:</label> |
| <input type="text" id="search" value="search" disabled="disabled"> |
| <input type="reset" id="reset" value="reset" disabled="disabled"> |
| </li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_top"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| <noscript> |
| <div>JavaScript is disabled on your browser.</div> |
| </noscript> |
| </div> |
| <a id="skip.navbar.top"> |
| <!-- --> |
| </a></div> |
| <!-- ========= END OF TOP NAVBAR ========= --> |
| </div> |
| <div class="navPadding"> </div> |
| <script type="text/javascript"><!-- |
| $('.navPadding').css('padding-top', $('.fixedNav').css("height")); |
| //--> |
| </script> |
| </nav> |
| </header> |
| <main role="main"> |
| <div class="header"> |
| <h1 title="Package" class="title">Package org.apache.calcite.plan.volcano</h1> |
| </div> |
| <div class="contentContainer"> |
| <section role="region"><a id="package.description"> |
| <!-- --> |
| </a> |
| <div class="block">Optimizes relational expressions.<p> </p> |
| |
| <h2>Overview</h2> |
| |
| <p>A <dfn>planner</dfn> (also known as an <dfn>optimizer</dfn>) finds the |
| most efficient implementation of a |
| <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>relational expression</code></a>.</p> |
| |
| <p>Interface <a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan"><code>RelOptPlanner</code></a> defines a planner, |
| and class <a href="VolcanoPlanner.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoPlanner</code></a> is an |
| implementation which uses a dynamic programming technique. It is based upon |
| the Volcano optimizer [<a href="#graefe93">1</a>].</p> |
| |
| <p>Interface <a href="../RelOptCost.html" title="interface in org.apache.calcite.plan"><code>RelOptCost</code></a> defines a cost |
| model; class <a href="VolcanoCost.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoCost</code></a> is |
| the implementation for a <code>VolcanoPlanner</code>.</p> |
| |
| <p>A <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano"><code>RelSet</code></a> is a set of equivalent |
| relational expressions. They are equivalent because they will produce the |
| same result for any set of input data. It is an equivalence class: two |
| expressions are in the same set if and only if they are in the same |
| <code>RelSet</code>.</p> |
| |
| <p>One of the unique features of the optimizer is that expressions can take |
| on a variety of physical traits. Each relational expression has a set of |
| traits. Each trait is described by an implementation of |
| <a href="../RelTraitDef.html" title="class in org.apache.calcite.plan"><code>RelTraitDef</code></a>. Manifestations of the trait |
| implement <a href="../RelTrait.html" title="interface in org.apache.calcite.plan"><code>RelTrait</code></a>. The most common example |
| of a trait is calling convention: the protocol used to receive and transmit |
| data. <a href="../ConventionTraitDef.html" title="class in org.apache.calcite.plan"><code>ConventionTraitDef</code></a> defines the trait |
| and <a href="../Convention.html" title="interface in org.apache.calcite.plan"><code>Convention</code></a> enumerates the |
| protocols. Every relational expression has a single calling convention by |
| which it returns its results. Some examples:</p> |
| |
| <ul> |
| <li><a href="../../adapter/jdbc/JdbcConvention.html" title="class in org.apache.calcite.adapter.jdbc"><code>JdbcConvention</code></a> is a fairly |
| conventional convention; the results are rows from a |
| <code>JDBC result set</code>. |
| </li> |
| <li><a href="../Convention.html#NONE"><code>Convention.NONE</code></a> means that a |
| relational |
| expression cannot be implemented; typically there are rules which can |
| transform it to equivalent, implementable expressions. |
| </li> |
| <li><a href="../../adapter/enumerable/EnumerableConvention.html" title="enum in org.apache.calcite.adapter.enumerable"><code>EnumerableConvention</code></a> |
| implements the expression by |
| generating Java code. The code places the current row in a Java |
| variable, then |
| calls the piece of code which implements the consuming relational |
| expression. |
| For example, a Java array reader of the <code>names</code> array |
| would generate the following code: |
| <blockquote> |
| <pre>String[] names; |
| for (int i = 0; i < names.length; i++) { |
| String name = names[i]; |
| // ... code for consuming relational expression ... |
| }</pre> |
| </blockquote> |
| </li> |
| </ul> |
| |
| <p>New traits are added to the planner in one of two ways:</p> |
| <ol> |
| <li>If the new trait is integral to Calcite, then each and every |
| implementation of <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> should include |
| its manifestation of the trait as part of the |
| <a href="../RelTraitSet.html" title="class in org.apache.calcite.plan"><code>RelTraitSet</code></a> passed to |
| <a href="../../rel/AbstractRelNode.html" title="class in org.apache.calcite.rel"><code>AbstractRelNode</code></a>'s constructor. It may be |
| useful to provide alternate <code>AbstractRelNode</code> constructors |
| if most relational expressions use a single manifestation of the |
| trait.</li> |
| |
| <li>If the new trait describes some aspect of a Farrago extension, then |
| the RelNodes passed to |
| <a href="VolcanoPlanner.html#setRoot(org.apache.calcite.rel.RelNode)"><code>VolcanoPlanner.setRoot(org.apache.calcite.rel.RelNode)</code></a> |
| should have their trait sets expanded before the |
| <code>setRoot(RelNode)</code> call.</li> |
| |
| </ol> |
| |
| <p>The second trait extension mechanism requires that implementations of |
| <code>Object.clone()</code> must not assume the |
| type and quantity of traits in their trait set. In either case, the new |
| <code>RelTraitDef</code> implementation must be |
| <a href="VolcanoPlanner.html#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)"><code>VolcanoPlanner.addRelTraitDef(org.apache.calcite.plan.RelTraitDef)</code></a> |
| registered with the planner.</p> |
| |
| <p>A <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano"><code>RelSubset</code></a> is a subset of a |
| <code>RelSet</code> containing expressions which are equivalent and which |
| have the same <code>Convention</code>. Like <code>RelSet</code>, it is an |
| equivalence class.</p> |
| |
| <h2>Related packages</h2> |
| <ul> |
| <li><code><a href="../rel/package-summary.html">org.apache.calcite.rel</a></code> |
| defines <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>relational expressions</code></a>. |
| </li> |
| </ul> |
| |
| <h2>Details</h2> |
| |
| <p>...</p> |
| |
| <p>Sets merge when the result of a rule already exists in another set. This |
| implies that all of the expressions are equivalent. The RelSets are |
| merged, and so are the contained RelSubsets.</p> |
| |
| <p>Expression registration.</p> |
| <ul> |
| <li>Expression is added to a set. We may find that an equivalent |
| expression already exists. Otherwise, this is the moment when an |
| expression becomes public, and fixed. Its digest is assigned, which |
| allows us to quickly find identical expressions.</li> |
| |
| <li>We match operands, figure out which rules are applicable, and |
| generate rule calls. The rule calls are placed on a queue, and the |
| important ones are called later.</li> |
| |
| <li>RuleCalls allow us to defer the invocation of rules. When an |
| expression is registered </li> |
| </ul> |
| |
| <p>Algorithm</p> |
| |
| <p>To optimize a relational expression R:</p> |
| |
| <p>1. Register R.</p> |
| |
| <p>2. Create rule-calls for all applicable rules.</p> |
| |
| <p>3. Rank the rule calls by importance.</p> |
| |
| <p>4. Call the most important rule</p> |
| |
| <p>5. Repeat.</p> |
| |
| <p><b>Importance</b>. A rule-call is important if it is likely to produce |
| better implementation of a relexp on the plan's critical path. Hence (a) |
| it produces a member of an important RelSubset, (b) its children are |
| cheap.</p> |
| |
| <p>Conversion. Conversions are difficult because we have to work backwards |
| from the goal.</p> |
| |
| <p><b>Rule triggering</b></p> |
| |
| <p>The rules are:</p> |
| <ol> |
| <li><code>PushFilterThroughProjectRule</code>. Operands: |
| <blockquote> |
| <pre>Filter |
| Project</pre> |
| </blockquote> |
| </li> |
| <li><code>CombineProjectsRule</code>. Operands: |
| <blockquote> |
| <pre>Project |
| Project</pre> |
| </blockquote> |
| </li> |
| </ol> |
| |
| <p>A rule can be triggered by a change to any of its operands. Consider the |
| rule to combine two filters into one. It would have operands [Filter |
| [Filter]]. If I register a new Filter, it will trigger the rule in 2 |
| places. Consider:</p> |
| |
| <blockquote> |
| <pre>Project (deptno) [exp 1, subset A] |
| Filter (gender='F') [exp 2, subset B] |
| Project (deptno, gender, empno) [exp 3, subset C] |
| Project (deptno, gender, empno, salary) [exp 4, subset D] |
| TableScan (emp) [exp 0, subset X]</pre> |
| </blockquote> |
| <p>Apply <code>PushFilterThroughProjectRule</code> to [exp 2, exp 3]:</p> |
| <blockquote> |
| <pre>Project (deptno) [exp 1, subset A] |
| Project (deptno, gender, empno) [exp 5, subset B] |
| Filter (gender='F') [exp 6, subset E] |
| Project (deptno, gender, empno, salary) [exp 4, subset D] |
| TableScan (emp) [exp 0, subset X]</pre> |
| </blockquote> |
| |
| <p>Two new expressions are created. Expression 5 is in subset B (because it |
| is equivalent to expression 2), and expression 6 is in a new equivalence |
| class, subset E.</p> |
| |
| <p>The products of a applying a rule can trigger a cascade of rules. Even in |
| this simple system (2 rules and 4 initial expressions), two more rules |
| are triggered:</p> |
| |
| <ul> |
| |
| <li>Registering exp 5 triggers <code>CombineProjectsRule</code>(exp 1, |
| exp 5), which creates |
| |
| <blockquote> |
| <pre>Project (deptno) [exp 7, subset A] |
| Filter (gender='F') [exp 6, subset E] |
| Project (deptno, gender, empno, salary) [exp 4, subset D] |
| TableScan (emp) [exp 0, subset X]</pre> |
| </blockquote> |
| </li> |
| |
| <li>Registering exp 6 triggers |
| <code>PushFilterThroughProjectRule</code>(exp 6, exp 4), which |
| creates |
| |
| <blockquote> |
| <pre>Project (deptno) [exp 1, subset A] |
| Project (deptno, gender, empno) [exp 5, subset B] |
| Project (deptno, gender, empno, salary) [exp 8, subset E] |
| Filter (gender='F') [exp 9, subset F] |
| TableScan (emp) [exp 0, subset X]</pre> |
| </blockquote> |
| </li> |
| </ul> |
| |
| <p>Each rule application adds additional members to existing subsets. The |
| non-singleton subsets are now A {1, 7}, B {2, 5} and E {6, 8}, and new |
| combinations are possible. For example, |
| <code>CombineProjectsRule</code>(exp 7, exp 8) further reduces the depth |
| of the tree to:</p> |
| |
| <blockquote> |
| <pre>Project (deptno) [exp 10, subset A] |
| Filter (gender='F') [exp 9, subset F] |
| TableScan (emp) [exp 0, subset X]</pre> |
| </blockquote> |
| <p>Todo: show how rules can cause subsets to merge.</p> |
| |
| <p>Conclusion:</p> |
| <ol> |
| <li>A rule can be triggered by any of its operands.</li> |
| <li>If a subset is a child of more than one parent, it can trigger rule |
| matches for any of its parents. |
| </li> |
| |
| <li>Registering one relexp can trigger several rules (and even the same |
| rule several times).</li> |
| |
| <li>Firing rules can cause subsets to merge.</li> |
| </ol> |
| <h2>References</h2> |
| |
| <p>1. <a id="graefe93" href="http://citeseer.nj.nec.com/graefe93volcano.html">The |
| Volcano Optimizer |
| Generator: Extensibility and Efficient Search - Goetz Graefe, William J. |
| McKenna |
| (1993)</a>.</p></div> |
| </section> |
| <ul class="blockList"> |
| <li class="blockList"> |
| <table class="typeSummary"> |
| <caption><span>Interface Summary</span><span class="tabEnd"> </span></caption> |
| <tr> |
| <th class="colFirst" scope="col">Interface</th> |
| <th class="colLast" scope="col">Description</th> |
| </tr> |
| <tbody> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlannerPhaseRuleMappingInitializer.html" title="interface in org.apache.calcite.plan.volcano">VolcanoPlannerPhaseRuleMappingInitializer</a></th> |
| <td class="colLast"> |
| <div class="block">VolcanoPlannerPhaseRuleMappingInitializer describes an inteface for |
| initializing the mapping of <a href="VolcanoPlannerPhase.html" title="enum in org.apache.calcite.plan.volcano"><code>VolcanoPlannerPhase</code></a>s to sets of rule |
| descriptions.</div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </li> |
| <li class="blockList"> |
| <table class="typeSummary"> |
| <caption><span>Class Summary</span><span class="tabEnd"> </span></caption> |
| <tr> |
| <th class="colFirst" scope="col">Class</th> |
| <th class="colLast" scope="col">Description</th> |
| </tr> |
| <tbody> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="AbstractConverter.html" title="class in org.apache.calcite.plan.volcano">AbstractConverter</a></th> |
| <td class="colLast"> |
| <div class="block">Converts a relational expression to any given output convention.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="AbstractConverter.ExpandConversionRule.html" title="class in org.apache.calcite.plan.volcano">AbstractConverter.ExpandConversionRule</a></th> |
| <td class="colLast"> |
| <div class="block">Rule which converts an <a href="AbstractConverter.html" title="class in org.apache.calcite.plan.volcano"><code>AbstractConverter</code></a> into a chain of |
| converters from the source relation to the target traits.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="ChainedPhaseRuleMappingInitializer.html" title="class in org.apache.calcite.plan.volcano">ChainedPhaseRuleMappingInitializer</a></th> |
| <td class="colLast"> |
| <div class="block">ChainedPhaseRuleMappingInitializer is an abstract implementation of |
| <a href="VolcanoPlannerPhaseRuleMappingInitializer.html" title="interface in org.apache.calcite.plan.volcano"><code>VolcanoPlannerPhaseRuleMappingInitializer</code></a> that allows additional |
| rules to be layered on top of those configured by a subordinate |
| <a href="VolcanoPlannerPhaseRuleMappingInitializer.html" title="interface in org.apache.calcite.plan.volcano"><code>VolcanoPlannerPhaseRuleMappingInitializer</code></a>.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></th> |
| <td class="colLast"> |
| <div class="block">A <code>RelSet</code> is an equivalence-set of expressions; that is, a set of |
| expressions which have identical semantics.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></th> |
| <td class="colLast"> |
| <div class="block">Subset of an equivalence class where all relational expressions have the |
| same physical properties.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="RelSubset.CheapestPlanReplacer.html" title="class in org.apache.calcite.plan.volcano">RelSubset.CheapestPlanReplacer</a></th> |
| <td class="colLast"> |
| <div class="block">Visitor which walks over a tree of <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano"><code>RelSet</code></a>s, replacing each node |
| with the cheapest implementation of the expression.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="RelSubset.DeadEndFinder.html" title="class in org.apache.calcite.plan.volcano">RelSubset.DeadEndFinder</a></th> |
| <td class="colLast"> |
| <div class="block">Identifies the leaf-most non-implementable nodes.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="RuleQueue.html" title="class in org.apache.calcite.plan.volcano">RuleQueue</a></th> |
| <td class="colLast"> |
| <div class="block">Priority queue of relexps whose rules have not been called, and rule-matches |
| which have not yet been acted upon.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="RuleQueue.PhaseMatchList.html" title="class in org.apache.calcite.plan.volcano">RuleQueue.PhaseMatchList</a></th> |
| <td class="colLast"> |
| <div class="block">PhaseMatchList represents a set of <a href="VolcanoRuleMatch.html" title="class in org.apache.calcite.plan.volcano"><code>rule-matches</code></a> |
| for a particular |
| <a href="VolcanoPlannerPhase.html" title="enum in org.apache.calcite.plan.volcano"><code>phase of the planner's execution</code></a>.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="RuleQueue.RuleMatchImportanceComparator.html" title="class in org.apache.calcite.plan.volcano">RuleQueue.RuleMatchImportanceComparator</a></th> |
| <td class="colLast"> |
| <div class="block">Compares <a href="VolcanoRuleMatch.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoRuleMatch</code></a> objects according to their importance.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoCost.html" title="class in org.apache.calcite.plan.volcano">VolcanoCost</a></th> |
| <td class="colLast"> |
| <div class="block"><code>VolcanoCost</code> represents the cost of a plan node.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoCost.Factory.html" title="class in org.apache.calcite.plan.volcano">VolcanoCost.Factory</a></th> |
| <td class="colLast"> |
| <div class="block">Implementation of <a href="../RelOptCostFactory.html" title="interface in org.apache.calcite.plan"><code>RelOptCostFactory</code></a> |
| that creates <a href="VolcanoCost.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoCost</code></a>s.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner</a></th> |
| <td class="colLast"> |
| <div class="block">VolcanoPlanner optimizes queries by transforming expressions selectively |
| according to a dynamic programming algorithm.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.DeferringRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.DeferringRuleCall</a></th> |
| <td class="colLast"> |
| <div class="block">A rule call which defers its actions.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.DirectProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.DirectProvenance</a></th> |
| <td class="colLast"> |
| <div class="block">A RelNode that came directly from another RelNode via a copy.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.Provenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.Provenance</a></th> |
| <td class="colLast"> |
| <div class="block">Where a RelNode came from.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.RuleProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.RuleProvenance</a></th> |
| <td class="colLast"> |
| <div class="block">A RelNode that came via the firing of a rule.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlanner.UnknownProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.UnknownProvenance</a></th> |
| <td class="colLast"> |
| <div class="block">We do not know where this RelNode came from.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoRelMetadataProvider.html" title="class in org.apache.calcite.plan.volcano">VolcanoRelMetadataProvider</a></th> |
| <td class="colLast"> |
| <div class="block">VolcanoRelMetadataProvider implements the <a href="../../rel/metadata/RelMetadataProvider.html" title="interface in org.apache.calcite.rel.metadata"><code>RelMetadataProvider</code></a> |
| interface by combining metadata from the rels making up an equivalence class.</div> |
| </td> |
| </tr> |
| <tr class="rowColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleCall</a></th> |
| <td class="colLast"> |
| <div class="block"><code>VolcanoRuleCall</code> implements the <a href="../RelOptRuleCall.html" title="class in org.apache.calcite.plan"><code>RelOptRuleCall</code></a> interface |
| for VolcanoPlanner.</div> |
| </td> |
| </tr> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoRuleMatch.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleMatch</a></th> |
| <td class="colLast"> |
| <div class="block">A match of a rule to a particular set of target relational expressions, |
| frozen in time.</div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </li> |
| <li class="blockList"> |
| <table class="typeSummary"> |
| <caption><span>Enum Summary</span><span class="tabEnd"> </span></caption> |
| <tr> |
| <th class="colFirst" scope="col">Enum</th> |
| <th class="colLast" scope="col">Description</th> |
| </tr> |
| <tbody> |
| <tr class="altColor"> |
| <th class="colFirst" scope="row"><a href="VolcanoPlannerPhase.html" title="enum in org.apache.calcite.plan.volcano">VolcanoPlannerPhase</a></th> |
| <td class="colLast"> |
| <div class="block">VolcanoPlannerPhase represents the phases of operation that the |
| <a href="VolcanoPlanner.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoPlanner</code></a> passes through during optimization of a tree of |
| <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> objects.</div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </li> |
| </ul> |
| </div> |
| </main> |
| <footer role="contentinfo"> |
| <nav role="navigation"> |
| <!-- ======= START OF BOTTOM NAVBAR ====== --> |
| <div class="bottomNav"><a id="navbar.bottom"> |
| <!-- --> |
| </a> |
| <div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div> |
| <a id="navbar.bottom.firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li><a href="../../../../../index.html">Overview</a></li> |
| <li class="navBarCell1Rev">Package</li> |
| <li>Class</li> |
| <li><a href="package-use.html">Use</a></li> |
| <li><a href="package-tree.html">Tree</a></li> |
| <li><a href="../../../../../deprecated-list.html">Deprecated</a></li> |
| <li><a href="../../../../../index-all.html">Index</a></li> |
| <li><a href="../../../../../help-doc.html">Help</a></li> |
| </ul> |
| </div> |
| <div class="subNav"> |
| <ul class="navList" id="allclasses_navbar_bottom"> |
| <li><a href="../../../../../allclasses.html">All Classes</a></li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_bottom"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| <noscript> |
| <div>JavaScript is disabled on your browser.</div> |
| </noscript> |
| </div> |
| <a id="skip.navbar.bottom"> |
| <!-- --> |
| </a></div> |
| <!-- ======== END OF BOTTOM NAVBAR ======= --> |
| </nav> |
| <p class="legalCopy"><small>Copyright © 2012–2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p> |
| </footer> |
| </body> |
| </html> |