blob: b69e711f3336a07e928841586fbe495d80a42681 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>CalcRelSplitter (Apache Calcite calcite API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="CalcRelSplitter (Apache Calcite calcite API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":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";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.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">
<ul class="navList">
<li><a href="../../../../../org/apache/calcite/rel/rules/CalcMergeRule.html" title="class in org.apache.calcite.rel.rules"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/calcite/rel/rules/CalcRelSplitter.html" target="_top">Frames</a></li>
<li><a href="CalcRelSplitter.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></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>
</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>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.calcite.rel.rules</div>
<h2 title="Class CalcRelSplitter" class="title">Class CalcRelSplitter</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.rel.rules.CalcRelSplitter</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">CalcRelSplitter</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">CalcRelSplitter operates on a
<a href="../../../../../org/apache/calcite/rel/core/Calc.html" title="class in org.apache.calcite.rel.core"><code>Calc</code></a> with multiple <a href="../../../../../org/apache/calcite/rex/RexCall.html" title="class in org.apache.calcite.rex"><code>RexCall</code></a>
sub-expressions that cannot all be implemented by a single concrete
<a href="../../../../../org/apache/calcite/rel/RelNode.html" title="interface in org.apache.calcite.rel"><code>RelNode</code></a>.
<p>For example, the Java and Fennel calculator do not implement an identical
set of operators. The Calc can be used to split a single Calc with
mixed Java- and Fennel-only operators into a tree of Calc object that can
each be individually implemented by either Java or Fennel.and splits it into
several Calc instances.
<p>Currently the splitter is only capable of handling two "rel types". That
is, it can deal with Java vs. Fennel Calcs, but not Java vs. Fennel vs.
some other type of Calc.
<p>See <a href="../../../../../org/apache/calcite/rel/rules/ProjectToWindowRule.html" title="class in org.apache.calcite.rel.rules"><code>ProjectToWindowRule</code></a>
for an example of how this class is used.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules">CalcRelSplitter.RelType</a></span></code>
<div class="block">Type of relational expression.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/calcite/rex/RexProgram.html" title="class in org.apache.calcite.rex">RexProgram</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#program">program</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/calcite/tools/RelBuilder.html" title="class in org.apache.calcite.tools">RelBuilder</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#relBuilder">relBuilder</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<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="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#canImplement-org.apache.calcite.rel.logical.LogicalCalc-java.lang.String-">canImplement</a></span>(<a href="../../../../../org/apache/calcite/rel/logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical">LogicalCalc</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;relTypeName)</code>
<div class="block">Returns whether a relational expression can be implemented solely in a
given <a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules"><code>CalcRelSplitter.RelType</code></a>.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#getCohorts--">getCohorts</a></span>()</code>
<div class="block">Returns a list of sets of expressions that should be on the same level.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/calcite/rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#handle-org.apache.calcite.rel.RelNode-">handle</a></span>(<a href="../../../../../org/apache/calcite/rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code>
<div class="block">Opportunity to further refine the relational expression created for a
given level.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="program">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>program</h4>
<pre>protected final&nbsp;<a href="../../../../../org/apache/calcite/rex/RexProgram.html" title="class in org.apache.calcite.rex">RexProgram</a> program</pre>
</li>
</ul>
<a name="relBuilder">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>relBuilder</h4>
<pre>protected final&nbsp;<a href="../../../../../org/apache/calcite/tools/RelBuilder.html" title="class in org.apache.calcite.tools">RelBuilder</a> relBuilder</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="handle-org.apache.calcite.rel.RelNode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handle</h4>
<pre>protected&nbsp;<a href="../../../../../org/apache/calcite/rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;handle(<a href="../../../../../org/apache/calcite/rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</pre>
<div class="block">Opportunity to further refine the relational expression created for a
given level. The default implementation returns the relational expression
unchanged.</div>
</li>
</ul>
<a name="canImplement-org.apache.calcite.rel.logical.LogicalCalc-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canImplement</h4>
<pre>protected&nbsp;boolean&nbsp;canImplement(<a href="../../../../../org/apache/calcite/rel/logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical">LogicalCalc</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;relTypeName)</pre>
<div class="block">Returns whether a relational expression can be implemented solely in a
given <a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules"><code>CalcRelSplitter.RelType</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - Calculation relational expression</dd>
<dd><code>relTypeName</code> - Name of a <a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules"><code>CalcRelSplitter.RelType</code></a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Whether relational expression can be implemented</dd>
</dl>
</li>
</ul>
<a name="getCohorts--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getCohorts</h4>
<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&gt;&nbsp;getCohorts()</pre>
<div class="block">Returns a list of sets of expressions that should be on the same level.
<p>For example, if this method returns { {3, 5}, {4, 7} }, it means that
expressions 3 and 5, should be on the same level, and expressions 4 and 7
should be on the same level. The two cohorts do not need to be on the
same level.
<p>The list is best effort. If it is not possible to arrange that the
expressions in a cohort are on the same level, the <a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.html#execute--"><code>execute()</code></a>
method will still succeed.
<p>The default implementation of this method returns the empty list;
expressions will be put on the most suitable level. This is generally
the lowest possible level, except for literals, which are placed at the
level where they are used.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>List of cohorts, that is sets of expressions, that the splitting
algorithm should attempt to place on the same level</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.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">
<ul class="navList">
<li><a href="../../../../../org/apache/calcite/rel/rules/CalcMergeRule.html" title="class in org.apache.calcite.rel.rules"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/calcite/rel/rules/CalcRelSplitter.RelType.html" title="class in org.apache.calcite.rel.rules"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/calcite/rel/rules/CalcRelSplitter.html" target="_top">Frames</a></li>
<li><a href="CalcRelSplitter.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.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>
</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>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &copy; 2012-2020 Apache Software Foundation. All Rights Reserved.</small></p>
</body>
</html>