blob: 88a773b9ff898c91047a11cc22208f1e3acf856d [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>RelMdPredicates.JoinConditionBasedPredicateInference (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="RelMdPredicates.JoinConditionBasedPredicateInference (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/RelMdPredicates.JoinConditionBasedPredicateInference.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.metadata</a></div>
<h2 title="Class RelMdPredicates.JoinConditionBasedPredicateInference" class="title">Class RelMdPredicates.JoinConditionBasedPredicateInference</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.rel.metadata.RelMdPredicates.JoinConditionBasedPredicateInference</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Enclosing class:</dt>
<dd><a href="RelMdPredicates.html" title="class in org.apache.calcite.rel.metadata">RelMdPredicates</a></dd>
</dl>
<hr>
<pre>static class <span class="typeNameLabel">RelMdPredicates.JoinConditionBasedPredicateInference</span>
extends java.lang.Object</pre>
<div class="block">Utility to infer predicates from one side of the join that apply on the
other side.
<p>Contract is:<ul>
<li>initialize with a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> and
optional predicates applicable on its left and right subtrees.
<li>you can
then ask it for equivalentPredicate(s) given a predicate.
</ul>
<p>So for:
<ol>
<li>'<code>R1(x) join R2(y) on x = y</code>' a call for
equivalentPredicates on '<code>x &gt; 7</code>' will return '
<code>[y &gt; 7]</code>'
<li>'<code>R1(x) join R2(y) on x = y join R3(z) on y = z</code>' a call for
equivalentPredicates on the second join '<code>x &gt; 7</code>' will return
</ol></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelMdPredicates.JoinConditionBasedPredicateInference.EquivalenceFinder.html" title="class in org.apache.calcite.rel.metadata">RelMdPredicates.JoinConditionBasedPredicateInference.EquivalenceFinder</a></span></code></th>
<td class="colLast">
<div class="block">Find expressions of the form 'col_x = col_y'.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelMdPredicates.JoinConditionBasedPredicateInference.ExprsItr.html" title="class in org.apache.calcite.rel.metadata">RelMdPredicates.JoinConditionBasedPredicateInference.ExprsItr</a></span></code></th>
<td class="colLast">
<div class="block">Given an expression returns all the possible substitutions.</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>(package private) java.util.Set&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="#allExprs">allExprs</a></span></code></th>
<td class="colLast">&nbsp;</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="#allFieldsBitSet">allFieldsBitSet</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) java.util.Set&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="#equalityPredicates">equalityPredicates</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) java.util.SortedMap&lt;java.lang.Integer,&#8203;java.util.BitSet&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#equivalence">equivalence</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) java.util.Map&lt;<a href="../../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="#exprFields">exprFields</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#joinRel">joinRel</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) <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="#leftChildPredicates">leftChildPredicates</a></span></code></th>
<td class="colLast">&nbsp;</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="#leftFieldsBitSet">leftFieldsBitSet</a></span></code></th>
<td class="colLast">&nbsp;</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="#nFieldsLeft">nFieldsLeft</a></span></code></th>
<td class="colLast">&nbsp;</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="#nFieldsRight">nFieldsRight</a></span></code></th>
<td class="colLast">&nbsp;</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="#nSysFields">nSysFields</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <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="#rightChildPredicates">rightChildPredicates</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr 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="#rightFieldsBitSet">rightFieldsBitSet</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../rex/RexSimplify.html" title="class in org.apache.calcite.rex">RexSimplify</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#simplify">simplify</a></span></code></th>
<td class="colLast">&nbsp;</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.core.Join,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexSimplify)">JoinConditionBasedPredicateInference</a></span>&#8203;(<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;joinRel,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;leftPredicates,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;rightPredicates,
<a href="../../rex/RexSimplify.html" title="class in org.apache.calcite.rex">RexSimplify</a>&nbsp;simplify)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkTarget(org.apache.calcite.util.ImmutableBitSet,java.util.Set,org.apache.calcite.rex.RexNode)">checkTarget</a></span>&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;inferringFields,
java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;allExprs,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;tr)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>(package private) <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="#compose(org.apache.calcite.rex.RexBuilder,java.lang.Iterable)">compose</a></span>&#8203;(<a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
java.lang.Iterable&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;exprs)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#infer(org.apache.calcite.rex.RexNode,java.util.Set,java.util.List,boolean,org.apache.calcite.util.ImmutableBitSet)">infer</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicates,
java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;allExprs,
java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;inferredPredicates,
boolean&nbsp;includeEqualityInference,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;inferringFields)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../plan/RelOptPredicateList.html" title="class in org.apache.calcite.plan">RelOptPredicateList</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#inferPredicates(boolean)">inferPredicates</a></span>&#8203;(boolean&nbsp;includeEqualityInference)</code></th>
<td class="colLast">
<div class="block">The PullUp Strategy is sound but not complete.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isAlwaysTrue(org.apache.calcite.rex.RexNode)">isAlwaysTrue</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" 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="#left()">left</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>(package private) java.lang.Iterable&lt;<a href="../../util/mapping/Mapping.html" title="interface in org.apache.calcite.util.mapping">Mapping</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#mappings(org.apache.calcite.rex.RexNode)">mappings</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#markAsEquivalent(int,int)">markAsEquivalent</a></span>&#8203;(int&nbsp;p1,
int&nbsp;p2)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>private int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#pos(org.apache.calcite.rex.RexNode)">pos</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;expr)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i9" 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="#right()">right</a></span>()</code></th>
<td class="colLast">&nbsp;</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="joinRel">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>joinRel</h4>
<pre>final&nbsp;<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a> joinRel</pre>
</li>
</ul>
<a id="nSysFields">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nSysFields</h4>
<pre>final&nbsp;int nSysFields</pre>
</li>
</ul>
<a id="nFieldsLeft">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nFieldsLeft</h4>
<pre>final&nbsp;int nFieldsLeft</pre>
</li>
</ul>
<a id="nFieldsRight">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nFieldsRight</h4>
<pre>final&nbsp;int nFieldsRight</pre>
</li>
</ul>
<a id="leftFieldsBitSet">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>leftFieldsBitSet</h4>
<pre>final&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a> leftFieldsBitSet</pre>
</li>
</ul>
<a id="rightFieldsBitSet">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rightFieldsBitSet</h4>
<pre>final&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a> rightFieldsBitSet</pre>
</li>
</ul>
<a id="allFieldsBitSet">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>allFieldsBitSet</h4>
<pre>final&nbsp;<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a> allFieldsBitSet</pre>
</li>
</ul>
<a id="equivalence">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>equivalence</h4>
<pre>java.util.SortedMap&lt;java.lang.Integer,&#8203;java.util.BitSet&gt; equivalence</pre>
</li>
</ul>
<a id="exprFields">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>exprFields</h4>
<pre>final&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; exprFields</pre>
</li>
</ul>
<a id="allExprs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>allExprs</h4>
<pre>final&nbsp;java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt; allExprs</pre>
</li>
</ul>
<a id="equalityPredicates">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>equalityPredicates</h4>
<pre>final&nbsp;java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt; equalityPredicates</pre>
</li>
</ul>
<a id="leftChildPredicates">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>leftChildPredicates</h4>
<pre>final&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a> leftChildPredicates</pre>
</li>
</ul>
<a id="rightChildPredicates">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rightChildPredicates</h4>
<pre>final&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a> rightChildPredicates</pre>
</li>
</ul>
<a id="simplify">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>simplify</h4>
<pre>final&nbsp;<a href="../../rex/RexSimplify.html" title="class in org.apache.calcite.rex">RexSimplify</a> simplify</pre>
</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.core.Join,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexSimplify)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>JoinConditionBasedPredicateInference</h4>
<pre>JoinConditionBasedPredicateInference&#8203;(<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;joinRel,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;leftPredicates,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;rightPredicates,
<a href="../../rex/RexSimplify.html" title="class in org.apache.calcite.rex">RexSimplify</a>&nbsp;simplify)</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="inferPredicates(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>inferPredicates</h4>
<pre class="methodSignature">public&nbsp;<a href="../../plan/RelOptPredicateList.html" title="class in org.apache.calcite.plan">RelOptPredicateList</a>&nbsp;inferPredicates&#8203;(boolean&nbsp;includeEqualityInference)</pre>
<div class="block">The PullUp Strategy is sound but not complete.
<ol>
<li>We only pullUp inferred predicates for now. Pulling up existing
predicates causes an explosion of duplicates. The existing predicates are
pushed back down as new predicates. Once we have rules to eliminate
duplicate Filter conditions, we should pullUp all predicates.
<li>For Left Outer: we infer new predicates from the left and set them as
applicable on the Right side. No predicates are pulledUp.
<li>Right Outer Joins are handled in an analogous manner.
<li>For Full Outer Joins no predicates are pulledUp or inferred.
</ol></div>
</li>
</ul>
<a id="left()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>left</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;left()</pre>
</li>
</ul>
<a id="right()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>right</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;right()</pre>
</li>
</ul>
<a id="infer(org.apache.calcite.rex.RexNode,java.util.Set,java.util.List,boolean,org.apache.calcite.util.ImmutableBitSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>infer</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;infer&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicates,
java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;allExprs,
java.util.List&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;inferredPredicates,
boolean&nbsp;includeEqualityInference,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;inferringFields)</pre>
</li>
</ul>
<a id="mappings(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mappings</h4>
<pre class="methodSignature">java.lang.Iterable&lt;<a href="../../util/mapping/Mapping.html" title="interface in org.apache.calcite.util.mapping">Mapping</a>&gt;&nbsp;mappings&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</pre>
</li>
</ul>
<a id="checkTarget(org.apache.calcite.util.ImmutableBitSet,java.util.Set,org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>checkTarget</h4>
<pre class="methodSignature">private&nbsp;boolean&nbsp;checkTarget&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;inferringFields,
java.util.Set&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;allExprs,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;tr)</pre>
</li>
</ul>
<a id="markAsEquivalent(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>markAsEquivalent</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;markAsEquivalent&#8203;(int&nbsp;p1,
int&nbsp;p2)</pre>
</li>
</ul>
<a id="compose(org.apache.calcite.rex.RexBuilder,java.lang.Iterable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>compose</h4>
<pre class="methodSignature">@Nonnull
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;compose&#8203;(<a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
java.lang.Iterable&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;exprs)</pre>
</li>
</ul>
<a id="pos(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>pos</h4>
<pre class="methodSignature">private&nbsp;int&nbsp;pos&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;expr)</pre>
</li>
</ul>
<a id="isAlwaysTrue(org.apache.calcite.rex.RexNode)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>isAlwaysTrue</h4>
<pre class="methodSignature">private&nbsp;boolean&nbsp;isAlwaysTrue&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</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/RelMdPredicates.JoinConditionBasedPredicateInference.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>