blob: 19670c445202dfa9599aa9294f0c2f5e6e9e3415 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>LoptMultiJoin (Apache Calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="LoptMultiJoin (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":42,"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};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated 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/LoptMultiJoin.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.rel.rules</a></div>
<h2 title="Class LoptMultiJoin" class="title">Class LoptMultiJoin</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.rel.rules.LoptMultiJoin</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">LoptMultiJoin</span>
extends java.lang.Object</pre>
<div class="block">Utility class that keeps track of the join factors that
make up a <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>.</div>
</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>(package private) static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="LoptMultiJoin.Edge.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.Edge</a></span></code></th>
<td class="colLast">
<div class="block">Information about a join-condition.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="LoptMultiJoin.RemovableSelfJoin.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.RemovableSelfJoin</a></span></code></th>
<td class="colLast">
<div class="block">Utility class used to keep track of the factors in a removable self-join.</div>
</td>
</tr>
</table>
</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 java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#allJoinFilters">allJoinFilters</a></span></code></th>
<td class="colLast">
<div class="block">All join filters associated with the MultiJoin, decomposed into a
list.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#factorsRefByFactor">factorsRefByFactor</a></span></code></th>
<td class="colLast">
<div class="block">Bitmap indicating which factors each factor references in join filters
that correspond to comparisons</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.Map&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>,&#8203;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#factorsRefByJoinFilter">factorsRefByJoinFilter</a></span></code></th>
<td class="colLast">
<div class="block">For each join filter, associates a bitmap indicating all factors
referenced by the filter</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) int[][]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#factorWeights">factorWeights</a></span></code></th>
<td class="colLast">
<div class="block">Weights of each factor combination</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="../type/RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#factory">factory</a></span></code></th>
<td class="colLast">
<div class="block">Type factory</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.Map&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>,&#8203;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#fieldsRefByJoinFilter">fieldsRefByJoinFilter</a></span></code></th>
<td class="colLast">
<div class="block">For each join filter, associates a bitmap indicating all fields
referenced by the filter</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private com.google.common.collect.ImmutableList&lt;<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinFactors">joinFactors</a></span></code></th>
<td class="colLast">
<div class="block">Original inputs into the MultiJoin</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.Map&lt;java.lang.Integer,&#8203;int[]&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinFieldRefCountsMap">joinFieldRefCountsMap</a></span></code></th>
<td class="colLast">
<div class="block">Map containing reference counts of the fields referenced in join
conditions for each join factor.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinFilters">joinFilters</a></span></code></th>
<td class="colLast">
<div class="block">Join filters associated with the MultiJoin, decomposed into a list.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) java.lang.Integer[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinRemovalFactors">joinRemovalFactors</a></span></code></th>
<td class="colLast">
<div class="block">Indicates for each factor whether its join can be removed because it is
the dimension table in a semijoin.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinRemovalSemiJoins">joinRemovalSemiJoins</a></span></code></th>
<td class="colLast">
<div class="block">The semijoins that allow the join of a dimension table to be removed</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) int[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinStart">joinStart</a></span></code></th>
<td class="colLast">
<div class="block">Starting RexInputRef index corresponding to each join factor</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private com.google.common.collect.ImmutableList&lt;<a href="../core/JoinRelType.html" title="enum in org.apache.calcite.rel.core">JoinRelType</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinTypes">joinTypes</a></span></code></th>
<td class="colLast">
<div class="block">If a join factor is null generating in a left or right outer join,
joinTypes indicates the join type corresponding to the factor.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#multiJoin">multiJoin</a></span></code></th>
<td class="colLast">
<div class="block">The MultiJoin being optimized</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) int[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#nFieldsInJoinFactor">nFieldsInJoinFactor</a></span></code></th>
<td class="colLast">
<div class="block">Number of fields in each join factor</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#nJoinFactors">nJoinFactors</a></span></code></th>
<td class="colLast">
<div class="block">Number of factors into the MultiJoin</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#nTotalFields">nTotalFields</a></span></code></th>
<td class="colLast">
<div class="block">Total number of fields in the MultiJoin</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#outerJoinFactors">outerJoinFactors</a></span></code></th>
<td class="colLast">
<div class="block">If a join factor is null generating in a left or right outer join, the
bitmap contains the non-null generating factors that the null generating
factor is dependent upon</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#projFields">projFields</a></span></code></th>
<td class="colLast">
<div class="block">Bitmap corresponding to the fields projected from each join factor, after
row scan processing has completed.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) java.util.Set&lt;java.lang.Integer&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removableOuterJoinFactors">removableOuterJoinFactors</a></span></code></th>
<td class="colLast">
<div class="block">Set of null-generating factors whose corresponding outer join can be
removed from the query plan</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) java.util.Map&lt;java.lang.Integer,&#8203;<a href="LoptMultiJoin.RemovableSelfJoin.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.RemovableSelfJoin</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removableSelfJoinPairs">removableSelfJoinPairs</a></span></code></th>
<td class="colLast">
<div class="block">Map consisting of all pairs of self-joins where the self-join can be
removed because the join between the identical factors is an equality
join on the same set of unique keys.</div>
</td>
</tr>
</table>
</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(org.apache.calcite.rel.rules.MultiJoin)">LoptMultiJoin</a></span>&#8203;(<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a>&nbsp;multiJoin)</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><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRemovableOuterJoinFactor(int)">addRemovableOuterJoinFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">
<div class="block">Adds a join factor to the set of factors that can be removed because the
factor is the null generating factor in an outer join, its join keys are
unique, and the factor is not projected in the query</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRemovableSelfJoinPair(int,int)">addRemovableSelfJoinPair</a></span>&#8203;(int&nbsp;factor1,
int&nbsp;factor2)</code></th>
<td class="colLast">
<div class="block">Adds to a map that keeps track of removable self-join pairs.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="LoptMultiJoin.Edge.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.Edge</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createEdge(org.apache.calcite.rex.RexNode)">createEdge</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>private <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#factorBitmap(org.apache.calcite.util.ImmutableBitSet)">factorBitmap</a></span>&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;fieldRefBitmap)</code></th>
<td class="colLast">
<div class="block">Sets the bitmap indicating which factors a filter references based on
which fields it references</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>private <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#fieldBitmap(org.apache.calcite.rex.RexNode)">fieldBitmap</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findRef(int)">findRef</a></span>&#8203;(int&nbsp;rexInputRef)</code></th>
<td class="colLast">
<div class="block">Determines the join factor corresponding to a RexInputRef</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getChildFactors(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.util.ImmutableBitSet.Builder)">getChildFactors</a></span>&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;joinTree,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;childFactors)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFactorsRefByFactor(int)">getFactorsRefByFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFactorsRefByJoinFilter(org.apache.calcite.rex.RexNode)">getFactorsRefByJoinFilter</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>int[][]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFactorWeights()">getFactorWeights</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFieldsRefByJoinFilter(org.apache.calcite.rex.RexNode)">getFieldsRefByJoinFilter</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinFactor(int)">getJoinFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>int[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinFieldRefCounts(int)">getJoinFieldRefCounts</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinFields(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.rel.rules.LoptJoinTree)">getJoinFields</a></span>&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;left,
<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;right)</code></th>
<td class="colLast">
<div class="block">Retrieves the fields corresponding to a join between a left and right
tree</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>(package private) <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinFilterFactorBitmap(org.apache.calcite.rex.RexNode,boolean)">getJoinFilterFactorBitmap</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter,
boolean&nbsp;setFields)</code></th>
<td class="colLast">
<div class="block">Returns a bitmap representing the factors referenced in a join filter</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinFilters()">getJoinFilters</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>java.lang.Integer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinRemovalFactor(int)">getJoinRemovalFactor</a></span>&#8203;(int&nbsp;dimIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code><a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinRemovalSemiJoin(int)">getJoinRemovalSemiJoin</a></span>&#8203;(int&nbsp;dimIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinStart(int)">getJoinStart</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMultiJoinFields()">getMultiJoinFields</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns array of fields contained within the multi-join</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code><a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMultiJoinRel()">getMultiJoinRel</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNumFieldsInJoinFactor(int)">getNumFieldsInJoinFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNumJoinFactors()">getNumJoinFactors</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNumTotalFields()">getNumTotalFields</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>java.lang.Integer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOtherSelfJoinFactor(int)">getOtherSelfJoinFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">
<div class="block">Returns the other factor in a self-join pair if the factor passed in is
a factor in a removable self-join; otherwise, returns null.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOuterJoinCond(int)">getOuterJoinCond</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOuterJoinFactors(int)">getOuterJoinFactors</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getProjFields(int)">getProjFields</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>java.lang.Integer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRightColumnMapping(int,int)">getRightColumnMapping</a></span>&#8203;(int&nbsp;rightFactor,
int&nbsp;rightOffset)</code></th>
<td class="colLast">
<div class="block">Determines whether there is a mapping from a column in the right factor
of a self-join to a column from the left factor.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hasAllFactors(org.apache.calcite.rel.rules.LoptJoinTree,java.util.BitSet)">hasAllFactors</a></span>&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;joinTree,
java.util.BitSet&nbsp;factorsNeeded)</code></th>
<td class="colLast">
<div class="block">Returns true if a join tree contains all factors required</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isLeftFactorInRemovableSelfJoin(int)">isLeftFactorInRemovableSelfJoin</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isNullGenerating(int)">isNullGenerating</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isRemovableOuterJoinFactor(int)">isRemovableOuterJoinFactor</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isRightFactorInRemovableSelfJoin(int)">isRightFactorInRemovableSelfJoin</a></span>&#8203;(int&nbsp;factIdx)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setFactorWeight(int,int,int)">setFactorWeight</a></span>&#8203;(int&nbsp;weight,
int&nbsp;leftFactor,
int&nbsp;rightFactor)</code></th>
<td class="colLast">
<div class="block">Sets an individual weight if the new weight is better than the current
one</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="#setFactorWeights()">setFactorWeights</a></span>()</code></th>
<td class="colLast">
<div class="block">Sets weighting for each combination of factors, depending on which join
filters reference which factors.</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setJoinFilterRefs()">setJoinFilterRefs</a></span>()</code></th>
<td class="colLast">
<div class="block">Sets bitmaps indicating which factors and fields each join filter
references</div>
</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="#setJoinRemovalFactor(int,int)">setJoinRemovalFactor</a></span>&#8203;(int&nbsp;dimIdx,
int&nbsp;factIdx)</code></th>
<td class="colLast">
<div class="block">Indicates that a dimension factor's join can be removed because of a
semijoin with a fact table.</div>
</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="#setJoinRemovalSemiJoin(int,org.apache.calcite.rel.logical.LogicalJoin)">setJoinRemovalSemiJoin</a></span>&#8203;(int&nbsp;dimIdx,
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>&nbsp;semiJoin)</code></th>
<td class="colLast">
<div class="block">Indicates the semijoin that allows the join of a dimension table to be
removed</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="multiJoin">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>multiJoin</h4>
<pre><a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a> multiJoin</pre>
<div class="block">The MultiJoin being optimized</div>
</li>
</ul>
<a id="joinFilters">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinFilters</h4>
<pre>private&nbsp;java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt; joinFilters</pre>
<div class="block">Join filters associated with the MultiJoin, decomposed into a list.
Excludes left/right outer join filters.</div>
</li>
</ul>
<a id="allJoinFilters">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>allJoinFilters</h4>
<pre>private&nbsp;java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt; allJoinFilters</pre>
<div class="block">All join filters associated with the MultiJoin, decomposed into a
list. Includes left/right outer join filters.</div>
</li>
</ul>
<a id="nJoinFactors">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nJoinFactors</h4>
<pre>private final&nbsp;int nJoinFactors</pre>
<div class="block">Number of factors into the MultiJoin</div>
</li>
</ul>
<a id="nTotalFields">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nTotalFields</h4>
<pre>private&nbsp;int nTotalFields</pre>
<div class="block">Total number of fields in the MultiJoin</div>
</li>
</ul>
<a id="joinFactors">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinFactors</h4>
<pre>private final&nbsp;com.google.common.collect.ImmutableList&lt;<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt; joinFactors</pre>
<div class="block">Original inputs into the MultiJoin</div>
</li>
</ul>
<a id="joinTypes">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinTypes</h4>
<pre>private final&nbsp;com.google.common.collect.ImmutableList&lt;<a href="../core/JoinRelType.html" title="enum in org.apache.calcite.rel.core">JoinRelType</a>&gt; joinTypes</pre>
<div class="block">If a join factor is null generating in a left or right outer join,
joinTypes indicates the join type corresponding to the factor. Otherwise,
it is set to INNER.</div>
</li>
</ul>
<a id="outerJoinFactors">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>outerJoinFactors</h4>
<pre>private final&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>[] outerJoinFactors</pre>
<div class="block">If a join factor is null generating in a left or right outer join, the
bitmap contains the non-null generating factors that the null generating
factor is dependent upon</div>
</li>
</ul>
<a id="projFields">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>projFields</h4>
<pre>private&nbsp;java.util.List&lt;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt; projFields</pre>
<div class="block">Bitmap corresponding to the fields projected from each join factor, after
row scan processing has completed. This excludes fields referenced in
join conditions, unless the field appears in the final projection list.</div>
</li>
</ul>
<a id="joinFieldRefCountsMap">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinFieldRefCountsMap</h4>
<pre>private&nbsp;java.util.Map&lt;java.lang.Integer,&#8203;int[]&gt; joinFieldRefCountsMap</pre>
<div class="block">Map containing reference counts of the fields referenced in join
conditions for each join factor. If a field is only required for a
semijoin, then it is removed from the reference count. (Hence the need
for reference counts instead of simply a bitmap.) The map is indexed by
the factor number.</div>
</li>
</ul>
<a id="factorsRefByJoinFilter">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>factorsRefByJoinFilter</h4>
<pre>private&nbsp;java.util.Map&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>,&#8203;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt; factorsRefByJoinFilter</pre>
<div class="block">For each join filter, associates a bitmap indicating all factors
referenced by the filter</div>
</li>
</ul>
<a id="fieldsRefByJoinFilter">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fieldsRefByJoinFilter</h4>
<pre>private&nbsp;java.util.Map&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>,&#8203;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&gt; fieldsRefByJoinFilter</pre>
<div class="block">For each join filter, associates a bitmap indicating all fields
referenced by the filter</div>
</li>
</ul>
<a id="joinStart">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinStart</h4>
<pre>int[] joinStart</pre>
<div class="block">Starting RexInputRef index corresponding to each join factor</div>
</li>
</ul>
<a id="nFieldsInJoinFactor">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nFieldsInJoinFactor</h4>
<pre>int[] nFieldsInJoinFactor</pre>
<div class="block">Number of fields in each join factor</div>
</li>
</ul>
<a id="factorsRefByFactor">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>factorsRefByFactor</h4>
<pre><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>[] factorsRefByFactor</pre>
<div class="block">Bitmap indicating which factors each factor references in join filters
that correspond to comparisons</div>
</li>
</ul>
<a id="factorWeights">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>factorWeights</h4>
<pre>int[][] factorWeights</pre>
<div class="block">Weights of each factor combination</div>
</li>
</ul>
<a id="factory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>factory</h4>
<pre>final&nbsp;<a href="../type/RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a> factory</pre>
<div class="block">Type factory</div>
</li>
</ul>
<a id="joinRemovalFactors">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinRemovalFactors</h4>
<pre>java.lang.Integer[] joinRemovalFactors</pre>
<div class="block">Indicates for each factor whether its join can be removed because it is
the dimension table in a semijoin. If it can be, the entry indicates the
factor id of the fact table (corresponding to the dimension table) in the
semijoin that allows the factor to be removed. If the factor cannot be
removed, the entry corresponding to the factor is null.</div>
</li>
</ul>
<a id="joinRemovalSemiJoins">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinRemovalSemiJoins</h4>
<pre><a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>[] joinRemovalSemiJoins</pre>
<div class="block">The semijoins that allow the join of a dimension table to be removed</div>
</li>
</ul>
<a id="removableOuterJoinFactors">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removableOuterJoinFactors</h4>
<pre>java.util.Set&lt;java.lang.Integer&gt; removableOuterJoinFactors</pre>
<div class="block">Set of null-generating factors whose corresponding outer join can be
removed from the query plan</div>
</li>
</ul>
<a id="removableSelfJoinPairs">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>removableSelfJoinPairs</h4>
<pre>java.util.Map&lt;java.lang.Integer,&#8203;<a href="LoptMultiJoin.RemovableSelfJoin.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.RemovableSelfJoin</a>&gt; removableSelfJoinPairs</pre>
<div class="block">Map consisting of all pairs of self-joins where the self-join can be
removed because the join between the identical factors is an equality
join on the same set of unique keys. The map is keyed by either factor in
the self join.</div>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(org.apache.calcite.rel.rules.MultiJoin)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LoptMultiJoin</h4>
<pre>public&nbsp;LoptMultiJoin&#8203;(<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a>&nbsp;multiJoin)</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="getMultiJoinRel()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMultiJoinRel</h4>
<pre class="methodSignature">public&nbsp;<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a>&nbsp;getMultiJoinRel()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the MultiJoin corresponding to this multijoin</dd>
</dl>
</li>
</ul>
<a id="getNumJoinFactors()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNumJoinFactors</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getNumJoinFactors()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>number of factors in this multijoin</dd>
</dl>
</li>
</ul>
<a id="getJoinFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinFactor</h4>
<pre class="methodSignature">public&nbsp;<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;getJoinFactor&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor to be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>factor corresponding to the factor index passed in</dd>
</dl>
</li>
</ul>
<a id="getNumTotalFields()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNumTotalFields</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getNumTotalFields()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>total number of fields in the multijoin</dd>
</dl>
</li>
</ul>
<a id="getNumFieldsInJoinFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNumFieldsInJoinFactor</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getNumFieldsInJoinFactor&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - desired factor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>number of fields in the specified factor</dd>
</dl>
</li>
</ul>
<a id="getJoinFilters()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinFilters</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;getJoinFilters()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>all non-outer join filters in this multijoin</dd>
</dl>
</li>
</ul>
<a id="getFactorsRefByJoinFilter(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFactorsRefByJoinFilter</h4>
<pre class="methodSignature">public&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getFactorsRefByJoinFilter&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinFilter</code> - filter for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap corresponding to the factors referenced within the
specified join filter</dd>
</dl>
</li>
</ul>
<a id="getMultiJoinFields()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMultiJoinFields</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;&nbsp;getMultiJoinFields()</pre>
<div class="block">Returns array of fields contained within the multi-join</div>
</li>
</ul>
<a id="getFieldsRefByJoinFilter(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFieldsRefByJoinFilter</h4>
<pre class="methodSignature">public&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getFieldsRefByJoinFilter&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinFilter</code> - the filter for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap corresponding to the fields referenced by a join filter</dd>
</dl>
</li>
</ul>
<a id="getFactorWeights()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFactorWeights</h4>
<pre class="methodSignature">public&nbsp;int[][]&nbsp;getFactorWeights()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>weights of the different factors relative to one another</dd>
</dl>
</li>
</ul>
<a id="getFactorsRefByFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFactorsRefByFactor</h4>
<pre class="methodSignature">public&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getFactorsRefByFactor&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap corresponding to the factors referenced by the specified
factor in the various join filters that correspond to comparisons</dd>
</dl>
</li>
</ul>
<a id="getJoinStart(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinStart</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getJoinStart&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>starting offset within the multijoin for the specified factor</dd>
</dl>
</li>
</ul>
<a id="isNullGenerating(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isNullGenerating</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isNullGenerating&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether or not the factor corresponds to a null-generating factor
in a left or right outer join</dd>
</dl>
</li>
</ul>
<a id="getOuterJoinFactors(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOuterJoinFactors</h4>
<pre class="methodSignature">public&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getOuterJoinFactors&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap containing the factors that a null generating factor is
dependent upon, if the factor is null generating in a left or right outer
join; otherwise null is returned</dd>
</dl>
</li>
</ul>
<a id="getOuterJoinCond(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOuterJoinCond</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;getOuterJoinCond&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>outer join conditions associated with the specified null
generating factor</dd>
</dl>
</li>
</ul>
<a id="getProjFields(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProjFields</h4>
<pre class="methodSignature">public&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getProjFields&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap containing the fields that are projected from a factor</dd>
</dl>
</li>
</ul>
<a id="getJoinFieldRefCounts(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinFieldRefCounts</h4>
<pre class="methodSignature">public&nbsp;int[]&nbsp;getJoinFieldRefCounts&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the join field reference counts for a factor</dd>
</dl>
</li>
</ul>
<a id="getJoinRemovalFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinRemovalFactor</h4>
<pre class="methodSignature">public&nbsp;java.lang.Integer&nbsp;getJoinRemovalFactor&#8203;(int&nbsp;dimIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - the dimension factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the factor id of the fact table corresponding to a dimension
table in a semijoin, in the case where the join with the dimension table
can be removed</dd>
</dl>
</li>
</ul>
<a id="getJoinRemovalSemiJoin(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinRemovalSemiJoin</h4>
<pre class="methodSignature">public&nbsp;<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>&nbsp;getJoinRemovalSemiJoin&#8203;(int&nbsp;dimIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - the dimension factor for which information will be returned</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the semijoin that allows the join of a dimension table to be
removed</dd>
</dl>
</li>
</ul>
<a id="setJoinRemovalFactor(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setJoinRemovalFactor</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setJoinRemovalFactor&#8203;(int&nbsp;dimIdx,
int&nbsp;factIdx)</pre>
<div class="block">Indicates that a dimension factor's join can be removed because of a
semijoin with a fact table.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - id of the dimension factor</dd>
<dd><code>factIdx</code> - id of the fact factor</dd>
</dl>
</li>
</ul>
<a id="setJoinRemovalSemiJoin(int,org.apache.calcite.rel.logical.LogicalJoin)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setJoinRemovalSemiJoin</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setJoinRemovalSemiJoin&#8203;(int&nbsp;dimIdx,
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>&nbsp;semiJoin)</pre>
<div class="block">Indicates the semijoin that allows the join of a dimension table to be
removed</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - id of the dimension factor</dd>
<dd><code>semiJoin</code> - the semijoin</dd>
</dl>
</li>
</ul>
<a id="getJoinFilterFactorBitmap(org.apache.calcite.rex.RexNode,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinFilterFactorBitmap</h4>
<pre class="methodSignature"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;getJoinFilterFactorBitmap&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter,
boolean&nbsp;setFields)</pre>
<div class="block">Returns a bitmap representing the factors referenced in a join filter</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinFilter</code> - the join filter</dd>
<dd><code>setFields</code> - if true, add the fields referenced by the join filter
into a map</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the bitmap containing the factor references</dd>
</dl>
</li>
</ul>
<a id="fieldBitmap(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fieldBitmap</h4>
<pre class="methodSignature">private&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;fieldBitmap&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</pre>
</li>
</ul>
<a id="setJoinFilterRefs()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setJoinFilterRefs</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;setJoinFilterRefs()</pre>
<div class="block">Sets bitmaps indicating which factors and fields each join filter
references</div>
</li>
</ul>
<a id="factorBitmap(org.apache.calcite.util.ImmutableBitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>factorBitmap</h4>
<pre class="methodSignature">private&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;factorBitmap&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;fieldRefBitmap)</pre>
<div class="block">Sets the bitmap indicating which factors a filter references based on
which fields it references</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fieldRefBitmap</code> - bitmap representing fields referenced</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>bitmap representing factors referenced that will
be set by this method</dd>
</dl>
</li>
</ul>
<a id="findRef(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findRef</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;findRef&#8203;(int&nbsp;rexInputRef)</pre>
<div class="block">Determines the join factor corresponding to a RexInputRef</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rexInputRef</code> - rexInputRef index</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>index corresponding to join factor</dd>
</dl>
</li>
</ul>
<a id="setFactorWeights()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setFactorWeights</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setFactorWeights()</pre>
<div class="block">Sets weighting for each combination of factors, depending on which join
filters reference which factors. Greater weight is given to equality
conditions. Also, sets bitmaps indicating which factors are referenced by
each factor within join filters that are comparisons.</div>
</li>
</ul>
<a id="setFactorWeight(int,int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setFactorWeight</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;setFactorWeight&#8203;(int&nbsp;weight,
int&nbsp;leftFactor,
int&nbsp;rightFactor)</pre>
<div class="block">Sets an individual weight if the new weight is better than the current
one</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>weight</code> - weight to be set</dd>
<dd><code>leftFactor</code> - index of left factor</dd>
<dd><code>rightFactor</code> - index of right factor</dd>
</dl>
</li>
</ul>
<a id="hasAllFactors(org.apache.calcite.rel.rules.LoptJoinTree,java.util.BitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasAllFactors</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;hasAllFactors&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;joinTree,
java.util.BitSet&nbsp;factorsNeeded)</pre>
<div class="block">Returns true if a join tree contains all factors required</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinTree</code> - join tree to be examined</dd>
<dd><code>factorsNeeded</code> - bitmap of factors required</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if join tree contains all required factors</dd>
</dl>
</li>
</ul>
<a id="getChildFactors(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.util.ImmutableBitSet.Builder)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getChildFactors</h4>
<pre class="methodSignature">@Deprecated
public&nbsp;void&nbsp;getChildFactors&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;joinTree,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;childFactors)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
<div class="block">Sets a bitmap indicating all child RelNodes in a join tree</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinTree</code> - join tree to be examined</dd>
<dd><code>childFactors</code> - bitmap to be set</dd>
</dl>
</li>
</ul>
<a id="getJoinFields(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.rel.rules.LoptJoinTree)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinFields</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;&nbsp;getJoinFields&#8203;(<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;left,
<a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;right)</pre>
<div class="block">Retrieves the fields corresponding to a join between a left and right
tree</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>left</code> - left hand side of the join</dd>
<dd><code>right</code> - right hand side of the join</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>fields of the join</dd>
</dl>
</li>
</ul>
<a id="addRemovableOuterJoinFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRemovableOuterJoinFactor</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addRemovableOuterJoinFactor&#8203;(int&nbsp;factIdx)</pre>
<div class="block">Adds a join factor to the set of factors that can be removed because the
factor is the null generating factor in an outer join, its join keys are
unique, and the factor is not projected in the query</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - join factor</dd>
</dl>
</li>
</ul>
<a id="isRemovableOuterJoinFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRemovableOuterJoinFactor</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isRemovableOuterJoinFactor&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor in question</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the factor corresponds to the null generating factor in
an outer join that can be removed</dd>
</dl>
</li>
</ul>
<a id="addRemovableSelfJoinPair(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRemovableSelfJoinPair</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addRemovableSelfJoinPair&#8203;(int&nbsp;factor1,
int&nbsp;factor2)</pre>
<div class="block">Adds to a map that keeps track of removable self-join pairs.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factor1</code> - one of the factors in the self-join</dd>
<dd><code>factor2</code> - the second factor in the self-join</dd>
</dl>
</li>
</ul>
<a id="getOtherSelfJoinFactor(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOtherSelfJoinFactor</h4>
<pre class="methodSignature">public&nbsp;java.lang.Integer&nbsp;getOtherSelfJoinFactor&#8203;(int&nbsp;factIdx)</pre>
<div class="block">Returns the other factor in a self-join pair if the factor passed in is
a factor in a removable self-join; otherwise, returns null.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - one of the factors in a self-join pair</dd>
</dl>
</li>
</ul>
<a id="isLeftFactorInRemovableSelfJoin(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLeftFactorInRemovableSelfJoin</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isLeftFactorInRemovableSelfJoin&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor in a self-join</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the factor is the left factor in a self-join</dd>
</dl>
</li>
</ul>
<a id="isRightFactorInRemovableSelfJoin(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRightFactorInRemovableSelfJoin</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isRightFactorInRemovableSelfJoin&#8203;(int&nbsp;factIdx)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - factor in a self-join</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the factor is the right factor in a self-join</dd>
</dl>
</li>
</ul>
<a id="getRightColumnMapping(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRightColumnMapping</h4>
<pre class="methodSignature">public&nbsp;java.lang.Integer&nbsp;getRightColumnMapping&#8203;(int&nbsp;rightFactor,
int&nbsp;rightOffset)</pre>
<div class="block">Determines whether there is a mapping from a column in the right factor
of a self-join to a column from the left factor. Assumes that the right
factor is a part of a self-join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rightFactor</code> - the index of the right factor</dd>
<dd><code>rightOffset</code> - the column offset of the right factor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the offset of the corresponding column in the left factor, if
such a column mapping exists; otherwise, null is returned</dd>
</dl>
</li>
</ul>
<a id="createEdge(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>createEdge</h4>
<pre class="methodSignature">public&nbsp;<a href="LoptMultiJoin.Edge.html" title="class in org.apache.calcite.rel.rules">LoptMultiJoin.Edge</a>&nbsp;createEdge&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition)</pre>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LoptMultiJoin.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2012&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>