blob: 45dc2ff04127155c771fb7d7c3920b6c1388246f [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/udf/uda-test.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('uda-test_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">uda-test.cc</div> </div>
</div><!--header-->
<div class="contents">
<a href="uda-test_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 &lt;iostream&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;gtest/gtest.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="logging_8h.html">common/logging.h</a>&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="uda-test-harness_8h.html">udf/uda-test-harness.h</a>&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="test-udas_8h.html">testutil/test-udas.h</a>&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">using</span> std::min;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">using namespace </span>impala;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">using namespace </span>impala_udf;</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;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">//-------------------------------- Count ------------------------------------</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// Example of implementing Count(int_col).</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// The input type is: int</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// The intermediate type is bigint</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// the return type is bigint</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="uda-sample_8h.html#ab0fcda6069e5bbd8fcc92cff662d4eb9"> 34</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> = 0;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="uda-sample_8h.html#af4dbe44a1ba19bdd6c84c94917948848"> 39</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#af4dbe44a1ba19bdd6c84c94917948848">CountUpdate</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// BigIntVal is the same ptr as what was passed to CountInit</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (input.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; ++val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="uda-sample_8h.html#aac8e236fb6db26d075c6c434266c5b53"> 45</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; src, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* dst) {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; dst-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> += src.<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="uda-sample_8h.html#aad20429b2909a2803de721afa4e1cca2"> 49</a></span>&#160;<a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a> <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; val) {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> val;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">//-------------------------------- Count(...) ------------------------------------</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// Example of implementing Count(...)</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">// The input type is: multiple ints</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// The intermediate type is bigint</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// the return type is bigint</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#acf1523935157db15b7f6464199d172ee"> 58</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#acf1523935157db15b7f6464199d172ee">Count2Update</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input1, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input2,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> += (!input1.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input2.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#af09068ff8fcc27ded89219b1f5200558"> 62</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#af09068ff8fcc27ded89219b1f5200558">Count3Update</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input1, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input2,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input3, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> += (!input1.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input2.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input3.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#aaddb5a9af20004ea8e485764baa31617"> 66</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#aaddb5a9af20004ea8e485764baa31617">Count4Update</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input1, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input2,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input3, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1IntVal.html">IntVal</a>&amp; input4, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> += (!input1.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input2.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input3.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> + !input4.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">//-------------------------------- Min(String) ------------------------------------</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// Example of implementing MIN for strings.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// The input type is: STRING</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// The intermediate type is BufferVal</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// the return type is STRING</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// This is a little more sophisticated since the result buffers are reused (it grows</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// to the longest result string).</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structMinState.html"> 78</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structMinState.html">MinState</a> {</div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d"> 79</a></span>&#160; uint8_t* <a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5"> 80</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structMinState.html#a32ce399d1cc9be598a3b1301c9c3192a"> 81</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structMinState.html#a32ce399d1cc9be598a3b1301c9c3192a">buffer_len</a>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structMinState.html#a627c6dc7b07bfd4c1be571d6f9913241"> 83</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structMinState.html#a627c6dc7b07bfd4c1be571d6f9913241">Set</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>&amp; val) {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (buffer_len &lt; val.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>) {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; context-&gt;<a class="code" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14">Free</a>(value);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; value = context-&gt;<a class="code" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate</a>(val.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; buffer_len = val.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; memcpy(value, val.<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>, val.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; len = val.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>;</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;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">// Initialize the MinState scratch space</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a744d476e307b4870856de40715445aff"> 95</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a744d476e307b4870856de40715445aff">MinInit</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>* val) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="structMinState.html">MinState</a>* state = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="structMinState.html">MinState</a>*<span class="keyword">&gt;</span>(*val);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> = NULL;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; state-&gt;<a class="code" href="structMinState.html#a32ce399d1cc9be598a3b1301c9c3192a">buffer_len</a> = 0;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment">// Update the min value, comparing with the current value in MinState</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#adbd27ecd6d54682407a56b6bc4d40153"> 102</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#adbd27ecd6d54682407a56b6bc4d40153">MinUpdate</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>&amp; input, <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>* val) {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (input.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="structMinState.html">MinState</a>* state = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="structMinState.html">MinState</a>*<span class="keyword">&gt;</span>(*val);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> == NULL) {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; state-&gt;<a class="code" href="structMinState.html#a627c6dc7b07bfd4c1be571d6f9913241">Set</a>(context, input);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">int</span> cmp = memcmp(input.<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>, state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>, ::min(input.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a>, state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>));</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (cmp &lt; 0 || (cmp == 0 &amp;&amp; input.<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a> &lt; state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>)) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; state-&gt;<a class="code" href="structMinState.html#a627c6dc7b07bfd4c1be571d6f9913241">Set</a>(context, input);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</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="comment">// Serialize the state into the min string</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a2033d938fe1f64d5dba8773b7182fd8a"> 116</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a> <a class="code" href="uda-test_8cc.html#a2033d938fe1f64d5dba8773b7182fd8a">MinSerialize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>&amp; intermediate) {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="structMinState.html">MinState</a>* state = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="structMinState.html">MinState</a>*<span class="keyword">&gt;</span>(intermediate);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> == NULL) <span class="keywordflow">return</span> intermediate;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Hack to persist the intermediate state&#39;s value without leaking.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// TODO: revisit BufferVal and design a better way to do this</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a> copy_buffer(context, state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; memcpy(copy_buffer.<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>, state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>, state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; context-&gt;<a class="code" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14">Free</a>(state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> = copy_buffer.<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> intermediate;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">// Merge is the same as Update since the serialized format is the raw input format</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a8d8451a93da8292546c8c3d2c0c079f2"> 129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a8d8451a93da8292546c8c3d2c0c079f2">MinMerge</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>&amp; src, <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>* dst) {</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">const</span> <a class="code" href="structMinState.html">MinState</a>* src_state = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="structMinState.html">MinState</a>*<span class="keyword">&gt;</span>(src);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (src_state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> == NULL) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="uda-test_8cc.html#adbd27ecd6d54682407a56b6bc4d40153">MinUpdate</a>(context, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(src_state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>, src_state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>), dst);</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;<span class="comment">// Finalize also just returns the string so is the same as MinSerialize.</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a7aaa44f5d85cc38009e5afe76a068979"> 136</a></span>&#160;<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a> <a class="code" href="uda-test_8cc.html#a7aaa44f5d85cc38009e5afe76a068979">MinFinalize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">BufferVal</a>&amp; val) {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <a class="code" href="structMinState.html">MinState</a>* state = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="structMinState.html">MinState</a>*<span class="keyword">&gt;</span>(val);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a> == NULL) <span class="keywordflow">return</span> StringVal::null();</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a> result = <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(context, state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; memcpy(result.<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>, state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>, state-&gt;<a class="code" href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">len</a>);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; context-&gt;<a class="code" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14">Free</a>(state-&gt;<a class="code" href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">value</a>);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</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;<span class="comment">//----------------------------- Bits after Xor ------------------------------------</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">// Example of a UDA that xors all the input bits and then returns the number of</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// resulting bits that are set. This illustrates where the result and intermediate</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment">// are the same type, but a transformation is still needed in Finialize()</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">// The input type is: double</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment">// The intermediate type is bigint</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">// the return type is bigint</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a2168abd98b23b68658dda28b1a220917"> 152</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a2168abd98b23b68658dda28b1a220917">XorInit</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> = 0;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</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"><a class="line" href="uda-test_8cc.html#ad5098d3702974161cc5a9dbfb86a668f"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#ad5098d3702974161cc5a9dbfb86a668f">XorUpdate</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <span class="keywordtype">double</span>* input, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* val) {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// BigIntVal is the same ptr as what was passed to CountInit</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (input == NULL) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> |= *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int64_t*<span class="keyword">&gt;</span>(input);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div>
<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a61128370750decd1365504c432d7d624"> 163</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a61128370750decd1365504c432d7d624">XorMerge</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; src, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>* dst) {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; dst-&gt;<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> |= src.<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a>;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a7e165066a277a1347d73503399bddb5e"> 167</a></span>&#160;<a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a> <a class="code" href="uda-test_8cc.html#a7e165066a277a1347d73503399bddb5e">XorFinalize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; val) {</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; int64_t set_bits = 0;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// Do popcnt on val</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// set_bits = popcnt(val.val);</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(set_bits);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;}</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment">//--------------------------- HLL(Distinct Estimate) ---------------------------------</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// Example of implementing distinct estimate. As an example, we will compress the</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">// intermediate buffer.</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment">// Note: this is not the actual algorithm but a sketch of how it would be implemented</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">// with the UDA interface.</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment">// The input type is: bigint</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">// The intermediate type is string (fixed at 256 bytes)</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">// the return type is bigint</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a8a4a01c71e373d8b022ecf0e6391f7c2"> 182</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a8a4a01c71e373d8b022ecf0e6391f7c2">DistinctEstimateInit</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>* val) {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// Since this is known, this will be allocated to 256 bytes.</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; assert(val-&gt;<a class="code" href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">len</a> == 256);</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; memset(val-&gt;<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>, 0, 256);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a16310a496415ded392781075f1e65db1"> 188</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a16310a496415ded392781075f1e65db1">DistinctEstimatUpdate</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context,</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> int64_t* input, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>* val) {</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (input == NULL) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 256; ++i) {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">int</span> <a class="code" href="namespaceimpala.html#a50b59c9628eedf49aa82643ce601967d">hash</a> = 0;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// Hash(input) with the ith hash function</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// hash = Hash(*input, i);</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; val-&gt;<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>[i] = <a class="code" href="namespaceimpala.html#a50b59c9628eedf49aa82643ce601967d">hash</a>;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#ae3cd5283a0864207693eaaf626231663"> 199</a></span>&#160;<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a> <a class="code" href="uda-test_8cc.html#ae3cd5283a0864207693eaaf626231663">DistinctEstimatSerialize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context,</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>&amp; intermediate) {</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">int</span> compressed_size = 0;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; uint8_t* result = NULL; <span class="comment">// SnappyCompress(intermediate.ptr, intermediate.len);</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(result, 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"><a class="line" href="uda-test_8cc.html#a3ca0ef19528e489b8bba6638ea359de4"> 206</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="uda-test_8cc.html#a3ca0ef19528e489b8bba6638ea359de4">DistinctEstimateMerge</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>&amp; src, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>* dst) {</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; uint8_t* src_uncompressed = NULL; <span class="comment">// SnappyUncompress(src.ptr, src.len);</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 256; ++i) {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; dst-&gt;<a class="code" href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">ptr</a>[i] ^= src_uncompressed[i];</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"> 211</span>&#160;}</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a26b5a7208e27e2f591d5f9a815d437b0"> 213</a></span>&#160;<a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a> <a class="code" href="uda-test_8cc.html#a26b5a7208e27e2f591d5f9a815d437b0">DistinctEstimateFinalize</a>(<a class="code" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>* context, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>&amp; val) {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; int64_t set_bits = 0;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// Do popcnt on val</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// set_bits = popcnt(val.val);</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(set_bits);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a1d3019b838ef4683cf4f0d686affe81d"> 220</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountTest, Basic) {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness.html">UdaTestHarness&lt;BigIntVal, BigIntVal, IntVal&gt;</a> test(</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>, <a class="code" href="uda-test_8cc.html#af4dbe44a1ba19bdd6c84c94917948848">CountUpdate</a>, <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>, NULL, <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>);</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; vector&lt;IntVal&gt; no_nulls;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; no_nulls.resize(1000);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(no_nulls.size()))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; EXPECT_FALSE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(100))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#ab6be67cdb8f1a7e92bde66c2a3ee23ee"> 230</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountMultiArgTest, Basic) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">int</span> num = 1000;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; vector&lt;IntVal&gt; no_nulls;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; no_nulls.resize(num);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness2.html">UdaTestHarness2&lt;BigIntVal, BigIntVal, IntVal, IntVal&gt;</a> test2(</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>, <a class="code" href="uda-test_8cc.html#acf1523935157db15b7f6464199d172ee">Count2Update</a>, <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>, NULL, <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; EXPECT_TRUE(test2.<a class="code" href="classimpala__udf_1_1UdaTestHarness2.html#a5eb650d5dd1d062e00df419f56652f8b">Execute</a>(no_nulls, no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(2 * num)));</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; EXPECT_FALSE(test2.<a class="code" href="classimpala__udf_1_1UdaTestHarness2.html#a5eb650d5dd1d062e00df419f56652f8b">Execute</a>(no_nulls, no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(100)));</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness3.html">UdaTestHarness3&lt;BigIntVal, BigIntVal, IntVal, IntVal, IntVal&gt;</a> test3(</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>, <a class="code" href="uda-test_8cc.html#af09068ff8fcc27ded89219b1f5200558">Count3Update</a>, <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>, NULL, <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; EXPECT_TRUE(test3.Execute(no_nulls, no_nulls, no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(3 * num)));</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness4.html">UdaTestHarness4&lt;BigIntVal, BigIntVal, IntVal, IntVal, IntVal, IntVal&gt;</a> test4(</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>, <a class="code" href="uda-test_8cc.html#aaddb5a9af20004ea8e485764baa31617">Count4Update</a>, <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>, NULL, <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; EXPECT_TRUE(test4.Execute(no_nulls, no_nulls, no_nulls, no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(4 * num)));</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;}</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a5b1f35e37e60beccf42d75110136db62"> 249</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="uda-test_8cc.html#a5b1f35e37e60beccf42d75110136db62">FuzzyCompare</a>(<span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; r1, <span class="keyword">const</span> <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>&amp; r2) {</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span> (r1.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> &amp;&amp; r2.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (r1.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a> || r2.<a class="code" href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">is_null</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceimpala.html#abaeeda294914ca7f70295114a506f686">abs</a>(r1.<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a> - r2.<a class="code" href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">val</a>) &lt;= 1;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div>
<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a21599c387804d2d8eec01b8ed6a6a08a"> 255</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountTest, FuzzyEquals) {</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness.html">UdaTestHarness&lt;BigIntVal, BigIntVal, IntVal&gt;</a> test(</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a>, <a class="code" href="uda-test_8cc.html#af4dbe44a1ba19bdd6c84c94917948848">CountUpdate</a>, <a class="code" href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a>, NULL, <a class="code" href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a>);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; vector&lt;IntVal&gt; no_nulls;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; no_nulls.resize(1000);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(1000))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; EXPECT_FALSE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(999))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</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"> 264</span>&#160; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#aa6db12bf6e1790c486800bcfd10a7e7b">SetResultComparator</a>(<a class="code" href="uda-test_8cc.html#a5b1f35e37e60beccf42d75110136db62">FuzzyCompare</a>);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(1000))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(999))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; EXPECT_FALSE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(no_nulls, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(998))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;}</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"><a class="line" href="uda-test_8cc.html#af960946f977e1076075f3afe1ecbdfba"> 270</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(MinTest, Basic) {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness.html">UdaTestHarness&lt;StringVal, BufferVal, StringVal&gt;</a> test(</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="uda-test_8cc.html#a744d476e307b4870856de40715445aff">MinInit</a>, <a class="code" href="uda-test_8cc.html#adbd27ecd6d54682407a56b6bc4d40153">MinUpdate</a>, <a class="code" href="uda-test_8cc.html#a8d8451a93da8292546c8c3d2c0c079f2">MinMerge</a>, <a class="code" href="uda-test_8cc.html#a2033d938fe1f64d5dba8773b7182fd8a">MinSerialize</a>, <a class="code" href="uda-test_8cc.html#a7aaa44f5d85cc38009e5afe76a068979">MinFinalize</a>);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a9b37227a3ff36c97bb077607e4e594ac">SetIntermediateSize</a>(<span class="keyword">sizeof</span>(<a class="code" href="structMinState.html">MinState</a>));</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; vector&lt;StringVal&gt; values;</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;BBB&quot;</span>));</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;BBB&quot;</span>))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;AA&quot;</span>));</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;AA&quot;</span>))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</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; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;CCC&quot;</span>));</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;AA&quot;</span>))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;ABCDEF&quot;</span>));</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;AABCDEF&quot;</span>));</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;A&quot;</span>));</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;A&quot;</span>))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; values.clear();</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; values.push_back(StringVal::null());</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, StringVal::null())) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; values.push_back(<a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;ZZZ&quot;</span>));</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(values, <a class="code" href="structimpala__udf_1_1StringVal.html">StringVal</a>(<span class="stringliteral">&quot;ZZZ&quot;</span>))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div>
<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a29a729488dd088a28cede58caea00e36"> 298</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(<a class="code" href="test-udfs_8cc.html#a56b308579445eacf89af16aa8f802756">MemTest</a>, Basic) {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness.html">UdaTestHarness&lt;BigIntVal, BigIntVal, BigIntVal&gt;</a> test(</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; ::<a class="code" href="test-udas_8cc.html#ae5272f4ad3e412300dd2157435a0fd55">MemTestInit</a>, ::<a class="code" href="test-udas_8cc.html#ab7c10d7bf4e07f0f4b140c122e4e2546">MemTestUpdate</a>, ::<a class="code" href="test-udas_8cc.html#a1c2ef46125acda9e46416f360c8300fc">MemTestMerge</a>, ::<a class="code" href="test-udas_8cc.html#a3c3417e0391bc3c1235ac4677b0f50bb">MemTestSerialize</a>,</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; ::<a class="code" href="test-udas_8cc.html#a6afc9cad8f5f03841579c466e4a42f05">MemTestFinalize</a>);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; vector&lt;BigIntVal&gt; input;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; ++i) {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; input.push_back(10);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; EXPECT_TRUE(test.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(input, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(100))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classimpala__udf_1_1UdaTestHarness.html">UdaTestHarness&lt;BigIntVal, BigIntVal, BigIntVal&gt;</a> test_leak(</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; ::<a class="code" href="test-udas_8cc.html#ae5272f4ad3e412300dd2157435a0fd55">MemTestInit</a>, ::<a class="code" href="test-udas_8cc.html#ab7c10d7bf4e07f0f4b140c122e4e2546">MemTestUpdate</a>, ::<a class="code" href="test-udas_8cc.html#a1c2ef46125acda9e46416f360c8300fc">MemTestMerge</a>, NULL, ::<a class="code" href="test-udas_8cc.html#a6afc9cad8f5f03841579c466e4a42f05">MemTestFinalize</a>);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; EXPECT_FALSE(test_leak.<a class="code" href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">Execute</a>(input, <a class="code" href="structimpala__udf_1_1BigIntVal.html">BigIntVal</a>(100))) &lt;&lt; test.<a class="code" href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">GetErrorMsg</a>();</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="uda-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627"> 313</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="uda-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv) {</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="namespaceimpala.html#a44091ad1c579aa4b84c1f7d7d3f1dfe0">impala::InitGoogleLoggingSafe</a>(argv[0]);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; ::testing::InitGoogleTest(&amp;argc, argv);</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> RUN_ALL_TESTS();</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;}</div>
<div class="ttc" id="test-udfs_8cc_html_a56b308579445eacf89af16aa8f802756"><div class="ttname"><a href="test-udfs_8cc.html#a56b308579445eacf89af16aa8f802756">MemTest</a></div><div class="ttdeci">BigIntVal MemTest(FunctionContext *context, const BigIntVal &amp;bytes)</div><div class="ttdef"><b>Definition:</b> <a href="test-udfs_8cc_source.html#l00260">test-udfs.cc:260</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarnessBase_html_aa6db12bf6e1790c486800bcfd10a7e7b"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarnessBase.html#aa6db12bf6e1790c486800bcfd10a7e7b">impala_udf::UdaTestHarnessBase::SetResultComparator</a></div><div class="ttdeci">void SetResultComparator(ResultComparator fn)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00057">uda-test-harness.h:57</a></div></div>
<div class="ttc" id="test-udas_8cc_html_a3c3417e0391bc3c1235ac4677b0f50bb"><div class="ttname"><a href="test-udas_8cc.html#a3c3417e0391bc3c1235ac4677b0f50bb">MemTestSerialize</a></div><div class="ttdeci">const BigIntVal MemTestSerialize(FunctionContext *context, const BigIntVal &amp;total)</div><div class="ttdef"><b>Definition:</b> <a href="test-udas_8cc_source.html#l00083">test-udas.cc:83</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a61128370750decd1365504c432d7d624"><div class="ttname"><a href="uda-test_8cc.html#a61128370750decd1365504c432d7d624">XorMerge</a></div><div class="ttdeci">void XorMerge(FunctionContext *context, const BigIntVal &amp;src, BigIntVal *dst)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00163">uda-test.cc:163</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a26b5a7208e27e2f591d5f9a815d437b0"><div class="ttname"><a href="uda-test_8cc.html#a26b5a7208e27e2f591d5f9a815d437b0">DistinctEstimateFinalize</a></div><div class="ttdeci">BigIntVal DistinctEstimateFinalize(FunctionContext *context, const StringVal &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00213">uda-test.cc:213</a></div></div>
<div class="ttc" id="test-udas_8cc_html_a6afc9cad8f5f03841579c466e4a42f05"><div class="ttname"><a href="test-udas_8cc.html#a6afc9cad8f5f03841579c466e4a42f05">MemTestFinalize</a></div><div class="ttdeci">BigIntVal MemTestFinalize(FunctionContext *context, const BigIntVal &amp;total)</div><div class="ttdef"><b>Definition:</b> <a href="test-udas_8cc_source.html#l00089">test-udas.cc:89</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarnessBase_html_a9b37227a3ff36c97bb077607e4e594ac"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarnessBase.html#a9b37227a3ff36c97bb077607e4e594ac">impala_udf::UdaTestHarnessBase::SetIntermediateSize</a></div><div class="ttdeci">void SetIntermediateSize(int byte_size)</div><div class="ttdoc">This must be called if the INTERMEDIATE is TYPE_FIXED_BUFFER. </div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00062">uda-test-harness.h:62</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarness2_html_a5eb650d5dd1d062e00df419f56652f8b"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness2.html#a5eb650d5dd1d062e00df419f56652f8b">impala_udf::UdaTestHarness2::Execute</a></div><div class="ttdeci">bool Execute(const std::vector&lt; INPUT1 &gt; &amp;values1, const std::vector&lt; INPUT2 &gt; &amp;values2, const RESULT &amp;expected, UdaExecutionMode mode=ALL)</div><div class="ttdoc">Runs the UDA in all the modes, validating the result is &#39;expected&#39; each time. </div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness-impl_8h_source.html#l00349">uda-test-harness-impl.h:349</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a3ca0ef19528e489b8bba6638ea359de4"><div class="ttname"><a href="uda-test_8cc.html#a3ca0ef19528e489b8bba6638ea359de4">DistinctEstimateMerge</a></div><div class="ttdeci">void DistinctEstimateMerge(FunctionContext *context, const StringVal &amp;src, StringVal *dst)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00206">uda-test.cc:206</a></div></div>
<div class="ttc" id="uda-test_8cc_html_aad20429b2909a2803de721afa4e1cca2"><div class="ttname"><a href="uda-test_8cc.html#aad20429b2909a2803de721afa4e1cca2">CountFinalize</a></div><div class="ttdeci">BigIntVal CountFinalize(FunctionContext *context, const BigIntVal &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00049">uda-test.cc:49</a></div></div>
<div class="ttc" id="uda-test_8cc_html_af4dbe44a1ba19bdd6c84c94917948848"><div class="ttname"><a href="uda-test_8cc.html#af4dbe44a1ba19bdd6c84c94917948848">CountUpdate</a></div><div class="ttdeci">void CountUpdate(FunctionContext *context, const IntVal &amp;input, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00039">uda-test.cc:39</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a744d476e307b4870856de40715445aff"><div class="ttname"><a href="uda-test_8cc.html#a744d476e307b4870856de40715445aff">MinInit</a></div><div class="ttdeci">void MinInit(FunctionContext *context, BufferVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00095">uda-test.cc:95</a></div></div>
<div class="ttc" id="namespaceimpala_html_abaeeda294914ca7f70295114a506f686"><div class="ttname"><a href="namespaceimpala.html#abaeeda294914ca7f70295114a506f686">impala::abs</a></div><div class="ttdeci">int128_t abs(const int128_t &amp;x)</div><div class="ttdef"><b>Definition:</b> <a href="multi-precision_8h_source.html#l00113">multi-precision.h:113</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a8a4a01c71e373d8b022ecf0e6391f7c2"><div class="ttname"><a href="uda-test_8cc.html#a8a4a01c71e373d8b022ecf0e6391f7c2">DistinctEstimateInit</a></div><div class="ttdeci">void DistinctEstimateInit(FunctionContext *context, StringVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00182">uda-test.cc:182</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="uda-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00313">uda-test.cc:313</a></div></div>
<div class="ttc" id="test-udas_8cc_html_ae5272f4ad3e412300dd2157435a0fd55"><div class="ttname"><a href="test-udas_8cc.html#ae5272f4ad3e412300dd2157435a0fd55">MemTestInit</a></div><div class="ttdeci">void MemTestInit(FunctionContext *, BigIntVal *total)</div><div class="ttdef"><b>Definition:</b> <a href="test-udas_8cc_source.html#l00063">test-udas.cc:63</a></div></div>
<div class="ttc" id="namespaceimpala_html_a50b59c9628eedf49aa82643ce601967d"><div class="ttname"><a href="namespaceimpala.html#a50b59c9628eedf49aa82643ce601967d">impala::hash</a></div><div class="ttdeci">const StringSearch UrlParser::hash_search &amp; hash</div><div class="ttdef"><b>Definition:</b> <a href="url-parser_8cc_source.html#l00041">url-parser.cc:41</a></div></div>
<div class="ttc" id="namespaceimpala_html_a81e39acff5a125a058cc0c2dc4a125c6"><div class="ttname"><a href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">impala::TEST</a></div><div class="ttdeci">TEST(AtomicTest, Basic)</div><div class="ttdef"><b>Definition:</b> <a href="atomic-test_8cc_source.html#l00028">atomic-test.cc:28</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a7e165066a277a1347d73503399bddb5e"><div class="ttname"><a href="uda-test_8cc.html#a7e165066a277a1347d73503399bddb5e">XorFinalize</a></div><div class="ttdeci">BigIntVal XorFinalize(FunctionContext *context, const BigIntVal &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00167">uda-test.cc:167</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarness4_html"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness4.html">impala_udf::UdaTestHarness4</a></div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00251">uda-test-harness.h:251</a></div></div>
<div class="ttc" id="logging_8h_html"><div class="ttname"><a href="logging_8h.html">logging.h</a></div></div>
<div class="ttc" id="uda-test_8cc_html_ae3cd5283a0864207693eaaf626231663"><div class="ttname"><a href="uda-test_8cc.html#ae3cd5283a0864207693eaaf626231663">DistinctEstimatSerialize</a></div><div class="ttdeci">StringVal DistinctEstimatSerialize(FunctionContext *context, const StringVal &amp;intermediate)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00199">uda-test.cc:199</a></div></div>
<div class="ttc" id="namespaceimpala__udf_html_a233587ab404d9304f392b1eda6826ea5"><div class="ttname"><a href="namespaceimpala__udf.html#a233587ab404d9304f392b1eda6826ea5">impala_udf::BufferVal</a></div><div class="ttdeci">uint8_t * BufferVal</div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00600">udf.h:600</a></div></div>
<div class="ttc" id="structimpala__udf_1_1StringVal_html_a1152442079d2471ec396076f37bf6c35"><div class="ttname"><a href="structimpala__udf_1_1StringVal.html#a1152442079d2471ec396076f37bf6c35">impala_udf::StringVal::ptr</a></div><div class="ttdeci">uint8_t * ptr</div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00523">udf.h:523</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a7aaa44f5d85cc38009e5afe76a068979"><div class="ttname"><a href="uda-test_8cc.html#a7aaa44f5d85cc38009e5afe76a068979">MinFinalize</a></div><div class="ttdeci">StringVal MinFinalize(FunctionContext *context, const BufferVal &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00136">uda-test.cc:136</a></div></div>
<div class="ttc" id="test-udas_8cc_html_a1c2ef46125acda9e46416f360c8300fc"><div class="ttname"><a href="test-udas_8cc.html#a1c2ef46125acda9e46416f360c8300fc">MemTestMerge</a></div><div class="ttdeci">void MemTestMerge(FunctionContext *context, const BigIntVal &amp;src, BigIntVal *dst)</div><div class="ttdef"><b>Definition:</b> <a href="test-udas_8cc_source.html#l00073">test-udas.cc:73</a></div></div>
<div class="ttc" id="classimpala__udf_1_1FunctionContext_html"><div class="ttname"><a href="classimpala__udf_1_1FunctionContext.html">impala_udf::FunctionContext</a></div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00047">udf.h:47</a></div></div>
<div class="ttc" id="structimpala__udf_1_1AnyVal_html_aded62c6b250c62814c94271856b06cbe"><div class="ttname"><a href="structimpala__udf_1_1AnyVal.html#aded62c6b250c62814c94271856b06cbe">impala_udf::AnyVal::is_null</a></div><div class="ttdeci">bool is_null</div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00359">udf.h:359</a></div></div>
<div class="ttc" id="structMinState_html_a850c2d736bde22c610b7eb330bf247b5"><div class="ttname"><a href="structMinState.html#a850c2d736bde22c610b7eb330bf247b5">MinState::len</a></div><div class="ttdeci">int len</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00080">uda-test.cc:80</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a5b1f35e37e60beccf42d75110136db62"><div class="ttname"><a href="uda-test_8cc.html#a5b1f35e37e60beccf42d75110136db62">FuzzyCompare</a></div><div class="ttdeci">bool FuzzyCompare(const BigIntVal &amp;r1, const BigIntVal &amp;r2)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00249">uda-test.cc:249</a></div></div>
<div class="ttc" id="namespaceimpala_html_a44091ad1c579aa4b84c1f7d7d3f1dfe0"><div class="ttname"><a href="namespaceimpala.html#a44091ad1c579aa4b84c1f7d7d3f1dfe0">impala::InitGoogleLoggingSafe</a></div><div class="ttdeci">void InitGoogleLoggingSafe(const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="logging_8cc_source.html#l00055">logging.cc:55</a></div></div>
<div class="ttc" id="structMinState_html_a627c6dc7b07bfd4c1be571d6f9913241"><div class="ttname"><a href="structMinState.html#a627c6dc7b07bfd4c1be571d6f9913241">MinState::Set</a></div><div class="ttdeci">void Set(FunctionContext *context, const StringVal &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00083">uda-test.cc:83</a></div></div>
<div class="ttc" id="structMinState_html"><div class="ttname"><a href="structMinState.html">MinState</a></div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00078">uda-test.cc:78</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarness3_html"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness3.html">impala_udf::UdaTestHarness3</a></div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00217">uda-test-harness.h:217</a></div></div>
<div class="ttc" id="test-udas_8h_html"><div class="ttname"><a href="test-udas_8h.html">test-udas.h</a></div></div>
<div class="ttc" id="classimpala__udf_1_1FunctionContext_html_a14904de2d63cac14b1a1ef09b0653a14"><div class="ttname"><a href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14">impala_udf::FunctionContext::Free</a></div><div class="ttdeci">void Free(uint8_t *buffer)</div><div class="ttdoc">Frees a buffer returned from Allocate() or Reallocate() </div><div class="ttdef"><b>Definition:</b> <a href="udf_8cc_source.html#l00291">udf.cc:291</a></div></div>
<div class="ttc" id="structimpala__udf_1_1BigIntVal_html_a8abd150f41ae695ad81c16eca21c1031"><div class="ttname"><a href="structimpala__udf_1_1BigIntVal.html#a8abd150f41ae695ad81c16eca21c1031">impala_udf::BigIntVal::val</a></div><div class="ttdeci">int64_t val</div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00440">udf.h:440</a></div></div>
<div class="ttc" id="structimpala__udf_1_1StringVal_html"><div class="ttname"><a href="structimpala__udf_1_1StringVal.html">impala_udf::StringVal</a></div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00521">udf.h:521</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a2033d938fe1f64d5dba8773b7182fd8a"><div class="ttname"><a href="uda-test_8cc.html#a2033d938fe1f64d5dba8773b7182fd8a">MinSerialize</a></div><div class="ttdeci">const BufferVal MinSerialize(FunctionContext *context, const BufferVal &amp;intermediate)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00116">uda-test.cc:116</a></div></div>
<div class="ttc" id="structimpala__udf_1_1IntVal_html"><div class="ttname"><a href="structimpala__udf_1_1IntVal.html">impala_udf::IntVal</a></div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00420">udf.h:420</a></div></div>
<div class="ttc" id="uda-test_8cc_html_af09068ff8fcc27ded89219b1f5200558"><div class="ttname"><a href="uda-test_8cc.html#af09068ff8fcc27ded89219b1f5200558">Count3Update</a></div><div class="ttdeci">void Count3Update(FunctionContext *context, const IntVal &amp;input1, const IntVal &amp;input2, const IntVal &amp;input3, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00062">uda-test.cc:62</a></div></div>
<div class="ttc" id="uda-test_8cc_html_ab0fcda6069e5bbd8fcc92cff662d4eb9"><div class="ttname"><a href="uda-test_8cc.html#ab0fcda6069e5bbd8fcc92cff662d4eb9">CountInit</a></div><div class="ttdeci">void CountInit(FunctionContext *context, BigIntVal *val)</div><div class="ttdoc">This is an example of the COUNT aggregate function. </div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00034">uda-test.cc:34</a></div></div>
<div class="ttc" id="uda-test_8cc_html_adbd27ecd6d54682407a56b6bc4d40153"><div class="ttname"><a href="uda-test_8cc.html#adbd27ecd6d54682407a56b6bc4d40153">MinUpdate</a></div><div class="ttdeci">void MinUpdate(FunctionContext *context, const StringVal &amp;input, BufferVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00102">uda-test.cc:102</a></div></div>
<div class="ttc" id="uda-test_8cc_html_ad5098d3702974161cc5a9dbfb86a668f"><div class="ttname"><a href="uda-test_8cc.html#ad5098d3702974161cc5a9dbfb86a668f">XorUpdate</a></div><div class="ttdeci">void XorUpdate(FunctionContext *context, const double *input, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00157">uda-test.cc:157</a></div></div>
<div class="ttc" id="classimpala__udf_1_1FunctionContext_html_a24a7e63aa708e54ea3c8c9572a00ede2"><div class="ttname"><a href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">impala_udf::FunctionContext::Allocate</a></div><div class="ttdeci">uint8_t * Allocate(int byte_size)</div><div class="ttdef"><b>Definition:</b> <a href="udf_8cc_source.html#l00262">udf.cc:262</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarness_html_af5fac42094b6a9740adc4ea77d35d763"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness.html#af5fac42094b6a9740adc4ea77d35d763">impala_udf::UdaTestHarness::Execute</a></div><div class="ttdeci">bool Execute(const std::vector&lt; INPUT &gt; &amp;values, const RESULT &amp;expected, UdaExecutionMode mode=ALL)</div><div class="ttdoc">Runs the UDA in all the modes, validating the result is &#39;expected&#39; each time. </div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness-impl_8h_source.html#l00330">uda-test-harness-impl.h:330</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a2168abd98b23b68658dda28b1a220917"><div class="ttname"><a href="uda-test_8cc.html#a2168abd98b23b68658dda28b1a220917">XorInit</a></div><div class="ttdeci">void XorInit(FunctionContext *context, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00152">uda-test.cc:152</a></div></div>
<div class="ttc" id="uda-test_8cc_html_aac8e236fb6db26d075c6c434266c5b53"><div class="ttname"><a href="uda-test_8cc.html#aac8e236fb6db26d075c6c434266c5b53">CountMerge</a></div><div class="ttdeci">void CountMerge(FunctionContext *context, const BigIntVal &amp;src, BigIntVal *dst)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00045">uda-test.cc:45</a></div></div>
<div class="ttc" id="structimpala__udf_1_1BigIntVal_html"><div class="ttname"><a href="structimpala__udf_1_1BigIntVal.html">impala_udf::BigIntVal</a></div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00439">udf.h:439</a></div></div>
<div class="ttc" id="uda-test_8cc_html_aaddb5a9af20004ea8e485764baa31617"><div class="ttname"><a href="uda-test_8cc.html#aaddb5a9af20004ea8e485764baa31617">Count4Update</a></div><div class="ttdeci">void Count4Update(FunctionContext *context, const IntVal &amp;input1, const IntVal &amp;input2, const IntVal &amp;input3, const IntVal &amp;input4, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00066">uda-test.cc:66</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a16310a496415ded392781075f1e65db1"><div class="ttname"><a href="uda-test_8cc.html#a16310a496415ded392781075f1e65db1">DistinctEstimatUpdate</a></div><div class="ttdeci">void DistinctEstimatUpdate(FunctionContext *context, const int64_t *input, StringVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00188">uda-test.cc:188</a></div></div>
<div class="ttc" id="uda-test-harness_8h_html"><div class="ttname"><a href="uda-test-harness_8h.html">uda-test-harness.h</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__udf_1_1UdaTestHarness_html"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness.html">impala_udf::UdaTestHarness</a></div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00141">uda-test-harness.h:141</a></div></div>
<div class="ttc" id="structMinState_html_a21fd27297fef5d35161ea019a89d574d"><div class="ttname"><a href="structMinState.html#a21fd27297fef5d35161ea019a89d574d">MinState::value</a></div><div class="ttdeci">uint8_t * value</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00079">uda-test.cc:79</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarnessBase_html_a3a7419462c0f53dd357c4280fac4cbea"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarnessBase.html#a3a7419462c0f53dd357c4280fac4cbea">impala_udf::UdaTestHarnessBase::GetErrorMsg</a></div><div class="ttdeci">const std::string &amp; GetErrorMsg() const </div><div class="ttdoc">Returns the failure string if any. </div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00067">uda-test-harness.h:67</a></div></div>
<div class="ttc" id="structimpala__udf_1_1StringVal_html_a72a872d5acebca872db6bd37eb4ae184"><div class="ttname"><a href="structimpala__udf_1_1StringVal.html#a72a872d5acebca872db6bd37eb4ae184">impala_udf::StringVal::len</a></div><div class="ttdeci">int len</div><div class="ttdef"><b>Definition:</b> <a href="udf_8h_source.html#l00522">udf.h:522</a></div></div>
<div class="ttc" id="test-udas_8cc_html_ab7c10d7bf4e07f0f4b140c122e4e2546"><div class="ttname"><a href="test-udas_8cc.html#ab7c10d7bf4e07f0f4b140c122e4e2546">MemTestUpdate</a></div><div class="ttdeci">void MemTestUpdate(FunctionContext *context, const BigIntVal &amp;bytes, BigIntVal *total)</div><div class="ttdef"><b>Definition:</b> <a href="test-udas_8cc_source.html#l00067">test-udas.cc:67</a></div></div>
<div class="ttc" id="uda-test_8cc_html_acf1523935157db15b7f6464199d172ee"><div class="ttname"><a href="uda-test_8cc.html#acf1523935157db15b7f6464199d172ee">Count2Update</a></div><div class="ttdeci">void Count2Update(FunctionContext *context, const IntVal &amp;input1, const IntVal &amp;input2, BigIntVal *val)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00058">uda-test.cc:58</a></div></div>
<div class="ttc" id="uda-test_8cc_html_a8d8451a93da8292546c8c3d2c0c079f2"><div class="ttname"><a href="uda-test_8cc.html#a8d8451a93da8292546c8c3d2c0c079f2">MinMerge</a></div><div class="ttdeci">void MinMerge(FunctionContext *context, const BufferVal &amp;src, BufferVal *dst)</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00129">uda-test.cc:129</a></div></div>
<div class="ttc" id="structMinState_html_a32ce399d1cc9be598a3b1301c9c3192a"><div class="ttname"><a href="structMinState.html#a32ce399d1cc9be598a3b1301c9c3192a">MinState::buffer_len</a></div><div class="ttdeci">int buffer_len</div><div class="ttdef"><b>Definition:</b> <a href="uda-test_8cc_source.html#l00081">uda-test.cc:81</a></div></div>
<div class="ttc" id="classimpala__udf_1_1UdaTestHarness2_html"><div class="ttname"><a href="classimpala__udf_1_1UdaTestHarness2.html">impala_udf::UdaTestHarness2</a></div><div class="ttdef"><b>Definition:</b> <a href="uda-test-harness_8h_source.html#l00185">uda-test-harness.h:185</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_4f43bed77f871f0a9a7226f20fb741d9.html">udf</a></li><li class="navelem"><a class="el" href="uda-test_8cc.html">uda-test.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>