blob: 6f794c60641037fa4541cf40b2f539851cb5b49a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>Impala: be/src/runtime/row-batch.cc Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Impala
</div>
<div id="projectbrief">Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('row-batch_8cc_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">row-batch.cc</div> </div>
</div><!--header-->
<div class="contents">
<a href="row-batch_8cc.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2012 Cloudera Inc.</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// limitations under the License.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="row-batch_8h.html">runtime/row-batch.h</a>&quot;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span> <span class="comment">// for intptr_t</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;boost/scoped_ptr.hpp&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="buffered-tuple-stream_8h.html">runtime/buffered-tuple-stream.h</a>&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="mem-tracker_8h.html">runtime/mem-tracker.h</a>&quot;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="string-value_8h.html">runtime/string-value.h</a>&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="tuple-row_8h.html">runtime/tuple-row.h</a>&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="compress_8h.html">util/compress.h</a>&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="decompress_8h.html">util/decompress.h</a>&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;gen-cpp/Results_types.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="names_8h.html">common/names.h</a>&quot;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">namespace </span>impala {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#aa56ff8061d406e2414d5031e5a464b73">RowBatch::AT_CAPACITY_MEM_USAGE</a> = 8 * 1024 * 1024;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a741f4d17857e60858cd23de4f7461460"> 34</a></span>&#160;<a class="code" href="classimpala_1_1RowBatch.html#a741f4d17857e60858cd23de4f7461460">RowBatch::RowBatch</a>(<span class="keyword">const</span> <a class="code" href="classimpala_1_1RowDescriptor.html">RowDescriptor</a>&amp; <a class="code" href="namespaceimpala.html#aa98447566dd6700a2faaaaf3059f4d95">row_desc</a>, <span class="keywordtype">int</span> capacity,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classimpala_1_1MemTracker.html">MemTracker</a>* mem_tracker)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; : mem_tracker_(mem_tracker),</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; has_in_flight_row_(false),</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; num_rows_(0),</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; capacity_(capacity),</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; num_tuples_per_row_(row_desc.tuple_descriptors().size()),</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespaceimpala.html#ad393a2093952c5b6f3a61bd3e1302e61">row_desc_</a>(row_desc),</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; auxiliary_mem_usage_(0),</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; need_to_return_(false),</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; tuple_data_pool_(new <a class="code" href="classimpala_1_1MemPool.html">MemPool</a>(mem_tracker_)) {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; DCHECK(<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a> != NULL);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; DCHECK_GT(capacity, 0);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a> = <a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a> * <a class="code" href="classimpala_1_1RowBatch.html#a0ce83c6a849963c05d27dbc76e68520a">num_tuples_per_row_</a> * <span class="keyword">sizeof</span>(<a class="code" href="classimpala_1_1Tuple.html">Tuple</a>*);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a> = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classimpala_1_1Tuple.html">Tuple</a>**<span class="keyword">&gt;</span>(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;Allocate(<a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>));</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// TODO: we want our input_batch&#39;s tuple_data to come from our (not yet implemented)</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// global runtime memory segment; how do we get thrift to allocate it from there?</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// maybe change line (in Data_types.cc generated from Data.thrift)</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// xfer += iprot-&gt;readString(this-&gt;tuple_data[_i9]);</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">// to allocated string data in special mempool</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// (change via python script that runs over Data_types.cc)</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#aa5b6ef67054cc6b7ad61bff2465286f4"> 57</a></span>&#160;<a class="code" href="classimpala_1_1RowBatch.html#a741f4d17857e60858cd23de4f7461460">RowBatch::RowBatch</a>(<span class="keyword">const</span> <a class="code" href="classimpala_1_1RowDescriptor.html">RowDescriptor</a>&amp; <a class="code" href="namespaceimpala.html#aa98447566dd6700a2faaaaf3059f4d95">row_desc</a>, <span class="keyword">const</span> TRowBatch&amp; input_batch,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classimpala_1_1MemTracker.html">MemTracker</a>* mem_tracker)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; : mem_tracker_(mem_tracker),</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; has_in_flight_row_(false),</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; num_rows_(input_batch.num_rows),</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; capacity_(num_rows_),</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; num_tuples_per_row_(input_batch.row_tuples.size()),</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespaceimpala.html#ad393a2093952c5b6f3a61bd3e1302e61">row_desc_</a>(row_desc),</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; auxiliary_mem_usage_(0),</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; tuple_data_pool_(new <a class="code" href="classimpala_1_1MemPool.html">MemPool</a>(mem_tracker)) {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; DCHECK(<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a> != NULL);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a> = <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a> * input_batch.row_tuples.size() * <span class="keyword">sizeof</span>(<a class="code" href="classimpala_1_1Tuple.html">Tuple</a>*);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a> = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classimpala_1_1Tuple.html">Tuple</a>**<span class="keyword">&gt;</span>(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;Allocate(<a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>));</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (input_batch.compression_type != THdfsCompression::NONE) {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// Decompress tuple data into data pool</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; uint8_t* compressed_data = (uint8_t*)input_batch.tuple_data.c_str();</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">size_t</span> compressed_size = input_batch.tuple_data.size();</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; scoped_ptr&lt;Codec&gt; decompressor;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status = <a class="code" href="classimpala_1_1Codec.html#a0d8e74ac086a91c1cc7dbd7fe166f307">Codec::CreateDecompressor</a>(NULL, <span class="keyword">false</span>, input_batch.compression_type,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; &amp;decompressor);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; DCHECK(status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) &lt;&lt; status.<a class="code" href="classimpala_1_1Status.html#adf1a3ee82776f6102bfe873925183159">GetDetail</a>();</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; int64_t uncompressed_size = input_batch.uncompressed_size;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; DCHECK_NE(uncompressed_size, -1) &lt;&lt; <span class="stringliteral">&quot;RowBatch decompression failed&quot;</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; uint8_t* data = <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;Allocate(uncompressed_size);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; status = decompressor-&gt;ProcessBlock(<span class="keyword">true</span>, compressed_size, compressed_data,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; &amp;uncompressed_size, &amp;data);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; DCHECK(status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) &lt;&lt; <span class="stringliteral">&quot;RowBatch decompression failed.&quot;</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; decompressor-&gt;Close();</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Tuple data uncompressed, copy directly into data pool</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; uint8_t* data = <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;Allocate(input_batch.tuple_data.size());</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; memcpy(data, input_batch.tuple_data.c_str(), input_batch.tuple_data.size());</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// convert input_batch.tuple_offsets into pointers</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">int</span> tuple_idx = 0;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (vector&lt;int32_t&gt;::const_iterator <a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> = input_batch.tuple_offsets.begin();</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> != input_batch.tuple_offsets.end(); ++<a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a>) {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (*<a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> == -1) {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a>[tuple_idx++] = NULL;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a>[tuple_idx++] = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classimpala_1_1Tuple.html">Tuple</a>*<span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;GetDataPtr(*<a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> + <a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>));</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// check whether we have string slots</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// TODO: do that during setup (part of RowDescriptor c&#39;tor?)</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">bool</span> has_string_slots = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">const</span> vector&lt;TupleDescriptor*&gt;&amp; tuple_descs = <a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#a3d57439c68d08fe374c33370529a855c">tuple_descriptors</a>();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; tuple_descs.size(); ++i) {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (!tuple_descs[i]-&gt;string_slots().empty()) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; has_string_slots = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span> (!has_string_slots) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// convert string offsets contained in tuple data into pointers</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>; ++i) {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classimpala_1_1TupleRow.html">TupleRow</a>* row = <a class="code" href="classimpala_1_1RowBatch.html#a9320ed986b0717ef26d73d871f3b3a42">GetRow</a>(i);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; vector&lt;TupleDescriptor*&gt;::const_iterator desc = tuple_descs.begin();</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; desc != tuple_descs.end(); ++desc, ++j) {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> ((*desc)-&gt;string_slots().empty()) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classimpala_1_1Tuple.html">Tuple</a>* t = row-&gt;<a class="code" href="classimpala_1_1TupleRow.html#aed3092e531291470b27fc48afa901600">GetTuple</a>(j);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (t == NULL) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; vector&lt;SlotDescriptor*&gt;::const_iterator slot = (*desc)-&gt;string_slots().begin();</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">for</span> (; slot != (*desc)-&gt;string_slots().end(); ++slot) {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; DCHECK((*slot)-&gt;type().IsVarLen());</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="structimpala_1_1StringValue.html">StringValue</a>* string_val = t-&gt;<a class="code" href="classimpala_1_1Tuple.html#ad0d1cf8a3eca6b49fe7bd4d337758f56">GetStringSlot</a>((*slot)-&gt;tuple_offset());</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">int</span> <a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> = <span class="keyword">reinterpret_cast&lt;</span>intptr_t<span class="keyword">&gt;</span>(string_val-&gt;ptr) + <a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; string_val-&gt;ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;GetDataPtr(offset));</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#ad2d33305d7a6c7effe46910fc02bcf99"> 137</a></span>&#160;<a class="code" href="classimpala_1_1RowBatch.html#ad2d33305d7a6c7effe46910fc02bcf99">RowBatch::~RowBatch</a>() {</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;FreeAll();</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.size(); ++i) {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>[i]-&gt;Return();</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.size(); ++i) {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>[i]-&gt;Close();</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a5a7ff7bf9d6bd28990eedab985477390"> 147</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#a5a7ff7bf9d6bd28990eedab985477390">RowBatch::Serialize</a>(TRowBatch* output_batch) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// why does Thrift not generate a Clear() function?</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; output_batch-&gt;row_tuples.clear();</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; output_batch-&gt;tuple_offsets.clear();</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; output_batch-&gt;compression_type = THdfsCompression::NONE;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; output_batch-&gt;num_rows = <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#ae5777d88c2ab166f11a76db9e828d32e">ToThrift</a>(&amp;output_batch-&gt;row_tuples);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; output_batch-&gt;tuple_offsets.reserve(<a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a> * <a class="code" href="classimpala_1_1RowBatch.html#a0ce83c6a849963c05d27dbc76e68520a">num_tuples_per_row_</a>);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordtype">int</span> size = <a class="code" href="classimpala_1_1RowBatch.html#aa748c2de46658330f617535567cae744">TotalByteSize</a>();</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; output_batch-&gt;tuple_data.resize(size);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; output_batch-&gt;uncompressed_size = size;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// Copy tuple data, including strings, into output_batch (converting string</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// pointers into offsets in the process)</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordtype">int</span> <a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> = 0; <span class="comment">// current offset into output_batch-&gt;tuple_data</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordtype">char</span>* tuple_data = <span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(output_batch-&gt;tuple_data.c_str());</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>; ++i) {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classimpala_1_1TupleRow.html">TupleRow</a>* row = <a class="code" href="classimpala_1_1RowBatch.html#a9320ed986b0717ef26d73d871f3b3a42">GetRow</a>(i);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">const</span> vector&lt;TupleDescriptor*&gt;&amp; tuple_descs = <a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#a3d57439c68d08fe374c33370529a855c">tuple_descriptors</a>();</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; vector&lt;TupleDescriptor*&gt;::const_iterator desc = tuple_descs.begin();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; desc != tuple_descs.end(); ++desc, ++j) {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (row-&gt;<a class="code" href="classimpala_1_1TupleRow.html#aed3092e531291470b27fc48afa901600">GetTuple</a>(j) == NULL) {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// NULLs are encoded as -1</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; output_batch-&gt;tuple_offsets.push_back(-1);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Record offset before creating copy (which increments offset and tuple_data)</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; output_batch-&gt;tuple_offsets.push_back(offset);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; row-&gt;<a class="code" href="classimpala_1_1TupleRow.html#aed3092e531291470b27fc48afa901600">GetTuple</a>(j)-&gt;<a class="code" href="classimpala_1_1Tuple.html#a7bd61a6c3fe36dc122b94d5f1f2ecac4">DeepCopy</a>(**desc, &amp;tuple_data, &amp;offset, <span class="comment">/* convert_ptrs */</span> <span class="keyword">true</span>);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; DCHECK_LE(offset, size);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; DCHECK_EQ(offset, size);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (size &gt; 0) {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// Try compressing tuple_data to compression_scratch_, swap if compressed data is</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// smaller</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; scoped_ptr&lt;Codec&gt; compressor;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status = <a class="code" href="classimpala_1_1Codec.html#a18854cd2e08266b09600a6e559c7c6e1">Codec::CreateCompressor</a>(NULL, <span class="keyword">false</span>, THdfsCompression::LZ4,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &amp;compressor);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; DCHECK(status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) &lt;&lt; status.<a class="code" href="classimpala_1_1Status.html#adf1a3ee82776f6102bfe873925183159">GetDetail</a>();</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; int64_t compressed_size = compressor-&gt;MaxOutputLen(size);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">compression_scratch_</a>.size() &lt; compressed_size) {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">compression_scratch_</a>.resize(compressed_size);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; uint8_t* input = (uint8_t*)output_batch-&gt;tuple_data.c_str();</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; uint8_t* compressed_output = (uint8_t*)<a class="code" href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">compression_scratch_</a>.c_str();</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; compressor-&gt;ProcessBlock(<span class="keyword">true</span>, size, input, &amp;compressed_size, &amp;compressed_output);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="compiler-util_8h.html#a262afcfe437f4addb13fb1b47a6a7086">LIKELY</a>(compressed_size &lt; size)) {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">compression_scratch_</a>.resize(compressed_size);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; output_batch-&gt;tuple_data.swap(<a class="code" href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">compression_scratch_</a>);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; output_batch-&gt;compression_type = THdfsCompression::LZ4;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="logging_8h.html#a6ccc2106c47622db4e52a401a415fc58">VLOG_ROW</a> &lt;&lt; <span class="stringliteral">&quot;uncompressed size: &quot;</span> &lt;&lt; size &lt;&lt; <span class="stringliteral">&quot;, compressed size: &quot;</span> &lt;&lt; compressed_size;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// The size output_batch would be if we didn&#39;t compress tuple_data (will be equal to</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// actual batch size if tuple_data isn&#39;t compressed)</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1RowBatch.html#af12857237879012707070a5deb7a529f">GetBatchSize</a>(*output_batch) - output_batch-&gt;tuple_data.size() + size;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a494923883448c2b78786d391465107ce"> 211</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1RowBatch.html#a494923883448c2b78786d391465107ce">RowBatch::AddIoBuffer</a>(<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html">DiskIoMgr::BufferDescriptor</a>* buffer) {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; DCHECK(buffer != NULL);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.push_back(buffer);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#aae839241cba91ebc6774fc4e2bc384e0">buffer_len</a>();</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#a434c70e0f6a34982c92eb1deaae3bc2c">SetMemTracker</a>(<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a>);</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div>
<div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a923a9f1e331245092d6d5ae4141cbbb7"> 218</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1RowBatch.html#a923a9f1e331245092d6d5ae4141cbbb7">RowBatch::AddTupleStream</a>(<a class="code" href="classimpala_1_1BufferedTupleStream.html">BufferedTupleStream</a>* stream) {</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; DCHECK(stream != NULL);</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.push_back(stream);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += stream-&gt;<a class="code" href="classimpala_1_1BufferedTupleStream.html#a6846f309cc28f0d6b6d6caebd033cdec">byte_size</a>();</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#ac351eaf211eb53882564b604db07b824"> 224</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1RowBatch.html#ac351eaf211eb53882564b604db07b824">RowBatch::Reset</a>() {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; DCHECK(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>.get() != NULL);</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a> = 0;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ab3e3801fac98885c9c6a8c9e45ad30d9">has_in_flight_row_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;FreeAll();</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>.reset(<span class="keyword">new</span> <a class="code" href="classimpala_1_1MemPool.html">MemPool</a>(<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a>));</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.size(); ++i) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>[i]-&gt;Return();</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.clear();</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.size(); ++i) {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>[i]-&gt;Close();</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.clear();</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> = 0;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a> = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classimpala_1_1Tuple.html">Tuple</a>**<span class="keyword">&gt;</span>(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;Allocate(<a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>));</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">need_to_return_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div>
<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a2890c318601bac6712e469335940a1e2"> 243</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1RowBatch.html#a2890c318601bac6712e469335940a1e2">RowBatch::TransferResourceOwnership</a>(<a class="code" href="classimpala_1_1RowBatch.html">RowBatch</a>* dest) {</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;total_allocated_bytes();</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;AcquireData(<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>.get(), <span class="keyword">false</span>);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.size(); ++i) {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html">DiskIoMgr::BufferDescriptor</a>* buffer = <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>[i];</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.push_back(buffer);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#aae839241cba91ebc6774fc4e2bc384e0">buffer_len</a>();</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#a434c70e0f6a34982c92eb1deaae3bc2c">SetMemTracker</a>(dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a>);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.clear();</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.size(); ++i) {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.push_back(<a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>[i]);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>[i]-&gt;byte_size();</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.clear();</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; dest-&gt;<a class="code" href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">need_to_return_</a> |= <a class="code" href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">need_to_return_</a>;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> = 0;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a> = NULL;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ac351eaf211eb53882564b604db07b824">Reset</a>();</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#af12857237879012707070a5deb7a529f"> 264</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#af12857237879012707070a5deb7a529f">RowBatch::GetBatchSize</a>(<span class="keyword">const</span> TRowBatch&amp; batch) {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">int</span> result = batch.tuple_data.size();</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; result += batch.row_tuples.size() * <span class="keyword">sizeof</span>(TTupleId);</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; result += batch.tuple_offsets.size() * <span class="keyword">sizeof</span>(int32_t);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
<div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a2f777637e6f27003960633011c7d1605"> 271</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1RowBatch.html#a2f777637e6f27003960633011c7d1605">RowBatch::AcquireState</a>(<a class="code" href="classimpala_1_1RowBatch.html">RowBatch</a>* src) {</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; DCHECK(<a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#a4463849ca0e85e78f7d1a9554a1594fe">Equals</a>(src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>));</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; DCHECK_EQ(<a class="code" href="classimpala_1_1RowBatch.html#a0ce83c6a849963c05d27dbc76e68520a">num_tuples_per_row_</a>, src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a0ce83c6a849963c05d27dbc76e68520a">num_tuples_per_row_</a>);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; DCHECK_EQ(<a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>, src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">tuple_ptrs_size_</a>);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; DCHECK_EQ(<a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a>, src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a>);</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; DCHECK_EQ(<a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a>, 0);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// The destination row batch should be empty.</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; DCHECK(!<a class="code" href="classimpala_1_1RowBatch.html#ab3e3801fac98885c9c6a8c9e45ad30d9">has_in_flight_row_</a>);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; DCHECK_EQ(<a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>, 0);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.size(); ++i) {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html">DiskIoMgr::BufferDescriptor</a>* buffer = src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>[i];</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.push_back(buffer);</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#aae839241cba91ebc6774fc4e2bc384e0">buffer_len</a>();</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; buffer-&gt;<a class="code" href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#a434c70e0f6a34982c92eb1deaae3bc2c">SetMemTracker</a>(<a class="code" href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">mem_tracker_</a>);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">io_buffers_</a>.clear();</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> = 0;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; DCHECK(src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">tuple_streams_</a>.empty());</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ab3e3801fac98885c9c6a8c9e45ad30d9">has_in_flight_row_</a> = src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ab3e3801fac98885c9c6a8c9e45ad30d9">has_in_flight_row_</a>;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a> = src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a> = src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a>;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">need_to_return_</a> = src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">need_to_return_</a>;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; std::swap(<a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a>, src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">tuple_ptrs_</a>);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;AcquireData(src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>.get(), <span class="keyword">false</span>);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">auxiliary_mem_usage_</a> += src-&gt;<a class="code" href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">tuple_data_pool_</a>-&gt;total_allocated_bytes();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;}</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">// TODO: consider computing size of batches as they are built up</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#aa748c2de46658330f617535567cae744"> 303</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#aa748c2de46658330f617535567cae744">RowBatch::TotalByteSize</a>() {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordtype">int</span> result = 0;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">num_rows_</a>; ++i) {</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classimpala_1_1TupleRow.html">TupleRow</a>* row = <a class="code" href="classimpala_1_1RowBatch.html#a9320ed986b0717ef26d73d871f3b3a42">GetRow</a>(i);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keyword">const</span> vector&lt;TupleDescriptor*&gt;&amp; tuple_descs = <a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#a3d57439c68d08fe374c33370529a855c">tuple_descriptors</a>();</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; vector&lt;TupleDescriptor*&gt;::const_iterator desc = tuple_descs.begin();</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; desc != tuple_descs.end(); ++desc, ++j) {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classimpala_1_1Tuple.html">Tuple</a>* tuple = row-&gt;<a class="code" href="classimpala_1_1TupleRow.html#aed3092e531291470b27fc48afa901600">GetTuple</a>(j);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (tuple == NULL) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; result += (*desc)-&gt;byte_size();</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; vector&lt;SlotDescriptor*&gt;::const_iterator slot = (*desc)-&gt;string_slots().begin();</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">for</span> (; slot != (*desc)-&gt;string_slots().end(); ++slot) {</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; DCHECK((*slot)-&gt;type().IsVarLen());</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (tuple-&gt;<a class="code" href="classimpala_1_1Tuple.html#ace4b7ea4cc159a2d2686e2a61c406413">IsNull</a>((*slot)-&gt;null_indicator_offset())) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="structimpala_1_1StringValue.html">StringValue</a>* string_val = tuple-&gt;<a class="code" href="classimpala_1_1Tuple.html#ad0d1cf8a3eca6b49fe7bd4d337758f56">GetStringSlot</a>((*slot)-&gt;tuple_offset());</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; result += string_val-&gt;<a class="code" href="structimpala_1_1StringValue.html#ab71e42890598d9b239cac64485db276d">len</a>;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;}</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div>
<div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classimpala_1_1RowBatch.html#a602415d7e138ddbd21dbccb0c7689543"> 325</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#a602415d7e138ddbd21dbccb0c7689543">RowBatch::MaxTupleBufferSize</a>() {</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">int</span> row_size = <a class="code" href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">row_desc_</a>.<a class="code" href="classimpala_1_1RowDescriptor.html#acc6beec42c710b65f958cf91981cb4b9">GetRowSize</a>();</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (row_size &gt; <a class="code" href="classimpala_1_1RowBatch.html#aa56ff8061d406e2414d5031e5a464b73">AT_CAPACITY_MEM_USAGE</a>) <span class="keywordflow">return</span> row_size;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classimpala_1_1RowBatch.html#ac695df3b85ee416b3d99844813ae813d">num_rows</a> = 0;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">if</span> (row_size != 0) {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; num_rows = std::min(<a class="code" href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">capacity_</a>, <a class="code" href="classimpala_1_1RowBatch.html#aa56ff8061d406e2414d5031e5a464b73">AT_CAPACITY_MEM_USAGE</a> / row_size);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">int</span> tuple_buffer_size = num_rows * row_size;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; DCHECK_LE(tuple_buffer_size, <a class="code" href="classimpala_1_1RowBatch.html#aa56ff8061d406e2414d5031e5a464b73">AT_CAPACITY_MEM_USAGE</a>);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> tuple_buffer_size;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div>
<div class="ttc" id="row-batch_8h_html"><div class="ttname"><a href="row-batch_8h.html">row-batch.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a68a13b04ab3dd529abaef833f99bd6cb"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a68a13b04ab3dd529abaef833f99bd6cb">impala::RowBatch::tuple_ptrs_size_</a></div><div class="ttdeci">int tuple_ptrs_size_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00242">row-batch.h:242</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a00462d96ac7b595312fc6bd3916f5bd8"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a00462d96ac7b595312fc6bd3916f5bd8">impala::RowBatch::tuple_ptrs_</a></div><div class="ttdeci">Tuple ** tuple_ptrs_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00241">row-batch.h:241</a></div></div>
<div class="ttc" id="classimpala_1_1BufferedTupleStream_html"><div class="ttname"><a href="classimpala_1_1BufferedTupleStream.html">impala::BufferedTupleStream</a></div><div class="ttdoc">The underlying memory management is done by the BufferedBlockMgr. </div><div class="ttdef"><b>Definition:</b> <a href="buffered-tuple-stream_8h_source.html#l00109">buffered-tuple-stream.h:109</a></div></div>
<div class="ttc" id="classimpala_1_1RowDescriptor_html_acc6beec42c710b65f958cf91981cb4b9"><div class="ttname"><a href="classimpala_1_1RowDescriptor.html#acc6beec42c710b65f958cf91981cb4b9">impala::RowDescriptor::GetRowSize</a></div><div class="ttdeci">int GetRowSize() const </div><div class="ttdef"><b>Definition:</b> <a href="descriptors_8cc_source.html#l00320">descriptors.cc:320</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ac695df3b85ee416b3d99844813ae813d"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ac695df3b85ee416b3d99844813ae813d">impala::RowBatch::num_rows</a></div><div class="ttdeci">int num_rows() const </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00215">row-batch.h:215</a></div></div>
<div class="ttc" id="classimpala_1_1Status_html_adf1a3ee82776f6102bfe873925183159"><div class="ttname"><a href="classimpala_1_1Status.html#adf1a3ee82776f6102bfe873925183159">impala::Status::GetDetail</a></div><div class="ttdeci">const std::string GetDetail() const </div><div class="ttdef"><b>Definition:</b> <a href="status_8cc_source.html#l00184">status.cc:184</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a741f4d17857e60858cd23de4f7461460"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a741f4d17857e60858cd23de4f7461460">impala::RowBatch::RowBatch</a></div><div class="ttdeci">RowBatch(const RowDescriptor &amp;row_desc, int capacity, MemTracker *tracker)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00034">row-batch.cc:34</a></div></div>
<div class="ttc" id="classimpala_1_1Codec_html_a18854cd2e08266b09600a6e559c7c6e1"><div class="ttname"><a href="classimpala_1_1Codec.html#a18854cd2e08266b09600a6e559c7c6e1">impala::Codec::CreateCompressor</a></div><div class="ttdeci">static Status CreateCompressor(MemPool *mem_pool, bool reuse, THdfsCompression::type format, boost::scoped_ptr&lt; Codec &gt; *compressor)</div></div>
<div class="ttc" id="structimpala_1_1StringValue_html"><div class="ttname"><a href="structimpala_1_1StringValue.html">impala::StringValue</a></div><div class="ttdef"><b>Definition:</b> <a href="string-value_8h_source.html#l00033">string-value.h:33</a></div></div>
<div class="ttc" id="classimpala_1_1TupleRow_html_aed3092e531291470b27fc48afa901600"><div class="ttname"><a href="classimpala_1_1TupleRow.html#aed3092e531291470b27fc48afa901600">impala::TupleRow::GetTuple</a></div><div class="ttdeci">Tuple * GetTuple(int tuple_idx)</div><div class="ttdef"><b>Definition:</b> <a href="tuple-row_8h_source.html#l00030">tuple-row.h:30</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_aa748c2de46658330f617535567cae744"><div class="ttname"><a href="classimpala_1_1RowBatch.html#aa748c2de46658330f617535567cae744">impala::RowBatch::TotalByteSize</a></div><div class="ttdeci">int TotalByteSize()</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00303">row-batch.cc:303</a></div></div>
<div class="ttc" id="classimpala_1_1Codec_html_a0d8e74ac086a91c1cc7dbd7fe166f307"><div class="ttname"><a href="classimpala_1_1Codec.html#a0d8e74ac086a91c1cc7dbd7fe166f307">impala::Codec::CreateDecompressor</a></div><div class="ttdeci">static Status CreateDecompressor(MemPool *mem_pool, bool reuse, THdfsCompression::type format, boost::scoped_ptr&lt; Codec &gt; *decompressor)</div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_acadf4399bff08e054ab81d3f24990d11"><div class="ttname"><a href="classimpala_1_1RowBatch.html#acadf4399bff08e054ab81d3f24990d11">impala::RowBatch::row_desc_</a></div><div class="ttdeci">RowDescriptor row_desc_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00237">row-batch.h:237</a></div></div>
<div class="ttc" id="classimpala_1_1Tuple_html"><div class="ttname"><a href="classimpala_1_1Tuple.html">impala::Tuple</a></div><div class="ttdoc">A tuple with 0 materialised slots is represented as NULL. </div><div class="ttdef"><b>Definition:</b> <a href="tuple_8h_source.html#l00048">tuple.h:48</a></div></div>
<div class="ttc" id="compress_8h_html"><div class="ttname"><a href="compress_8h.html">compress.h</a></div></div>
<div class="ttc" id="structimpala_1_1StringValue_html_ab71e42890598d9b239cac64485db276d"><div class="ttname"><a href="structimpala_1_1StringValue.html#ab71e42890598d9b239cac64485db276d">impala::StringValue::len</a></div><div class="ttdeci">int len</div><div class="ttdef"><b>Definition:</b> <a href="string-value_8h_source.html#l00038">string-value.h:38</a></div></div>
<div class="ttc" id="mem-tracker_8h_html"><div class="ttname"><a href="mem-tracker_8h.html">mem-tracker.h</a></div></div>
<div class="ttc" id="buffered-tuple-stream_8h_html"><div class="ttname"><a href="buffered-tuple-stream_8h.html">buffered-tuple-stream.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a9320ed986b0717ef26d73d871f3b3a42"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a9320ed986b0717ef26d73d871f3b3a42">impala::RowBatch::GetRow</a></div><div class="ttdeci">TupleRow * GetRow(int row_idx)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00140">row-batch.h:140</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a2f777637e6f27003960633011c7d1605"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a2f777637e6f27003960633011c7d1605">impala::RowBatch::AcquireState</a></div><div class="ttdeci">void AcquireState(RowBatch *src)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00271">row-batch.cc:271</a></div></div>
<div class="ttc" id="classimpala_1_1DiskIoMgr_1_1BufferDescriptor_html"><div class="ttname"><a href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html">impala::DiskIoMgr::BufferDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="disk-io-mgr_8h_source.html#l00196">disk-io-mgr.h:196</a></div></div>
<div class="ttc" id="classimpala_1_1RowDescriptor_html"><div class="ttname"><a href="classimpala_1_1RowDescriptor.html">impala::RowDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="descriptors_8h_source.html#l00373">descriptors.h:373</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a8981be17945dfb4c46eb7e9021807718"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a8981be17945dfb4c46eb7e9021807718">impala::RowBatch::io_buffers_</a></div><div class="ttdeci">std::vector&lt; DiskIoMgr::BufferDescriptor * &gt; io_buffers_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00258">row-batch.h:258</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a47dd4b36f95c28e10adbda8d249babb1"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a47dd4b36f95c28e10adbda8d249babb1">impala::RowBatch::num_rows_</a></div><div class="ttdeci">int num_rows_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00233">row-batch.h:233</a></div></div>
<div class="ttc" id="classimpala_1_1TupleRow_html"><div class="ttname"><a href="classimpala_1_1TupleRow.html">impala::TupleRow</a></div><div class="ttdef"><b>Definition:</b> <a href="tuple-row_8h_source.html#l00028">tuple-row.h:28</a></div></div>
<div class="ttc" id="classimpala_1_1BufferedTupleStream_html_a6846f309cc28f0d6b6d6caebd033cdec"><div class="ttname"><a href="classimpala_1_1BufferedTupleStream.html#a6846f309cc28f0d6b6d6caebd033cdec">impala::BufferedTupleStream::byte_size</a></div><div class="ttdeci">int64_t byte_size() const </div><div class="ttdoc">Returns the byte size necessary to store the entire stream in memory. </div><div class="ttdef"><b>Definition:</b> <a href="buffered-tuple-stream_8h_source.html#l00237">buffered-tuple-stream.h:237</a></div></div>
<div class="ttc" id="classimpala_1_1Tuple_html_a7bd61a6c3fe36dc122b94d5f1f2ecac4"><div class="ttname"><a href="classimpala_1_1Tuple.html#a7bd61a6c3fe36dc122b94d5f1f2ecac4">impala::Tuple::DeepCopy</a></div><div class="ttdeci">Tuple * DeepCopy(const TupleDescriptor &amp;desc, MemPool *pool, bool convert_ptrs=false)</div><div class="ttdef"><b>Definition:</b> <a href="tuple_8cc_source.html#l00034">tuple.cc:34</a></div></div>
<div class="ttc" id="classimpala_1_1Tuple_html_ace4b7ea4cc159a2d2686e2a61c406413"><div class="ttname"><a href="classimpala_1_1Tuple.html#ace4b7ea4cc159a2d2686e2a61c406413">impala::Tuple::IsNull</a></div><div class="ttdeci">bool IsNull(const NullIndicatorOffset &amp;offset) const </div><div class="ttdef"><b>Definition:</b> <a href="tuple_8h_source.html#l00112">tuple.h:112</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ab3e3801fac98885c9c6a8c9e45ad30d9"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ab3e3801fac98885c9c6a8c9e45ad30d9">impala::RowBatch::has_in_flight_row_</a></div><div class="ttdeci">bool has_in_flight_row_</div><div class="ttdoc">All members below need to be handled in RowBatch::AcquireState() </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00232">row-batch.h:232</a></div></div>
<div class="ttc" id="decompress_8h_html"><div class="ttname"><a href="decompress_8h.html">decompress.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a923a9f1e331245092d6d5ae4141cbbb7"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a923a9f1e331245092d6d5ae4141cbbb7">impala::RowBatch::AddTupleStream</a></div><div class="ttdeci">void AddTupleStream(BufferedTupleStream *stream)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00218">row-batch.cc:218</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a5043c148c238bb62d9e1cb7680db7f01"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a5043c148c238bb62d9e1cb7680db7f01">impala::RowBatch::auxiliary_mem_usage_</a></div><div class="ttdeci">int64_t auxiliary_mem_usage_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00246">row-batch.h:246</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_adecf4adfaa8817a5a762554831b184b0"><div class="ttname"><a href="classimpala_1_1RowBatch.html#adecf4adfaa8817a5a762554831b184b0">impala::RowBatch::capacity_</a></div><div class="ttdeci">int capacity_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00234">row-batch.h:234</a></div></div>
<div class="ttc" id="classimpala_1_1Status_html"><div class="ttname"><a href="classimpala_1_1Status.html">impala::Status</a></div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00081">status.h:81</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_aa56ff8061d406e2414d5031e5a464b73"><div class="ttname"><a href="classimpala_1_1RowBatch.html#aa56ff8061d406e2414d5031e5a464b73">impala::RowBatch::AT_CAPACITY_MEM_USAGE</a></div><div class="ttdeci">static const int AT_CAPACITY_MEM_USAGE</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00222">row-batch.h:222</a></div></div>
<div class="ttc" id="classimpala_1_1MemPool_html"><div class="ttname"><a href="classimpala_1_1MemPool.html">impala::MemPool</a></div><div class="ttdef"><b>Definition:</b> <a href="mem-pool_8h_source.html#l00077">mem-pool.h:77</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ac351eaf211eb53882564b604db07b824"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ac351eaf211eb53882564b604db07b824">impala::RowBatch::Reset</a></div><div class="ttdeci">void Reset()</div><div class="ttdoc">Resets the row batch, returning all resources it has accumulated. </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00224">row-batch.cc:224</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a494923883448c2b78786d391465107ce"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a494923883448c2b78786d391465107ce">impala::RowBatch::AddIoBuffer</a></div><div class="ttdeci">void AddIoBuffer(DiskIoMgr::BufferDescriptor *buffer)</div><div class="ttdoc">Add io buffer to this row batch. </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00211">row-batch.cc:211</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a0ce83c6a849963c05d27dbc76e68520a"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a0ce83c6a849963c05d27dbc76e68520a">impala::RowBatch::num_tuples_per_row_</a></div><div class="ttdeci">int num_tuples_per_row_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00236">row-batch.h:236</a></div></div>
<div class="ttc" id="classimpala_1_1DiskIoMgr_1_1BufferDescriptor_html_a434c70e0f6a34982c92eb1deaae3bc2c"><div class="ttname"><a href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#a434c70e0f6a34982c92eb1deaae3bc2c">impala::DiskIoMgr::BufferDescriptor::SetMemTracker</a></div><div class="ttdeci">void SetMemTracker(MemTracker *tracker)</div><div class="ttdef"><b>Definition:</b> <a href="disk-io-mgr_8cc_source.html#l00187">disk-io-mgr.cc:187</a></div></div>
<div class="ttc" id="classimpala_1_1RowDescriptor_html_a4463849ca0e85e78f7d1a9554a1594fe"><div class="ttname"><a href="classimpala_1_1RowDescriptor.html#a4463849ca0e85e78f7d1a9554a1594fe">impala::RowDescriptor::Equals</a></div><div class="ttdeci">bool Equals(const RowDescriptor &amp;other_desc) const </div><div class="ttdoc">Return true if the tuple ids of this descriptor match tuple ids of other desc. </div><div class="ttdef"><b>Definition:</b> <a href="descriptors_8cc_source.html#l00361">descriptors.cc:361</a></div></div>
<div class="ttc" id="classimpala_1_1RowDescriptor_html_ae5777d88c2ab166f11a76db9e828d32e"><div class="ttname"><a href="classimpala_1_1RowDescriptor.html#ae5777d88c2ab166f11a76db9e828d32e">impala::RowDescriptor::ToThrift</a></div><div class="ttdeci">void ToThrift(std::vector&lt; TTupleId &gt; *row_tuple_ids)</div><div class="ttdoc">Populate row_tuple_ids with our ids. </div><div class="ttdef"><b>Definition:</b> <a href="descriptors_8cc_source.html#l00345">descriptors.cc:345</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_af12857237879012707070a5deb7a529f"><div class="ttname"><a href="classimpala_1_1RowBatch.html#af12857237879012707070a5deb7a529f">impala::RowBatch::GetBatchSize</a></div><div class="ttdeci">static int GetBatchSize(const TRowBatch &amp;batch)</div><div class="ttdoc">Utility function: returns total size of batch. </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00264">row-batch.cc:264</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_af1a96984d6d3124cce3d7d25486500a8"><div class="ttname"><a href="classimpala_1_1RowBatch.html#af1a96984d6d3124cce3d7d25486500a8">impala::RowBatch::need_to_return_</a></div><div class="ttdeci">bool need_to_return_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00250">row-batch.h:250</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a2890c318601bac6712e469335940a1e2"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a2890c318601bac6712e469335940a1e2">impala::RowBatch::TransferResourceOwnership</a></div><div class="ttdeci">void TransferResourceOwnership(RowBatch *dest)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00243">row-batch.cc:243</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a489e04dce7c6b9f47543e11b1aedfe52"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a489e04dce7c6b9f47543e11b1aedfe52">impala::RowBatch::mem_tracker_</a></div><div class="ttdeci">MemTracker * mem_tracker_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00228">row-batch.h:228</a></div></div>
<div class="ttc" id="logging_8h_html_a6ccc2106c47622db4e52a401a415fc58"><div class="ttname"><a href="logging_8h.html#a6ccc2106c47622db4e52a401a415fc58">VLOG_ROW</a></div><div class="ttdeci">#define VLOG_ROW</div><div class="ttdef"><b>Definition:</b> <a href="logging_8h_source.html#l00059">logging.h:59</a></div></div>
<div class="ttc" id="classimpala_1_1MemTracker_html"><div class="ttname"><a href="classimpala_1_1MemTracker.html">impala::MemTracker</a></div><div class="ttdoc">This class is thread-safe. </div><div class="ttdef"><b>Definition:</b> <a href="mem-tracker_8h_source.html#l00061">mem-tracker.h:61</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ad98a31acb80884902c234dc19f38ee3a"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ad98a31acb80884902c234dc19f38ee3a">impala::RowBatch::compression_scratch_</a></div><div class="ttdeci">std::string compression_scratch_</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00270">row-batch.h:270</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html"><div class="ttname"><a href="classimpala_1_1RowBatch.html">impala::RowBatch</a></div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00066">row-batch.h:66</a></div></div>
<div class="ttc" id="namespaceimpala_html_aa98447566dd6700a2faaaaf3059f4d95"><div class="ttname"><a href="namespaceimpala.html#aa98447566dd6700a2faaaaf3059f4d95">impala::row_desc</a></div><div class="ttdeci">const RowDescriptor &amp; row_desc() const </div></div>
<div class="ttc" id="classimpala_1_1RowDescriptor_html_a3d57439c68d08fe374c33370529a855c"><div class="ttname"><a href="classimpala_1_1RowDescriptor.html#a3d57439c68d08fe374c33370529a855c">impala::RowDescriptor::tuple_descriptors</a></div><div class="ttdeci">const std::vector&lt; TupleDescriptor * &gt; &amp; tuple_descriptors() const </div><div class="ttdoc">Return descriptors for all tuples in this row, in order of appearance. </div><div class="ttdef"><b>Definition:</b> <a href="descriptors_8h_source.html#l00412">descriptors.h:412</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a5a7ff7bf9d6bd28990eedab985477390"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a5a7ff7bf9d6bd28990eedab985477390">impala::RowBatch::Serialize</a></div><div class="ttdeci">int Serialize(TRowBatch *output_batch)</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00147">row-batch.cc:147</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ae1353020bd518877fe6dbab694ee63b2"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ae1353020bd518877fe6dbab694ee63b2">impala::RowBatch::tuple_streams_</a></div><div class="ttdeci">std::vector&lt; BufferedTupleStream * &gt; tuple_streams_</div><div class="ttdoc">Tuple streams currently owned by this row batch. </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00261">row-batch.h:261</a></div></div>
<div class="ttc" id="classimpala_1_1Tuple_html_ad0d1cf8a3eca6b49fe7bd4d337758f56"><div class="ttname"><a href="classimpala_1_1Tuple.html#ad0d1cf8a3eca6b49fe7bd4d337758f56">impala::Tuple::GetStringSlot</a></div><div class="ttdeci">StringValue * GetStringSlot(int offset)</div><div class="ttdef"><b>Definition:</b> <a href="tuple_8h_source.html#l00128">tuple.h:128</a></div></div>
<div class="ttc" id="compiler-util_8h_html_a262afcfe437f4addb13fb1b47a6a7086"><div class="ttname"><a href="compiler-util_8h.html#a262afcfe437f4addb13fb1b47a6a7086">LIKELY</a></div><div class="ttdeci">#define LIKELY(expr)</div><div class="ttdef"><b>Definition:</b> <a href="compiler-util_8h_source.html#l00032">compiler-util.h:32</a></div></div>
<div class="ttc" id="namespaceimpala_html_ad393a2093952c5b6f3a61bd3e1302e61"><div class="ttname"><a href="namespaceimpala.html#ad393a2093952c5b6f3a61bd3e1302e61">impala::row_desc_</a></div><div class="ttdeci">const RowDescriptor * row_desc_</div><div class="ttdoc">owned by plan root, which resides in runtime_state_&#39;s pool </div><div class="ttdef"><b>Definition:</b> <a href="coordinator_8h_source.html#l00255">coordinator.h:255</a></div></div>
<div class="ttc" id="classimpala_1_1DiskIoMgr_1_1BufferDescriptor_html_aae839241cba91ebc6774fc4e2bc384e0"><div class="ttname"><a href="classimpala_1_1DiskIoMgr_1_1BufferDescriptor.html#aae839241cba91ebc6774fc4e2bc384e0">impala::DiskIoMgr::BufferDescriptor::buffer_len</a></div><div class="ttdeci">int64_t buffer_len()</div><div class="ttdef"><b>Definition:</b> <a href="disk-io-mgr_8h_source.html#l00200">disk-io-mgr.h:200</a></div></div>
<div class="ttc" id="partitioning-throughput-test_8cc_html_ad172ecfd5c31c5df6282c2b4bc322bf7"><div class="ttname"><a href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a></div><div class="ttdeci">uint8_t offset[7 *64-sizeof(uint64_t)]</div><div class="ttdef"><b>Definition:</b> <a href="partitioning-throughput-test_8cc_source.html#l00037">partitioning-throughput-test.cc:37</a></div></div>
<div class="ttc" id="names_8h_html"><div class="ttname"><a href="names_8h.html">names.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_a602415d7e138ddbd21dbccb0c7689543"><div class="ttname"><a href="classimpala_1_1RowBatch.html#a602415d7e138ddbd21dbccb0c7689543">impala::RowBatch::MaxTupleBufferSize</a></div><div class="ttdeci">int MaxTupleBufferSize()</div><div class="ttdoc">Computes the maximum size needed to store tuple data for this row batch. </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00325">row-batch.cc:325</a></div></div>
<div class="ttc" id="tuple-row_8h_html"><div class="ttname"><a href="tuple-row_8h.html">tuple-row.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ad2d33305d7a6c7effe46910fc02bcf99"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ad2d33305d7a6c7effe46910fc02bcf99">impala::RowBatch::~RowBatch</a></div><div class="ttdeci">~RowBatch()</div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8cc_source.html#l00137">row-batch.cc:137</a></div></div>
<div class="ttc" id="classimpala_1_1Status_html_a95ba859e42fe93445b340533220836ac"><div class="ttname"><a href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">impala::Status::ok</a></div><div class="ttdeci">bool ok() const </div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00172">status.h:172</a></div></div>
<div class="ttc" id="string-value_8h_html"><div class="ttname"><a href="string-value_8h.html">string-value.h</a></div></div>
<div class="ttc" id="classimpala_1_1RowBatch_html_ae5dbdbb04a9bba3c0c6d375e0013513b"><div class="ttname"><a href="classimpala_1_1RowBatch.html#ae5dbdbb04a9bba3c0c6d375e0013513b">impala::RowBatch::tuple_data_pool_</a></div><div class="ttdeci">boost::scoped_ptr&lt; MemPool &gt; tuple_data_pool_</div><div class="ttdoc">holding (some of the) data referenced by rows </div><div class="ttdef"><b>Definition:</b> <a href="row-batch_8h_source.html#l00253">row-batch.h:253</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_e5d120be6b5e8a44336cbfd013b25604.html">be</a></li><li class="navelem"><a class="el" href="dir_68cf7cafb51a962d5bc4848b83cab0de.html">src</a></li><li class="navelem"><a class="el" href="dir_1ef28ab5153adb64262182d038c65543.html">runtime</a></li><li class="navelem"><a class="el" href="row-batch_8cc.html">row-batch.cc</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:37 for Impala by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>