blob: 8112ae6518c50400abcbb4240b0ff9bb716a0eda [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>MultiJoinProjectTransposeRule (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: MultiJoinProjectTransposeRule">
<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};
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 = "../../../../../";
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><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>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 MultiJoinProjectTransposeRule" class="title">Class MultiJoinProjectTransposeRule</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"><a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">org.apache.calcite.plan.RelOptRule</a>
<div class="inheritance"><a href="../../plan/RelRule.html" title="class in org.apache.calcite.plan">org.apache.calcite.plan.RelRule</a>&lt;<a href="JoinProjectTransposeRule.Config.html" title="interface in org.apache.calcite.rel.rules">JoinProjectTransposeRule.Config</a>&gt;
<div class="inheritance"><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">org.apache.calcite.rel.rules.JoinProjectTransposeRule</a>
<div class="inheritance">org.apache.calcite.rel.rules.MultiJoinProjectTransposeRule</div>
</div>
</div>
</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="TransformationRule.html" title="interface in org.apache.calcite.rel.rules">TransformationRule</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">MultiJoinProjectTransposeRule</span>
extends <a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></pre>
<div class="block">MultiJoinProjectTransposeRule implements the rule for pulling
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>s that are on top of a
<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a> and beneath a
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>LogicalJoin</code></a> so the
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a> appears above the
<a href="../logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical"><code>LogicalJoin</code></a>.
<p>In the process of doing
so, also save away information about the respective fields that are
referenced in the expressions in the
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a> we're pulling up, as
well as the join condition, in the resultant <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>s
<p>For example, if we have the following sub-query:
<blockquote><pre>
(select X.x1, Y.y1 from X, Y
where X.x2 = Y.y2 and X.x3 = 1 and Y.y3 = 2)</pre></blockquote>
<p>The <a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a> associated with (X, Y) associates x1 with X and
y1 with Y. Although x3 and y3 need to be read due to the filters, they are
not required after the row scan has completed and therefore are not saved.
The join fields, x2 and y2, are also tracked separately.
<p>Note that by only pulling up projects that are on top of
<a href="MultiJoin.html" title="class in org.apache.calcite.rel.rules"><code>MultiJoin</code></a>s, we preserve projections on top of row scans.
<p>See the superclass for details on restrictions regarding which
<a href="../logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical"><code>LogicalProject</code></a>s cannot be pulled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="CoreRules.html#MULTI_JOIN_BOTH_PROJECT"><code>CoreRules.MULTI_JOIN_BOTH_PROJECT</code></a>,
<a href="CoreRules.html#MULTI_JOIN_LEFT_PROJECT"><code>CoreRules.MULTI_JOIN_LEFT_PROJECT</code></a>,
<a href="CoreRules.html#MULTI_JOIN_RIGHT_PROJECT"><code>CoreRules.MULTI_JOIN_RIGHT_PROJECT</code></a></dd>
</dl>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li class="blockList">
<section class="nestedClassSummary"><a id="nested.class.summary">
<!-- -->
</a>
<h2>Nested Class Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<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>
</thead>
<tbody>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="MultiJoinProjectTransposeRule.Config.html" title="interface in org.apache.calcite.rel.rules">MultiJoinProjectTransposeRule.Config</a></span></code></th>
<td class="colLast">
<div class="block">Rule configuration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;org.apache.calcite.plan.<a href="../../plan/RelRule.html" title="class in org.apache.calcite.plan">RelRule</a></h2>
<a id="nested.classes.inherited.from.class.org.apache.calcite.plan.RelRule">
<!-- -->
</a><code><a href="../../plan/RelRule.Done.html" title="interface in org.apache.calcite.plan">RelRule.Done</a>, <a href="../../plan/RelRule.MatchHandler.html" title="interface in org.apache.calcite.plan">RelRule.MatchHandler</a>&lt;<a href="../../plan/RelRule.MatchHandler.html" title="type parameter in RelRule.MatchHandler">R</a> extends <a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;, <a href="../../plan/RelRule.OperandBuilder.html" title="interface in org.apache.calcite.plan">RelRule.OperandBuilder</a>, <a href="../../plan/RelRule.OperandDetailBuilder.html" title="interface in org.apache.calcite.plan">RelRule.OperandDetailBuilder</a>&lt;<a href="../../plan/RelRule.OperandDetailBuilder.html" title="type parameter in RelRule.OperandDetailBuilder">R</a> extends <a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;, <a href="../../plan/RelRule.OperandTransform.html" title="interface in org.apache.calcite.plan">RelRule.OperandTransform</a></code></div>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;org.apache.calcite.plan.<a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h2>
<a id="nested.classes.inherited.from.class.org.apache.calcite.plan.RelOptRule">
<!-- -->
</a><code><a href="../../plan/RelOptRule.ConverterRelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRule.ConverterRelOptRuleOperand</a></code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;org.apache.calcite.plan.<a href="../../plan/RelRule.html" title="class in org.apache.calcite.plan">RelRule</a></h3>
<a id="fields.inherited.from.class.org.apache.calcite.plan.RelRule">
<!-- -->
</a><code><a href="../../plan/RelRule.html#config">config</a></code></div>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;org.apache.calcite.plan.<a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h3>
<a id="fields.inherited.from.class.org.apache.calcite.plan.RelOptRule">
<!-- -->
</a><code><a href="../../plan/RelOptRule.html#description">description</a>, <a href="../../plan/RelOptRule.html#operands">operands</a>, <a href="../../plan/RelOptRule.html#relBuilderFactory">relBuilderFactory</a></code></div>
</section>
</li>
<!-- ======== 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">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<td class="colFirst"><code>&nbsp;</code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.plan.RelOptRuleOperand,java.lang.String)">MultiJoinProjectTransposeRule</a></span>&#8203;(<a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;description)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>&nbsp;</code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.tools.RelBuilderFactory,java.lang.String)">MultiJoinProjectTransposeRule</a></span>&#8203;(<a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;description)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.rel.rules.MultiJoinProjectTransposeRule.Config)">MultiJoinProjectTransposeRule</a></span>&#8203;(<a href="MultiJoinProjectTransposeRule.Config.html" title="interface in org.apache.calcite.rel.rules">MultiJoinProjectTransposeRule.Config</a>&nbsp;config)</code></th>
<td class="colLast">
<div class="block">Creates a MultiJoinProjectTransposeRule.</div>
</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></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>protected <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="#getProjectChild(org.apache.calcite.plan.RelOptRuleCall,org.apache.calcite.rel.core.Project,boolean)">getProjectChild</a></span>&#8203;(<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call,
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&nbsp;project,
boolean&nbsp;leftChild)</code></th>
<td class="colLast">
<div class="block">Returns the child of the project that will be used as input into the new
LogicalJoin once the projects are pulled above the LogicalJoin.</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>protected <a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRightChild(org.apache.calcite.plan.RelOptRuleCall)">getRightChild</a></span>&#8203;(<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</code></th>
<td class="colLast">
<div class="block">Returns the Project corresponding to the right child.</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hasLeftChild(org.apache.calcite.plan.RelOptRuleCall)">hasLeftChild</a></span>&#8203;(<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</code></th>
<td class="colLast">
<div class="block">Returns whether the rule was invoked with a left project child.</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hasRightChild(org.apache.calcite.plan.RelOptRuleCall)">hasRightChild</a></span>&#8203;(<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</code></th>
<td class="colLast">
<div class="block">Returns whether the rule was invoked with 2 children.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;org.apache.calcite.rel.rules.<a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></h3>
<a id="methods.inherited.from.class.org.apache.calcite.rel.rules.JoinProjectTransposeRule">
<!-- -->
</a><code><a href="JoinProjectTransposeRule.html#createProjectExprs(org.apache.calcite.rel.core.Project,org.apache.calcite.rel.RelNode,int,org.apache.calcite.rex.RexBuilder,java.util.List,java.util.List)">createProjectExprs</a>, <a href="JoinProjectTransposeRule.html#onMatch(org.apache.calcite.plan.RelOptRuleCall)">onMatch</a></code></div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;org.apache.calcite.plan.<a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h3>
<a id="methods.inherited.from.class.org.apache.calcite.plan.RelOptRule">
<!-- -->
</a><code><a href="../../plan/RelOptRule.html#any()">any</a>, <a href="../../plan/RelOptRule.html#convert(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTrait)">convert</a>, <a href="../../plan/RelOptRule.html#convert(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">convert</a>, <a href="../../plan/RelOptRule.html#convertList(java.util.List,org.apache.calcite.plan.RelTrait)">convertList</a>, <a href="../../plan/RelOptRule.html#convertOperand(java.lang.Class,com.google.common.base.Predicate,org.apache.calcite.plan.RelTrait)">convertOperand</a>, <a href="../../plan/RelOptRule.html#convertOperand(java.lang.Class,java.util.function.Predicate,org.apache.calcite.plan.RelTrait)">convertOperand</a>, <a href="../../plan/RelOptRule.html#equals(java.lang.Object)">equals</a>, <a href="../../plan/RelOptRule.html#equals(org.apache.calcite.plan.RelOptRule)">equals</a>, <a href="../../plan/RelOptRule.html#getOperand()">getOperand</a>, <a href="../../plan/RelOptRule.html#getOperands()">getOperands</a>, <a href="../../plan/RelOptRule.html#getOutConvention()">getOutConvention</a>, <a href="../../plan/RelOptRule.html#getOutTrait()">getOutTrait</a>, <a href="../../plan/RelOptRule.html#hashCode()">hashCode</a>, <a href="../../plan/RelOptRule.html#matches(org.apache.calcite.plan.RelOptRuleCall)">matches</a>, <a href="../../plan/RelOptRule.html#none()">none</a>, <a href="../../plan/RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="../../plan/RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operand</a>, <a href="../../plan/RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,com.google.common.base.Predicate,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="../../plan/RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,com.google.common.base.Predicate,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operand</a>, <a href="../../plan/RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="../../plan/RelOptRule.html#operandJ(java.lang.Class,org.apache.calcite.plan.RelTrait,java.util.function.Predicate,org.apache.calcite.plan.RelOptRuleOperandChildren)">operandJ</a>, <a href="../../plan/RelOptRule.html#operandJ(java.lang.Class,org.apache.calcite.plan.RelTrait,java.util.function.Predicate,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operandJ</a>, <a href="../../plan/RelOptRule.html#some(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">some</a>, <a href="../../plan/RelOptRule.html#toString()">toString</a>, <a href="../../plan/RelOptRule.html#unordered(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">unordered</a></code></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#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#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#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.MultiJoinProjectTransposeRule.Config)">MultiJoinProjectTransposeRule</a></h3>
<div class="memberSignature"><span class="modifiers">protected</span>&nbsp;<span class="memberName">MultiJoinProjectTransposeRule</span>&#8203;(<span class="arguments"><a href="MultiJoinProjectTransposeRule.Config.html" title="interface in org.apache.calcite.rel.rules">MultiJoinProjectTransposeRule.Config</a>&nbsp;config)</span></div>
<div class="block">Creates a MultiJoinProjectTransposeRule.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(org.apache.calcite.plan.RelOptRuleOperand,java.lang.String)">MultiJoinProjectTransposeRule</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="memberName">MultiJoinProjectTransposeRule</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;description)</span></div>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.tools.RelBuilderFactory,java.lang.String)">MultiJoinProjectTransposeRule</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="memberName">MultiJoinProjectTransposeRule</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;description)</span></div>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</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="hasLeftChild(org.apache.calcite.plan.RelOptRuleCall)">hasLeftChild</a></h3>
<div class="memberSignature"><span class="modifiers">protected</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">hasLeftChild</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</span></div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="JoinProjectTransposeRule.html#hasLeftChild(org.apache.calcite.plan.RelOptRuleCall)">JoinProjectTransposeRule</a></code></span></div>
<div class="block">Returns whether the rule was invoked with a left project child.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="JoinProjectTransposeRule.html#hasLeftChild(org.apache.calcite.plan.RelOptRuleCall)">hasLeftChild</a></code>&nbsp;in class&nbsp;<code><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="hasRightChild(org.apache.calcite.plan.RelOptRuleCall)">hasRightChild</a></h3>
<div class="memberSignature"><span class="modifiers">protected</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">hasRightChild</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</span></div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="JoinProjectTransposeRule.html#hasRightChild(org.apache.calcite.plan.RelOptRuleCall)">JoinProjectTransposeRule</a></code></span></div>
<div class="block">Returns whether the rule was invoked with 2 children.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="JoinProjectTransposeRule.html#hasRightChild(org.apache.calcite.plan.RelOptRuleCall)">hasRightChild</a></code>&nbsp;in class&nbsp;<code><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getRightChild(org.apache.calcite.plan.RelOptRuleCall)">getRightChild</a></h3>
<div class="memberSignature"><span class="modifiers">protected</span>&nbsp;<span class="returnType"><a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a></span>&nbsp;<span class="memberName">getRightChild</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</span></div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="JoinProjectTransposeRule.html#getRightChild(org.apache.calcite.plan.RelOptRuleCall)">JoinProjectTransposeRule</a></code></span></div>
<div class="block">Returns the Project corresponding to the right child.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="JoinProjectTransposeRule.html#getRightChild(org.apache.calcite.plan.RelOptRuleCall)">getRightChild</a></code>&nbsp;in class&nbsp;<code><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getProjectChild(org.apache.calcite.plan.RelOptRuleCall,org.apache.calcite.rel.core.Project,boolean)">getProjectChild</a></h3>
<div class="memberSignature"><span class="modifiers">protected</span>&nbsp;<span class="returnType"><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="memberName">getProjectChild</span>&#8203;(<span class="arguments"><a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call,
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&nbsp;project,
boolean&nbsp;leftChild)</span></div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="JoinProjectTransposeRule.html#getProjectChild(org.apache.calcite.plan.RelOptRuleCall,org.apache.calcite.rel.core.Project,boolean)">JoinProjectTransposeRule</a></code></span></div>
<div class="block">Returns the child of the project that will be used as input into the new
LogicalJoin once the projects are pulled above the LogicalJoin.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="JoinProjectTransposeRule.html#getProjectChild(org.apache.calcite.plan.RelOptRuleCall,org.apache.calcite.rel.core.Project,boolean)">getProjectChild</a></code>&nbsp;in class&nbsp;<code><a href="JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>call</code> - RelOptRuleCall</dd>
<dd><code>project</code> - project RelNode</dd>
<dd><code>leftChild</code> - true if the project corresponds to the left projection</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>child of the project that will be used as input into the new
LogicalJoin once the projects are pulled above the LogicalJoin</dd>
</dl>
</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><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>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>