blob: 49fec00f3dcb2b8473f954ae6c935305b9ee8001 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>LoptMultiJoin (Apache Calcite calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.calcite.rel.rules, class: LoptMultiJoin">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":42,"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};
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 = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flexBox">
<header role="banner" class="flexHeader">
<nav role="navigation">
<!-- ========= 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="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 class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&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>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="skipNav"><a id="skip.navbar.top">
<!-- -->
</a></div>
</nav>
</header>
<div class="flexContent">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.rel.rules</a></div>
<h1 title="Class LoptMultiJoin" class="title">Class LoptMultiJoin</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">java.lang.Object</a>
<div class="inheritance">org.apache.calcite.rel.rules.LoptMultiJoin</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">LoptMultiJoin</span>
extends <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></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>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<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>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t6" class="tableTab" onclick="show(32);">Deprecated Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<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>
</thead>
<tbody>
<tr class="altColor" id="i0">
<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 class="rowColor" id="i1">
<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 class="altColor" id="i2">
<td class="colFirst"><code>org.apache.calcite.rel.rules.LoptMultiJoin.Edge</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 class="rowColor" id="i3">
<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 class="altColor" id="i4">
<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 class="rowColor" id="i5">
<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">
<div class="block">Returns a bitmap corresponding to the factors referenced by the specified
factor in the various join filters that correspond to comparisons.</div>
</td>
</tr>
<tr class="altColor" id="i6">
<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">
<div class="block">Returns a bitmap corresponding to the factors referenced within
the specified join filter.</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>int[] @Nullable []</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFactorWeights()">getFactorWeights</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns weights of the different factors relative to one another.</div>
</td>
</tr>
<tr class="altColor" id="i8">
<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">
<div class="block">Returns a bitmap corresponding to the fields referenced by a join filter.</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<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">
<div class="block">Returns the factor corresponding to the given factor index.</div>
</td>
</tr>
<tr class="altColor" id="i10">
<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">
<div class="block">Returns the join field reference counts for a factor.</div>
</td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&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 class="altColor" id="i12">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&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">
<div class="block">Returns all non-outer join filters in this multi-join.</div>
</td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></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">
<div class="block">Returns the factor id of the fact table corresponding to a dimension
table in a semi-join, in the case where the join with the dimension table
can be removed.</div>
</td>
</tr>
<tr class="altColor" id="i14">
<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">
<div class="block">Returns the semi-join that allows the join of a dimension table to be
removed.</div>
</td>
</tr>
<tr class="rowColor" id="i15">
<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">
<div class="block">Returns the starting offset within the multi-join for the specified factor.</div>
</td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&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 an array of fields contained within the multi-join.</div>
</td>
</tr>
<tr class="rowColor" id="i17">
<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">
<div class="block">Returns the MultiJoin corresponding to this multi-join.</div>
</td>
</tr>
<tr class="altColor" id="i18">
<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">
<div class="block">Returns the number of fields in a given factor.</div>
</td>
</tr>
<tr class="rowColor" id="i19">
<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">
<div class="block">Returns the number of factors in this multi-join.</div>
</td>
</tr>
<tr class="altColor" id="i20">
<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">
<div class="block">Returns the total number of fields in the multi-join.</div>
</td>
</tr>
<tr class="rowColor" id="i21">
<td class="colFirst"><code>@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></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 class="altColor" id="i22">
<td class="colFirst"><code>@Nullable <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">
<div class="block">Returns outer join conditions associated with the specified null-generating
factor.</div>
</td>
</tr>
<tr class="rowColor" id="i23">
<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">
<div class="block">Returns a 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.</div>
</td>
</tr>
<tr class="altColor" id="i24">
<td class="colFirst"><code>@Nullable <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">
<div class="block">Returns a bitmap containing the fields that are projected from a factor.</div>
</td>
</tr>
<tr class="rowColor" id="i25">
<td class="colFirst"><code>@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></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 class="altColor" id="i26">
<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,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/BitSet.html?is-external=true" title="class or interface in java.util" class="externalLink">BitSet</a>&nbsp;factorsNeeded)</code></th>
<td class="colLast">
<div class="block">Returns whether if a join tree contains all factors required.</div>
</td>
</tr>
<tr class="rowColor" id="i27">
<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">
<div class="block">Returns whether the factor is the left factor in a self-join.</div>
</td>
</tr>
<tr class="altColor" id="i28">
<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">
<div class="block">Returns whether the factor corresponds to a null-generating factor
in a left or right outer join.</div>
</td>
</tr>
<tr class="rowColor" id="i29">
<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">
<div class="block">Return whether the factor corresponds to the null-generating factor in
an outer join that can be removed.</div>
</td>
</tr>
<tr class="altColor" id="i30">
<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">
<div class="block">Returns whether the factor is the right factor in a self-join.</div>
</td>
</tr>
<tr class="rowColor" id="i31">
<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 class="altColor" id="i32">
<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 class="rowColor" id="i33">
<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 semi-join that allows the join of a dimension table to be
removed.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(org.apache.calcite.rel.rules.MultiJoin)">LoptMultiJoin</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">LoptMultiJoin</span>&#8203;(<span class="arguments"><a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a>&nbsp;multiJoin)</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="getMultiJoinRel()">getMultiJoinRel</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a></span>&nbsp;<span class="memberName">getMultiJoinRel</span>()</div>
<div class="block">Returns the MultiJoin corresponding to this multi-join.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getNumJoinFactors()">getNumJoinFactors</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">getNumJoinFactors</span>()</div>
<div class="block">Returns the number of factors in this multi-join.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinFactor(int)">getJoinFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="memberName">getJoinFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns the factor corresponding to the given factor index.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor to be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getNumTotalFields()">getNumTotalFields</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">getNumTotalFields</span>()</div>
<div class="block">Returns the total number of fields in the multi-join.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getNumFieldsInJoinFactor(int)">getNumFieldsInJoinFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">getNumFieldsInJoinFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns the number of fields in a given factor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Desired factor</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinFilters()">getJoinFilters</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;</span>&nbsp;<span class="memberName">getJoinFilters</span>()</div>
<div class="block">Returns all non-outer join filters in this multi-join.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getFactorsRefByJoinFilter(org.apache.calcite.rex.RexNode)">getFactorsRefByJoinFilter</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></span>&nbsp;<span class="memberName">getFactorsRefByJoinFilter</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</span></div>
<div class="block">Returns a bitmap corresponding to the factors referenced within
the specified join filter.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinFilter</code> - Filter for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getMultiJoinFields()">getMultiJoinFields</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;</span>&nbsp;<span class="memberName">getMultiJoinFields</span>()</div>
<div class="block">Returns an array of fields contained within the multi-join.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getFieldsRefByJoinFilter(org.apache.calcite.rex.RexNode)">getFieldsRefByJoinFilter</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></span>&nbsp;<span class="memberName">getFieldsRefByJoinFilter</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;joinFilter)</span></div>
<div class="block">Returns a bitmap corresponding to the fields referenced by a join filter.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinFilter</code> - the filter for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getFactorWeights()">getFactorWeights</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int[] @Nullable []</span>&nbsp;<span class="memberName">getFactorWeights</span>()</div>
<div class="block">Returns weights of the different factors relative to one another.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getFactorsRefByFactor(int)">getFactorsRefByFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></span>&nbsp;<span class="memberName">getFactorsRefByFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns a bitmap corresponding to the factors referenced by the specified
factor in the various join filters that correspond to comparisons.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinStart(int)">getJoinStart</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">getJoinStart</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns the starting offset within the multi-join for the specified factor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="isNullGenerating(int)">isNullGenerating</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isNullGenerating</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns whether the factor corresponds to a null-generating factor
in a left or right outer join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getOuterJoinFactors(int)">getOuterJoinFactors</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></span>&nbsp;<span class="memberName">getOuterJoinFactors</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns a 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.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getOuterJoinCond(int)">getOuterJoinCond</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">@Nullable <a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></span>&nbsp;<span class="memberName">getOuterJoinCond</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns outer join conditions associated with the specified null-generating
factor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getProjFields(int)">getProjFields</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">@Nullable <a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a></span>&nbsp;<span class="memberName">getProjFields</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns a bitmap containing the fields that are projected from a factor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinFieldRefCounts(int)">getJoinFieldRefCounts</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int[]</span>&nbsp;<span class="memberName">getJoinFieldRefCounts</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns the join field reference counts for a factor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinRemovalFactor(int)">getJoinRemovalFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></span>&nbsp;<span class="memberName">getJoinRemovalFactor</span>&#8203;(<span class="arguments">int&nbsp;dimIdx)</span></div>
<div class="block">Returns the factor id of the fact table corresponding to a dimension
table in a semi-join, in the case where the join with the dimension table
can be removed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - Dimension factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinRemovalSemiJoin(int)">getJoinRemovalSemiJoin</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a></span>&nbsp;<span class="memberName">getJoinRemovalSemiJoin</span>&#8203;(<span class="arguments">int&nbsp;dimIdx)</span></div>
<div class="block">Returns the semi-join that allows the join of a dimension table to be
removed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - Dimension factor for which information will be returned</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setJoinRemovalFactor(int,int)">setJoinRemovalFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setJoinRemovalFactor</span>&#8203;(<span class="arguments">int&nbsp;dimIdx,
int&nbsp;factIdx)</span></div>
<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> - Dimension factor</dd>
<dd><code>factIdx</code> - Fact factor</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setJoinRemovalSemiJoin(int,org.apache.calcite.rel.logical.LogicalJoin)">setJoinRemovalSemiJoin</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setJoinRemovalSemiJoin</span>&#8203;(<span class="arguments">int&nbsp;dimIdx,
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a>&nbsp;semiJoin)</span></div>
<div class="block">Indicates the semi-join that allows the join of a dimension table to be
removed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dimIdx</code> - Dimension factor</dd>
<dd><code>semiJoin</code> - the semijoin</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="findRef(int)">findRef</a></h3>
<div class="memberSignature"><span class="annotations">@RequiresNonNull({"joinStart","nFieldsInJoinFactor"})
</span><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">findRef</span>&#8203;(<span class="arguments">@UnknownInitialization&nbsp;LoptMultiJoin&nbsp;this,
int&nbsp;rexInputRef)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setFactorWeights()">setFactorWeights</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setFactorWeights</span>()</div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="hasAllFactors(org.apache.calcite.rel.rules.LoptJoinTree,java.util.BitSet)">hasAllFactors</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">hasAllFactors</span>&#8203;(<span class="arguments"><a href="LoptJoinTree.html" title="class in org.apache.calcite.rel.rules">LoptJoinTree</a>&nbsp;joinTree,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/BitSet.html?is-external=true" title="class or interface in java.util" class="externalLink">BitSet</a>&nbsp;factorsNeeded)</span></div>
<div class="block">Returns whether 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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getChildFactors(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.util.ImmutableBitSet.Builder)">getChildFactors</a></h3>
<div class="memberSignature"><span class="annotations"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang" class="externalLink">@Deprecated</a>
</span><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">getChildFactors</span>&#8203;(<span class="arguments"><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)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinFields(org.apache.calcite.rel.rules.LoptJoinTree,org.apache.calcite.rel.rules.LoptJoinTree)">getJoinFields</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../type/RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;</span>&nbsp;<span class="memberName">getJoinFields</span>&#8203;(<span class="arguments"><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)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="addRemovableOuterJoinFactor(int)">addRemovableOuterJoinFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addRemovableOuterJoinFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="isRemovableOuterJoinFactor(int)">isRemovableOuterJoinFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isRemovableOuterJoinFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Return whether the factor corresponds to the null-generating factor in
an outer join that can be removed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor in question</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="addRemovableSelfJoinPair(int,int)">addRemovableSelfJoinPair</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addRemovableSelfJoinPair</span>&#8203;(<span class="arguments">int&nbsp;factor1,
int&nbsp;factor2)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getOtherSelfJoinFactor(int)">getOtherSelfJoinFactor</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></span>&nbsp;<span class="memberName">getOtherSelfJoinFactor</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="isLeftFactorInRemovableSelfJoin(int)">isLeftFactorInRemovableSelfJoin</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isLeftFactorInRemovableSelfJoin</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns whether the factor is the left factor in a self-join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor in a self-join</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="isRightFactorInRemovableSelfJoin(int)">isRightFactorInRemovableSelfJoin</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isRightFactorInRemovableSelfJoin</span>&#8203;(<span class="arguments">int&nbsp;factIdx)</span></div>
<div class="block">Returns whether the factor is the right factor in a self-join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factIdx</code> - Factor in a self-join</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getRightColumnMapping(int,int)">getRightColumnMapping</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">@Nullable <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a></span>&nbsp;<span class="memberName">getRightColumnMapping</span>&#8203;(<span class="arguments">int&nbsp;rightFactor,
int&nbsp;rightOffset)</span></div>
<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>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="createEdge(org.apache.calcite.rex.RexNode)">createEdge</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">org.apache.calcite.rel.rules.LoptMultiJoin.Edge</span>&nbsp;<span class="memberName">createEdge</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition)</span></div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</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 class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&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>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &copy; 2012-2021 Apache Software Foundation. All Rights Reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>