blob: 7a18a948e0630c72cb27572179d655040a76c73e [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>org.apache.calcite.rel.rules (Apache Calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="org.apache.calcite.rel.rules (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&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>
<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>
<main role="main">
<div class="header">
<h1 title="Package" class="title">Package&nbsp;org.apache.calcite.rel.rules</h1>
</div>
<div class="contentContainer">
<section role="region"><a id="package.description">
<!-- -->
</a>
<div class="block">Provides a core set of planner rules.
<p>Consider this package to be the "standard library" of planner rules.
Most of the common rewrites that you would want to perform on logical
relational expressions, or generically on any data source, are present,
and have been well tested.
<p>Of course, the library is never complete, and contributions are welcome.
<p>Not present are rules specific to a particular data source: look in that
data source's adapter.
<p>Also out of the scope of this package are rules that support a particular
operation, such as decorrelation or recognizing materialized views. Those are
defined along with the algorithm.
<p>For
<h2>Related packages and classes</h2>
<ul>
<li>Package<code> <a href="../../sql/package-summary.html">
org.apache.calcite.sql</a></code>
is an object model for SQL expressions</li>
<li>Package<code> <a href="../../rex/package-summary.html">
org.apache.calcite.rex</a></code>
is an object model for relational row expressions</li>
<li>Package<code> <a href="../../plan/package-summary.html">
org.apache.calcite.plan</a></code>
provides an optimizer interface.</li>
</ul></div>
</section>
<ul class="blockList">
<li class="blockList">
<table class="typeSummary">
<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterJoinRule.Predicate.html" title="interface in org.apache.calcite.rel.rules">FilterJoinRule.Predicate</a></th>
<td class="colLast">
<div class="block">Predicate that returns whether a filter is valid in the ON clause of a
join for this particular kind of join.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="PushProjector.ExprCondition.html" title="interface in org.apache.calcite.rel.rules">PushProjector.ExprCondition</a></th>
<td class="colLast">
<div class="block">A functor that replies true or false for a given expression.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary">
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractJoinExtractFilterRule.html" title="class in org.apache.calcite.rel.rules">AbstractJoinExtractFilterRule</a></th>
<td class="colLast">
<div class="block">Rule to convert an
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>inner join</code></a> to a
<a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>filter</code></a> on top of a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>cartesian inner join</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
followed by <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> or an
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> to a scan (and possibly
other operations) over a materialized view.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.Edge.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.Edge</a></th>
<td class="colLast">
<div class="block">Edge for graph</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.EquivalenceClasses.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.EquivalenceClasses</a></th>
<td class="colLast">
<div class="block">Class representing an equivalence class, i.e., a set of equivalent columns</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewAggregateRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewAggregateRule</a></th>
<td class="colLast">
<div class="block">Materialized view rewriting for aggregate</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewJoinRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewJoinRule</a></th>
<td class="colLast">
<div class="block">Materialized view rewriting for join</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewOnlyAggregateRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewOnlyAggregateRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Aggregate.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewOnlyFilterRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewOnlyFilterRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Filter.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewOnlyJoinRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewOnlyJoinRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Join.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewProjectAggregateRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewProjectAggregateRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Project on Aggregate.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewProjectFilterRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewProjectFilterRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Project on Filter.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MaterializedViewProjectJoinRule.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MaterializedViewProjectJoinRule</a></th>
<td class="colLast">
<div class="block">Rule that matches Project on Join.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.NodeLineage.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.NodeLineage</a></th>
<td class="colLast">
<div class="block">Expression lineage details.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.ViewPartialRewriting.html" title="class in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.ViewPartialRewriting</a></th>
<td class="colLast">
<div class="block">View partitioning result</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateCaseToFilterRule.html" title="class in org.apache.calcite.rel.rules">AggregateCaseToFilterRule</a></th>
<td class="colLast">
<div class="block">Rule that converts CASE-style filtered aggregates into true filtered
aggregates.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateExpandDistinctAggregatesRule.html" title="class in org.apache.calcite.rel.rules">AggregateExpandDistinctAggregatesRule</a></th>
<td class="colLast">
<div class="block">Planner rule that expands distinct aggregates
(such as <code>COUNT(DISTINCT x)</code>) from a
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateExtractProjectRule.html" title="class in org.apache.calcite.rel.rules">AggregateExtractProjectRule</a></th>
<td class="colLast">
<div class="block">Rule to extract a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
from an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
and push it down towards the input.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateFilterTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
on a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> and transposes them,
pushing the aggregate below the filter.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateJoinJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
on a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and removes the left input
of the join provided that the left input is also a left join if possible.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
on a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and removes the join
provided that the join is a left join or right join and it computes no
aggregate functions or all the aggregate calls have distinct.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes an
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
past a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateJoinTransposeRule.Side.html" title="class in org.apache.calcite.rel.rules">AggregateJoinTransposeRule.Side</a></th>
<td class="colLast">
<div class="block">Work space for an input to a join.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateMergeRule.html" title="class in org.apache.calcite.rel.rules">AggregateMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> on a <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
and the top aggregate's group key is a subset of the lower aggregate's
group key, and the aggregates are expansions of rollups, then it would
convert into a single aggregate.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateProjectMergeRule.html" title="class in org.apache.calcite.rel.rules">AggregateProjectMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that recognizes a <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
on top of a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a> and if possible
aggregate through the project or removes the project.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateProjectPullUpConstantsRule.html" title="class in org.apache.calcite.rel.rules">AggregateProjectPullUpConstantsRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes constant keys from an
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateReduceFunctionsRule.html" title="class in org.apache.calcite.rel.rules">AggregateReduceFunctionsRule</a></th>
<td class="colLast">
<div class="block">Planner rule that reduces aggregate functions in
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>s to simpler forms.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes
a <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
if it computes no aggregate functions
(that is, it is implementing <code>SELECT DISTINCT</code>),
or all the aggregate functions are splittable,
and the underlying relational expression is already distinct.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateStarTableRule.html" title="class in org.apache.calcite.rel.rules">AggregateStarTableRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> on
top of a <a href="../../schema/impl/StarTable.StarTableScan.html" title="class in org.apache.calcite.schema.impl"><code>StarTable.StarTableScan</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateUnionAggregateRule.html" title="class in org.apache.calcite.rel.rules">AggregateUnionAggregateRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>s beneath a
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a> and pulls them up, so
that a single
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> removes duplicates.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="AggregateUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateUnionTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes an
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
past a non-distinct <a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AggregateValuesRule.html" title="class in org.apache.calcite.rel.rules">AggregateValuesRule</a></th>
<td class="colLast">
<div class="block">Rule that applies <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a> to a <a href="../core/Values.html" title="class in org.apache.calcite.rel.core"><code>Values</code></a> (currently just an
empty <code>Value</code>s).</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="CalcMergeRule.html" title="class in org.apache.calcite.rel.rules">CalcMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that merges a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a> onto a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter</a></th>
<td class="colLast">
<div class="block">CalcRelSplitter operates on a
<a href="../core/Calc.html" title="class in org.apache.calcite.rel.core"><code>Calc</code></a> with multiple <a href="../../rex/RexCall.html" title="class in org.apache.calcite.rex"><code>RexCall</code></a>
sub-expressions that cannot all be implemented by a single concrete
<a href="../RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.HighestUsageFinder.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.HighestUsageFinder</a></th>
<td class="colLast">
<div class="block">Builds an array of the highest level which contains an expression which
uses each expression as an input.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.ImplementTester.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.ImplementTester</a></th>
<td class="colLast">
<div class="block">Visitor which returns whether an expression can be implemented in a given
type of relational expression.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.InputToCommonExprConverter.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.InputToCommonExprConverter</a></th>
<td class="colLast">
<div class="block">Shuttle which converts every reference to an input field in an expression
to a reference to a common sub-expression.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.MaxInputFinder.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.MaxInputFinder</a></th>
<td class="colLast">
<div class="block">Finds the highest level used by any of the inputs of a given expression.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.RelType</a></th>
<td class="colLast">
<div class="block">Type of relational expression.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CalcRemoveRule.html" title="class in org.apache.calcite.rel.rules">CalcRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes a trivial
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="CalcSplitRule.html" title="class in org.apache.calcite.rel.rules">CalcSplitRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a <a href="../core/Calc.html" title="class in org.apache.calcite.rel.core"><code>Calc</code></a>
to a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
and <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CoerceInputsRule.html" title="class in org.apache.calcite.rel.rules">CoerceInputsRule</a></th>
<td class="colLast">
<div class="block">CoerceInputsRule pre-casts inputs to a particular type.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="DateRangeRules.html" title="class in org.apache.calcite.rel.rules">DateRangeRules</a></th>
<td class="colLast">
<div class="block">Collection of planner rules that convert
<code>EXTRACT(timeUnit FROM dateTime) = constant</code>,
<code>FLOOR(dateTime to timeUnit</code> = constant} and
<code>CEIL(dateTime to timeUnit</code> = constant} to
<code>dateTime BETWEEN lower AND upper</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="DateRangeRules.ExtractFinder.html" title="class in org.apache.calcite.rel.rules">DateRangeRules.ExtractFinder</a></th>
<td class="colLast">
<div class="block">Visitor that searches for calls to <code>EXTRACT</code>, <code>FLOOR</code> or
<code>CEIL</code>, building a list of distinct time units.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="DateRangeRules.ExtractShuttle.html" title="class in org.apache.calcite.rel.rules">DateRangeRules.ExtractShuttle</a></th>
<td class="colLast">
<div class="block">Walks over an expression, replacing calls to
<code>EXTRACT</code>, <code>FLOOR</code> and <code>CEIL</code> with date ranges.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="DateRangeRules.FilterDateRangeRule.html" title="class in org.apache.calcite.rel.rules">DateRangeRules.FilterDateRangeRule</a></th>
<td class="colLast">
<div class="block">Rule that converts EXTRACT, FLOOR and CEIL in a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> into a date
range.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="EquiJoin.html" title="class in org.apache.calcite.rel.rules">EquiJoin</a></th>
<td class="colLast">Deprecated.
<div class="deprecationComment">Use
<a href="../core/EquiJoin.html" title="class in org.apache.calcite.rel.core"><code>EquiJoin in 'core' package</code></a></div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ExchangeRemoveConstantKeysRule.html" title="class in org.apache.calcite.rel.rules">ExchangeRemoveConstantKeysRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes keys from
a <a href="../core/Exchange.html" title="class in org.apache.calcite.rel.core"><code>Exchange</code></a> if those keys are known to be constant.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ExchangeRemoveConstantKeysRule.SortExchangeRemoveConstantKeysRule.html" title="class in org.apache.calcite.rel.rules">ExchangeRemoveConstantKeysRule.SortExchangeRemoveConstantKeysRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/SortExchange.html" title="class in org.apache.calcite.rel.core"><code>SortExchange</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterAggregateTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterAggregateTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
past a <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterCalcMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterCalcMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that merges a
<a href="../logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical"><code>LogicalFilter</code></a> and a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterCorrelateRule.html" title="class in org.apache.calcite.rel.rules">FilterCorrelateRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> above a <a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> into the
inputs of the Correlate.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterJoinRule.html" title="class in org.apache.calcite.rel.rules">FilterJoinRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes filters above and
within a join node into the join node and/or its children nodes.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterJoinRule.FilterIntoJoinRule.html" title="class in org.apache.calcite.rel.rules">FilterJoinRule.FilterIntoJoinRule</a></th>
<td class="colLast">
<div class="block">Rule that tries to push filter expressions into a join
condition and into the inputs of the join.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterJoinRule.JoinConditionPushRule.html" title="class in org.apache.calcite.rel.rules">FilterJoinRule.JoinConditionPushRule</a></th>
<td class="colLast">
<div class="block">Rule that pushes parts of the join condition to its inputs.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that combines two
<a href="../logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical"><code>LogicalFilter</code></a>s.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterMultiJoinMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterMultiJoinMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that merges a
<a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> into a <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>,
creating a richer <code>MultiJoin</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterProjectTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
past a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterRemoveIsNotDistinctFromRule.html" title="class in org.apache.calcite.rel.rules">FilterRemoveIsNotDistinctFromRule</a></th>
<td class="colLast">
<div class="block">Planner rule that replaces <code>IS NOT DISTINCT FROM</code>
in a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> with logically equivalent operations.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterSetOpTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterSetOpTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
past a <a href="../core/SetOp.html" title="class in org.apache.calcite.rel.core"><code>SetOp</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterTableFunctionTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterTableFunctionTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical"><code>LogicalFilter</code></a>
past a <a href="../logical/LogicalTableFunctionScan.html" title="class in org.apache.calcite.rel.logical"><code>LogicalTableFunctionScan</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="FilterTableScanRule.html" title="class in org.apache.calcite.rel.rules">FilterTableScanRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts
a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
on a <a href="../core/TableScan.html" title="class in org.apache.calcite.rel.core"><code>TableScan</code></a>
of a <a href="../../schema/FilterableTable.html" title="interface in org.apache.calcite.schema"><code>FilterableTable</code></a>
or a <a href="../../schema/ProjectableFilterableTable.html" title="interface in org.apache.calcite.schema"><code>ProjectableFilterableTable</code></a>
to a <a href="../../interpreter/Bindables.BindableTableScan.html" title="class in org.apache.calcite.interpreter"><code>Bindables.BindableTableScan</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="FilterToCalcRule.html" title="class in org.apache.calcite.rel.rules">FilterToCalcRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a
<a href="../logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical"><code>LogicalFilter</code></a> to a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="IntersectToDistinctRule.html" title="class in org.apache.calcite.rel.rules">IntersectToDistinctRule</a></th>
<td class="colLast">
<div class="block">Planner rule that translates a distinct
<a href="../core/Intersect.html" title="class in org.apache.calcite.rel.core"><code>Intersect</code></a>
(<code>all</code> = <code>false</code>)
into a group of operators composed of
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>,
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>, etc.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinAddRedundantSemiJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinAddRedundantSemiJoinRule</a></th>
<td class="colLast">
<div class="block">Rule to add a semi-join into a join.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinAssociateRule.html" title="class in org.apache.calcite.rel.rules">JoinAssociateRule</a></th>
<td class="colLast">
<div class="block">Planner rule that changes a join based on the associativity rule.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinCommuteRule.html" title="class in org.apache.calcite.rel.rules">JoinCommuteRule</a></th>
<td class="colLast">
<div class="block">Planner rule that permutes the inputs to a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinCommuteRule.VariableReplacer.html" title="class in org.apache.calcite.rel.rules">JoinCommuteRule.VariableReplacer</a></th>
<td class="colLast">
<div class="block">Walks over an expression, replacing references to fields of the left and
right inputs.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinExtractFilterRule.html" title="class in org.apache.calcite.rel.rules">JoinExtractFilterRule</a></th>
<td class="colLast">
<div class="block">Rule to convert an
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>inner join</code></a> to a
<a href="../logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical"><code>filter</code></a> on top of a
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>cartesian inner join</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> one of whose inputs is a
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>, and
pulls the project up.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinPushExpressionsRule.html" title="class in org.apache.calcite.rel.rules">JoinPushExpressionsRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes down expressions in "equal" join condition.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinPushThroughJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinPushThroughJoinRule</a></th>
<td class="colLast">
<div class="block">Rule that pushes the right input of a join into through the left input of
the join, provided that the left input is also a join.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinPushTransitivePredicatesRule.html" title="class in org.apache.calcite.rel.rules">JoinPushTransitivePredicatesRule</a></th>
<td class="colLast">
<div class="block">Planner rule that infers predicates from on a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and creates
<a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>s if those predicates can be pushed
to its inputs.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinToCorrelateRule.html" title="class in org.apache.calcite.rel.rules">JoinToCorrelateRule</a></th>
<td class="colLast">
<div class="block">Rule that converts a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>
into a <a href="../logical/LogicalCorrelate.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCorrelate</code></a>, which can
then be implemented using nested loops.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="JoinToMultiJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinToMultiJoinRule</a></th>
<td class="colLast">
<div class="block">Planner rule to flatten a tree of
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>LogicalJoin</code></a>s
into a single <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a> with N inputs.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="JoinUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinUnionTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>
past a non-distinct <a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a></th>
<td class="colLast">
<div class="block">Utility class used to store a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> tree
and the factors that make up the tree.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptJoinTree.BinaryTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree.BinaryTree</a></th>
<td class="colLast">
<div class="block">Simple binary tree class that stores an id in the leaf nodes and keeps
track of the parent LoptJoinTree object associated with the binary tree.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptJoinTree.Leaf.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree.Leaf</a></th>
<td class="colLast">
<div class="block">Binary tree node that has no children.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptJoinTree.Node.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree.Node</a></th>
<td class="colLast">
<div class="block">Binary tree node that has two children.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptMultiJoin.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin</a></th>
<td class="colLast">
<div class="block">Utility class that keeps track of the join factors that
make up a <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptMultiJoin.Edge.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.Edge</a></th>
<td class="colLast">
<div class="block">Information about a join-condition.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptOptimizeJoinRule.html" title="class in org.apache.calcite.rel.rules">LoptOptimizeJoinRule</a></th>
<td class="colLast">
<div class="block">Planner rule that implements the heuristic planner for determining optimal
join orderings.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer</a></th>
<td class="colLast">
<div class="block">Implements the logic for determining the optimal
semi-joins to be used in processing joins in a query.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.FemLocalIndex.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer.FemLocalIndex</a></th>
<td class="colLast">
<div class="block">Dummy class to allow code to compile.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.LcsIndexOptimizer.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer.LcsIndexOptimizer</a></th>
<td class="colLast">
<div class="block">Dummy class to allow code to compile.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.LcsTable.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer.LcsTable</a></th>
<td class="colLast">
<div class="block">Dummy class to allow code to compile.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.LcsTableScan.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer.LcsTableScan</a></th>
<td class="colLast">
<div class="block">Dummy class to allow code to compile.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="LoptSemiJoinOptimizer.LucidDbSpecialOperators.html" title="class in org.apache.calcite.rel.rules">LoptSemiJoinOptimizer.LucidDbSpecialOperators</a></th>
<td class="colLast">
<div class="block">Dummy class to allow code to compile.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="MatchRule.html" title="class in org.apache.calcite.rel.rules">MatchRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a
<a href="../logical/LogicalMatch.html" title="class in org.apache.calcite.rel.logical"><code>LogicalMatch</code></a> to the result
of calling <a href="../logical/LogicalMatch.html#copy(org.apache.calcite.plan.RelTraitSet,java.util.List)"><code>LogicalMatch.copy(org.apache.calcite.plan.RelTraitSet, java.util.List&lt;org.apache.calcite.rel.RelNode&gt;)</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="MaterializedViewFilterScanRule.html" title="class in org.apache.calcite.rel.rules">MaterializedViewFilterScanRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts
a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
on a <a href="../core/TableScan.html" title="class in org.apache.calcite.rel.core"><code>TableScan</code></a>
to a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a> on Materialized View</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a></th>
<td class="colLast">
<div class="block">A MultiJoin represents a join of N inputs, whereas regular Joins
represent strictly binary joins.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="MultiJoinOptimizeBushyRule.html" title="class in org.apache.calcite.rel.rules">MultiJoinOptimizeBushyRule</a></th>
<td class="colLast">
<div class="block">Planner rule that finds an approximately optimal ordering for join operators
using a heuristic algorithm.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="MultiJoinOptimizeBushyRule.JoinVertex.html" title="class in org.apache.calcite.rel.rules">MultiJoinOptimizeBushyRule.JoinVertex</a></th>
<td class="colLast">
<div class="block">Participant in a join which is itself a join.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="MultiJoinOptimizeBushyRule.LeafVertex.html" title="class in org.apache.calcite.rel.rules">MultiJoinOptimizeBushyRule.LeafVertex</a></th>
<td class="colLast">
<div class="block">Relation participating in a join.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="MultiJoinOptimizeBushyRule.Vertex.html" title="class in org.apache.calcite.rel.rules">MultiJoinOptimizeBushyRule.Vertex</a></th>
<td class="colLast">
<div class="block">Participant in a join (relation or join).</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="MultiJoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">MultiJoinProjectTransposeRule</a></th>
<td class="colLast">
<div class="block">MultiJoinProjectTransposeRule implements the rule for pulling
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>s that are on top of a
<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a> and beneath a
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>LogicalJoin</code></a> so the
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a> appears above the
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>LogicalJoin</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectCalcMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectCalcMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule which merges a
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a> and a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectCorrelateTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectCorrelateTransposeRule</a></th>
<td class="colLast">
<div class="block">Push Project under Correlate to apply on Correlate's left and right child</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectCorrelateTransposeRule.RelNodesExprsHandler.html" title="class in org.apache.calcite.rel.rules">ProjectCorrelateTransposeRule.RelNodesExprsHandler</a></th>
<td class="colLast">
<div class="block">Visitor for RelNodes which applies specified <a href="../../rex/RexShuttle.html" title="class in org.apache.calcite.rex"><code>RexShuttle</code></a> visitor
for every node in the tree.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectCorrelateTransposeRule.RexFieldAccessReplacer.html" title="class in org.apache.calcite.rel.rules">ProjectCorrelateTransposeRule.RexFieldAccessReplacer</a></th>
<td class="colLast">
<div class="block">Visitor for RexNodes which replaces <a href="../../rex/RexCorrelVariable.html" title="class in org.apache.calcite.rex"><code>RexCorrelVariable</code></a> with specified.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectFilterTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
past a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectJoinJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
on a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and removes the left input
of the join provided that the left input is also a left join if possible.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that matches an <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
on a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and removes the join provided that the join is a left join
or right join and the join keys are unique.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
past a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>
by splitting the projection into a projection on top of each child of
the join.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectMergeRule</a></th>
<td class="colLast">
<div class="block">ProjectMergeRule merges a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a> into
another <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>,
provided the projects aren't projecting identical sets of input references.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectMultiJoinMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectMultiJoinMergeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
into a <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>,
creating a richer <code>MultiJoin</code>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that,
given a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a> node that
merely returns its input, converts the node into its child.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectSetOpTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectSetOpTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>
past a <a href="../core/SetOp.html" title="class in org.apache.calcite.rel.core"><code>SetOp</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectSortTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectSortTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
past a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectTableScanRule.html" title="class in org.apache.calcite.rel.rules">ProjectTableScanRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
on a <a href="../core/TableScan.html" title="class in org.apache.calcite.rel.core"><code>TableScan</code></a>
of a <a href="../../schema/ProjectableFilterableTable.html" title="interface in org.apache.calcite.schema"><code>ProjectableFilterableTable</code></a>
to a <a href="../../interpreter/Bindables.BindableTableScan.html" title="class in org.apache.calcite.interpreter"><code>Bindables.BindableTableScan</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectToCalcRule.html" title="class in org.apache.calcite.rel.rules">ProjectToCalcRule</a></th>
<td class="colLast">
<div class="block">Rule to convert a
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a> to a
<a href="../logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical"><code>LogicalCalc</code></a></div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectToWindowRule.html" title="class in org.apache.calcite.rel.rules">ProjectToWindowRule</a></th>
<td class="colLast">
<div class="block">Planner rule that slices a
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>
into sections which contain windowed
aggregate functions and sections which do not.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectToWindowRule.CalcToWindowRule.html" title="class in org.apache.calcite.rel.rules">ProjectToWindowRule.CalcToWindowRule</a></th>
<td class="colLast">
<div class="block">Instance of the rule that applies to a
<a href="../core/Calc.html" title="class in org.apache.calcite.rel.core"><code>Calc</code></a> that contains
windowed aggregates and converts it into a mixture of
<a href="../logical/LogicalWindow.html" title="class in org.apache.calcite.rel.logical"><code>LogicalWindow</code></a> and <code>Calc</code>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectToWindowRule.ProjectToLogicalProjectAndWindowRule.html" title="class in org.apache.calcite.rel.rules">ProjectToWindowRule.ProjectToLogicalProjectAndWindowRule</a></th>
<td class="colLast">
<div class="block">Instance of the rule that can be applied to a
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a> and that produces, in turn,
a mixture of <code>LogicalProject</code>
and <a href="../logical/LogicalWindow.html" title="class in org.apache.calcite.rel.logical"><code>LogicalWindow</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ProjectToWindowRule.WindowedAggRelSplitter.html" title="class in org.apache.calcite.rel.rules">ProjectToWindowRule.WindowedAggRelSplitter</a></th>
<td class="colLast">
<div class="block">Splitter that distinguishes between windowed aggregation expressions
(calls to <a href="../../rex/RexOver.html" title="class in org.apache.calcite.rex"><code>RexOver</code></a>) and ordinary expressions.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ProjectWindowTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectWindowTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>
past a <a href="../logical/LogicalWindow.html" title="class in org.apache.calcite.rel.logical"><code>LogicalWindow</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="PruneEmptyRules.html" title="class in org.apache.calcite.rel.rules">PruneEmptyRules</a></th>
<td class="colLast">
<div class="block">Collection of rules which remove sections of a query plan known never to
produce any rows.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="PruneEmptyRules.RemoveEmptySingleRule.html" title="class in org.apache.calcite.rel.rules">PruneEmptyRules.RemoveEmptySingleRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a single-rel (e.g.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="PushProjector.html" title="class in org.apache.calcite.rel.rules">PushProjector</a></th>
<td class="colLast">
<div class="block">PushProjector is a utility class used to perform operations used in push
projection rules.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceDecimalsRule.html" title="class in org.apache.calcite.rel.rules">ReduceDecimalsRule</a></th>
<td class="colLast">
<div class="block">ReduceDecimalsRule is a rule which reduces decimal operations (such as casts
or arithmetic) into operations involving more primitive types (such as longs
and doubles).</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Collection of planner rules that apply various simplifying transformations on
RexNode trees.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.CalcReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.CalcReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/Calc.html" title="class in org.apache.calcite.rel.core"><code>Calc</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.CaseShuttle.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.CaseShuttle</a></th>
<td class="colLast">
<div class="block">Shuttle that pushes predicates into a CASE.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.FilterReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.FilterReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.JoinReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.JoinReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.ProjectReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.ProjectReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.ReducibleExprLocator.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.ReducibleExprLocator</a></th>
<td class="colLast">
<div class="block">Helper class used to locate expressions that either can be reduced to
literals or contain redundant casts.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.RexReplacer.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.RexReplacer</a></th>
<td class="colLast">
<div class="block">Replaces expressions with their reductions.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.WindowReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule.WindowReduceExpressionsRule</a></th>
<td class="colLast">
<div class="block">Rule that reduces constants inside a <a href="../core/Window.html" title="class in org.apache.calcite.rel.core"><code>Window</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SemiJoinFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinFilterTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes <code>SemiJoin</code>s down in a tree past
a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SemiJoinJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinJoinTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <code>SemiJoin</code>
down in a tree past a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>
in order to trigger other rules that will convert <code>SemiJoin</code>s.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SemiJoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinProjectTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <code>SemiJoin</code> down in a tree past
a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SemiJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes a <code>SemiJoin</code>s from a join tree.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SemiJoinRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRule</a></th>
<td class="colLast">
<div class="block">Planner rule that creates a <code>SemiJoin</code> from a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> on top of a
<a href="../logical/LogicalAggregate.html" title="class in org.apache.calcite.rel.logical"><code>LogicalAggregate</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SemiJoinRule.JoinToSemiJoinRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRule.JoinToSemiJoinRule</a></th>
<td class="colLast">
<div class="block">SemiJoinRule that matches a Join with an empty Aggregate as its right
child.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SemiJoinRule.ProjectToSemiJoinRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRule.ProjectToSemiJoinRule</a></th>
<td class="colLast">
<div class="block">SemiJoinRule that matches a Project on top of a Join with an Aggregate
as its right child.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SortJoinCopyRule.html" title="class in org.apache.calcite.rel.rules">SortJoinCopyRule</a></th>
<td class="colLast">
<div class="block">Planner rule that copies a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> past a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> without its limit and offset.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SortJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortJoinTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> past a
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SortProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortProjectTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes
a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a>
past a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SortRemoveConstantKeysRule.html" title="class in org.apache.calcite.rel.rules">SortRemoveConstantKeysRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes keys from a
a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> if those keys are known to be
constant, or removes the entire Sort if all keys are constant.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SortRemoveRule.html" title="class in org.apache.calcite.rel.rules">SortRemoveRule</a></th>
<td class="colLast">
<div class="block">Planner rule that removes
a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> if its input is already sorted.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SortUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortUnionTransposeRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pushes a <a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> past a
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SubQueryRemoveRule.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule</a></th>
<td class="colLast">
<div class="block">Transform that converts IN, EXISTS and scalar sub-queries into joins.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SubQueryRemoveRule.ReplaceSubQueryShuttle.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule.ReplaceSubQueryShuttle</a></th>
<td class="colLast">
<div class="block">Shuttle that replaces occurrences of a given
<a href="../../rex/RexSubQuery.html" title="class in org.apache.calcite.rex"><code>RexSubQuery</code></a> with a replacement
expression.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SubQueryRemoveRule.SubQueryFilterRemoveRule.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule.SubQueryFilterRemoveRule</a></th>
<td class="colLast">
<div class="block">Rule that converts a sub-queries from filter expressions into
<a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> instances.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="SubQueryRemoveRule.SubQueryJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule.SubQueryJoinRemoveRule</a></th>
<td class="colLast">
<div class="block">Rule that converts sub-queries from join expressions into
<a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> instances.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="SubQueryRemoveRule.SubQueryProjectRemoveRule.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule.SubQueryProjectRemoveRule</a></th>
<td class="colLast">
<div class="block">Rule that converts sub-queries from project expressions into
<a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> instances.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="TableScanRule.html" title="class in org.apache.calcite.rel.rules">TableScanRule</a></th>
<td class="colLast">
<div class="block">Planner rule that converts a
<a href="../logical/LogicalTableScan.html" title="class in org.apache.calcite.rel.logical"><code>LogicalTableScan</code></a> to the result
of calling <a href="../../plan/RelOptTable.html#toRel(org.apache.calcite.plan.RelOptTable.ToRelContext)"><code>RelOptTable.toRel(org.apache.calcite.plan.RelOptTable.ToRelContext)</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="UnionEliminatorRule.html" title="class in org.apache.calcite.rel.rules">UnionEliminatorRule</a></th>
<td class="colLast">
<div class="block"><code>UnionEliminatorRule</code> checks to see if its possible to optimize a
Union call by eliminating the Union operator altogether in the case the call
consists of only one input.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="UnionMergeRule.html" title="class in org.apache.calcite.rel.rules">UnionMergeRule</a></th>
<td class="colLast">
<div class="block">UnionMergeRule implements the rule for combining two
non-distinct <a href="../core/SetOp.html" title="class in org.apache.calcite.rel.core"><code>SetOp</code></a>s
into a single <a href="../core/SetOp.html" title="class in org.apache.calcite.rel.core"><code>SetOp</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="UnionPullUpConstantsRule.html" title="class in org.apache.calcite.rel.rules">UnionPullUpConstantsRule</a></th>
<td class="colLast">
<div class="block">Planner rule that pulls up constants through a Union operator.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="UnionToDistinctRule.html" title="class in org.apache.calcite.rel.rules">UnionToDistinctRule</a></th>
<td class="colLast">
<div class="block">Planner rule that translates a distinct
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>
(<code>all</code> = <code>false</code>)
into an <a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core"><code>Aggregate</code></a>
on top of a non-distinct <a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>
(<code>all</code> = <code>true</code>).</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ValuesReduceRule.html" title="class in org.apache.calcite.rel.rules">ValuesReduceRule</a></th>
<td class="colLast">
<div class="block">Planner rule that folds projections and filters into an underlying
<a href="../logical/LogicalValues.html" title="class in org.apache.calcite.rel.logical"><code>LogicalValues</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ValuesReduceRule.MyRexShuttle.html" title="class in org.apache.calcite.rel.rules">ValuesReduceRule.MyRexShuttle</a></th>
<td class="colLast">
<div class="block">Shuttle that converts inputs to literals.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary">
<caption><span>Enum Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Enum</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="AbstractMaterializedViewRule.MatchModality.html" title="enum in org.apache.calcite.rel.rules">AbstractMaterializedViewRule.MatchModality</a></th>
<td class="colLast">
<div class="block">Complete, view partial, or query partial.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ReduceExpressionsRule.ReducibleExprLocator.Constancy.html" title="enum in org.apache.calcite.rel.rules">ReduceExpressionsRule.ReducibleExprLocator.Constancy</a></th>
<td class="colLast">
<div class="block">Whether an expression is constant, and if so, whether it can be
reduced to a simpler constant.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary">
<caption><span>Exception Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Exception</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="CalcRelSplitter.CannotImplement.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.CannotImplement</a></th>
<td class="colLast">
<div class="block">Control exception for <a href="CalcRelSplitter.ImplementTester.html" title="class in org.apache.calcite.rel.rules"><code>CalcRelSplitter.ImplementTester</code></a>.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&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>
<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>