blob: b784a2d45777b1ef8395daf99fa15678b15fa19d [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 -->
<title>CalcRelSplitter (Apache Beam 2.47.0)</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 Beam 2.47.0)";
}
}
catch(err) {
}
//-->
var methods = {"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";
</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>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/BeamWindowRel.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/beam/sdk/extensions/sql/impl/rel/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><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 name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.extensions.sql.impl.rel</div>
<h2 title="Class CalcRelSplitter" class="title">Class CalcRelSplitter</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.extensions.sql.impl.rel.CalcRelSplitter</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">CalcRelSplitter</span>
extends java.lang.Object</pre>
<div class="block">CalcRelSplitter operates on a <code>Calc</code> with multiple <code>RexCall</code> sub-expressions that
cannot all be implemented by a single concrete <code>RelNode</code>.
<p>This is a copy of <code>CalcRelSplitter</code> modified to
work with Beam. TODO(CALCITE-4538) consider contributing these changes back upstream.
<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 <code>ProjectToWindowRule</code> 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/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel">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 org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rex.RexProgram</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#program">program</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#relBuilder">relBuilder</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#CalcRelSplitter-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.core.Calc-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder-org.apache.beam.sdk.extensions.sql.impl.rel.CalcRelSplitter.RelType:A-">CalcRelSplitter</a></span>(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.core.Calc&nbsp;calc,
org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder&nbsp;relBuilder,
<a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel">CalcRelSplitter.RelType</a>[]&nbsp;relTypes)</code>
<div class="block">Constructs a CalcRelSplitter.</div>
</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/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#canImplement-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCalc-java.lang.String-">canImplement</a></span>(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCalc&nbsp;rel,
java.lang.String&nbsp;relTypeName)</code>
<div class="block">Returns whether a relational expression can be implemented solely in a given <a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><code>CalcRelSplitter.RelType</code></a>.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#execute--">execute</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected java.util.List&lt;java.util.Set&lt;java.lang.Integer&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/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="i3" class="rowColor">
<td class="colFirst"><code>protected org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.html#handle-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode-">handle</a></span>(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode&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.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</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;org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rex.RexProgram program</pre>
</li>
</ul>
<a name="relBuilder">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>relBuilder</h4>
<pre>protected final&nbsp;org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder relBuilder</pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="CalcRelSplitter-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.core.Calc-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder-org.apache.beam.sdk.extensions.sql.impl.rel.CalcRelSplitter.RelType:A-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>CalcRelSplitter</h4>
<pre>public&nbsp;CalcRelSplitter(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.core.Calc&nbsp;calc,
org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.tools.RelBuilder&nbsp;relBuilder,
<a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel">CalcRelSplitter.RelType</a>[]&nbsp;relTypes)</pre>
<div class="block">Constructs a CalcRelSplitter.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>calc</code> - Calc to split</dd>
<dd><code>relTypes</code> - Array of rel types, e.g. {Java, Fennel}. Must be distinct.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="execute--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
<pre>public&nbsp;org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode&nbsp;execute()</pre>
</li>
</ul>
<a name="handle-org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handle</h4>
<pre>protected&nbsp;org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode&nbsp;handle(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode&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.beam.vendor.calcite.v1_28_0.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(org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCalc&nbsp;rel,
java.lang.String&nbsp;relTypeName)</pre>
<div class="block">Returns whether a relational expression can be implemented solely in a given <a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><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/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><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;java.util.List&lt;java.util.Set&lt;java.lang.Integer&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/beam/sdk/extensions/sql/impl/rel/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>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/BeamWindowRel.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/beam/sdk/extensions/sql/impl/rel/CalcRelSplitter.RelType.html" title="class in org.apache.beam.sdk.extensions.sql.impl.rel"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/beam/sdk/extensions/sql/impl/rel/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><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 name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>