blob: 8e56a0f35157f5380c8e2d85b8c94d014c202067 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>FilterProjectTransposeRule (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="FilterProjectTransposeRule (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":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/FilterProjectTransposeRule.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>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.rel.rules</a></div>
<h2 title="Class FilterProjectTransposeRule" class="title">Class FilterProjectTransposeRule</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">org.apache.calcite.plan.RelOptRule</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.rel.rules.FilterProjectTransposeRule</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="../../adapter/druid/DruidRules.DruidFilterProjectTransposeRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidFilterProjectTransposeRule</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">FilterProjectTransposeRule</span>
extends <a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></pre>
<div class="block">Planner rule that pushes
a <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>
past a <a href="../core/Project.html" title="class in org.apache.calcite.rel.core"><code>Project</code></a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#copyFilter">copyFilter</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#copyProject">copyProject</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterProjectTransposeRule</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#INSTANCE">INSTANCE</a></span></code></th>
<td class="colLast">
<div class="block">The default instance of
<a href="FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules"><code>FilterProjectTransposeRule</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.calcite.plan.RelOptRule">
<!-- -->
</a>
<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>
<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></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>&nbsp;</code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.lang.Class,java.lang.Class,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">FilterProjectTransposeRule</a></span>&#8203;(java.lang.Class&lt;? extends <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core">Filter</a>&gt;&nbsp;filterClass,
java.lang.Class&lt;? extends <a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&gt;&nbsp;projectClass,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</code></th>
<td class="colLast">
<div class="block">Creates a FilterProjectTransposeRule.</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(java.lang.Class,org.apache.calcite.rel.core.RelFactories.FilterFactory,java.lang.Class,org.apache.calcite.rel.core.RelFactories.ProjectFactory)">FilterProjectTransposeRule</a></span>&#8203;(java.lang.Class&lt;? extends <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core">Filter</a>&gt;&nbsp;filterClass,
<a href="../core/RelFactories.FilterFactory.html" title="interface in org.apache.calcite.rel.core">RelFactories.FilterFactory</a>&nbsp;filterFactory,
java.lang.Class&lt;? extends <a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&gt;&nbsp;projectClass,
<a href="../core/RelFactories.ProjectFactory.html" title="interface in org.apache.calcite.rel.core">RelFactories.ProjectFactory</a>&nbsp;projectFactory)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>&nbsp;</code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.lang.Class,java.util.function.Predicate,java.lang.Class,java.util.function.Predicate,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">FilterProjectTransposeRule</a></span>&#8203;(java.lang.Class&lt;F&gt;&nbsp;filterClass,
java.util.function.Predicate&lt;? super F&gt;&nbsp;filterPredicate,
java.lang.Class&lt;P&gt;&nbsp;projectClass,
java.util.function.Predicate&lt;? super P&gt;&nbsp;projectPredicate,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</code></th>
<td class="colLast">
<div class="block">Creates a FilterProjectTransposeRule.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.plan.RelOptRuleOperand,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">FilterProjectTransposeRule</a></span>&#8203;(<a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</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>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMatch(org.apache.calcite.plan.RelOptRuleCall)">onMatch</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">Receives notification about a rule match.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>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="#simplifyFilterCondition(org.apache.calcite.rex.RexNode,org.apache.calcite.plan.RelOptRuleCall)">simplifyFilterCondition</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition,
<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</code></th>
<td class="colLast">
<div class="block">Simplifies the filter condition using a simplifier created by the
information in the current call.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.calcite.plan.RelOptRule">
<!-- -->
</a>
<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>
<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></li>
</ul>
<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, finalize, getClass, notify, notifyAll, 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="INSTANCE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INSTANCE</h4>
<pre>public static final&nbsp;<a href="FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterProjectTransposeRule</a> INSTANCE</pre>
<div class="block">The default instance of
<a href="FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules"><code>FilterProjectTransposeRule</code></a>.
<p>It matches any kind of <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a> or
<a href="../core/Filter.html" title="class in org.apache.calcite.rel.core"><code>Filter</code></a>, and generates the same kind of
Join and Filter.
<p>It does not allow a Filter to be pushed past the Project if
<a href="../../rex/RexUtil.html#containsCorrelation(org.apache.calcite.rex.RexNode)"><code>there is a correlation condition</code></a>)
anywhere in the Filter, since in some cases it can prevent a
<a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> from being de-correlated.</div>
</li>
</ul>
<a id="copyFilter">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>copyFilter</h4>
<pre>private final&nbsp;boolean copyFilter</pre>
</li>
</ul>
<a id="copyProject">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>copyProject</h4>
<pre>private final&nbsp;boolean copyProject</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;(java.lang.Class,java.lang.Class,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>FilterProjectTransposeRule</h4>
<pre>public&nbsp;FilterProjectTransposeRule&#8203;(java.lang.Class&lt;? extends <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core">Filter</a>&gt;&nbsp;filterClass,
java.lang.Class&lt;? extends <a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&gt;&nbsp;projectClass,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</pre>
<div class="block">Creates a FilterProjectTransposeRule.
<p>Equivalent to the rule created by
<a href="#%3Cinit%3E(java.lang.Class,java.util.function.Predicate,java.lang.Class,java.util.function.Predicate,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)"><code>FilterProjectTransposeRule(Class, Predicate, Class, Predicate, boolean, boolean, RelBuilderFactory)</code></a>
with some default predicates that do not allow a filter to be pushed
past the project if there is a correlation condition anywhere in the
filter (since in some cases it can prevent a
<a href="../core/Correlate.html" title="class in org.apache.calcite.rel.core"><code>Correlate</code></a> from being de-correlated).</div>
</li>
</ul>
<a id="&lt;init&gt;(java.lang.Class,java.util.function.Predicate,java.lang.Class,java.util.function.Predicate,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>FilterProjectTransposeRule</h4>
<pre>public&nbsp;FilterProjectTransposeRule&#8203;(java.lang.Class&lt;F&gt;&nbsp;filterClass,
java.util.function.Predicate&lt;? super F&gt;&nbsp;filterPredicate,
java.lang.Class&lt;P&gt;&nbsp;projectClass,
java.util.function.Predicate&lt;? super P&gt;&nbsp;projectPredicate,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</pre>
<div class="block">Creates a FilterProjectTransposeRule.
<p>If <code>copyFilter</code> is true, creates the same kind of Filter as
matched in the rule, otherwise it creates a Filter using the RelBuilder
obtained by the <code>relBuilderFactory</code>.
Similarly for <code>copyProject</code>.
<p>Defining predicates for the Filter (using <code>filterPredicate</code>)
and/or the Project (using <code>projectPredicate</code> allows making the rule
more restrictive.</div>
</li>
</ul>
<a id="&lt;init&gt;(java.lang.Class,org.apache.calcite.rel.core.RelFactories.FilterFactory,java.lang.Class,org.apache.calcite.rel.core.RelFactories.ProjectFactory)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>FilterProjectTransposeRule</h4>
<pre>@Deprecated
public&nbsp;FilterProjectTransposeRule&#8203;(java.lang.Class&lt;? extends <a href="../core/Filter.html" title="class in org.apache.calcite.rel.core">Filter</a>&gt;&nbsp;filterClass,
<a href="../core/RelFactories.FilterFactory.html" title="interface in org.apache.calcite.rel.core">RelFactories.FilterFactory</a>&nbsp;filterFactory,
java.lang.Class&lt;? extends <a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&gt;&nbsp;projectClass,
<a href="../core/RelFactories.ProjectFactory.html" title="interface in org.apache.calcite.rel.core">RelFactories.ProjectFactory</a>&nbsp;projectFactory)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
</li>
</ul>
<a id="&lt;init&gt;(org.apache.calcite.plan.RelOptRuleOperand,boolean,boolean,org.apache.calcite.tools.RelBuilderFactory)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>FilterProjectTransposeRule</h4>
<pre>protected&nbsp;FilterProjectTransposeRule&#8203;(<a href="../../plan/RelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRuleOperand</a>&nbsp;operand,
boolean&nbsp;copyFilter,
boolean&nbsp;copyProject,
<a href="../../tools/RelBuilderFactory.html" title="interface in org.apache.calcite.tools">RelBuilderFactory</a>&nbsp;relBuilderFactory)</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="onMatch(org.apache.calcite.plan.RelOptRuleCall)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onMatch</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onMatch&#8203;(<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../plan/RelOptRule.html#onMatch(org.apache.calcite.plan.RelOptRuleCall)">RelOptRule</a></code></span></div>
<div class="block">Receives notification about a rule match. At the time that this method is
called, <a href="../../plan/RelOptRuleCall.html#rels"><code>call.rels</code></a> holds the set of relational
expressions which match the operands to the rule; <code>
call.rels[0]</code> is the root expression.
<p>Typically a rule would check that the nodes are valid matches, creates
a new expression, then calls back <a href="../../plan/RelOptRuleCall.html#transformTo(org.apache.calcite.rel.RelNode,java.util.Map)"><code>RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map&lt;org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode&gt;)</code></a> to
register the expression.</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../plan/RelOptRule.html#onMatch(org.apache.calcite.plan.RelOptRuleCall)">onMatch</a></code>&nbsp;in class&nbsp;<code><a href="../../plan/RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>call</code> - Rule call</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../plan/RelOptRule.html#matches(org.apache.calcite.plan.RelOptRuleCall)"><code>RelOptRule.matches(RelOptRuleCall)</code></a></dd>
</dl>
</li>
</ul>
<a id="simplifyFilterCondition(org.apache.calcite.rex.RexNode,org.apache.calcite.plan.RelOptRuleCall)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>simplifyFilterCondition</h4>
<pre class="methodSignature">private&nbsp;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;simplifyFilterCondition&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition,
<a href="../../plan/RelOptRuleCall.html" title="class in org.apache.calcite.plan">RelOptRuleCall</a>&nbsp;call)</pre>
<div class="block">Simplifies the filter condition using a simplifier created by the
information in the current call.
<p>This method is an attempt to replicate the simplification behavior of
<a href="../../tools/RelBuilder.html#filter(org.apache.calcite.rex.RexNode...)"><code>RelBuilder.filter(RexNode...)</code></a> which cannot be used in the case of
copying nodes. The main difference with the behavior of that method is that
it does not drop entirely the filter if the condition is always false.</div>
</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/FilterProjectTransposeRule.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>Nested&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>