blob: 47fc282140f4cb98add466aa8e10afc4c9d4159d [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>RelOptRulesTest (Calcite 1.21.0 Test 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="RelOptRulesTest (Calcite 1.21.0 Test 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":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"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":10,"i45":10,"i46":10,"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,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10,"i176":10,"i177":10,"i178":10,"i179":10,"i180":10,"i181":10,"i182":10,"i183":10,"i184":10,"i185":10,"i186":10,"i187":10,"i188":10,"i189":10,"i190":10,"i191":10,"i192":10,"i193":10,"i194":10,"i195":10,"i196":10,"i197":10,"i198":10,"i199":10,"i200":10,"i201":10,"i202":10,"i203":10,"i204":10,"i205":10,"i206":10,"i207":10,"i208":10,"i209":10,"i210":10,"i211":10,"i212":10,"i213":10,"i214":10,"i215":10,"i216":10,"i217":10,"i218":10,"i219":10,"i220":10,"i221":10,"i222":10,"i223":10,"i224":10,"i225":10,"i226":10,"i227":10,"i228":10,"i229":10,"i230":10,"i231":10,"i232":10,"i233":10,"i234":10,"i235":10,"i236":10,"i237":10,"i238":10,"i239":10,"i240":10,"i241":10,"i242":10,"i243":10,"i244":10,"i245":10,"i246":10,"i247":10,"i248":10,"i249":10,"i250":10,"i251":10,"i252":10,"i253":10,"i254":10,"i255":10,"i256":10,"i257":10,"i258":10,"i259":10,"i260":10,"i261":10,"i262":10,"i263":10,"i264":10,"i265":10,"i266":10,"i267":10,"i268":10,"i269":10,"i270":10,"i271":10,"i272":10,"i273":10,"i274":10,"i275":10,"i276":10,"i277":10,"i278":10,"i279":10,"i280":10,"i281":10,"i282":10,"i283":10,"i284":10,"i285":10,"i286":10,"i287":10,"i288":10,"i289":10,"i290":10,"i291":10,"i292":10,"i293":10,"i294":10,"i295":10,"i296":10,"i297":10,"i298":10,"i299":10,"i300":10,"i301":10,"i302":10,"i303":10,"i304":10,"i305":10,"i306":10,"i307":10,"i308":10,"i309":10,"i310":10,"i311":10,"i312":10,"i313":10,"i314":10,"i315":10,"i316":10,"i317":10,"i318":10,"i319":10,"i320":10,"i321":10,"i322":10,"i323":10,"i324":10,"i325":10,"i326":10,"i327":10,"i328":10,"i329":10,"i330":10,"i331":10,"i332":10,"i333":10,"i334":10,"i335":10,"i336":10,"i337":10,"i338":10,"i339":10,"i340":10,"i341":10,"i342":10,"i343":10,"i344":10,"i345":10,"i346":10,"i347":10,"i348":10,"i349":10,"i350":10,"i351":10,"i352":10,"i353":10,"i354":10,"i355":10,"i356":10,"i357":10,"i358":10,"i359":10,"i360":10,"i361":10,"i362":10,"i363":10,"i364":10,"i365":10,"i366":10,"i367":10,"i368":10,"i369":10,"i370":10,"i371":10,"i372":10,"i373":10,"i374":10,"i375":10,"i376":10,"i377":10,"i378":10,"i379":10,"i380":10,"i381":10,"i382":10,"i383":10,"i384":10,"i385":10,"i386":10,"i387":10,"i388":10,"i389":10,"i390":10,"i391":10,"i392":10,"i393":10,"i394":10,"i395":10,"i396":10,"i397":10,"i398":10,"i399":10,"i400":10,"i401":10,"i402":10,"i403":10,"i404":10,"i405":10,"i406":10,"i407":10,"i408":10,"i409":10,"i410":10,"i411":10,"i412":10,"i413":10,"i414":10,"i415":10,"i416":10,"i417":10,"i418":10,"i419":10,"i420":10,"i421":10,"i422":10,"i423":10,"i424":10,"i425":10,"i426":10,"i427":10,"i428":10,"i429":10,"i430":10,"i431":10,"i432":10,"i433":10,"i434":10,"i435":10,"i436":10};
var tabs = {65535:["t0","All 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/RelOptRulesTest.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.test</a></div>
<h2 title="Class RelOptRulesTest" class="title">Class RelOptRulesTest</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="SqlToRelTestBase.html" title="class in org.apache.calcite.test">org.apache.calcite.test.SqlToRelTestBase</a></li>
<li>
<ul class="inheritance">
<li><a href="RelOptTestBase.html" title="class in org.apache.calcite.test">org.apache.calcite.test.RelOptTestBase</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.test.RelOptRulesTest</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">RelOptRulesTest</span>
extends <a href="RelOptTestBase.html" title="class in org.apache.calcite.test">RelOptTestBase</a></pre>
<div class="block">Unit test for rules in <code>org.apache.calcite.rel</code> and subpackages.
<p>As input, the test supplies a SQL statement and a single rule; the SQL is
translated into relational algebra and then fed into a
<code>HepPlanner</code>. The planner fires the rule on
every
pattern match in a depth-first left-to-right pre-order traversal of the tree
for as long as the rule continues to succeed in applying its transform. (For
rules which call transformTo more than once, only the last result is used.)
The plan before and after "optimization" is diffed against a .ref file using
<a href="DiffRepository.html" title="class in org.apache.calcite.test"><code>DiffRepository</code></a>.
<p>Procedure for adding a new test case:
<ol>
<li>Add a new public test method for your rule, following the existing
examples. You'll have to come up with an SQL statement to which your rule
will apply in a meaningful way. See <a href="SqlToRelTestBase.html" title="class in org.apache.calcite.test"><code>SqlToRelTestBase</code></a> class comments
for details on the schema.
<li>Run the test. It should fail. Inspect the output in
<code>target/surefire/.../RelOptRulesTest.xml</code>.
(If you are running using maven and this file does not exist, add a
<code>-X</code> flag to the maven command line.)
<li>Verify that the "planBefore" is the correct
translation of your SQL, and that it contains the pattern on which your rule
is supposed to fire. If all is well, replace
<code>src/test/resources/.../RelOptRulesTest.xml</code> and
with the new <code>target/surefire/.../RelOptRulesTest.xml</code>.
<li>Run the test again. It should fail again, but this time it should contain
a "planAfter" entry for your rule. Verify that your rule applied its
transformation correctly, and then update the
<code>src/test/resources/.../RelOptRulesTest.xml</code> file again.
<li>Run the test one last time; this time it should pass.
</ol></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="RelOptRulesTest.MyFilter.html" title="class in org.apache.calcite.test">RelOptRulesTest.MyFilter</a></span></code></th>
<td class="colLast">
<div class="block">Custom implementation of <code>Filter</code> for use
in test case to verify that <code>FilterMultiJoinMergeRule</code>
can be created with any <code>Filter</code> and not limited to
<code>LogicalFilter</code></div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelOptRulesTest.MyFilterRule.html" title="class in org.apache.calcite.test">RelOptRulesTest.MyFilterRule</a></span></code></th>
<td class="colLast">
<div class="block">Rule to transform <code>LogicalFilter</code> into
custom MyFilter</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="RelOptRulesTest.MyProject.html" title="class in org.apache.calcite.test">RelOptRulesTest.MyProject</a></span></code></th>
<td class="colLast">
<div class="block">Custom implementation of <code>Project</code> for use
in test case to verify that <code>ProjectMultiJoinMergeRule</code>
can be created with any <code>Project</code> and not limited to
<code>LogicalProject</code></div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelOptRulesTest.MyProjectRule.html" title="class in org.apache.calcite.test">RelOptRulesTest.MyProjectRule</a></span></code></th>
<td class="colLast">
<div class="block">Rule to transform <code>LogicalProject</code> into custom
MyProject</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.calcite.test.RelOptTestBase">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.calcite.test.<a href="RelOptTestBase.html" title="class in org.apache.calcite.test">RelOptTestBase</a></h3>
<code><a href="RelOptTestBase.Sql.html" title="class in org.apache.calcite.test">RelOptTestBase.Sql</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.calcite.test.SqlToRelTestBase">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.calcite.test.<a href="SqlToRelTestBase.html" title="class in org.apache.calcite.test">SqlToRelTestBase</a></h3>
<code><a href="SqlToRelTestBase.CustomCorrelate.html" title="class in org.apache.calcite.test">SqlToRelTestBase.CustomCorrelate</a>, <a href="SqlToRelTestBase.MockRelOptSchema.html" title="class in org.apache.calcite.test">SqlToRelTestBase.MockRelOptSchema</a>, <a href="SqlToRelTestBase.Tester.html" title="interface in org.apache.calcite.test">SqlToRelTestBase.Tester</a>, <a href="SqlToRelTestBase.TesterImpl.html" title="class in org.apache.calcite.test">SqlToRelTestBase.TesterImpl</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>private static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#NOT_STRONG_EXPR">NOT_STRONG_EXPR</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private org.apache.calcite.rel.rules.PushProjector.ExprCondition</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#skipItem">skipItem</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#STRONG_EXPR">STRONG_EXPR</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.calcite.test.SqlToRelTestBase">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.calcite.test.<a href="SqlToRelTestBase.html" title="class in org.apache.calcite.test">SqlToRelTestBase</a></h3>
<code><a href="SqlToRelTestBase.html#NL">NL</a>, <a href="SqlToRelTestBase.html#strictTester">strictTester</a>, <a href="SqlToRelTestBase.html#tester">tester</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()">RelOptRulesTest</a></span>()</code></th>
<td class="colLast">&nbsp;</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="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>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#basePullConstantTroughAggregate()">basePullConstantTroughAggregate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#basePushAggThroughUnion()">basePushAggThroughUnion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#basePushFilterPastAggWithGroupingSets(boolean)">basePushFilterPastAggWithGroupingSets</a></span>&#8203;(boolean&nbsp;unchanged)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkPlanning(java.lang.String)">checkPlanning</a></span>&#8203;(java.lang.String&nbsp;query)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkReduceNullableToNotNull(org.apache.calcite.rel.rules.ReduceExpressionsRule)">checkReduceNullableToNotNull</a></span>&#8203;(org.apache.calcite.rel.rules.ReduceExpressionsRule&nbsp;rule)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>private <a href="RelOptTestBase.Sql.html" title="class in org.apache.calcite.test">RelOptTestBase.Sql</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkSubQuery(java.lang.String)">checkSubQuery</a></span>&#8203;(java.lang.String&nbsp;sql)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected <a href="DiffRepository.html" title="class in org.apache.calcite.test">DiffRepository</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDiffRepos()">getDiffRepos</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the default diff repository for this test, or null if there is
no repository.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAddRedundantSemiJoinRule()">testAddRedundantSemiJoinRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateCaseToFilter()">testAggregateCaseToFilter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateConstantKeyRule()">testAggregateConstantKeyRule</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1023">[CALCITE-1023]
Planner rule that removes Aggregate keys that are constant</a>.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateConstantKeyRule2()">testAggregateConstantKeyRule2</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>AggregateProjectPullUpConstantsRule</code> where reduction is not
possible because "deptno" is the only key.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateConstantKeyRule3()">testAggregateConstantKeyRule3</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>AggregateProjectPullUpConstantsRule</code> where both keys are
constants but only one can be removed.</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="#testAggregateExtractProjectRule()">testAggregateExtractProjectRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateExtractProjectRuleWithFilter()">testAggregateExtractProjectRuleWithFilter</a></span>()</code></th>
<td class="colLast">&nbsp;</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="#testAggregateExtractProjectRuleWithGroupingSets()">testAggregateExtractProjectRuleWithGroupingSets</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateExtractProjectRuleWithGroupingSets2()">testAggregateExtractProjectRuleWithGroupingSets2</a></span>()</code></th>
<td class="colLast">
<div class="block">Test with column used in both grouping set and argument to aggregate
function.</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="#testAggregateGroupingSetsProjectMerge()">testAggregateGroupingSetsProjectMerge</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove1()">testAggregateJoinRemove1</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2712">[CALCITE-2712]
Should remove the left join since the aggregate has no call and
only uses column in the left input of the bottom join as group key.</a>.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove10()">testAggregateJoinRemove10</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the bottom join since the aggregate uses column in the
right input of bottom join.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove2()">testAggregateJoinRemove2</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a> but has aggregate
call with distinct.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove3()">testAggregateJoinRemove3</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a> but should not
remove the left join since the aggregate uses column in the right
input of the bottom join.</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="#testAggregateJoinRemove4()">testAggregateJoinRemove4</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a> but right join.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove5()">testAggregateJoinRemove5</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove2()"><code>testAggregateJoinRemove2()</code></a> but right join.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove6()">testAggregateJoinRemove6</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove3()"><code>testAggregateJoinRemove3()</code></a> but right join.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove7()">testAggregateJoinRemove7</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should remove the bottom join since the aggregate has no aggregate
call.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove8()">testAggregateJoinRemove8</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove7()"><code>testAggregateJoinRemove7()</code></a> but has aggregate
call.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateJoinRemove9()">testAggregateJoinRemove9</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove7()"><code>testAggregateJoinRemove7()</code></a> but use columns in
the right input of the top join.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge1()">testAggregateMerge1</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should merge 2 aggregates
into a single aggregate.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge2()">testAggregateMerge2</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should merge 2 aggregates
into a single aggregate, top aggregate is not simple aggregate.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge3()">testAggregateMerge3</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should not merge 2 aggregates
into a single aggregate, since lower aggregate is not simple aggregate.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge4()">testAggregateMerge4</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should not merge 2 aggregates
into a single aggregate, since it contains distinct aggregate
function.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge5()">testAggregateMerge5</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should not merge 2 aggregates
into a single aggregate, since AVG doesn't support splitting.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge6()">testAggregateMerge6</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should not merge 2 aggregates
into a single aggregate, since top agg has no group key, and
lower agg function is COUNT.</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge7()">testAggregateMerge7</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should not merge 2 aggregates
into a single aggregate, since top agg contains empty grouping set,
and lower agg function is COUNT.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateMerge8()">testAggregateMerge8</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateMergeRule, should merge 2 aggregates
into a single aggregate, since both top and bottom aggregates
contains empty grouping set and they are mergable.</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateProjectMerge()">testAggregateProjectMerge</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateProjectPullUpConstants()">testAggregateProjectPullUpConstants</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateProjectPullUpConstants2()">testAggregateProjectPullUpConstants2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove1()">testAggregateRemove1</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateRemoveRule, should remove aggregates since
empno is unique and all aggregate functions are splittable.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove2()">testAggregateRemove2</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateRemoveRule, should remove aggregates since
empno is unique and there are no aggregate functions.</div>
</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove3()">testAggregateRemove3</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for AggregateRemoveRule, should remove aggregates since
empno is unique and all aggregate functions are splittable.</div>
</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove4()">testAggregateRemove4</a></span>()</code></th>
<td class="colLast">
<div class="block">Negative test case for AggregateRemoveRule, should not
remove aggregate because avg is not splittable.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove5()">testAggregateRemove5</a></span>()</code></th>
<td class="colLast">
<div class="block">Negative test case for AggregateRemoveRule, should not
remove non-simple aggregates.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAggregateRemove6()">testAggregateRemove6</a></span>()</code></th>
<td class="colLast">
<div class="block">Negative test case for AggregateRemoveRule, should not
remove aggregate because deptno is not unique.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAll()">testAll</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAlreadyFalseEliminatesFilter()">testAlreadyFalseEliminatesFilter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAnyInProjectNonNullable()">testAnyInProjectNonNullable</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for testing type created by SubQueryRemoveRule: an
ANY sub-query is non-nullable therefore plan should have cast.</div>
</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testAnyInProjectNullable()">testAnyInProjectNullable</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for testing type created by SubQueryRemoveRule; an
ANY sub-query is nullable therefore plan should not have cast.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCanNotPushAntiJoinConditionsToLeft()">testCanNotPushAntiJoinConditionsToLeft</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3170">[CALCITE-3170]
ANTI join on conditions push down generates wrong plan</a>.</div>
</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCanNotPushAntiJoinConditionsToRight()">testCanNotPushAntiJoinConditionsToRight</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i50" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCasePushIsAlwaysWorking()">testCasePushIsAlwaysWorking</a></span>()</code></th>
<td class="colLast">&nbsp;</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="#testCastInAggregateExpandDistinctAggregatesRule()">testCastInAggregateExpandDistinctAggregatesRule</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1621">[CALCITE-1621]
Adding a cast around the null literal in aggregate rules</a>.</div>
</td>
</tr>
<tr id="i52" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCastInAggregateReduceFunctions()">testCastInAggregateReduceFunctions</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1621">[CALCITE-1621]
Adding a cast around the null literal in aggregate rules</a>.</div>
</td>
</tr>
<tr id="i53" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testConvertMultiJoinRule()">testConvertMultiJoinRule</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="#testConvertMultiJoinRuleOuterJoins()">testConvertMultiJoinRuleOuterJoins</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i55" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testConvertMultiJoinRuleOuterJoins2()">testConvertMultiJoinRuleOuterJoins2</a></span>()</code></th>
<td class="colLast">&nbsp;</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="#testConvertMultiJoinRuleOuterJoins3()">testConvertMultiJoinRuleOuterJoins3</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i57" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testConvertMultiJoinRuleOuterJoins4()">testConvertMultiJoinRuleOuterJoins4</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i58" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCorrelationScalarAggAndFilter()">testCorrelationScalarAggAndFilter</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2110">[CALCITE-2110]
ArrayIndexOutOfBoundsException in RexSimplify when using
ReduceExpressionsRule.JOIN_INSTANCE</a>.</div>
</td>
</tr>
<tr id="i59" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCustomColumnResolvingInCorrelatedSubQuery()">testCustomColumnResolvingInCorrelatedSubQuery</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i60" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCustomColumnResolvingInCorrelatedSubQuery2()">testCustomColumnResolvingInCorrelatedSubQuery2</a></span>()</code></th>
<td class="colLast">&nbsp;</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="#testCustomColumnResolvingInNonCorrelatedSubQuery()">testCustomColumnResolvingInNonCorrelatedSubQuery</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i62" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testCustomDecorrelate()">testCustomDecorrelate</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3111">[CALCITE-3111]
Allow custom implementations of Correlate in RelDecorrelator </a></div>
</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="#testDecorrelateAggWithConstantGroupKey()">testDecorrelateAggWithConstantGroupKey</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2744">[CALCITE-2744]
RelDecorrelator use wrong output map for LogicalAggregate decorrelate</a>.</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="#testDecorrelateAggWithMultiParamsAggCall()">testDecorrelateAggWithMultiParamsAggCall</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for CALCITE-2744 for aggregate decorrelate with multi-param agg call
but without group key.</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="#testDecorrelateAggWithMultiParamsAggCall2()">testDecorrelateAggWithMultiParamsAggCall2</a></span>()</code></th>
<td class="colLast">
<div class="block">Same as <a href="#testDecorrelateAggWithMultiParamsAggCall()"><code>testDecorrelateAggWithMultiParamsAggCall()</code></a>
but with a constant group key.</div>
</td>
</tr>
<tr id="i66" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelateExists()">testDecorrelateExists</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i67" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelateTwoExists()">testDecorrelateTwoExists</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1511">[CALCITE-1511]
AssertionError while decorrelating query with two EXISTS
sub-queries</a>.</div>
</td>
</tr>
<tr id="i68" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelateTwoIn()">testDecorrelateTwoIn</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1537">[CALCITE-1537]
Unnecessary project expression in multi-sub-query plan</a>.</div>
</td>
</tr>
<tr id="i69" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelateTwoScalar()">testDecorrelateTwoScalar</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1045">[CALCITE-1045]
Decorrelate sub-queries in Project and Join</a>, with the added
complication that there are two sub-queries.</div>
</td>
</tr>
<tr id="i70" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelateUncorrelatedInAndCorrelatedExists()">testDecorrelateUncorrelatedInAndCorrelatedExists</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2028">[CALCITE-2028]
Un-correlated IN sub-query should be converted into a Join,
rather than a Correlate without correlation variables </a>.</div>
</td>
</tr>
<tr id="i71" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDecorrelationWithSort()">testDecorrelationWithSort</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3296">[CALCITE-3296]
Decorrelator gives empty result
after decorrelating sort rel with null offset and fetch </a></div>
</td>
</tr>
<tr id="i72" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCount1()">testDistinctCount1</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i73" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCount2()">testDistinctCount2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i74" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCount3()">testDistinctCount3</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1293">[CALCITE-1293]
Bad code generated when argument to COUNT(DISTINCT) is a # GROUP BY
column</a>.</div>
</td>
</tr>
<tr id="i75" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountGroupingSets1()">testDistinctCountGroupingSets1</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i76" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountGroupingSets2()">testDistinctCountGroupingSets2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i77" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMixed()">testDistinctCountMixed</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i78" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMixed2()">testDistinctCountMixed2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i79" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMixedJoin()">testDistinctCountMixedJoin</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i80" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMultiple()">testDistinctCountMultiple</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests implementing multiple distinct count the new way, using GROUPING
SETS.</div>
</td>
</tr>
<tr id="i81" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMultipleNoGroup()">testDistinctCountMultipleNoGroup</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i82" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountMultipleViaJoin()">testDistinctCountMultipleViaJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests implementing multiple distinct count the old way, using a join.</div>
</td>
</tr>
<tr id="i83" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctCountWithoutGroupBy()">testDistinctCountWithoutGroupBy</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i84" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctNonDistinctAggregates()">testDistinctNonDistinctAggregates</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i85" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctNonDistinctAggregatesWithGrouping1()">testDistinctNonDistinctAggregatesWithGrouping1</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1558">[CALCITE-1558]
AggregateExpandDistinctAggregatesRule gets field mapping wrong if groupKey
is used in aggregate function</a>.</div>
</td>
</tr>
<tr id="i86" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctNonDistinctAggregatesWithGrouping2()">testDistinctNonDistinctAggregatesWithGrouping2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i87" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctNonDistinctTwoAggregatesWithGrouping()">testDistinctNonDistinctTwoAggregatesWithGrouping</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i88" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctWithGrouping()">testDistinctWithGrouping</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i89" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctWithMultipleInputs()">testDistinctWithMultipleInputs</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i90" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDistinctWithMultipleInputsAndGroupby()">testDistinctWithMultipleInputsAndGroupby</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i91" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testDynamicStarWithUnion()">testDynamicStarWithUnion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i92" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyAggregate()">testEmptyAggregate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i93" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyAggregateEmptyKey()">testEmptyAggregateEmptyKey</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i94" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyAggregateEmptyKeyWithAggregateValuesRule()">testEmptyAggregateEmptyKeyWithAggregateValuesRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i95" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyFilterProjectUnion()">testEmptyFilterProjectUnion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i96" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyIntersect()">testEmptyIntersect</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i97" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyJoin()">testEmptyJoin</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i98" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyJoinLeft()">testEmptyJoinLeft</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i99" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyJoinRight()">testEmptyJoinRight</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i100" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyMinus()">testEmptyMinus</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i101" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyMinus2()">testEmptyMinus2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i102" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyProject()">testEmptyProject</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1488">[CALCITE-1488]
ValuesReduceRule should ignore empty Values</a>.</div>
</td>
</tr>
<tr id="i103" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptyProject2()">testEmptyProject2</a></span>()</code></th>
<td class="colLast">
<div class="block">Same query as <a href="#testEmptyProject()"><code>testEmptyProject()</code></a>, and <code>PruneEmptyRules</code>
is able to do the job that <code>ValuesReduceRule</code> cannot do.</div>
</td>
</tr>
<tr id="i104" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptySort()">testEmptySort</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i105" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testEmptySortLimitZero()">testEmptySortLimitZero</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i106" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExchangeRemoveConstantKeysRule()">testExchangeRemoveConstantKeysRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i107" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterExists()">testExpandFilterExists</a></span>()</code></th>
<td class="colLast">
<div class="block">An EXISTS filter that can be converted into true/false.</div>
</td>
</tr>
<tr id="i108" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterExistsSimple()">testExpandFilterExistsSimple</a></span>()</code></th>
<td class="colLast">
<div class="block">An EXISTS filter that can be converted into a semi-join.</div>
</td>
</tr>
<tr id="i109" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterExistsSimpleAnd()">testExpandFilterExistsSimpleAnd</a></span>()</code></th>
<td class="colLast">
<div class="block">An EXISTS filter that can be converted into a semi-join.</div>
</td>
</tr>
<tr id="i110" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterIn()">testExpandFilterIn</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i111" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterIn3Value()">testExpandFilterIn3Value</a></span>()</code></th>
<td class="colLast">
<div class="block">An IN filter that requires full 3-value logic (true, false, unknown).</div>
</td>
</tr>
<tr id="i112" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterInComposite()">testExpandFilterInComposite</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i113" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandFilterScalar()">testExpandFilterScalar</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i114" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandJoinExists()">testExpandJoinExists</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i115" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandJoinIn()">testExpandJoinIn</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i116" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandJoinInComposite()">testExpandJoinInComposite</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i117" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandJoinScalar()">testExpandJoinScalar</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i118" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandProjectExists()">testExpandProjectExists</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i119" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandProjectIn()">testExpandProjectIn</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i120" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandProjectInComposite()">testExpandProjectInComposite</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i121" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandProjectInNullable()">testExpandProjectInNullable</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i122" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandProjectScalar()">testExpandProjectScalar</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests expanding a sub-query, specifically an uncorrelated scalar
sub-query in a project (SELECT clause).</div>
</td>
</tr>
<tr id="i123" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpandWhereComparisonCorrelated()">testExpandWhereComparisonCorrelated</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i124" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExpressionInWindowFunction()">testExpressionInWindowFunction</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-841">[CALCITE-841]
Redundant windows when window function arguments are expressions</a>.</div>
</td>
</tr>
<tr id="i125" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExtractJoinFilterRule()">testExtractJoinFilterRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i126" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExtractYearMonthToRange()">testExtractYearMonthToRange</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i127" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testExtractYearToRange()">testExtractYearToRange</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-434">[CALCITE-434]
Converting predicates on date dimension columns into date ranges</a>,
specifically a rule that converts <code>EXTRACT(YEAR FROM ...) = constant</code>
to a range.</div>
</td>
</tr>
<tr id="i128" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFilterAndProjectWithMultiJoin()">testFilterAndProjectWithMultiJoin</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i129" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFilterProjectTranspose()">testFilterProjectTranspose</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests a variant of <code>FilterProjectTransposeRule</code>
that pushes a Filter that contains a correlating variable.</div>
</td>
</tr>
<tr id="i130" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFilterProjectTransposePreventedByCorrelation()">testFilterProjectTransposePreventedByCorrelation</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that the default instance of <code>FilterProjectTransposeRule</code>
does not push a Filter that contains a correlating variable.</div>
</td>
</tr>
<tr id="i131" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFilterProjectTransposeRule()">testFilterProjectTransposeRule</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2865">[CALCITE-2865]
FilterProjectTransposeRule generates wrong traitSet when copyFilter/Project is true</a>.</div>
</td>
</tr>
<tr id="i132" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFilterRemoveIsNotDistinctFromRule()">testFilterRemoveIsNotDistinctFromRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i133" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFullOuterJoinSimplificationToInner()">testFullOuterJoinSimplificationToInner</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i134" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFullOuterJoinSimplificationToLeftOuter()">testFullOuterJoinSimplificationToLeftOuter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i135" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testFullOuterJoinSimplificationToRightOuter()">testFullOuterJoinSimplificationToRightOuter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i136" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testHeterogeneousConversion()">testHeterogeneousConversion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i137" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testInferringPredicatesWithNotOperatorInJoinCondition()">testInferringPredicatesWithNotOperatorInJoinCondition</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2275">[CALCITE-2275]
JoinPushTransitivePredicatesRule wrongly pushes down NOT condition</a>.</div>
</td>
</tr>
<tr id="i138" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testIntersectToDistinct()">testIntersectToDistinct</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>IntersectToDistinctRule</code>,
which rewrites an <code>Intersect</code> operator with 3 inputs.</div>
</td>
</tr>
<tr id="i139" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testIntersectToDistinctAll()">testIntersectToDistinctAll</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that <code>IntersectToDistinctRule</code>
correctly ignores an <code>INTERSECT ALL</code>.</div>
</td>
</tr>
<tr id="i140" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testIsNullPushDown()">testIsNullPushDown</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for DX-11490
Make sure the planner doesn't fail over wrong push down
of is null</div>
</td>
</tr>
<tr id="i141" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testIsNullPushDown2()">testIsNullPushDown2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i142" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose1()">testJoinProjectTranspose1</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i143" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose2()">testJoinProjectTranspose2</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1338">[CALCITE-1338]
JoinProjectTransposeRule should not pull a literal above the
null-generating side of a join</a>.</div>
</td>
</tr>
<tr id="i144" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose3()">testJoinProjectTranspose3</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
should not transpose since the left project of right join has literal.</div>
</td>
</tr>
<tr id="i145" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose4()">testJoinProjectTranspose4</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
should not transpose since the right project of left join has not-strong
expression <code>y is not null</code>.</div>
</td>
</tr>
<tr id="i146" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose5()">testJoinProjectTranspose5</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
should not transpose since the right project of left join has not-strong
expression <code>1 + 1</code>.</div>
</td>
</tr>
<tr id="i147" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose6()">testJoinProjectTranspose6</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
should not transpose since both the left project and right project have
literal.</div>
</td>
</tr>
<tr id="i148" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose7()">testJoinProjectTranspose7</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
Should transpose since all expressions in the right project of left join
are strong.</div>
</td>
</tr>
<tr id="i149" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinProjectTranspose8()">testJoinProjectTranspose8</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testJoinProjectTranspose2()"><code>testJoinProjectTranspose2()</code></a>;
should transpose since all expressions including
<code>deptno &gt; 10 and cast(null as boolean)</code> in the right project of left
join are strong.</div>
</td>
</tr>
<tr id="i150" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinPushTransitivePredicatesRule()">testJoinPushTransitivePredicatesRule</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2200">[CALCITE-2200]
Infinite loop for JoinPushTransitivePredicatesRule</a>.</div>
</td>
</tr>
<tr id="i151" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinPushTransitivePredicatesRule2()">testJoinPushTransitivePredicatesRule2</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2205">[CALCITE-2205]
One more infinite loop for JoinPushTransitivePredicatesRule</a>.</div>
</td>
</tr>
<tr id="i152" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinToMultiJoinDoesNotMatchAntiJoin()">testJoinToMultiJoinDoesNotMatchAntiJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3225">[CALCITE-3225]
JoinToMultiJoinRule should not match SEMI/ANTI LogicalJoin</a>.</div>
</td>
</tr>
<tr id="i153" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testJoinToMultiJoinDoesNotMatchSemiJoin()">testJoinToMultiJoinDoesNotMatchSemiJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3225">[CALCITE-3225]
JoinToMultiJoinRule should not match SEMI/ANTI LogicalJoin</a>.</div>
</td>
</tr>
<tr id="i154" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testLeftOuterJoinSimplificationToInner()">testLeftOuterJoinSimplificationToInner</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i155" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testManyFiltersOnTopOfMultiJoinShouldCollapse()">testManyFiltersOnTopOfMultiJoinShouldCollapse</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i156" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeFilter()">testMergeFilter</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that filters are combined if they are identical.</div>
</td>
</tr>
<tr id="i157" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeFilterWithJoinCondition()">testMergeFilterWithJoinCondition</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i158" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeIntersect()">testMergeIntersect</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>UnionMergeRule.INTERSECT_INSTANCE</code>, which merges 2
<code>Intersect</code> operators into a single <code>Intersect</code> with 3
inputs.</div>
</td>
</tr>
<tr id="i159" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeJoinFilter()">testMergeJoinFilter</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that a filters is combined are combined if they are identical,
even if one of them originates in an ON clause of a JOIN.</div>
</td>
</tr>
<tr id="i160" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeMinus()">testMergeMinus</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>UnionMergeRule.MINUS_INSTANCE</code>, which merges 2
<code>Minus</code> operators into a single <code>Minus</code> with 3
inputs.</div>
</td>
</tr>
<tr id="i161" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeMinusRightDeep()">testMergeMinusRightDeep</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>UnionMergeRule.MINUS_INSTANCE</code>
does not merge <code>Minus(a, Minus(b, c))</code>
into <code>Minus(a, b, c)</code>, which would be incorrect.</div>
</td>
</tr>
<tr id="i162" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeSetOpMixed()">testMergeSetOpMixed</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that <code>UnionMergeRule</code> does nothing if its arguments have
are different set operators, <code>Union</code> and <code>Intersect</code>.</div>
</td>
</tr>
<tr id="i163" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeUnionAll()">testMergeUnionAll</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>UnionMergeRule</code>, which merges 2 <code>Union</code> operators into
a single <code>Union</code> with 3 inputs.</div>
</td>
</tr>
<tr id="i164" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeUnionDistinct()">testMergeUnionDistinct</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests <code>UnionMergeRule</code>, which merges 2 <code>Union</code>
<code>DISTINCT</code> (not <code>ALL</code>) operators into a single
<code>Union</code> with 3 inputs.</div>
</td>
</tr>
<tr id="i165" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeUnionMixed()">testMergeUnionMixed</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that <code>UnionMergeRule</code> does nothing if its arguments have
different <code>ALL</code> settings.</div>
</td>
</tr>
<tr id="i166" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMergeUnionMixed2()">testMergeUnionMixed2</a></span>()</code></th>
<td class="colLast">
<div class="block">Tests that <code>UnionMergeRule</code> converts all inputs to DISTINCT
if the top one is DISTINCT.</div>
</td>
</tr>
<tr id="i167" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMinusMergeRule()">testMinusMergeRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i168" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMonotonicityUDF()">testMonotonicityUDF</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3151">[CALCITE-3151]
RexCall's Monotonicity is not considered in determining a Calc's collation</a></div>
</td>
</tr>
<tr id="i169" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testMultipleDistinctWithGrouping()">testMultipleDistinctWithGrouping</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i170" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testNestedAggregates()">testNestedAggregates</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-750">[CALCITE-750]
Allow windowed aggregate on top of regular aggregate</a>.</div>
</td>
</tr>
<tr id="i171" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testNoOversimplificationBelowIsNull()">testNoOversimplificationBelowIsNull</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2726">[CALCITE-2726]
ReduceExpressionRule may oversimplify filter conditions containing nulls</a>.</div>
</td>
</tr>
<tr id="i172" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testNoReduceAverage()">testNoReduceAverage</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i173" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testNoReduceSum()">testNoReduceSum</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i174" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testNotPushExpression()">testNotPushExpression</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i175" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testOrAlwaysTrue()">testOrAlwaysTrue</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i176" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testOrAlwaysTrue2()">testOrAlwaysTrue2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i177" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testOversimplifiedCaseStatement()">testOversimplifiedCaseStatement</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i178" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTranspose()">testProjectCorrelateTranspose</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i179" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeDynamic()">testProjectCorrelateTransposeDynamic</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i180" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeRuleAntiCorrelate()">testProjectCorrelateTransposeRuleAntiCorrelate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i181" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeRuleLeftCorrelate()">testProjectCorrelateTransposeRuleLeftCorrelate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i182" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeRuleSemiCorrelate()">testProjectCorrelateTransposeRuleSemiCorrelate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i183" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeWithExprCond()">testProjectCorrelateTransposeWithExprCond</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i184" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectCorrelateTransposeWithOver()">testProjectCorrelateTransposeWithOver</a></span>()</code></th>
<td class="colLast">
<div class="block">As <a href="#testProjectSetOpTranspose()"><code>testProjectSetOpTranspose()</code></a>;
should not push over past correlate but its operands can since correlate
will affect row count.</div>
</td>
</tr>
<tr id="i185" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectFilterTransposeRuleOnEmptyRowType()">testProjectFilterTransposeRuleOnEmptyRowType</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3188">[CALCITE-3188]
IndexOutOfBoundsException in ProjectFilterTransposeRule when executing SELECT COUNT(*)</a>.</div>
</td>
</tr>
<tr id="i186" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove1()">testProjectJoinRemove1</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should remove the bottom join since the project uses column in the
right input of bottom join.</div>
</td>
</tr>
<tr id="i187" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove2()">testProjectJoinRemove2</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the bottom join since the project uses column in the
left input of bottom join.</div>
</td>
</tr>
<tr id="i188" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove3()">testProjectJoinRemove3</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the bottom join since the right join keys of bottom
join are not unique.</div>
</td>
</tr>
<tr id="i189" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove4()">testProjectJoinRemove4</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should remove the left join since the join key of the right input is
unique.</div>
</td>
</tr>
<tr id="i190" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove5()">testProjectJoinRemove5</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the left join since the join key of the right input is
not unique.</div>
</td>
</tr>
<tr id="i191" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove6()">testProjectJoinRemove6</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the left join since the project use columns in the right
input of the join.</div>
</td>
</tr>
<tr id="i192" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove7()">testProjectJoinRemove7</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should remove the right join since the join key of the left input is
unique.</div>
</td>
</tr>
<tr id="i193" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove8()">testProjectJoinRemove8</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the right join since the join key of the left input is
not unique.</div>
</td>
</tr>
<tr id="i194" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectJoinRemove9()">testProjectJoinRemove9</a></span>()</code></th>
<td class="colLast">
<div class="block">Similar to <a href="#testAggregateJoinRemove1()"><code>testAggregateJoinRemove1()</code></a>;
Should not remove the right join since the project uses columns in the
left input of the join.</div>
</td>
</tr>
<tr id="i195" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectSetOpTranspose()">testProjectSetOpTranspose</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3004">[CALCITE-3004]
Should not push over past union but its operands can since setop
will affect row count</a>.</div>
</td>
</tr>
<tr id="i196" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectToWindowRuleForMultipleWindows()">testProjectToWindowRuleForMultipleWindows</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i197" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectWindowTransposeRule()">testProjectWindowTransposeRule</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i198" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testProjectWindowTransposeRuleWithConstants()">testProjectWindowTransposeRuleWithConstants</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i199" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullAggregateThroughUnion()">testPullAggregateThroughUnion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i200" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullAggregateThroughUnion2()">testPullAggregateThroughUnion2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i201" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullAggregateThroughUnionAndAddProjects()">testPullAggregateThroughUnionAndAddProjects</a></span>()</code></th>
<td class="colLast">
<div class="block">Once the bottom aggregate pulled through union, we need to add a Project
if the new input contains a different type from the union.</div>
</td>
</tr>
<tr id="i202" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullAggregateThroughUnionWithAlias()">testPullAggregateThroughUnionWithAlias</a></span>()</code></th>
<td class="colLast">
<div class="block">Make sure the union alias is preserved when the bottom aggregate is
pulled up through union.</div>
</td>
</tr>
<tr id="i203" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantIntoFilter()">testPullConstantIntoFilter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i204" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantIntoJoin()">testPullConstantIntoJoin</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i205" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantIntoJoin2()">testPullConstantIntoJoin2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i206" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantIntoProject()">testPullConstantIntoProject</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i207" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregateAllConst()">testPullConstantThroughAggregateAllConst</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i208" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregateAllLiterals()">testPullConstantThroughAggregateAllLiterals</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i209" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregateConstGroupBy()">testPullConstantThroughAggregateConstGroupBy</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i210" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregatePermuted()">testPullConstantThroughAggregatePermuted</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i211" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregatePermutedConstFirst()">testPullConstantThroughAggregatePermutedConstFirst</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i212" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregatePermutedConstGroupBy()">testPullConstantThroughAggregatePermutedConstGroupBy</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i213" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughAggregateSimpleNonNullable()">testPullConstantThroughAggregateSimpleNonNullable</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i214" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughConstLast()">testPullConstantThroughConstLast</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i215" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughUnion()">testPullConstantThroughUnion</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i216" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughUnion2()">testPullConstantThroughUnion2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i217" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullConstantThroughUnion3()">testPullConstantThroughUnion3</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i218" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullFilterThroughAggregate()">testPullFilterThroughAggregate</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i219" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullFilterThroughAggregateGroupingSets()">testPullFilterThroughAggregateGroupingSets</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i220" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPullNull()">testPullNull</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i221" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateFunctionsThroughJoin()">testPushAggregateFunctionsThroughJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">Push a variety of aggregate functions.</div>
</td>
</tr>
<tr id="i222" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateSumNoGroup()">testPushAggregateSumNoGroup</a></span>()</code></th>
<td class="colLast">
<div class="block">Push count(*) through join, no GROUP BY.</div>
</td>
</tr>
<tr id="i223" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateSumThroughJoin()">testPushAggregateSumThroughJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">SUM is the easiest aggregate function to split.</div>
</td>
</tr>
<tr id="i224" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateSumThroughJoinAfterAggregateReduce()">testPushAggregateSumThroughJoinAfterAggregateReduce</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2108">[CALCITE-2108]
AggregateJoinTransposeRule incorrectly splits a SUM0 call when Aggregate
has no group keys</a>.</div>
</td>
</tr>
<tr id="i225" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateSumWithoutGroupKeyThroughJoin()">testPushAggregateSumWithoutGroupKeyThroughJoin</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2105">[CALCITE-2105]
AggregateJoinTransposeRule incorrectly makes a SUM NOT NULL when Aggregate
has no group keys</a>.</div>
</td>
</tr>
<tr id="i226" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin1()">testPushAggregateThroughJoin1</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i227" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin2()">testPushAggregateThroughJoin2</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i228" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin3()">testPushAggregateThroughJoin3</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i229" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin4()">testPushAggregateThroughJoin4</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-1544">[CALCITE-1544]
AggregateJoinTransposeRule fails to preserve row type</a>.</div>
</td>
</tr>
<tr id="i230" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin5()">testPushAggregateThroughJoin5</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i231" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoin6()">testPushAggregateThroughJoin6</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2195">[CALCITE-2195]
AggregateJoinTransposeRule fails to aggregate over unique column</a>.</div>
</td>
</tr>
<tr id="i232" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoinDistinct()">testPushAggregateThroughJoinDistinct</a></span>()</code></th>
<td class="colLast">
<div class="block">Push a aggregate functions into a relation that is unique on the join
key.</div>
</td>
</tr>
<tr id="i233" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoinOnEmptyLogicalValues()">testPushAggregateThroughJoinOnEmptyLogicalValues</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-3076">[CALCITE-3076]
AggregateJoinTransposeRule throws error for unique under aggregate keys when
generating merged calls</a>.</div>
</td>
</tr>
<tr id="i234" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughJoinWithUniqueInput()">testPushAggregateThroughJoinWithUniqueInput</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
<a href="https://issues.apache.org/jira/browse/CALCITE-2278">[CALCITE-2278]
AggregateJoinTransposeRule fails to split aggregate call if input contains
an aggregate call and has distinct rows</a>.</div>
</td>
</tr>
<tr id="i235" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughOuterJoin1()">testPushAggregateThroughOuterJoin1</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
outer join, group by on non-join keys, group by on non-null generating side only</div>
</td>
</tr>
<tr id="i236" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughOuterJoin10()">testPushAggregateThroughOuterJoin10</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
outer join, with aggregate functions</div>
</td>
</tr>
<tr id="i237" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughOuterJoin11()">testPushAggregateThroughOuterJoin11</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
non-equi outer join</div>
</td>
</tr>
<tr id="i238" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughOuterJoin12()">testPushAggregateThroughOuterJoin12</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
right outer join, group by on key same as join key, group by on (left)null generating side</div>
</td>
</tr>
<tr id="i239" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#testPushAggregateThroughOuterJoin13()">testPushAggregateThroughOuterJoin13</a></span>()</code></th>
<td class="colLast">
<div class="block">Test case for
full outer join, group by on key same as join key, group by on one side</div>
</td>
</tr>
<tr id="i240" class="altColor">
<td class="colFirst"><code>void