blob: bfa84ac6b2baae21bcfc163646c0987634a85a7f [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,"i2":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/framework/BasicScanFactory.html" title="class in org.apache.drill.exec.physical.impl.scan.framework"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/ManagedScanFramework.html" title="class in org.apache.drill.exec.physical.impl.scan.framework"><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/framework/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>Nested&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.framework</div>
<h2 title="Interface ManagedReader" class="title">Interface ManagedReader&lt;T extends <a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/SchemaNegotiator.html" title="interface in org.apache.drill.exec.physical.impl.scan.framework">SchemaNegotiator</a>&gt;</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../../../../org/apache/drill/exec/store/avro/AvroBatchReader.html" title="class in org.apache.drill.exec.store.avro">AvroBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/easy/text/reader/CompliantTextBatchReader.html" title="class in org.apache.drill.exec.store.easy.text.reader">CompliantTextBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/enumerable/EnumerableRecordReader.html" title="class in org.apache.drill.exec.store.enumerable">EnumerableRecordReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/excel/ExcelBatchReader.html" title="class in org.apache.drill.exec.store.excel">ExcelBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/mock/ExtendedMockBatchReader.html" title="class in org.apache.drill.exec.store.mock">ExtendedMockBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/hdf5/HDF5BatchReader.html" title="class in org.apache.drill.exec.store.hdf5">HDF5BatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/http/HttpBatchReader.html" title="class in org.apache.drill.exec.store.http">HttpBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/http/HttpCSVBatchReader.html" title="class in org.apache.drill.exec.store.http">HttpCSVBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/httpd/HttpdLogBatchReader.html" title="class in org.apache.drill.exec.store.httpd">HttpdLogBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/http/HttpXMLBatchReader.html" title="class in org.apache.drill.exec.store.http">HttpXMLBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/iceberg/read/IcebergRecordReader.html" title="class in org.apache.drill.exec.store.iceberg.read">IcebergRecordReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/image/ImageBatchReader.html" title="class in org.apache.drill.exec.store.image">ImageBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/jdbc/JdbcBatchReader.html" title="class in org.apache.drill.exec.store.jdbc">JdbcBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/kafka/KafkaRecordReader.html" title="class in org.apache.drill.exec.store.kafka">KafkaRecordReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/log/LogBatchReader.html" title="class in org.apache.drill.exec.store.log">LogBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/pcap/PcapBatchReader.html" title="class in org.apache.drill.exec.store.pcap">PcapBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/pcapng/PcapngBatchReader.html" title="class in org.apache.drill.exec.store.pcapng">PcapngBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/pdf/PdfBatchReader.html" title="class in org.apache.drill.exec.store.pdf">PdfBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/phoenix/PhoenixBatchReader.html" title="class in org.apache.drill.exec.store.phoenix">PhoenixBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/sas/SasBatchReader.html" title="class in org.apache.drill.exec.store.sas">SasBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/easy/sequencefile/SequenceFileBatchReader.html" title="class in org.apache.drill.exec.store.easy.sequencefile">SequenceFileBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/esri/ShpBatchReader.html" title="class in org.apache.drill.exec.store.esri">ShpBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/splunk/SplunkBatchReader.html" title="class in org.apache.drill.exec.store.splunk">SplunkBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/spss/SpssBatchReader.html" title="class in org.apache.drill.exec.store.spss">SpssBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/syslog/SyslogBatchReader.html" title="class in org.apache.drill.exec.store.syslog">SyslogBatchReader</a>, <a href="../../../../../../../../org/apache/drill/exec/store/xml/XMLBatchReader.html" title="class in org.apache.drill.exec.store.xml">XMLBatchReader</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ManagedReader&lt;T extends <a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/SchemaNegotiator.html" title="interface in org.apache.drill.exec.physical.impl.scan.framework">SchemaNegotiator</a>&gt;</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 <tt>RecordReader</tt> could be confusing in this aspect.)
<p>
The expected lifecycle is:
<ul>
<li>Constructor: allocate no resources. Obtain a reference to a reader-specific
schema and projection manager.</li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/ManagedReader.html#open-T-"><code>open(SchemaNegotiator)</code></a>: Use the provided <a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/SchemaNegotiator.html" title="interface in org.apache.drill.exec.physical.impl.scan.framework"><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/framework/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/framework/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/framework/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">
<!-- ========== 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/framework/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/framework/ManagedReader.html#next--">next</a></span>()</code>
<div class="block">Read the next batch.</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/framework/ManagedReader.html#open-T-">open</a></span>(<a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/ManagedReader.html" title="type parameter in ManagedReader">T</a>&nbsp;negotiator)</code>
<div class="block">Setup the record reader.</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="open-org.apache.drill.exec.physical.impl.scan.framework.SchemaNegotiator-">
<!-- -->
</a><a name="open-T-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>open</h4>
<pre>boolean&nbsp;open(<a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/ManagedReader.html" title="type parameter in ManagedReader">T</a>&nbsp;negotiator)</pre>
<div class="block">Setup the record reader. Called just before the first call
to <tt>next()</tt>. Allocate resources here, not in the constructor.
Example: open files, allocate buffers, etc.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>negotiator</code> - mechanism to negotiate select and table
schemas, then create the row set reader used to load data into
value vectors</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the reader is open and ready to read (possibly no)
rows. false for a "soft" failure in which no schema or data is available,
but the scanner should not fail, it should move onto another reader</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> - for "hard" errors that should terminate
the query. <tt>UserException</tt> preferred to explain the problem
better than the scan operator can by guessing at the cause</dd>
</dl>
</li>
</ul>
<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/framework/BasicScanFactory.html" title="class in org.apache.drill.exec.physical.impl.scan.framework"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/framework/ManagedScanFramework.html" title="class in org.apache.drill.exec.physical.impl.scan.framework"><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/framework/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>Nested&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>