blob: ac4977f7802e5bd867843282da4af5fd19308e07 [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>ScanOperatorExec (Drill : 1.20.3 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="ScanOperatorExec (Drill : 1.20.3 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":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="class-use/ScanOperatorExec.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">
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorEvents.html" title="interface in org.apache.drill.exec.physical.impl.scan"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html" target="_top">Frames</a></li>
<li><a href="ScanOperatorExec.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>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 name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.drill.exec.physical.impl.scan</div>
<h2 title="Class ScanOperatorExec" class="title">Class ScanOperatorExec</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.drill.exec.physical.impl.scan.ScanOperatorExec</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">ScanOperatorExec</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>
implements <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></pre>
<div class="block">Implementation of the revised scan operator that uses a mutator aware of
batch sizes. This is the successor to <a href="../../../../../../../org/apache/drill/exec/physical/impl/ScanBatch.html" title="class in org.apache.drill.exec.physical.impl"><code>ScanBatch</code></a> and should be used
by all new scan implementations.
<p>
The basic concept is to split the scan operator into layers:
<ul>
<li>The <code>OperatorRecordBatch</code> which implements Drill's Volcano-like
protocol.</li>
<li>The scan operator "wrapper" (this class) which implements actions for the
operator record batch specifically for scan. It iterates over readers,
delegating semantic work to other classes.</li>
<li>The implementation of per-reader semantics in the two EVF versions and
other ad-hoc implementations.</li>
<li>The result set loader and related classes which pack values into
value vectors.</li>
<li>Value vectors, which store the data.</li>
</ul>
<p>
The layered format can be confusing. However, each layer is somewhat
complex, so dividing the work into layers keeps the overall complexity
somewhat under control.
<h4>Scanner Framework</h4>
Acts as an adapter between the operator protocol and the row reader
protocol.
<p>
The scan operator itself is simply a framework for handling a set of readers;
it knows nothing other than the interfaces of the components it works with;
delegating all knowledge of schemas, projection, reading and the like to
implementations of those interfaces. Because that work is complex, a set
of frameworks exist to handle most common use cases, but a specialized reader
can create a framework or reader from scratch.
<p>
Error handling in this class is minimal: the enclosing record batch iterator
is responsible for handling exceptions. Error handling relies on the fact
that the iterator will call <tt>close()</tt> regardless of which exceptions
are thrown.
<h4>Protocol</h4>
The scanner works directly with two other interfaces
<p>
The <a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorEvents.html" title="interface in org.apache.drill.exec.physical.impl.scan"><code>ScanOperatorEvents</code></a> implementation provides the set of readers to
use. This class can simply maintain a list, or can create the reader on
demand.
<p>
More subtly, the factory also handles projection issues and manages vectors
across subsequent readers. A number of factories are available for the most
common cases. Extend these to implement a version specific to a data source.
<p>
The <a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/RowBatchReader.html" title="interface in org.apache.drill.exec.physical.impl.scan"><code>RowBatchReader</code></a> is a surprisingly minimal interface that
nonetheless captures the essence of reading a result set as a set of batches.
The factory implementations mentioned above implement this interface to provide
commonly-used services, the most important of which is access to a
{#link ResultSetLoader} to write values into value vectors.
<h4>Schema Versions</h4>
Readers may change schemas from time to time. To track such changes,
this implementation tracks a batch schema version, maintained by comparing
one schema with the next.
<p>
Readers can discover columns as they read data, such as with any JSON-based
format. In this case, the row set mutator also provides a schema version,
but a fine-grained one that changes each time a column is added.
<p>
The two schema versions serve different purposes and are not interchangeable.
For example, if a scan reads two files, both will build up their own schemas,
each increasing its internal version number as work proceeds. But, at the
end of each batch, the schemas may (and, in fact, should) be identical,
which is the schema version downstream operators care about.
<h4>Empty Files and/or Empty Schemas</h4>
A corner case occurs if the input is empty, such as a CSV file
that contains no data. The general rule is the following:
<ul>
<li>If the reader is "early schema" (the schema is defined at
open time), then the result will be a single empty batch with
the schema defined. Example: a CSV file without headers; in this case,
we know the schema is always the single `columns` array.</li>
<li>If the reader is "late schema" (the schema is defined while the
data is read), then no batch is returned because there is no schema.
Example: a JSON file. It is not helpful to return a single batch
with no columns; such a batch will simply conflict with some other
non-empty-schema batch. It turns out that other DBs handle this
case gracefully: a query of the form<br><pre><tt>
SELECT * FROM VALUES()</tt></pre><br>
Will produce an empty result: no schema, no data.</li>
<li>The hybrid case: the reader could provide an early schema,
but cannot do so. That is, the early schema contains no columns.
We treat this case identically to the late schema case. Example: a
CSV file with headers in which the header line is empty.</li>
</ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== 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/drill/exec/physical/impl/protocol/VectorContainerAccessor.html" title="class in org.apache.drill.exec.physical.impl.protocol">VectorContainerAccessor</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#containerAccessor">containerAccessor</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#context">context</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/drill/exec/physical/impl/scan/ScanOperatorExec.html#ScanOperatorExec-org.apache.drill.exec.physical.impl.scan.ScanOperatorEvents-boolean-">ScanOperatorExec</a></span>(<a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorEvents.html" title="interface in org.apache.drill.exec.physical.impl.scan">ScanOperatorEvents</a>&nbsp;factory,
boolean&nbsp;allowEmptyResult)</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><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/BatchAccessor.html" title="interface in org.apache.drill.exec.physical.impl.protocol">BatchAccessor</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#batchAccessor--">batchAccessor</a></span>()</code>
<div class="block">Provides a generic access mechanism to the batch's output data.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#bind-org.apache.drill.exec.ops.OperatorContext-">bind</a></span>(<a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a>&nbsp;context)</code>
<div class="block">Bind this operator to the context.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#buildSchema--">buildSchema</a></span>()</code>
<div class="block">Retrieves the schema of the batch before the first actual batch
of data.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#cancel--">cancel</a></span>()</code>
<div class="block">Alerts the operator that the query was cancelled.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#close--">close</a></span>()</code>
<div class="block">Close the operator by releasing all resources that the operator
held.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#context--">context</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html#next--">next</a></span>()</code>
<div class="block">Retrieves the next batch of data.</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="containerAccessor">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>containerAccessor</h4>
<pre>protected final&nbsp;<a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/VectorContainerAccessor.html" title="class in org.apache.drill.exec.physical.impl.protocol">VectorContainerAccessor</a> containerAccessor</pre>
</li>
</ul>
<a name="context">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>context</h4>
<pre>protected&nbsp;<a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a> context</pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="ScanOperatorExec-org.apache.drill.exec.physical.impl.scan.ScanOperatorEvents-boolean-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ScanOperatorExec</h4>
<pre>public&nbsp;ScanOperatorExec(<a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorEvents.html" title="interface in org.apache.drill.exec.physical.impl.scan">ScanOperatorEvents</a>&nbsp;factory,
boolean&nbsp;allowEmptyResult)</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="bind-org.apache.drill.exec.ops.OperatorContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>bind</h4>
<pre>public&nbsp;void&nbsp;bind(<a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a>&nbsp;context)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#bind-org.apache.drill.exec.ops.OperatorContext-">OperatorExec</a></code></span></div>
<div class="block">Bind this operator to the context. The context provides access
to per-operator, per-fragment and per-Drillbit services.
Also provides access to the operator definition (AKA "pop
config") for this operator.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#bind-org.apache.drill.exec.ops.OperatorContext-">bind</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - operator context</dd>
</dl>
</li>
</ul>
<a name="batchAccessor--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>batchAccessor</h4>
<pre>public&nbsp;<a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/BatchAccessor.html" title="interface in org.apache.drill.exec.physical.impl.protocol">BatchAccessor</a>&nbsp;batchAccessor()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#batchAccessor--">OperatorExec</a></code></span></div>
<div class="block">Provides a generic access mechanism to the batch's output data.
This method is called after a successful return from
<a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#buildSchema--"><code>OperatorExec.buildSchema()</code></a> and <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#next--"><code>OperatorExec.next()</code></a>. The batch itself
can be held in a standard <code>VectorContainer</code>, or in some
other structure more convenient for this operator.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#batchAccessor--">batchAccessor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the access for the batch's output container</dd>
</dl>
</li>
</ul>
<a name="context--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>context</h4>
<pre>public&nbsp;<a href="../../../../../../../org/apache/drill/exec/ops/OperatorContext.html" title="interface in org.apache.drill.exec.ops">OperatorContext</a>&nbsp;context()</pre>
</li>
</ul>
<a name="buildSchema--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>buildSchema</h4>
<pre>public&nbsp;boolean&nbsp;buildSchema()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#buildSchema--">OperatorExec</a></code></span></div>
<div class="block">Retrieves the schema of the batch before the first actual batch
of data. The schema is returned via an empty batch (no rows,
only schema) from <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#batchAccessor--"><code>OperatorExec.batchAccessor()</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#buildSchema--">buildSchema</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if a schema is available, false if the operator
reached EOF before a schema was found</dd>
</dl>
</li>
</ul>
<a name="next--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>next</h4>
<pre>public&nbsp;boolean&nbsp;next()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#next--">OperatorExec</a></code></span></div>
<div class="block">Retrieves the next batch of data. The data is returned via
the <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#batchAccessor--"><code>OperatorExec.batchAccessor()</code></a> method.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#next--">next</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if another batch of data is available, false if
EOF was reached and no more data is available</dd>
</dl>
</li>
</ul>
<a name="cancel--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cancel</h4>
<pre>public&nbsp;void&nbsp;cancel()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#cancel--">OperatorExec</a></code></span></div>
<div class="block">Alerts the operator that the query was cancelled. Generally
optional, but allows the operator to realize that a cancellation
was requested.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#cancel--">cancel</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></dd>
</dl>
</li>
</ul>
<a name="close--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>close</h4>
<pre>public&nbsp;void&nbsp;close()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#close--">OperatorExec</a></code></span></div>
<div class="block">Close the operator by releasing all resources that the operator
held. Called after <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#cancel--"><code>OperatorExec.cancel()</code></a> and after <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#batchAccessor--"><code>OperatorExec.batchAccessor()</code></a>
or <a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#next--"><code>OperatorExec.next()</code></a> returns false.
<p>
Note that there may be a significant delay between the last call to
<tt>next()</tt> and the call to <tt>close()</tt> during which
downstream operators do their work. A tidy operator will release
resources immediately after EOF to avoid holding onto memory or other
resources that could be used by downstream operators.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html#close--">close</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/protocol/OperatorExec.html" title="interface in org.apache.drill.exec.physical.impl.protocol">OperatorExec</a></code></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="class-use/ScanOperatorExec.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">
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/scan/ScanOperatorEvents.html" title="interface in org.apache.drill.exec.physical.impl.scan"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/ScanOperatorExec.html" target="_top">Frames</a></li>
<li><a href="ScanOperatorExec.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>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 name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 1970 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>