blob: 8fb747a62cd9fa80a33b44729f29eabcdc9150f9 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>HepProgramBuilder (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="HepProgramBuilder (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":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/HepProgramBuilder.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.plan.hep</a></div>
<h2 title="Class HepProgramBuilder" class="title">Class HepProgramBuilder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.plan.hep.HepProgramBuilder</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">HepProgramBuilder</span>
extends java.lang.Object</pre>
<div class="block">HepProgramBuilder creates instances of <a href="HepProgram.html" title="class in org.apache.calcite.plan.hep"><code>HepProgram</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 <a href="HepInstruction.BeginGroup.html" title="class in org.apache.calcite.plan.hep">HepInstruction.BeginGroup</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#group">group</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="HepInstruction.html" title="class in org.apache.calcite.plan.hep">HepInstruction</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#instructions">instructions</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">HepProgramBuilder</a></span>()</code></th>
<td class="colLast">
<div class="block">Creates a new HepProgramBuilder with an initially empty program.</div>
</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><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addCommonRelSubExprInstruction()">addCommonRelSubExprInstruction</a></span>()</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match instances of
<a href="../CommonRelSubExprRule.html" title="class in org.apache.calcite.plan"><code>CommonRelSubExprRule</code></a>, but only in cases where vertices have more
than one parent.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addConverters(boolean)">addConverters</a></span>&#8203;(boolean&nbsp;guaranteed)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match instances of
<a href="../../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert"><code>ConverterRule</code></a>,
but only where a conversion is actually required.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addGroupBegin()">addGroupBegin</a></span>()</code></th>
<td class="colLast">
<div class="block">Adds an instruction to begin a group of rules.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addGroupEnd()">addGroupEnd</a></span>()</code></th>
<td class="colLast">
<div class="block">Adds an instruction to end a group of rules, firing the group
collectively.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMatchLimit(int)">addMatchLimit</a></span>&#8203;(int&nbsp;limit)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to limit the number of pattern matches for subsequent
instructions.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMatchOrder(org.apache.calcite.plan.hep.HepMatchOrder)">addMatchOrder</a></span>&#8203;(<a href="HepMatchOrder.html" title="enum in org.apache.calcite.plan.hep">HepMatchOrder</a>&nbsp;order)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to change the order of pattern matching for
subsequent instructions.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRuleByDescription(java.lang.String)">addRuleByDescription</a></span>&#8203;(java.lang.String&nbsp;ruleDescription)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match a specific rule identified by its
unique description.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>&lt;R extends <a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;<br><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRuleClass(java.lang.Class)">addRuleClass</a></span>&#8203;(java.lang.Class&lt;R&gt;&nbsp;ruleClass)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match any rules of a given class.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRuleCollection(java.util.Collection)">addRuleCollection</a></span>&#8203;(java.util.Collection&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;&nbsp;rules)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match any rules in a given collection.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addRuleInstance(org.apache.calcite.plan.RelOptRule)">addRuleInstance</a></span>&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to attempt to match a specific rule object.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addSubprogram(org.apache.calcite.plan.hep.HepProgram)">addSubprogram</a></span>&#8203;(<a href="HepProgram.html" title="class in org.apache.calcite.plan.hep">HepProgram</a>&nbsp;program)</code></th>
<td class="colLast">
<div class="block">Adds an instruction to execute a subprogram.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="HepProgram.html" title="class in org.apache.calcite.plan.hep">HepProgram</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#build()">build</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the constructed program, clearing the state of this program
builder as a side-effect.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clear()">clear</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="instructions">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>instructions</h4>
<pre>private final&nbsp;java.util.List&lt;<a href="HepInstruction.html" title="class in org.apache.calcite.plan.hep">HepInstruction</a>&gt; instructions</pre>
</li>
</ul>
<a id="group">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>group</h4>
<pre>private&nbsp;<a href="HepInstruction.BeginGroup.html" title="class in org.apache.calcite.plan.hep">HepInstruction.BeginGroup</a> group</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;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>HepProgramBuilder</h4>
<pre>public&nbsp;HepProgramBuilder()</pre>
<div class="block">Creates a new HepProgramBuilder with an initially empty program. The
program under construction has an initial match order of
<a href="HepMatchOrder.html#DEPTH_FIRST"><code>HepMatchOrder.DEPTH_FIRST</code></a>, and an initial match limit of
<a href="HepProgram.html#MATCH_UNTIL_FIXPOINT"><code>HepProgram.MATCH_UNTIL_FIXPOINT</code></a>.</div>
</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="clear()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;clear()</pre>
</li>
</ul>
<a id="addRuleClass(java.lang.Class)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRuleClass</h4>
<pre class="methodSignature">public&nbsp;&lt;R extends <a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addRuleClass&#8203;(java.lang.Class&lt;R&gt;&nbsp;ruleClass)</pre>
<div class="block">Adds an instruction to attempt to match any rules of a given class. The
order in which the rules within a class will be attempted is arbitrary,
so if more control is needed, use addRuleInstance instead.
<p>Note that when this method is used, it is also necessary to add the
actual rule objects of interest to the planner via
<a href="../RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)"><code>RelOptPlanner.addRule(org.apache.calcite.plan.RelOptRule)</code></a>. If the planner does not have any
rules of the given class, this instruction is a nop.
<p>TODO: support classification via rule annotations.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ruleClass</code> - class of rules to fire, e.g. ConverterRule.class</dd>
</dl>
</li>
</ul>
<a id="addRuleCollection(java.util.Collection)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRuleCollection</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addRuleCollection&#8203;(java.util.Collection&lt;<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;&nbsp;rules)</pre>
<div class="block">Adds an instruction to attempt to match any rules in a given collection.
The order in which the rules within a collection will be attempted is
arbitrary, so if more control is needed, use addRuleInstance instead. The
collection can be "live" in the sense that not all rule instances need to
have been added to it at the time this method is called. The collection
contents are reevaluated for each execution of the program.
<p>Note that when this method is used, it is NOT necessary to add the
rules to the planner via <a href="../RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)"><code>RelOptPlanner.addRule(org.apache.calcite.plan.RelOptRule)</code></a>; the instances
supplied here will be used. However, adding the rules to the planner
redundantly is good form since other planners may require it.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rules</code> - collection of rules to fire</dd>
</dl>
</li>
</ul>
<a id="addRuleInstance(org.apache.calcite.plan.RelOptRule)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRuleInstance</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addRuleInstance&#8203;(<a href="../RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&nbsp;rule)</pre>
<div class="block">Adds an instruction to attempt to match a specific rule object.
<p>Note that when this method is used, it is NOT necessary to add the
rule to the planner via <a href="../RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)"><code>RelOptPlanner.addRule(org.apache.calcite.plan.RelOptRule)</code></a>; the instance
supplied here will be used. However, adding the rule to the planner
redundantly is good form since other planners may require it.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rule</code> - rule to fire</dd>
</dl>
</li>
</ul>
<a id="addRuleByDescription(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addRuleByDescription</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addRuleByDescription&#8203;(java.lang.String&nbsp;ruleDescription)</pre>
<div class="block">Adds an instruction to attempt to match a specific rule identified by its
unique description.
<p>Note that when this method is used, it is necessary to also add the
rule object of interest to the planner via <a href="../RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)"><code>RelOptPlanner.addRule(org.apache.calcite.plan.RelOptRule)</code></a>.
This allows for some decoupling between optimizers and plugins: the
optimizer only knows about rule descriptions, while the plugins supply
the actual instances. If the planner does not have a rule matching the
description, this instruction is a nop.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ruleDescription</code> - description of rule to fire</dd>
</dl>
</li>
</ul>
<a id="addGroupBegin()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addGroupBegin</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addGroupBegin()</pre>
<div class="block">Adds an instruction to begin a group of rules. All subsequent rules added
(until the next endRuleGroup) will be collected into the group rather
than firing individually. After addGroupBegin has been called, only
addRuleXXX methods may be called until the next addGroupEnd.</div>
</li>
</ul>
<a id="addGroupEnd()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addGroupEnd</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addGroupEnd()</pre>
<div class="block">Adds an instruction to end a group of rules, firing the group
collectively. The order in which the rules within a group will be
attempted is arbitrary. Match order and limit applies to the group as a
whole.</div>
</li>
</ul>
<a id="addConverters(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addConverters</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addConverters&#8203;(boolean&nbsp;guaranteed)</pre>
<div class="block">Adds an instruction to attempt to match instances of
<a href="../../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert"><code>ConverterRule</code></a>,
but only where a conversion is actually required.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>guaranteed</code> - if true, use only guaranteed converters; if false, use
only non-guaranteed converters</dd>
</dl>
</li>
</ul>
<a id="addCommonRelSubExprInstruction()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addCommonRelSubExprInstruction</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addCommonRelSubExprInstruction()</pre>
<div class="block">Adds an instruction to attempt to match instances of
<a href="../CommonRelSubExprRule.html" title="class in org.apache.calcite.plan"><code>CommonRelSubExprRule</code></a>, but only in cases where vertices have more
than one parent.</div>
</li>
</ul>
<a id="addMatchOrder(org.apache.calcite.plan.hep.HepMatchOrder)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMatchOrder</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addMatchOrder&#8203;(<a href="HepMatchOrder.html" title="enum in org.apache.calcite.plan.hep">HepMatchOrder</a>&nbsp;order)</pre>
<div class="block">Adds an instruction to change the order of pattern matching for
subsequent instructions. The new order will take effect for the rest of
the program (not counting subprograms) or until another match order
instruction is encountered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>order</code> - new match direction to set</dd>
</dl>
</li>
</ul>
<a id="addMatchLimit(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMatchLimit</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addMatchLimit&#8203;(int&nbsp;limit)</pre>
<div class="block">Adds an instruction to limit the number of pattern matches for subsequent
instructions. The limit will take effect for the rest of the program (not
counting subprograms) or until another limit instruction is encountered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>limit</code> - limit to set; use <a href="HepProgram.html#MATCH_UNTIL_FIXPOINT"><code>HepProgram.MATCH_UNTIL_FIXPOINT</code></a> to
remove limit</dd>
</dl>
</li>
</ul>
<a id="addSubprogram(org.apache.calcite.plan.hep.HepProgram)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addSubprogram</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgramBuilder.html" title="class in org.apache.calcite.plan.hep">HepProgramBuilder</a>&nbsp;addSubprogram&#8203;(<a href="HepProgram.html" title="class in org.apache.calcite.plan.hep">HepProgram</a>&nbsp;program)</pre>
<div class="block">Adds an instruction to execute a subprogram. Note that this is different
from adding the instructions from the subprogram individually. When added
as a subprogram, the sequence will execute repeatedly until a fixpoint is
reached, whereas when the instructions are added individually, the
sequence will only execute once (with a separate fixpoint for each
instruction).
<p>The subprogram has its own state for match order and limit
(initialized to the defaults every time the subprogram is executed) and
any changes it makes to those settings do not affect the parent program.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>program</code> - subprogram to execute</dd>
</dl>
</li>
</ul>
<a id="build()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>build</h4>
<pre class="methodSignature">public&nbsp;<a href="HepProgram.html" title="class in org.apache.calcite.plan.hep">HepProgram</a>&nbsp;build()</pre>
<div class="block">Returns the constructed program, clearing the state of this program
builder as a side-effect.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>immutable program</dd>
</dl>
</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/HepProgramBuilder.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>