blob: 199df9245d3efef560dbc7fa38c7dbf3929db9ee [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>ManagedReader (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="ManagedReader (Drill : 1.20.3 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract 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/ManagedReader.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/v3/FixedReceiver.Builder.html" title="class in org.apache.drill.exec.physical.impl.scan.v3"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.EarlyEofException.html" title="class in org.apache.drill.exec.physical.impl.scan.v3"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html" target="_top">Frames</a></li>
<li><a href="ManagedReader.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>Field&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>Field&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.drill.exec.physical.impl.scan.v3</div>
<h2 title="Interface ManagedReader" class="title">Interface ManagedReader</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ManagedReader</span></pre>
<div class="block">Extended version of a record reader which uses a size-aware batch mutator.
Use this for all new readers. Replaces the original
<a href="../../../../../../../../org/apache/drill/exec/store/RecordReader.html" title="interface in org.apache.drill.exec.store"><code>RecordReader</code></a> interface.
<p>
This interface is used to create readers that work with the projection
mechanism to provide services for handling projection, setting up the result
set loader, handling schema smoothing, sharing vectors across batches, etc.
<p>
Note that this interface reads a <b>batch</b> of rows, not a single row. (The
original <code>RecordReader</code> could be confusing in this aspect.)
<p>
The expected lifecycle is:
<ul>
<li>The reader factory creates the reader just before using it. (Unlike
the old <code>ScanBatch</code> which created all readers at the start of the
scan.)</li>
<li>Constructor: open the reader using the
<a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/SchemaNegotiator.html" title="interface in org.apache.drill.exec.physical.impl.scan.v3"><code>SchemaNegotiator</code></a> to configure the
scanner framework for this reader by specifying a schema (if known), desired
row counts and other configuration options. Call <a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/SchemaNegotiator.html#build--"><code>SchemaNegotiator.build()</code></a>
to obtain a <a href="../../../../../../../../org/apache/drill/exec/physical/resultSet/RowSetLoader.html" title="interface in org.apache.drill.exec.physical.resultSet"><code>RowSetLoader</code></a>
to use to capture the rows that the reader reads.</li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html#next--"><code>next()</code></a>: called for each batch. The batch is written using the
result set loader obtained above. The scanner framework handles details of
tracking version changes, handling overflow, limiting record counts, and
so on. Return <tt>true</tt> to indicate a batch is available, <tt>false</tt>
to indicate EOF. The first call to <tt>next()</tt> can return <tt>false</tt>
if the data source has no rows.</li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html#close--"><code>close()</code></a>: called to release resources. May be called before
<tt>next()</tt> returns </tt>false</tt>.</li>
<p>
If an error occurs, the reader can throw a <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><code>RuntimeException</code></a>
from any method. A <tt>UserException</tt> is preferred to provide
detailed information about the source of the problem.</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">Interface 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/drill/exec/physical/impl/scan/v3/ManagedReader.EarlyEofException.html" title="class in org.apache.drill.exec.physical.impl.scan.v3">ManagedReader.EarlyEofException</a></span></code>
<div class="block">Exception thrown from the constructor if the data source is empty and
can produce no data or schema.</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="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract 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>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html#close--">close</a></span>()</code>
<div class="block">Release resources.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html#next--">next</a></span>()</code>
<div class="block">Read the next batch.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="next--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>next</h4>
<pre>boolean&nbsp;next()</pre>
<div class="block">Read the next batch. Reading continues until either EOF,
or until the mutator indicates that the batch is full.
The batch is considered valid if it is non-empty. Returning
<tt>true</tt> with an empty batch is valid, and is helpful on
the very first batch (returning schema only.) An empty batch
with a <tt>false</tt> return code indicates EOF and the batch
will be discarded. A non-empty batch along with a <tt>false</tt>
return result indicates a final, valid batch, but that EOF was
reached and no more data is available.
<p>
This somewhat complex protocol avoids the need to allocate a
final batch just to find out that no more data is available;
it allows EOF to be returned along with the final batch.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><tt>true</tt> if more data may be available (and so
<tt>next()</tt> should be called again, <tt>false</tt> to indicate
that EOF was reached</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</a></code> - (<tt>UserException</tt> preferred) if an
error occurs that should fail the query.</dd>
</dl>
</li>
</ul>
<a name="close--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>close</h4>
<pre>void&nbsp;close()</pre>
<div class="block">Release resources. Called just after a failure, when the scanner
is cancelled, or after <tt>next()</tt> returns EOF. Release
all resources and close files. Guaranteed to be called if
<tt>open()</tt> returns normally; will not be called if <tt>open()</tt>
throws an exception.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</a></code> - (<tt>UserException</tt> preferred) if an
error occurs that should fail the query.</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/ManagedReader.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/v3/FixedReceiver.Builder.html" title="class in org.apache.drill.exec.physical.impl.scan.v3"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.EarlyEofException.html" title="class in org.apache.drill.exec.physical.impl.scan.v3"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/v3/ManagedReader.html" target="_top">Frames</a></li>
<li><a href="ManagedReader.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>Field&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>Field&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 &#169; 1970 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>