blob: 8a91b1bcbd4ce3f83a3e613d24f36b9fb4f8ea54 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>VolcanoPlanner (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="VolcanoPlanner (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":9,"i24":10,"i25":10,"i26":10,"i27":9,"i28":9,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":9,"i45":10,"i46":9,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
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><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/VolcanoPlanner.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&nbsp;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>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.plan.volcano</a></div>
<h2 title="Class VolcanoPlanner" class="title">Class VolcanoPlanner</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">org.apache.calcite.plan.AbstractRelOptPlanner</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.plan.volcano.VolcanoPlanner</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">VolcanoPlanner</span>
extends <a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></pre>
<div class="block">VolcanoPlanner optimizes queries by transforming expressions selectively
according to a dynamic programming algorithm.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VolcanoPlanner.DeferringRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.DeferringRuleCall</a></span></code></th>
<td class="colLast">
<div class="block">A rule call which defers its actions.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VolcanoPlanner.DirectProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.DirectProvenance</a></span></code></th>
<td class="colLast">
<div class="block">A RelNode that came directly from another RelNode via a copy.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VolcanoPlanner.Provenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.Provenance</a></span></code></th>
<td class="colLast">
<div class="block">Where a RelNode came from.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VolcanoPlanner.RuleProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.RuleProvenance</a></span></code></th>
<td class="colLast">
<div class="block">A RelNode that came via the firing of a rule.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="VolcanoPlanner.UnknownProvenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.UnknownProvenance</a></span></code></th>
<td class="colLast">
<div class="block">We do not know where this RelNode came from.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.calcite.plan.RelOptPlanner">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.calcite.plan.<a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></h3>
<code><a href="../RelOptPlanner.CannotPlanException.html" title="class in org.apache.calcite.plan">RelOptPlanner.CannotPlanException</a>, <a href="../RelOptPlanner.Executor.html" title="interface in org.apache.calcite.plan">RelOptPlanner.Executor</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) java.util.List&lt;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#allSets">allSets</a></span></code></th>
<td class="colLast">
<div class="block">List of all sets.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ambitious">ambitious</a></span></code></th>
<td class="colLast">
<div class="block">If true, the planner keeps applying rules as long as they continue to
reduce the cost.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private com.google.common.collect.Multimap&lt;java.lang.Class&lt;? extends <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;,&#8203;<a href="../RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#classOperands">classOperands</a></span></code></th>
<td class="colLast">
<div class="block">Operands that apply to a given class of <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#COST_IMPROVEMENT">COST_IMPROVEMENT</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#impatient">impatient</a></span></code></th>
<td class="colLast">
<div class="block">If true, and if <a href="#ambitious"><code>ambitious</code></a> is true, the planner waits a finite
number of iterations for the cost to improve.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.Map&lt;java.util.List&lt;java.lang.String&gt;,&#8203;<a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#latticeByName">latticeByName</a></span></code></th>
<td class="colLast">
<div class="block">Map of lattices by the qualified name of their star table.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="../RelOptListener.html" title="interface in org.apache.calcite.plan">RelOptListener</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#listener">listener</a></span></code></th>
<td class="colLast">
<div class="block">Listener for this planner, or null if none set.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#locked">locked</a></span></code></th>
<td class="colLast">
<div class="block">Whether the planner can accept new rules.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.Map&lt;<a href="../../util/Pair.html" title="class in org.apache.calcite.util">Pair</a>&lt;java.lang.String,&#8203;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;,&#8203;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#mapDigestToRel">mapDigestToRel</a></span></code></th>
<td class="colLast">
<div class="block">Canonical map from <code>digest</code> to the unique
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>relational expression</code></a> with that digest.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.IdentityHashMap&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#mapRel2Subset">mapRel2Subset</a></span></code></th>
<td class="colLast">
<div class="block">Map each registered expression (<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>) to its equivalence set
(<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano"><code>RelSubset</code></a>).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#materializations">materializations</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#nextSetId">nextSetId</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#noneConventionHasInfiniteCost">noneConventionHasInfiniteCost</a></span></code></th>
<td class="colLast">
<div class="block">Whether rels with Convention.NONE has infinite cost.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#originalRoot">originalRoot</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) java.util.Map&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;<a href="VolcanoPlanner.Provenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.Provenance</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#provenanceMap">provenanceMap</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerCount">registerCount</a></span></code></th>
<td class="colLast">
<div class="block">Incremented every time a relational expression is registered or two sets
are merged.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.Set&lt;<a href="../RelOptSchema.html" title="interface in org.apache.calcite.plan">RelOptSchema</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registeredSchemas">registeredSchemas</a></span></code></th>
<td class="colLast">
<div class="block">List of all schemas which have been registered.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) java.util.Map&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;java.lang.Double&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#relImportances">relImportances</a></span></code></th>
<td class="colLast">
<div class="block">The importance of relational expressions.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#root">root</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) java.util.Deque&lt;<a href="VolcanoRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleCall</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ruleCallStack">ruleCallStack</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private com.google.common.collect.SetMultimap&lt;java.lang.String,&#8203;java.lang.Class&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ruleNames">ruleNames</a></span></code></th>
<td class="colLast">
<div class="block">Maps rule classes to their name, to ensure that the names are unique and
conform to rules.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="RuleQueue.html" title="class in org.apache.calcite.plan.volcano">RuleQueue</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ruleQueue">ruleQueue</a></span></code></th>
<td class="colLast">
<div class="block">Holds rule calls waiting to be fired.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected java.util.Set&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ruleSet">ruleSet</a></span></code></th>
<td class="colLast">
<div class="block">Set of all registered rules.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#traitDefs">traitDefs</a></span></code></th>
<td class="colLast">
<div class="block">Holds the currently registered RelTraitDefs.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#zeroCost">zeroCost</a></span></code></th>
<td class="colLast">
<div class="block">Zero cost, according to <a href="../AbstractRelOptPlanner.html#costFactory"><code>AbstractRelOptPlanner.costFactory</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.calcite.plan.AbstractRelOptPlanner">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.calcite.plan.<a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></h3>
<code><a href="../AbstractRelOptPlanner.html#context">context</a>, <a href="../AbstractRelOptPlanner.html#costFactory">costFactory</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.calcite.plan.RelOptPlanner">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.apache.calcite.plan.<a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></h3>
<code><a href="../RelOptPlanner.html#LOGGER">LOGGER</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">VolcanoPlanner</a></span>()</code></th>
<td class="colLast">
<div class="block">Creates a uninitialized <code>VolcanoPlanner</code>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.plan.Context)">VolcanoPlanner</a></span>&#8203;(<a href="../Context.html" title="interface in org.apache.calcite.plan">Context</a>&nbsp;externalContext)</code></th>
<td class="colLast">
<div class="block">Creates a uninitialized <code>VolcanoPlanner</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.plan.RelOptCostFactory,org.apache.calcite.plan.Context)">VolcanoPlanner</a></span>&#8203;(<a href="../RelOptCostFactory.html" title="interface in org.apache.calcite.plan">RelOptCostFactory</a>&nbsp;costFactory,
<a href="../Context.html" title="interface in org.apache.calcite.plan">Context</a>&nbsp;externalContext)</code></th>
<td class="colLast">
<div class="block">Creates a <code>VolcanoPlanner</code> with a given cost factory.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addLattice(org.apache.calcite.plan.RelOptLattice)">addLattice</a></span>&#8203;(<a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a>&nbsp;lattice)</code></th>
<td class="colLast">
<div class="block">Defines a lattice.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addListener(org.apache.calcite.plan.RelOptListener)">addListener</a></span>&#8203;(<a href="../RelOptListener.html" title="interface in org.apache.calcite.plan">RelOptListener</a>&nbsp;newListener)</code></th>
<td class="colLast">
<div class="block">Adds a listener to this planner.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMaterialization(org.apache.calcite.plan.RelOptMaterialization)">addMaterialization</a></span>&#8203;(<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&nbsp;materialization)</code></th>
<td class="colLast">
<div class="block">Defines a pair of relational expressions that are equivalent.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>private <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRelToSet(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.RelSet)">addRelToSet</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)">addRelTraitDef</a></span>&#8203;(<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&nbsp;relTraitDef)</code></th>
<td class="colLast">
<div class="block">Registers a rel trait definition.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRule(org.apache.calcite.plan.RelOptRule)">addRule</a></span>&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</code></th>
<td class="colLast">
<div class="block">Registers a rule.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>private <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canonize(org.apache.calcite.plan.volcano.RelSubset)">canonize</a></span>&#8203;(<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;subset)</code></th>
<td class="colLast">
<div class="block">If a subset has one or more equivalent subsets (owing to a set having
merged with another), returns the subset which is the leader of the
equivalence class.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#changeTraits(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">changeTraits</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits)</code></th>
<td class="colLast">
<div class="block">Changes a relational expression to an equivalent one with a different set
of traits.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>(package private) <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#changeTraitsUsingConverters(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">changeTraitsUsingConverters</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>private <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#changeTraitsUsingConverters(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet,boolean)">changeTraitsUsingConverters</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits,
boolean&nbsp;allowAbstractConverters)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkForSatisfiedConverters(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.rel.RelNode)">checkForSatisfiedConverters</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#chooseDelegate()">chooseDelegate</a></span>()</code></th>
<td class="colLast">
<div class="block">Negotiates an appropriate planner to deal with distributed queries.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clear()">clear</a></span>()</code></th>
<td class="colLast">
<div class="block">Removes all internal state, including all registered rules,
materialized views, and lattices.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearImportanceBoost()">clearImportanceBoost</a></span>()</code></th>
<td class="colLast">
<div class="block">Clear all importance boosts.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearRelTraitDefs()">clearRelTraitDefs</a></span>()</code></th>
<td class="colLast">
<div class="block">Clear all the registered RelTraitDef.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>private <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#completeConversion(org.apache.calcite.rel.RelNode,boolean,org.apache.calcite.plan.RelTraitSet,org.apache.calcite.linq4j.tree.Expressions.FluentList)">completeConversion</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
boolean&nbsp;allowInfiniteCostConverters,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits,
<a href="../../linq4j/tree/Expressions.FluentList.html" title="interface in org.apache.calcite.linq4j.tree">Expressions.FluentList</a>&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt;&nbsp;usedTraits)</code></th>
<td class="colLast">
<div class="block">Converts traits using well-founded induction.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dump(java.io.PrintWriter)">dump</a></span>&#8203;(java.io.PrintWriter&nbsp;pw)</code></th>
<td class="colLast">
<div class="block">Dumps the internal state of this VolcanoPlanner to a writer.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dumpGraphviz(java.io.PrintWriter)">dumpGraphviz</a></span>&#8203;(java.io.PrintWriter&nbsp;pw)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dumpSets(java.io.PrintWriter)">dumpSets</a></span>&#8203;(java.io.PrintWriter&nbsp;pw)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code><a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#emptyTraitSet()">emptyTraitSet</a></span>()</code></th>
<td class="colLast">
<div class="block">Creates an empty trait set.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">ensureRegistered</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel)</code></th>
<td class="colLast">
<div class="block">Registers a relational expression if it is not already registered.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.VolcanoRuleCall)">ensureRegistered</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel,
<a href="VolcanoRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleCall</a>&nbsp;ruleCall)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ensureRootConverters()">ensureRootConverters</a></span>()</code></th>
<td class="colLast">
<div class="block">Ensures that the subset that is the root relational expression contains
converters to all other subsets in its equivalence set.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>private static <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#equivRoot(org.apache.calcite.plan.volcano.RelSet)">equivRoot</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code><a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findBestExp()">findBestExp</a></span>()</code></th>
<td class="colLast">
<div class="block">Finds the most efficient expression to implement the query given via
<a href="../RelOptPlanner.html#setRoot(org.apache.calcite.rel.RelNode)"><code>RelOptPlanner.setRoot(org.apache.calcite.rel.RelNode)</code></a>.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#fireRules(org.apache.calcite.rel.RelNode,boolean)">fireRules</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
boolean&nbsp;deferred)</code></th>
<td class="colLast">
<div class="block">Fires all rules matched by a relational expression.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#fixUpInputs(org.apache.calcite.rel.RelNode)">fixUpInputs</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>private static <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forward1(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">forward1</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;p)</code></th>
<td class="colLast">
<div class="block">Moves forward one link, checking for a cycle.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>private static <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#forward2(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">forward2</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;p)</code></th>
<td class="colLast">
<div class="block">Moves forward two links, checking for a cycle at each.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code><a href="../RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCost(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">getCost</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></th>
<td class="colLast">
<div class="block">Computes the cost of a RelNode.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code><a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getLattice(org.apache.calcite.plan.RelOptTable)">getLattice</a></span>&#8203;(<a href="../RelOptTable.html" title="interface in org.apache.calcite.plan">RelOptTable</a>&nbsp;table)</code></th>
<td class="colLast">
<div class="block">Retrieves a lattice, given its star table.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMaterializations()">getMaterializations</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the materializations that have been registered with the planner.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>protected <a href="VolcanoPlannerPhaseRuleMappingInitializer.html" title="interface in org.apache.calcite.plan.volcano">VolcanoPlannerPhaseRuleMappingInitializer</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPhaseRuleMappingInitializer()">getPhaseRuleMappingInitializer</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRelMetadataTimestamp(org.apache.calcite.rel.RelNode)">getRelMetadataTimestamp</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Gets a timestamp for a given rel's metadata.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRelTraitDefs()">getRelTraitDefs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the list of active trait types.</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code><a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRoot()">getRoot</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the root node of this query.</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRules()">getRules</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the list of all registered rules.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code><a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSet(org.apache.calcite.rel.RelNode)">getSet</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Finds an expression's equivalence set.</div>
</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSubset(org.apache.calcite.rel.RelNode)">getSubset</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Returns the subset that a relational expression belongs to.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSubset(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">getSubset</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traits)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSubset(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet,boolean)">getSubset</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traits,
boolean&nbsp;createIfMissing)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#injectImportanceBoost()">injectImportanceBoost</a></span>()</code></th>
<td class="colLast">
<div class="block">Finds RelSubsets in the plan that contain only rels of
<a href="../Convention.html#NONE"><code>Convention.NONE</code></a> and boosts their importance by 25%.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isRegistered(org.apache.calcite.rel.RelNode)">isRegistered</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Determines whether a relational expression has been registered.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isValid(org.apache.calcite.util.Litmus)">isValid</a></span>&#8203;(<a href="../../util/Litmus.html" title="interface in org.apache.calcite.util">Litmus</a>&nbsp;litmus)</code></th>
<td class="colLast">
<div class="block">Checks internal consistency.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>private static <a href="../../util/Pair.html" title="class in org.apache.calcite.util">Pair</a>&lt;java.lang.String,&#8203;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#key(org.apache.calcite.rel.RelNode)">key</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Computes the key for <a href="#mapDigestToRel"><code>mapDigestToRel</code></a>.</div>
</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>private <a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#merge(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">merge</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set2)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#normalizePlan(java.lang.String)">normalizePlan</a></span>&#8203;(java.lang.String&nbsp;plan)</code></th>
<td class="colLast">
<div class="block">Normalizes references to subsets within the string representation of a
plan.</div>
</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onNewClass(org.apache.calcite.rel.RelNode)">onNewClass</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;node)</code></th>
<td class="colLast">
<div class="block">Called when a new class of <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> is seen.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>private java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#provenance(org.apache.calcite.rel.RelNode)">provenance</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;root)</code></th>
<td class="colLast">
<div class="block">Returns a multi-line string describing the provenance of a tree of
relational expressions.</div>
</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#provenanceRecurse(java.io.PrintWriter,org.apache.calcite.rel.RelNode,int,java.util.Set)">provenanceRecurse</a></span>&#8203;(java.io.PrintWriter&nbsp;pw,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;node,
int&nbsp;i,
java.util.Set&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;&nbsp;visited)</code></th>
<td class="colLast">
<div class="block">Helper for <a href="#provenance(org.apache.calcite.rel.RelNode)"><code>provenance(org.apache.calcite.rel.RelNode)</code></a>.</div>
</td>
</tr>
<tr id="i50" class="altColor">
<td class="colFirst"><code><a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#register(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">register</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel)</code></th>
<td class="colLast">
<div class="block">Registers a relational expression in the expression bank.</div>
</td>
</tr>
<tr id="i51" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerAbstractRelationalRules()">registerAbstractRelationalRules</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i52" class="altColor">
<td class="colFirst"><code>private <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerImpl(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.RelSet)">registerImpl</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set)</code></th>
<td class="colLast">
<div class="block">Registers a new expression <code>exp</code> and queues up rule matches.</div>
</td>
</tr>
<tr id="i53" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerMaterializations()">registerMaterializations</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i54" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerMetadataProviders(java.util.List)">registerMetadataProviders</a></span>&#8203;(java.util.List&lt;<a href="../../rel/metadata/RelMetadataProvider.html" title="interface in org.apache.calcite.rel.metadata">RelMetadataProvider</a>&gt;&nbsp;list)</code></th>
<td class="colLast">
<div class="block">Gives this planner a chance to register one or more
<a href="../../rel/metadata/RelMetadataProvider.html" title="interface in org.apache.calcite.rel.metadata"><code>RelMetadataProvider</code></a>s in the chain which will be used to answer
metadata queries.</div>
</td>
</tr>
<tr id="i55" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerMetadataRels()">registerMetadataRels</a></span>()</code></th>
<td class="colLast">
<div class="block">Informs <a href="../../rel/metadata/JaninoRelMetadataProvider.html" title="class in org.apache.calcite.rel.metadata"><code>JaninoRelMetadataProvider</code></a> about the different kinds of
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> that we will be dealing with.</div>
</td>
</tr>
<tr id="i56" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerSchema(org.apache.calcite.plan.RelOptSchema)">registerSchema</a></span>&#8203;(<a href="../RelOptSchema.html" title="interface in org.apache.calcite.plan">RelOptSchema</a>&nbsp;schema)</code></th>
<td class="colLast">
<div class="block">Tells this planner that a schema exists.</div>
</td>
</tr>
<tr id="i57" class="rowColor">
<td class="colFirst"><code>private <a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerSubset(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSubset)">registerSubset</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;subset)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i58" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeRule(org.apache.calcite.plan.RelOptRule)">removeRule</a></span>&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</code></th>
<td class="colLast">
<div class="block">Removes a rule.</div>
</td>
</tr>
<tr id="i59" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#rename(org.apache.calcite.rel.RelNode)">rename</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Re-computes the digest of a <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.</div>
</td>
</tr>
<tr id="i60" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reregister(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.rel.RelNode)">reregister</a></span>&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Registers a <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>, which has already been registered, in a new
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano"><code>RelSet</code></a>.</div>
</td>
</tr>
<tr id="i61" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setImportance(org.apache.calcite.rel.RelNode,double)">setImportance</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
double&nbsp;importance)</code></th>
<td class="colLast">
<div class="block">Sets the importance of a relational expression.</div>
</td>
</tr>
<tr id="i62" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setInitialImportance()">setInitialImportance</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i63" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setLocked(boolean)">setLocked</a></span>&#8203;(boolean&nbsp;locked)</code></th>
<td class="colLast">
<div class="block">Sets whether this planner is locked.</div>
</td>
</tr>
<tr id="i64" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setNoneConventionHasInfiniteCost(boolean)">setNoneConventionHasInfiniteCost</a></span>&#8203;(boolean&nbsp;infinite)</code></th>
<td class="colLast">
<div class="block">Sets whether this planner should consider rel nodes with Convention.NONE
to have inifinte cost or not.</div>
</td>
</tr>
<tr id="i65" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setRoot(org.apache.calcite.rel.RelNode)">setRoot</a></span>&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Sets the root node of this query.</div>
</td>
</tr>
<tr id="i66" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toDot()">toDot</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.calcite.plan.AbstractRelOptPlanner">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.calcite.plan.<a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></h3>
<code><a href="../AbstractRelOptPlanner.html#checkCancel()">checkCancel</a>, <a href="../AbstractRelOptPlanner.html#fireRule(org.apache.calcite.plan.RelOptRuleCall)">fireRule</a>, <a href="../AbstractRelOptPlanner.html#getContext()">getContext</a>, <a href="../AbstractRelOptPlanner.html#getCost(org.apache.calcite.rel.RelNode)">getCost</a>, <a href="../AbstractRelOptPlanner.html#getCostFactory()">getCostFactory</a>, <a href="../AbstractRelOptPlanner.html#getExecutor()">getExecutor</a>, <a href="../AbstractRelOptPlanner.html#getListener()">getListener</a>, <a href="../AbstractRelOptPlanner.html#getRuleByDescription(java.lang.String)">getRuleByDescription</a>, <a href="../AbstractRelOptPlanner.html#isRuleExcluded(org.apache.calcite.plan.RelOptRule)">isRuleExcluded</a>, <a href="../AbstractRelOptPlanner.html#mapRuleDescription(org.apache.calcite.plan.RelOptRule)">mapRuleDescription</a>, <a href="../AbstractRelOptPlanner.html#notifyChosen(org.apache.calcite.rel.RelNode)">notifyChosen</a>, <a href="../AbstractRelOptPlanner.html#notifyDiscard(org.apache.calcite.rel.RelNode)">notifyDiscard</a>, <a href="../AbstractRelOptPlanner.html#notifyEquivalence(org.apache.calcite.rel.RelNode,java.lang.Object,boolean)">notifyEquivalence</a>, <a href="../AbstractRelOptPlanner.html#notifyTransformation(org.apache.calcite.plan.RelOptRuleCall,org.apache.calcite.rel.RelNode,boolean)">notifyTransformation</a>, <a href="../AbstractRelOptPlanner.html#onCopy(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">onCopy</a>, <a href="../AbstractRelOptPlanner.html#registerClass(org.apache.calcite.rel.RelNode)">registerClass</a>, <a href="../AbstractRelOptPlanner.html#setCancelFlag(org.apache.calcite.util.CancelFlag)">setCancelFlag</a>, <a href="../AbstractRelOptPlanner.html#setExecutor(org.apache.calcite.rex.RexExecutor)">setExecutor</a>, <a href="../AbstractRelOptPlanner.html#setRuleDescExclusionFilter(java.util.regex.Pattern)">setRuleDescExclusionFilter</a>, <a href="../AbstractRelOptPlanner.html#subClasses(java.lang.Class)">subClasses</a>, <a href="../AbstractRelOptPlanner.html#unmapRuleDescription(org.apache.calcite.plan.RelOptRule)">unmapRuleDescription</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="COST_IMPROVEMENT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>COST_IMPROVEMENT</h4>
<pre>protected static final&nbsp;double COST_IMPROVEMENT</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.calcite.plan.volcano.VolcanoPlanner.COST_IMPROVEMENT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="root">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>root</h4>
<pre>protected&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a> root</pre>
</li>
</ul>
<a id="ambitious">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ambitious</h4>
<pre>protected&nbsp;boolean ambitious</pre>
<div class="block">If true, the planner keeps applying rules as long as they continue to
reduce the cost. If false, the planner terminates as soon as it has found
any implementation, no matter how expensive.</div>
</li>
</ul>
<a id="impatient">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>impatient</h4>
<pre>protected&nbsp;boolean impatient</pre>
<div class="block">If true, and if <a href="#ambitious"><code>ambitious</code></a> is true, the planner waits a finite
number of iterations for the cost to improve.
<p>The number of iterations K is equal to the number of iterations
required to get the first finite plan. After the first finite plan, it
continues to fire rules to try to improve it. The planner sets a target
cost of the current best cost multiplied by <a href="#COST_IMPROVEMENT"><code>COST_IMPROVEMENT</code></a>. If
it does not meet that cost target within K steps, it quits, and uses the
current best plan. If it meets the cost, it sets a new, lower target, and
has another K iterations to meet it. And so forth.
<p>If false, the planner continues to fire rules until the rule queue is
empty.</div>
</li>
</ul>
<a id="classOperands">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>classOperands</h4>
<pre>private final&nbsp;com.google.common.collect.Multimap&lt;java.lang.Class&lt;? extends <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;,&#8203;<a href="../RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&gt; classOperands</pre>
<div class="block">Operands that apply to a given class of <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.
<p>Any operand can be an 'entry point' to a rule call, when a RelNode is
registered which matches the operand. This map allows us to narrow down
operands based on the class of the RelNode.</p></div>
</li>
</ul>
<a id="allSets">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>allSets</h4>
<pre>final&nbsp;java.util.List&lt;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&gt; allSets</pre>
<div class="block">List of all sets. Used only for debugging.</div>
</li>
</ul>
<a id="mapDigestToRel">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mapDigestToRel</h4>
<pre>private final&nbsp;java.util.Map&lt;<a href="../../util/Pair.html" title="class in org.apache.calcite.util">Pair</a>&lt;java.lang.String,&#8203;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;,&#8203;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt; mapDigestToRel</pre>
<div class="block">Canonical map from <code>digest</code> to the unique
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>relational expression</code></a> with that digest.
<p>Row type is part of the key for the rare occasion that similar
expressions have different types, e.g. variants of
<code>Project(child=rel#1, a=null)</code> where a is a null INTEGER or a
null VARCHAR(10).</div>
</li>
</ul>
<a id="mapRel2Subset">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mapRel2Subset</h4>
<pre>private final&nbsp;java.util.IdentityHashMap&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&gt; mapRel2Subset</pre>
<div class="block">Map each registered expression (<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>) to its equivalence set
(<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano"><code>RelSubset</code></a>).
<p>We use an <code>IdentityHashMap</code> to simplify the process of merging
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano"><code>RelSet</code></a> objects. Most <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> objects are identified by
their digest, which involves the set that their child relational
expressions belong to. If those children belong to the same set, we have
to be careful, otherwise it gets incestuous.</p></div>
</li>
</ul>
<a id="relImportances">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>relImportances</h4>
<pre>final&nbsp;java.util.Map&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;java.lang.Double&gt; relImportances</pre>
<div class="block">The importance of relational expressions.
<p>The map contains only RelNodes whose importance has been overridden
using <a href="../RelOptPlanner.html#setImportance(org.apache.calcite.rel.RelNode,double)"><code>RelOptPlanner.setImportance(RelNode, double)</code></a>. Other
RelNodes are presumed to have 'normal' importance.
<p>If a RelNode has 0 importance, all <a href="../RelOptRuleCall.html" title="class in org.apache.calcite.plan"><code>RelOptRuleCall</code></a>s using it
are ignored, and future RelOptRuleCalls are not queued up.</div>
</li>
</ul>
<a id="registeredSchemas">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registeredSchemas</h4>
<pre>private final&nbsp;java.util.Set&lt;<a href="../RelOptSchema.html" title="interface in org.apache.calcite.plan">RelOptSchema</a>&gt; registeredSchemas</pre>
<div class="block">List of all schemas which have been registered.</div>
</li>
</ul>
<a id="ruleQueue">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ruleQueue</h4>
<pre>final&nbsp;<a href="RuleQueue.html" title="class in org.apache.calcite.plan.volcano">RuleQueue</a> ruleQueue</pre>
<div class="block">Holds rule calls waiting to be fired.</div>
</li>
</ul>
<a id="traitDefs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>traitDefs</h4>
<pre>private final&nbsp;java.util.List&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt; traitDefs</pre>
<div class="block">Holds the currently registered RelTraitDefs.</div>
</li>
</ul>
<a id="ruleSet">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ruleSet</h4>
<pre>protected final&nbsp;java.util.Set&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt; ruleSet</pre>
<div class="block">Set of all registered rules.</div>
</li>
</ul>
<a id="nextSetId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nextSetId</h4>
<pre>private&nbsp;int nextSetId</pre>
</li>
</ul>
<a id="registerCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerCount</h4>
<pre>private&nbsp;int registerCount</pre>
<div class="block">Incremented every time a relational expression is registered or two sets
are merged. Tells us whether anything is going on.</div>
</li>
</ul>
<a id="listener">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>listener</h4>
<pre><a href="../RelOptListener.html" title="interface in org.apache.calcite.plan">RelOptListener</a> listener</pre>
<div class="block">Listener for this planner, or null if none set.</div>
</li>
</ul>
<a id="originalRoot">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>originalRoot</h4>
<pre>private&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a> originalRoot</pre>
</li>
</ul>
<a id="locked">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>locked</h4>
<pre>private&nbsp;boolean locked</pre>
<div class="block">Whether the planner can accept new rules.</div>
</li>
</ul>
<a id="noneConventionHasInfiniteCost">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>noneConventionHasInfiniteCost</h4>
<pre>private&nbsp;boolean noneConventionHasInfiniteCost</pre>
<div class="block">Whether rels with Convention.NONE has infinite cost.</div>
</li>
</ul>
<a id="materializations">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>materializations</h4>
<pre>private final&nbsp;java.util.List&lt;<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&gt; materializations</pre>
</li>
</ul>
<a id="latticeByName">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>latticeByName</h4>
<pre>private final&nbsp;java.util.Map&lt;java.util.List&lt;java.lang.String&gt;,&#8203;<a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a>&gt; latticeByName</pre>
<div class="block">Map of lattices by the qualified name of their star table.</div>
</li>
</ul>
<a id="provenanceMap">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>provenanceMap</h4>
<pre>final&nbsp;java.util.Map&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>,&#8203;<a href="VolcanoPlanner.Provenance.html" title="class in org.apache.calcite.plan.volcano">VolcanoPlanner.Provenance</a>&gt; provenanceMap</pre>
</li>
</ul>
<a id="ruleCallStack">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ruleCallStack</h4>
<pre>final&nbsp;java.util.Deque&lt;<a href="VolcanoRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleCall</a>&gt; ruleCallStack</pre>
</li>
</ul>
<a id="zeroCost">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>zeroCost</h4>
<pre>private final&nbsp;<a href="../RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a> zeroCost</pre>
<div class="block">Zero cost, according to <a href="../AbstractRelOptPlanner.html#costFactory"><code>AbstractRelOptPlanner.costFactory</code></a>. Not necessarily a
<a href="VolcanoCost.html" title="class in org.apache.calcite.plan.volcano"><code>VolcanoCost</code></a>.</div>
</li>
</ul>
<a id="ruleNames">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ruleNames</h4>
<pre>private final&nbsp;com.google.common.collect.SetMultimap&lt;java.lang.String,&#8203;java.lang.Class&gt; ruleNames</pre>
<div class="block">Maps rule classes to their name, to ensure that the names are unique and
conform to rules.</div>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VolcanoPlanner</h4>
<pre>public&nbsp;VolcanoPlanner()</pre>
<div class="block">Creates a uninitialized <code>VolcanoPlanner</code>. To fully initialize
it, the caller must register the desired set of relations, rules, and
calling conventions.</div>
</li>
</ul>
<a id="&lt;init&gt;(org.apache.calcite.plan.Context)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VolcanoPlanner</h4>
<pre>public&nbsp;VolcanoPlanner&#8203;(<a href="../Context.html" title="interface in org.apache.calcite.plan">Context</a>&nbsp;externalContext)</pre>
<div class="block">Creates a uninitialized <code>VolcanoPlanner</code>. To fully initialize
it, the caller must register the desired set of relations, rules, and
calling conventions.</div>
</li>
</ul>
<a id="&lt;init&gt;(org.apache.calcite.plan.RelOptCostFactory,org.apache.calcite.plan.Context)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>VolcanoPlanner</h4>
<pre>public&nbsp;VolcanoPlanner&#8203;(<a href="../RelOptCostFactory.html" title="interface in org.apache.calcite.plan">RelOptCostFactory</a>&nbsp;costFactory,
<a href="../Context.html" title="interface in org.apache.calcite.plan">Context</a>&nbsp;externalContext)</pre>
<div class="block">Creates a <code>VolcanoPlanner</code> with a given cost factory.</div>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="getPhaseRuleMappingInitializer()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPhaseRuleMappingInitializer</h4>
<pre class="methodSignature">protected&nbsp;<a href="VolcanoPlannerPhaseRuleMappingInitializer.html" title="interface in org.apache.calcite.plan.volcano">VolcanoPlannerPhaseRuleMappingInitializer</a>&nbsp;getPhaseRuleMappingInitializer()</pre>
</li>
</ul>
<a id="isRegistered(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRegistered</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isRegistered&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#isRegistered(org.apache.calcite.rel.RelNode)">RelOptPlanner</a></code></span></div>
<div class="block">Determines whether a relational expression has been registered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - expression to test</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether rel has been registered</dd>
</dl>
</li>
</ul>
<a id="setRoot(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setRoot</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setRoot&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#setRoot(org.apache.calcite.rel.RelNode)">RelOptPlanner</a></code></span></div>
<div class="block">Sets the root node of this query.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
</dl>
</li>
</ul>
<a id="getRoot()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRoot</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;getRoot()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getRoot()">RelOptPlanner</a></code></span></div>
<div class="block">Returns the root node of this query.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Root node</dd>
</dl>
</li>
</ul>
<a id="getMaterializations()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaterializations</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&gt;&nbsp;getMaterializations()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getMaterializations()">RelOptPlanner</a></code></span></div>
<div class="block">Returns the materializations that have been registered with the planner.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#getMaterializations()">getMaterializations</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#getMaterializations()">getMaterializations</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="addMaterialization(org.apache.calcite.plan.RelOptMaterialization)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMaterialization</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMaterialization&#8203;(<a href="../RelOptMaterialization.html" title="class in org.apache.calcite.plan">RelOptMaterialization</a>&nbsp;materialization)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#addMaterialization(org.apache.calcite.plan.RelOptMaterialization)">RelOptPlanner</a></code></span></div>
<div class="block">Defines a pair of relational expressions that are equivalent.
<p>Typically <code>tableRel</code> is a
<a href="../../rel/logical/LogicalTableScan.html" title="class in org.apache.calcite.rel.logical"><code>LogicalTableScan</code></a> representing a
table that is a materialized view and <code>queryRel</code> is the SQL
expression that populates that view. The intention is that
<code>tableRel</code> is cheaper to evaluate and therefore if the query being
optimized uses (or can be rewritten to use) <code>queryRel</code> as a
sub-expression then it can be optimized by using <code>tableRel</code>
instead.</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#addMaterialization(org.apache.calcite.plan.RelOptMaterialization)">addMaterialization</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#addMaterialization(org.apache.calcite.plan.RelOptMaterialization)">addMaterialization</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="addLattice(org.apache.calcite.plan.RelOptLattice)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addLattice</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addLattice&#8203;(<a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a>&nbsp;lattice)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#addLattice(org.apache.calcite.plan.RelOptLattice)">RelOptPlanner</a></code></span></div>
<div class="block">Defines a lattice.
<p>The lattice may have materializations; it is not necessary to call
<a href="../RelOptPlanner.html#addMaterialization(org.apache.calcite.plan.RelOptMaterialization)"><code>RelOptPlanner.addMaterialization(org.apache.calcite.plan.RelOptMaterialization)</code></a> for these; they are registered implicitly.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#addLattice(org.apache.calcite.plan.RelOptLattice)">addLattice</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#addLattice(org.apache.calcite.plan.RelOptLattice)">addLattice</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="getLattice(org.apache.calcite.plan.RelOptTable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLattice</h4>
<pre class="methodSignature">public&nbsp;<a href="../RelOptLattice.html" title="class in org.apache.calcite.plan">RelOptLattice</a>&nbsp;getLattice&#8203;(<a href="../RelOptTable.html" title="interface in org.apache.calcite.plan">RelOptTable</a>&nbsp;table)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getLattice(org.apache.calcite.plan.RelOptTable)">RelOptPlanner</a></code></span></div>
<div class="block">Retrieves a lattice, given its star table.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#getLattice(org.apache.calcite.plan.RelOptTable)">getLattice</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#getLattice(org.apache.calcite.plan.RelOptTable)">getLattice</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="registerMaterializations()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerMaterializations</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;registerMaterializations()</pre>
</li>
</ul>
<a id="getSet(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSet</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;getSet&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Finds an expression's equivalence set. If the expression is not
registered, returns null.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Equivalence set that expression belongs to, or null if it is not
registered</dd>
</dl>
</li>
</ul>
<a id="addRelTraitDef(org.apache.calcite.plan.RelTraitDef)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRelTraitDef</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;addRelTraitDef&#8203;(<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&nbsp;relTraitDef)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)">RelOptPlanner</a></code></span></div>
<div class="block">Registers a rel trait definition. If the <a href="../RelTraitDef.html" title="class in org.apache.calcite.plan"><code>RelTraitDef</code></a> has already
been registered, does nothing.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)">addRelTraitDef</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)">addRelTraitDef</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether the RelTraitDef was added, as per
<code>Collection.add(E)</code></dd>
</dl>
</li>
</ul>
<a id="clearRelTraitDefs()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearRelTraitDefs</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;clearRelTraitDefs()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#clearRelTraitDefs()">RelOptPlanner</a></code></span></div>
<div class="block">Clear all the registered RelTraitDef.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#clearRelTraitDefs()">clearRelTraitDefs</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#clearRelTraitDefs()">clearRelTraitDefs</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="getRelTraitDefs()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRelTraitDefs</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt;&nbsp;getRelTraitDefs()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getRelTraitDefs()">RelOptPlanner</a></code></span></div>
<div class="block">Returns the list of active trait types.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#getRelTraitDefs()">getRelTraitDefs</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#getRelTraitDefs()">getRelTraitDefs</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="emptyTraitSet()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>emptyTraitSet</h4>
<pre class="methodSignature">public&nbsp;<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;emptyTraitSet()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#emptyTraitSet()">RelOptPlanner</a></code></span></div>
<div class="block">Creates an empty trait set. It contains all registered traits, and the
default values of any traits that have them.
<p>The empty trait set acts as the prototype (a kind of factory) for all
subsequently created trait sets.</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#emptyTraitSet()">emptyTraitSet</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#emptyTraitSet()">emptyTraitSet</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Empty trait set</dd>
</dl>
</li>
</ul>
<a id="clear()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;clear()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#clear()">RelOptPlanner</a></code></span></div>
<div class="block">Removes all internal state, including all registered rules,
materialized views, and lattices.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#clear()">clear</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#clear()">clear</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="getRules()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRules</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;&nbsp;getRules()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getRules()">RelOptPlanner</a></code></span></div>
<div class="block">Returns the list of all registered rules.</div>
</li>
</ul>
<a id="addRule(org.apache.calcite.plan.RelOptRule)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRule</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;addRule&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)">RelOptPlanner</a></code></span></div>
<div class="block">Registers a rule.
<p>If the rule has already been registered, does nothing.
This method determines if the given rule is a
<a href="../../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert"><code>ConverterRule</code></a> and pass the
ConverterRule to all
<a href="../RelOptPlanner.html#addRelTraitDef(org.apache.calcite.plan.RelTraitDef)"><code>registered</code></a> RelTraitDef
instances.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether the rule was added, as per
<code>Collection.add(E)</code></dd>
</dl>
</li>
</ul>
<a id="removeRule(org.apache.calcite.plan.RelOptRule)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeRule</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;removeRule&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#removeRule(org.apache.calcite.plan.RelOptRule)">RelOptPlanner</a></code></span></div>
<div class="block">Removes a rule.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the rule was present, as per
<code>Collection.remove(Object)</code></dd>
</dl>
</li>
</ul>
<a id="onNewClass(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onNewClass</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;onNewClass&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;node)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../AbstractRelOptPlanner.html#onNewClass(org.apache.calcite.rel.RelNode)">AbstractRelOptPlanner</a></code></span></div>
<div class="block">Called when a new class of <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> is seen.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#onNewClass(org.apache.calcite.rel.RelNode)">onNewClass</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="changeTraits(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>changeTraits</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;changeTraits&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#changeTraits(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">RelOptPlanner</a></code></span></div>
<div class="block">Changes a relational expression to an equivalent one with a different set
of traits.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression (may or may not have been registered; must
not have the desired traits)</dd>
<dd><code>toTraits</code> - Trait set to convert the relational expression to</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Relational expression with desired traits. Never null, but may be
abstract</dd>
</dl>
</li>
</ul>
<a id="chooseDelegate()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>chooseDelegate</h4>
<pre class="methodSignature">public&nbsp;<a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;chooseDelegate()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#chooseDelegate()">RelOptPlanner</a></code></span></div>
<div class="block">Negotiates an appropriate planner to deal with distributed queries. The
idea is that the schemas decide among themselves which has the most
knowledge. Right now, the local planner retains control.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#chooseDelegate()">chooseDelegate</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#chooseDelegate()">chooseDelegate</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="findBestExp()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findBestExp</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;findBestExp()</pre>
<div class="block">Finds the most efficient expression to implement the query given via
<a href="../RelOptPlanner.html#setRoot(org.apache.calcite.rel.RelNode)"><code>RelOptPlanner.setRoot(org.apache.calcite.rel.RelNode)</code></a>.
<p>The algorithm executes repeatedly in a series of phases. In each phase
the exact rules that may be fired varies. The mapping of phases to rule
sets is maintained in the <a href="#ruleQueue"><code>ruleQueue</code></a>.
<p>In each phase, the planner sets the initial importance of the existing
RelSubSets (<a href="#setInitialImportance()"><code>setInitialImportance()</code></a>). The planner then iterates
over the rule matches presented by the rule queue until:
<ol>
<li>The rule queue becomes empty.</li>
<li>For ambitious planners: No improvements to the plan have been made
recently (specifically within a number of iterations that is 10% of the
number of iterations necessary to first reach an implementable plan or 25
iterations whichever is larger).</li>
<li>For non-ambitious planners: When an implementable plan is found.</li>
</ol>
<p>Furthermore, after every 10 iterations without an implementable plan,
RelSubSets that contain only logical RelNodes are given an importance
boost via <a href="#injectImportanceBoost()"><code>injectImportanceBoost()</code></a>. Once an implementable plan is
found, the artificially raised importance values are cleared (see
<a href="#clearImportanceBoost()"><code>clearImportanceBoost()</code></a>).</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the most efficient RelNode tree found for implementing the given
query</dd>
</dl>
</li>
</ul>
<a id="registerMetadataRels()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerMetadataRels</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;registerMetadataRels()</pre>
<div class="block">Informs <a href="../../rel/metadata/JaninoRelMetadataProvider.html" title="class in org.apache.calcite.rel.metadata"><code>JaninoRelMetadataProvider</code></a> about the different kinds of
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a> that we will be dealing with. It will reduce the number
of times that we need to re-generate the provider.</div>
</li>
</ul>
<a id="ensureRootConverters()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ensureRootConverters</h4>
<pre class="methodSignature">void&nbsp;ensureRootConverters()</pre>
<div class="block">Ensures that the subset that is the root relational expression contains
converters to all other subsets in its equivalence set.
<p>Thus the planner tries to find cheap implementations of those other
subsets, which can then be converted to the root. This is the only place
in the plan where explicit converters are required; elsewhere, a consumer
will be asking for the result in a particular convention, but the root has
no consumers.</div>
</li>
</ul>
<a id="provenance(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>provenance</h4>
<pre class="methodSignature">private&nbsp;java.lang.String&nbsp;provenance&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;root)</pre>
<div class="block">Returns a multi-line string describing the provenance of a tree of
relational expressions. For each node in the tree, prints the rule that
created the node, if any. Recursively describes the provenance of the
relational expressions that are the arguments to that rule.
<p>Thus, every relational expression and rule invocation that affected
the final outcome is described in the provenance. This can be useful
when finding the root cause of "mistakes" in a query plan.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>root</code> - Root relational expression in a tree</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Multi-line string describing the rules that created the tree</dd>
</dl>
</li>
</ul>
<a id="provenanceRecurse(java.io.PrintWriter,org.apache.calcite.rel.RelNode,int,java.util.Set)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>provenanceRecurse</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;provenanceRecurse&#8203;(java.io.PrintWriter&nbsp;pw,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;node,
int&nbsp;i,
java.util.Set&lt;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;&nbsp;visited)</pre>
<div class="block">Helper for <a href="#provenance(org.apache.calcite.rel.RelNode)"><code>provenance(org.apache.calcite.rel.RelNode)</code></a>.</div>
</li>
</ul>
<a id="setInitialImportance()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setInitialImportance</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;setInitialImportance()</pre>
</li>
</ul>
<a id="injectImportanceBoost()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>injectImportanceBoost</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;injectImportanceBoost()</pre>
<div class="block">Finds RelSubsets in the plan that contain only rels of
<a href="../Convention.html#NONE"><code>Convention.NONE</code></a> and boosts their importance by 25%.</div>
</li>
</ul>
<a id="clearImportanceBoost()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearImportanceBoost</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;clearImportanceBoost()</pre>
<div class="block">Clear all importance boosts.</div>
</li>
</ul>
<a id="register(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>register</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;register&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#register(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">RelOptPlanner</a></code></span></div>
<div class="block">Registers a relational expression in the expression bank.
<p>After it has been registered, you may not modify it.
<p>The expression must not already have been registered. If you are not
sure whether it has been registered, call
<a href="../RelOptPlanner.html#ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)"><code>RelOptPlanner.ensureRegistered(RelNode, RelNode)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression to register (must not already be
registered)</dd>
<dd><code>equivRel</code> - Relational expression it is equivalent to (may be null)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the same expression, or an equivalent existing expression</dd>
</dl>
</li>
</ul>
<a id="ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ensureRegistered</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;ensureRegistered&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode)">RelOptPlanner</a></code></span></div>
<div class="block">Registers a relational expression if it is not already registered.
<p>If <code>equivRel</code> is specified, <code>rel</code> is placed in the same
equivalence set. It is OK if <code>equivRel</code> has different traits;
<code>rel</code> will end up in a different subset of the same set.
<p>It is OK if <code>rel</code> is a subset.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression to register</dd>
<dd><code>equivRel</code> - Relational expression it is equivalent to (may be null)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Registered relational expression</dd>
</dl>
</li>
</ul>
<a id="isValid(org.apache.calcite.util.Litmus)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isValid</h4>
<pre class="methodSignature">protected&nbsp;boolean&nbsp;isValid&#8203;(<a href="../../util/Litmus.html" title="interface in org.apache.calcite.util">Litmus</a>&nbsp;litmus)</pre>
<div class="block">Checks internal consistency.</div>
</li>
</ul>
<a id="registerAbstractRelationalRules()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerAbstractRelationalRules</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;registerAbstractRelationalRules()</pre>
</li>
</ul>
<a id="registerSchema(org.apache.calcite.plan.RelOptSchema)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerSchema</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;registerSchema&#8203;(<a href="../RelOptSchema.html" title="interface in org.apache.calcite.plan">RelOptSchema</a>&nbsp;schema)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#registerSchema(org.apache.calcite.plan.RelOptSchema)">RelOptPlanner</a></code></span></div>
<div class="block">Tells this planner that a schema exists. This is the schema's chance to
tell the planner about all of the special transformation rules.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#registerSchema(org.apache.calcite.plan.RelOptSchema)">registerSchema</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#registerSchema(org.apache.calcite.plan.RelOptSchema)">registerSchema</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
</dl>
</li>
</ul>
<a id="setNoneConventionHasInfiniteCost(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setNoneConventionHasInfiniteCost</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setNoneConventionHasInfiniteCost&#8203;(boolean&nbsp;infinite)</pre>
<div class="block">Sets whether this planner should consider rel nodes with Convention.NONE
to have inifinte cost or not.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>infinite</code> - Whether to make none convention rel nodes inifite cost</dd>
</dl>
</li>
</ul>
<a id="getCost(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCost</h4>
<pre class="methodSignature">public&nbsp;<a href="../RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a>&nbsp;getCost&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getCost(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">RelOptPlanner</a></code></span></div>
<div class="block">Computes the cost of a RelNode. In most cases, this just dispatches to
<a href="../../rel/metadata/RelMetadataQuery.html#getCumulativeCost(org.apache.calcite.rel.RelNode)"><code>RelMetadataQuery.getCumulativeCost(org.apache.calcite.rel.RelNode)</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#getCost(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">getCost</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#getCost(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">getCost</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression of interest</dd>
<dd><code>mq</code> - Metadata query</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>estimated cost</dd>
</dl>
</li>
</ul>
<a id="getSubset(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSubset</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;getSubset&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Returns the subset that a relational expression belongs to.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Subset it belongs to, or null if it is not registered</dd>
</dl>
</li>
</ul>
<a id="getSubset(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSubset</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;getSubset&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traits)</pre>
</li>
</ul>
<a id="getSubset(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSubset</h4>
<pre class="methodSignature">public&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;getSubset&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traits,
boolean&nbsp;createIfMissing)</pre>
</li>
</ul>
<a id="changeTraitsUsingConverters(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>changeTraitsUsingConverters</h4>
<pre class="methodSignature">private&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;changeTraitsUsingConverters&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits,
boolean&nbsp;allowAbstractConverters)</pre>
</li>
</ul>
<a id="completeConversion(org.apache.calcite.rel.RelNode,boolean,org.apache.calcite.plan.RelTraitSet,org.apache.calcite.linq4j.tree.Expressions.FluentList)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>completeConversion</h4>
<pre class="methodSignature">private&nbsp;<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;completeConversion&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
boolean&nbsp;allowInfiniteCostConverters,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits,
<a href="../../linq4j/tree/Expressions.FluentList.html" title="interface in org.apache.calcite.linq4j.tree">Expressions.FluentList</a>&lt;<a href="../RelTraitDef.html" title="class in org.apache.calcite.plan">RelTraitDef</a>&gt;&nbsp;usedTraits)</pre>
<div class="block">Converts traits using well-founded induction. We don't require that
each conversion preserves all traits that have previously been converted,
but if it changes "locked in" traits we'll try some other conversion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
<dd><code>allowInfiniteCostConverters</code> - Whether to allow infinite converters</dd>
<dd><code>toTraits</code> - Target trait set</dd>
<dd><code>usedTraits</code> - Traits that have been locked in</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Converted relational expression</dd>
</dl>
</li>
</ul>
<a id="changeTraitsUsingConverters(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>changeTraitsUsingConverters</h4>
<pre class="methodSignature"><a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;changeTraitsUsingConverters&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;toTraits)</pre>
</li>
</ul>
<a id="checkForSatisfiedConverters(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>checkForSatisfiedConverters</h4>
<pre class="methodSignature">void&nbsp;checkForSatisfiedConverters&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
</li>
</ul>
<a id="setImportance(org.apache.calcite.rel.RelNode,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setImportance</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setImportance&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
double&nbsp;importance)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#setImportance(org.apache.calcite.rel.RelNode,double)">RelOptPlanner</a></code></span></div>
<div class="block">Sets the importance of a relational expression.
<p>An important use of this method is when a <a href="../RelOptRule.html" title="class in org.apache.calcite.plan"><code>RelOptRule</code></a> has
created a relational expression which is indisputably better than the
original relational expression. The rule set the original relational
expression's importance to zero, to reduce the search space. Pending rule
calls are cancelled, and future rules will not fire.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#setImportance(org.apache.calcite.rel.RelNode,double)">setImportance</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#setImportance(org.apache.calcite.rel.RelNode,double)">setImportance</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
<dd><code>importance</code> - Importance</dd>
</dl>
</li>
</ul>
<a id="dump(java.io.PrintWriter)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dump</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;dump&#8203;(java.io.PrintWriter&nbsp;pw)</pre>
<div class="block">Dumps the internal state of this VolcanoPlanner to a writer.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pw</code> - Print writer</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="#normalizePlan(java.lang.String)"><code>normalizePlan(String)</code></a></dd>
</dl>
</li>
</ul>
<a id="key(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>key</h4>
<pre class="methodSignature">private static&nbsp;<a href="../../util/Pair.html" title="class in org.apache.calcite.util">Pair</a>&lt;java.lang.String,&#8203;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;key&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Computes the key for <a href="#mapDigestToRel"><code>mapDigestToRel</code></a>.</div>
</li>
</ul>
<a id="toDot()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toDot</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;toDot()</pre>
</li>
</ul>
<a id="dumpSets(java.io.PrintWriter)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dumpSets</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;dumpSets&#8203;(java.io.PrintWriter&nbsp;pw)</pre>
</li>
</ul>
<a id="dumpGraphviz(java.io.PrintWriter)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dumpGraphviz</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;dumpGraphviz&#8203;(java.io.PrintWriter&nbsp;pw)</pre>
</li>
</ul>
<a id="rename(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rename</h4>
<pre class="methodSignature">void&nbsp;rename&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Re-computes the digest of a <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.
<p>Since a relational expression's digest contains the identifiers of its
children, this method needs to be called when the child has been renamed,
for example if the child's set merges with another.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression</dd>
</dl>
</li>
</ul>
<a id="reregister(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reregister</h4>
<pre class="methodSignature">void&nbsp;reregister&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Registers a <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>, which has already been registered, in a new
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano"><code>RelSet</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>set</code> - Set</dd>
<dd><code>rel</code> - Relational expression</dd>
</dl>
</li>
</ul>
<a id="canonize(org.apache.calcite.plan.volcano.RelSubset)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canonize</h4>
<pre class="methodSignature">private&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;canonize&#8203;(<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;subset)</pre>
<div class="block">If a subset has one or more equivalent subsets (owing to a set having
merged with another), returns the subset which is the leader of the
equivalence class.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>subset</code> - Subset</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Leader of subset's equivalence class</dd>
</dl>
</li>
</ul>
<a id="fireRules(org.apache.calcite.rel.RelNode,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fireRules</h4>
<pre class="methodSignature">void&nbsp;fireRules&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
boolean&nbsp;deferred)</pre>
<div class="block">Fires all rules matched by a relational expression.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Relational expression which has just been created (or maybe
from the queue)</dd>
<dd><code>deferred</code> - If true, each time a rule matches, just add an entry to
the queue.</dd>
</dl>
</li>
</ul>
<a id="fixUpInputs(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fixUpInputs</h4>
<pre class="methodSignature">private&nbsp;boolean&nbsp;fixUpInputs&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
</li>
</ul>
<a id="merge(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>merge</h4>
<pre class="methodSignature">private&nbsp;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;merge&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set2)</pre>
</li>
</ul>
<a id="equivRoot(org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>equivRoot</h4>
<pre class="methodSignature">private static&nbsp;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;equivRoot&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s)</pre>
</li>
</ul>
<a id="forward2(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>forward2</h4>
<pre class="methodSignature">private static&nbsp;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;forward2&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;p)</pre>
<div class="block">Moves forward two links, checking for a cycle at each.</div>
</li>
</ul>
<a id="forward1(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>forward1</h4>
<pre class="methodSignature">private static&nbsp;<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;forward1&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;s,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;p)</pre>
<div class="block">Moves forward one link, checking for a cycle.</div>
</li>
</ul>
<a id="registerImpl(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerImpl</h4>
<pre class="methodSignature">private&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;registerImpl&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set)</pre>
<div class="block">Registers a new expression <code>exp</code> and queues up rule matches.
If <code>set</code> is not null, makes the expression part of that
equivalence set. If an identical expression is already registered, we
don't need to register this one and nor should we queue up rule matches.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - relational expression to register. Must be either a
<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano"><code>RelSubset</code></a>, or an unregistered <a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a></dd>
<dd><code>set</code> - set that rel belongs to, or <code>null</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the equivalence-set</dd>
</dl>
</li>
</ul>
<a id="addRelToSet(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.RelSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRelToSet</h4>
<pre class="methodSignature">private&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;addRelToSet&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set)</pre>
</li>
</ul>
<a id="registerSubset(org.apache.calcite.plan.volcano.RelSet,org.apache.calcite.plan.volcano.RelSubset)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerSubset</h4>
<pre class="methodSignature">private&nbsp;<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;registerSubset&#8203;(<a href="RelSet.html" title="class in org.apache.calcite.plan.volcano">RelSet</a>&nbsp;set,
<a href="RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a>&nbsp;subset)</pre>
</li>
</ul>
<a id="addListener(org.apache.calcite.plan.RelOptListener)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addListener</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addListener&#8203;(<a href="../RelOptListener.html" title="interface in org.apache.calcite.plan">RelOptListener</a>&nbsp;newListener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#addListener(org.apache.calcite.plan.RelOptListener)">RelOptPlanner</a></code></span></div>
<div class="block">Adds a listener to this planner.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#addListener(org.apache.calcite.plan.RelOptListener)">addListener</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#addListener(org.apache.calcite.plan.RelOptListener)">addListener</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>newListener</code> - new listener to be notified of events</dd>
</dl>
</li>
</ul>
<a id="registerMetadataProviders(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerMetadataProviders</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;registerMetadataProviders&#8203;(java.util.List&lt;<a href="../../rel/metadata/RelMetadataProvider.html" title="interface in org.apache.calcite.rel.metadata">RelMetadataProvider</a>&gt;&nbsp;list)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#registerMetadataProviders(java.util.List)">RelOptPlanner</a></code></span></div>
<div class="block">Gives this planner a chance to register one or more
<a href="../../rel/metadata/RelMetadataProvider.html" title="interface in org.apache.calcite.rel.metadata"><code>RelMetadataProvider</code></a>s in the chain which will be used to answer
metadata queries.
<p>Planners which use their own relational expressions internally
to represent concepts such as equivalence classes will generally need to
supply corresponding metadata providers.</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#registerMetadataProviders(java.util.List)">registerMetadataProviders</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#registerMetadataProviders(java.util.List)">registerMetadataProviders</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>list</code> - receives planner's custom providers, if any</dd>
</dl>
</li>
</ul>
<a id="getRelMetadataTimestamp(org.apache.calcite.rel.RelNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRelMetadataTimestamp</h4>
<pre class="methodSignature">public&nbsp;long&nbsp;getRelMetadataTimestamp&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../RelOptPlanner.html#getRelMetadataTimestamp(org.apache.calcite.rel.RelNode)">RelOptPlanner</a></code></span></div>
<div class="block">Gets a timestamp for a given rel's metadata. This timestamp is used by
<a href="../../rel/metadata/CachingRelMetadataProvider.html" title="class in org.apache.calcite.rel.metadata"><code>CachingRelMetadataProvider</code></a> to decide whether cached metadata has
gone stale.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../RelOptPlanner.html#getRelMetadataTimestamp(org.apache.calcite.rel.RelNode)">getRelMetadataTimestamp</a></code>&nbsp;in interface&nbsp;<code><a href="../RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../AbstractRelOptPlanner.html#getRelMetadataTimestamp(org.apache.calcite.rel.RelNode)">getRelMetadataTimestamp</a></code>&nbsp;in class&nbsp;<code><a href="../AbstractRelOptPlanner.html" title="class in org.apache.calcite.plan">AbstractRelOptPlanner</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - rel of interest</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>timestamp of last change which might affect metadata derivation</dd>
</dl>
</li>
</ul>
<a id="normalizePlan(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>normalizePlan</h4>
<pre class="methodSignature">public static&nbsp;java.lang.String&nbsp;normalizePlan&#8203;(java.lang.String&nbsp;plan)</pre>
<div class="block">Normalizes references to subsets within the string representation of a
plan.
<p>This is useful when writing tests: it helps to ensure that tests don't
break when an extra rule is introduced that generates a new subset and
causes subsequent subset numbers to be off by one.
<p>For example,
<blockquote>
FennelAggRel.FENNEL_EXEC(child=Subset#17.FENNEL_EXEC,groupCount=1,
EXPR$1=COUNT())<br>
&nbsp;&nbsp;FennelSortRel.FENNEL_EXEC(child=Subset#2.FENNEL_EXEC,
key=[0], discardDuplicates=false)<br>
&nbsp;&nbsp;&nbsp;&nbsp;FennelCalcRel.FENNEL_EXEC(
child=Subset#4.FENNEL_EXEC, expr#0..8={inputs}, expr#9=3456,
DEPTNO=$t7, $f0=$t9)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MockTableImplRel.FENNEL_EXEC(
table=[CATALOG, SALES, EMP])</blockquote>
<p>becomes
<blockquote>
FennelAggRel.FENNEL_EXEC(child=Subset#{0}.FENNEL_EXEC, groupCount=1,
EXPR$1=COUNT())<br>
&nbsp;&nbsp;FennelSortRel.FENNEL_EXEC(child=Subset#{1}.FENNEL_EXEC,
key=[0], discardDuplicates=false)<br>
&nbsp;&nbsp;&nbsp;&nbsp;FennelCalcRel.FENNEL_EXEC(
child=Subset#{2}.FENNEL_EXEC,expr#0..8={inputs},expr#9=3456,DEPTNO=$t7,
$f0=$t9)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MockTableImplRel.FENNEL_EXEC(
table=[CATALOG, SALES, EMP])</blockquote></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>plan</code> - Plan</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Normalized plan</dd>
</dl>
</li>
</ul>
<a id="setLocked(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setLocked</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setLocked&#8203;(boolean&nbsp;locked)</pre>
<div class="block">Sets whether this planner is locked. A locked planner does not accept
new rules. <a href="#addRule(org.apache.calcite.plan.RelOptRule)"><code>addRule(org.apache.calcite.plan.RelOptRule)</code></a> will do
nothing and return false.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>locked</code> - Whether planner is locked</dd>
</dl>
</li>
</ul>
<a id="ensureRegistered(org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,org.apache.calcite.plan.volcano.VolcanoRuleCall)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ensureRegistered</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;ensureRegistered&#8203;(<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;equivRel,
<a href="VolcanoRuleCall.html" title="class in org.apache.calcite.plan.volcano">VolcanoRuleCall</a>&nbsp;ruleCall)</pre>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<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><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/VolcanoPlanner.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&nbsp;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>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2012&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>