blob: f3fa7ea93381e65fca2f5416c7ce82e94d9e2bc1 [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: impala_udf::FunctionContext Class Reference</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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><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="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#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('classimpala__udf_1_1FunctionContext.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="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classimpala__udf_1_1FunctionContext-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">impala_udf::FunctionContext Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="udf_8h_source.html">udf.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for impala_udf::FunctionContext:</div>
<div class="dyncontent">
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="classimpala__udf_1_1FunctionContext__coll__graph.svg" width="100%" height="600"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">TypeDesc</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structimpala__udf_1_1FunctionContext_1_1UniqueId.html">UniqueId</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a3c69e8ce595c0d4ce2fd855f8341ca21"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21">ImpalaVersion</a> { <a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21a5da9e299f601cbcf738084ab1b6e0104">v1_2</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21ab8c09e4752b4544d3fc09daad0ee66c9">v1_3</a>
}</td></tr>
<tr class="separator:a3c69e8ce595c0d4ce2fd855f8341ca21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0802c4491e244b8b13d4ff8461e960ff"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ff">Type</a> { <br/>
&#160;&#160;<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa0ae5579bad9b0b270596a4c4d0c50c87">INVALID_TYPE</a> = 0,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa99465ed01e7e93ae2e9b184a482817ab">TYPE_NULL</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa5d5a0dcee4b5cc71652d0abd9c895bb1">TYPE_BOOLEAN</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffab1528e8b9605961587c97b4073c8e381">TYPE_TINYINT</a>,
<br/>
&#160;&#160;<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa46b8f76a2941f7f0c8cdb577d1dc7e39">TYPE_SMALLINT</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa41d0b2855fa8cb44f33d0a6376054c91">TYPE_INT</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa539b0dc809124932f3a0ec805d9efcd0">TYPE_BIGINT</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa804ffef4c305ea36acdf4c6e732f28ea">TYPE_FLOAT</a>,
<br/>
&#160;&#160;<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa7b26a1a2475200332732c8189c782795">TYPE_DOUBLE</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffaf0055f98505d09e606b70a0c096f6ce9">TYPE_TIMESTAMP</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffad04b24e07ab4c7fb86cbcd80249bcd55">TYPE_STRING</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffac0f2e9fac69984d2a42b62bc0a4cd7a1">TYPE_FIXED_BUFFER</a>,
<br/>
&#160;&#160;<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ffa1dd85d0dc61480f9f01982790a3819f4">TYPE_DECIMAL</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960fface77e94f08385fdec354f03618663e35">TYPE_VARCHAR</a>
<br/>
}</td></tr>
<tr class="separator:a0802c4491e244b8b13d4ff8461e960ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e9662a1bbb78daa9923b47412347ffc"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">FunctionStateScope</a> { <a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffca4e87124aaecd709eb2822f478f26f964">FRAGMENT_LOCAL</a>,
<a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffca9ad2da787a2eb3ea3af8eebe653c84a5">THREAD_LOCAL</a>
}</td></tr>
<tr class="separator:a1e9662a1bbb78daa9923b47412347ffc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a4ed172014a12fc760fb444eeb9eebecf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21">ImpalaVersion</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a4ed172014a12fc760fb444eeb9eebecf">version</a> () const </td></tr>
<tr class="memdesc:a4ed172014a12fc760fb444eeb9eebecf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the version of Impala that's currently running. <a href="#a4ed172014a12fc760fb444eeb9eebecf">More...</a><br/></td></tr>
<tr class="separator:a4ed172014a12fc760fb444eeb9eebecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eee8c461d5e9bb7d1c22569ff68b899"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a8eee8c461d5e9bb7d1c22569ff68b899">user</a> () const </td></tr>
<tr class="separator:a8eee8c461d5e9bb7d1c22569ff68b899"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a223486a4836bac2ad0bac4cdd283d347"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structimpala__udf_1_1FunctionContext_1_1UniqueId.html">UniqueId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a223486a4836bac2ad0bac4cdd283d347">query_id</a> () const </td></tr>
<tr class="memdesc:a223486a4836bac2ad0bac4cdd283d347"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the query_id for the current query. <a href="#a223486a4836bac2ad0bac4cdd283d347">More...</a><br/></td></tr>
<tr class="separator:a223486a4836bac2ad0bac4cdd283d347"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa29186643c6b873f95e361b74e54a715"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#aa29186643c6b873f95e361b74e54a715">SetError</a> (const char *<a class="el" href="classimpala__udf_1_1FunctionContext.html#a9ad5dd07c98e9f74c52e8436421c1594">error_msg</a>)</td></tr>
<tr class="separator:aa29186643c6b873f95e361b74e54a715"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a228cf1a119cfe039dbfb1646fa2566f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a228cf1a119cfe039dbfb1646fa2566f7">AddWarning</a> (const char *warning_msg)</td></tr>
<tr class="separator:a228cf1a119cfe039dbfb1646fa2566f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac675ff4a1fd6f4e360cca258ac6368e5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#ac675ff4a1fd6f4e360cca258ac6368e5">has_error</a> () const </td></tr>
<tr class="memdesc:ac675ff4a1fd6f4e360cca258ac6368e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if there's been an error set. <a href="#ac675ff4a1fd6f4e360cca258ac6368e5">More...</a><br/></td></tr>
<tr class="separator:ac675ff4a1fd6f4e360cca258ac6368e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ad5dd07c98e9f74c52e8436421c1594"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a9ad5dd07c98e9f74c52e8436421c1594">error_msg</a> () const </td></tr>
<tr class="memdesc:a9ad5dd07c98e9f74c52e8436421c1594"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current error message. Returns NULL if there is no error. <a href="#a9ad5dd07c98e9f74c52e8436421c1594">More...</a><br/></td></tr>
<tr class="separator:a9ad5dd07c98e9f74c52e8436421c1594"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24a7e63aa708e54ea3c8c9572a00ede2"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate</a> (int byte_size)</td></tr>
<tr class="separator:a24a7e63aa708e54ea3c8c9572a00ede2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e07497f8e6e2a9f97c55dc578afcd46"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a3e07497f8e6e2a9f97c55dc578afcd46">Reallocate</a> (uint8_t *ptr, int byte_size)</td></tr>
<tr class="separator:a3e07497f8e6e2a9f97c55dc578afcd46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14904de2d63cac14b1a1ef09b0653a14"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14">Free</a> (uint8_t *buffer)</td></tr>
<tr class="memdesc:a14904de2d63cac14b1a1ef09b0653a14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a buffer returned from <a class="el" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate()</a> or <a class="el" href="classimpala__udf_1_1FunctionContext.html#a3e07497f8e6e2a9f97c55dc578afcd46">Reallocate()</a> <a href="#a14904de2d63cac14b1a1ef09b0653a14">More...</a><br/></td></tr>
<tr class="separator:a14904de2d63cac14b1a1ef09b0653a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aece9636fb109a4e034c311b80de6824c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#aece9636fb109a4e034c311b80de6824c">TrackAllocation</a> (int64_t byte_size)</td></tr>
<tr class="separator:aece9636fb109a4e034c311b80de6824c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41a17bd6e2f3c420d747c2226a1a1de3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a41a17bd6e2f3c420d747c2226a1a1de3">Free</a> (int64_t byte_size)</td></tr>
<tr class="separator:a41a17bd6e2f3c420d747c2226a1a1de3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba396e394b1f685d4453f6afb37959dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#aba396e394b1f685d4453f6afb37959dc">SetFunctionState</a> (<a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">FunctionStateScope</a> scope, void *ptr)</td></tr>
<tr class="separator:aba396e394b1f685d4453f6afb37959dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f06f92e1567f5de30969ec17bea757d"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a9f06f92e1567f5de30969ec17bea757d">GetFunctionState</a> (<a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">FunctionStateScope</a> scope) const </td></tr>
<tr class="separator:a9f06f92e1567f5de30969ec17bea757d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06c1133689e37fcd9fa104c8654b63bb"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">TypeDesc</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a06c1133689e37fcd9fa104c8654b63bb">GetReturnType</a> () const </td></tr>
<tr class="separator:a06c1133689e37fcd9fa104c8654b63bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a151ab1a6388213af923e63d4e1c9a048"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">TypeDesc</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a151ab1a6388213af923e63d4e1c9a048">GetIntermediateType</a> () const </td></tr>
<tr class="separator:a151ab1a6388213af923e63d4e1c9a048"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0eb0e2431b2954c02f1bfe97e5e0769a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a0eb0e2431b2954c02f1bfe97e5e0769a">GetNumArgs</a> () const </td></tr>
<tr class="separator:a0eb0e2431b2954c02f1bfe97e5e0769a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a982cd2abfd09cd038eb51fbc3d89366c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">TypeDesc</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a982cd2abfd09cd038eb51fbc3d89366c">GetArgType</a> (int arg_idx) const </td></tr>
<tr class="separator:a982cd2abfd09cd038eb51fbc3d89366c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad06c7a14658a9a42d5de6e7d01ae136"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#aad06c7a14658a9a42d5de6e7d01ae136">IsArgConstant</a> (int arg_idx) const </td></tr>
<tr class="separator:aad06c7a14658a9a42d5de6e7d01ae136"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80f0af285424f65b0d9f395049f7a75f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structimpala__udf_1_1AnyVal.html">AnyVal</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a80f0af285424f65b0d9f395049f7a75f">GetConstantArg</a> (int arg_idx) const </td></tr>
<tr class="separator:a80f0af285424f65b0d9f395049f7a75f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae700abb05fbec18210b5930aa2efc15a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1FunctionContextImpl.html">impala::FunctionContextImpl</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#ae700abb05fbec18210b5930aa2efc15a">impl</a> ()</td></tr>
<tr class="memdesc:ae700abb05fbec18210b5930aa2efc15a"><td class="mdescLeft">&#160;</td><td class="mdescRight">TODO: Add mechanism for UDAs to update stats similar to runtime profile counters. <a href="#ae700abb05fbec18210b5930aa2efc15a">More...</a><br/></td></tr>
<tr class="separator:ae700abb05fbec18210b5930aa2efc15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0781b66d50075284f26b159e43e1aab"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#af0781b66d50075284f26b159e43e1aab">~FunctionContext</a> ()</td></tr>
<tr class="separator:af0781b66d50075284f26b159e43e1aab"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:acac1d543ef6f4019b1aba63853db67db"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#acac1d543ef6f4019b1aba63853db67db">FunctionContext</a> ()</td></tr>
<tr class="separator:acac1d543ef6f4019b1aba63853db67db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab36068ef369cb32d523ffa84e92b53cb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#ab36068ef369cb32d523ffa84e92b53cb">FunctionContext</a> (const <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> &amp;other)</td></tr>
<tr class="memdesc:ab36068ef369cb32d523ffa84e92b53cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable copy ctor and assignment operator. <a href="#ab36068ef369cb32d523ffa84e92b53cb">More...</a><br/></td></tr>
<tr class="separator:ab36068ef369cb32d523ffa84e92b53cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0eb5d045d3b354ece396e5104dbff0d0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a0eb5d045d3b354ece396e5104dbff0d0">operator=</a> (const <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> &amp;other)</td></tr>
<tr class="separator:a0eb5d045d3b354ece396e5104dbff0d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:ab34d7495d3151d3ff82d5acb66952f91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1FunctionContextImpl.html">impala::FunctionContextImpl</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#ab34d7495d3151d3ff82d5acb66952f91">impl_</a></td></tr>
<tr class="separator:ab34d7495d3151d3ff82d5acb66952f91"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:ac39956e54ea10ada0a665ba7e79a9c72"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala__udf_1_1FunctionContext.html#ac39956e54ea10ada0a665ba7e79a9c72">impala::FunctionContextImpl</a></td></tr>
<tr class="separator:ac39956e54ea10ada0a665ba7e79a9c72"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> is passed to every UDF/UDA and is the interface for the UDF to the rest of the system. It contains APIs to examine the system state, report errors and manage memory. </p>
<p>Definition at line <a class="el" href="udf_8h_source.html#l00047">47</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="a1e9662a1bbb78daa9923b47412347ffc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">impala_udf::FunctionContext::FunctionStateScope</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a1e9662a1bbb78daa9923b47412347ffca4e87124aaecd709eb2822f478f26f964"></a>FRAGMENT_LOCAL</em>&#160;</td><td class="fielddoc">
<p>Indicates that the function state for this <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>'s UDF is shared across the plan fragment (a query is divided into multiple plan fragments, each of which is responsible for a part of the query execution). Within the plan fragment, there may be multiple instances of the UDF executing concurrently with multiple FunctionContexts sharing this state, meaning that the state must be thread-safe. The Prepare() function for the UDF may be called with this scope concurrently on a single host if the UDF will be evaluated in multiple plan fragments on that host. In general, read-only state that doesn't need to be recomputed for every UDF call should be fragment-local. TODO: not yet implemented </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a1e9662a1bbb78daa9923b47412347ffca9ad2da787a2eb3ea3af8eebe653c84a5"></a>THREAD_LOCAL</em>&#160;</td><td class="fielddoc">
<p>Indicates that the function state is local to the execution thread. This state does not need to be thread-safe. However, this state will be initialized (via the Prepare() function) once for every execution thread, so fragment-local state should be used when possible for better performance. In general, inexpensive shared state that is written to by the UDF (e.g. scratch space) should be thread-local. </p>
</td></tr>
</table>
<p>Definition at line <a class="el" href="udf_8h_source.html#l00087">87</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
</div>
</div>
<a class="anchor" id="a3c69e8ce595c0d4ce2fd855f8341ca21"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21">impala_udf::FunctionContext::ImpalaVersion</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a3c69e8ce595c0d4ce2fd855f8341ca21a5da9e299f601cbcf738084ab1b6e0104"></a>v1_2</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a3c69e8ce595c0d4ce2fd855f8341ca21ab8c09e4752b4544d3fc09daad0ee66c9"></a>v1_3</em>&#160;</td><td class="fielddoc">
</td></tr>
</table>
<p>Definition at line <a class="el" href="udf_8h_source.html#l00049">49</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
</div>
</div>
<a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ff"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classimpala__udf_1_1FunctionContext.html#a0802c4491e244b8b13d4ff8461e960ff">impala_udf::FunctionContext::Type</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa0ae5579bad9b0b270596a4c4d0c50c87"></a>INVALID_TYPE</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa99465ed01e7e93ae2e9b184a482817ab"></a>TYPE_NULL</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa5d5a0dcee4b5cc71652d0abd9c895bb1"></a>TYPE_BOOLEAN</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffab1528e8b9605961587c97b4073c8e381"></a>TYPE_TINYINT</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa46b8f76a2941f7f0c8cdb577d1dc7e39"></a>TYPE_SMALLINT</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa41d0b2855fa8cb44f33d0a6376054c91"></a>TYPE_INT</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa539b0dc809124932f3a0ec805d9efcd0"></a>TYPE_BIGINT</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa804ffef4c305ea36acdf4c6e732f28ea"></a>TYPE_FLOAT</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa7b26a1a2475200332732c8189c782795"></a>TYPE_DOUBLE</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffaf0055f98505d09e606b70a0c096f6ce9"></a>TYPE_TIMESTAMP</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffad04b24e07ab4c7fb86cbcd80249bcd55"></a>TYPE_STRING</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffac0f2e9fac69984d2a42b62bc0a4cd7a1"></a>TYPE_FIXED_BUFFER</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960ffa1dd85d0dc61480f9f01982790a3819f4"></a>TYPE_DECIMAL</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0802c4491e244b8b13d4ff8461e960fface77e94f08385fdec354f03618663e35"></a>TYPE_VARCHAR</em>&#160;</td><td class="fielddoc">
</td></tr>
</table>
<p>Definition at line <a class="el" href="udf_8h_source.html#l00054">54</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="af0781b66d50075284f26b159e43e1aab"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">FunctionContext::~FunctionContext </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00159">159</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00170">impala::FunctionContextImpl::closed_</a>, <a class="el" href="udf_8h_source.html#l00214">impl_</a>, and <a class="el" href="udf-internal_8h_source.html#l00112">impala::FunctionContextImpl::pool_</a>.</p>
</div>
</div>
<a class="anchor" id="acac1d543ef6f4019b1aba63853db67db"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">FunctionContext::FunctionContext </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00156">156</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
</div>
</div>
<a class="anchor" id="ab36068ef369cb32d523ffa84e92b53cb"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">impala_udf::FunctionContext::FunctionContext </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> &amp;&#160;</td>
<td class="paramname"><em>other</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Disable copy ctor and assignment operator. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a228cf1a119cfe039dbfb1646fa2566f7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classbool.html">bool</a> FunctionContext::AddWarning </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>warning_msg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds a warning that is returned to the user. This can include things like overflow or other recoverable error conditions. Warnings are capped at a maximum number. Returns true if the warning was added and false if it was ignored due to the cap. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00345">345</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="udf_8cc_source.html#l00111">MAX_WARNINGS</a>.</p>
<p>Referenced by <a class="el" href="udf_8cc_source.html#l00182">impala::FunctionContextImpl::Close()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00298">impala::TimestampFunctions::DateAddSub()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00290">impala::AggregateFunctions::DecimalAvgGetValue()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00074">impala::HiveUdfCall::Evaluate()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00349">impala::TimestampFunctions::FromUtc()</a>, <a class="el" href="string-functions_8cc_source.html#l00491">impala::StringFunctions::ParseUrl()</a>, <a class="el" href="string-functions_8cc_source.html#l00531">impala::StringFunctions::ParseUrlKey()</a>, <a class="el" href="string-functions_8cc_source.html#l00351">impala::StringFunctions::RegexpExtract()</a>, <a class="el" href="string-functions_8cc_source.html#l00384">impala::StringFunctions::RegexpReplace()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00180">impala::TimestampFunctions::ReportBadFormat()</a>, <a class="el" href="test-udfs_8cc_source.html#l00147">TestWarnings()</a>, and <a class="el" href="timestamp-functions_8cc_source.html#l00378">impala::TimestampFunctions::ToUtc()</a>.</p>
</div>
</div>
<a class="anchor" id="a24a7e63aa708e54ea3c8c9572a00ede2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t * FunctionContext::Allocate </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>byte_size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates memory. All UDF/UDAs should use this if possible instead of malloc/new. The UDF/UDA is responsible for calling <a class="el" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14" title="Frees a buffer returned from Allocate() or Reallocate() ">Free()</a> on all buffers returned by <a class="el" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate()</a>. If this Allocate causes the memory limit to be exceeded, the error will be set in this object causing the query to fail. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00262">262</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="logging_8h_source.html#l00059">VLOG_ROW</a>.</p>
<p>Referenced by <a class="el" href="aggregate-functions_8cc_source.html#l00131">impala::AggregateFunctions::AvgInit()</a>, <a class="el" href="test-udfs_8cc_source.html#l00198">ConstantArgPrepare()</a>, <a class="el" href="uda-test-harness-impl_8h_source.html#l00066">impala_udf::UdaTestHarnessUtil::CopyIntermediate()</a>, <a class="el" href="test-udfs_8cc_source.html#l00175">CountPrepare()</a>, <a class="el" href="uda-test-harness-impl_8h_source.html#l00054">impala_udf::UdaTestHarnessUtil::CreateIntermediate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00228">impala::AggregateFunctions::DecimalAvgInit()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00425">impala::UdfBuiltins::ExtractPrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01281">impala::AggregateFunctions::FirstValUpdate()</a>, <a class="el" href="hyperloglog-uda_8cc_source.html#l00036">HllInit()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00998">impala::AggregateFunctions::HllInit()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01237">impala::AggregateFunctions::LastValUpdate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00417">impala::AggregateFunctions::Max()</a>, <a class="el" href="test-udfs_8cc_source.html#l00251">MemTestPrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00405">impala::AggregateFunctions::Min()</a>, <a class="el" href="case-expr_8cc_source.html#l00053">impala::CaseExpr::Open()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00562">impala::AggregateFunctions::PcInit()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01175">impala::AggregateFunctions::RankInit()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00792">impala::AggregateFunctions::ReservoirSampleInit()</a>, <a class="el" href="uda-test_8cc_source.html#l00083">MinState::Set()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00515">impala::AggregateFunctions::StringConcatMerge()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00495">impala::AggregateFunctions::StringConcatUpdate()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00302">impala::UdfBuiltins::TruncPrepare()</a>, <a class="el" href="udf-test_8cc_source.html#l00124">ValidateMem()</a>, <a class="el" href="test-udfs_8cc_source.html#l00228">ValidateOpenPrepare()</a>, and <a class="el" href="udf-test_8cc_source.html#l00144">ValidateSharedStatePrepare()</a>.</p>
</div>
</div>
<a class="anchor" id="a9ad5dd07c98e9f74c52e8436421c1594"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char * FunctionContext::error_msg </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the current error message. Returns NULL if there is no error. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00257">257</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="uda-test-harness-impl_8h_source.html#l00075">impala_udf::UdaTestHarnessBase&lt; RESULT, INTERMEDIATE &gt;::CheckContext()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00148">impala::ScalarFnCall::Open()</a>, <a class="el" href="udf-test-harness_8h_source.html#l00280">impala_udf::UdfTestHarness::ValidateError()</a>, <a class="el" href="udf-test_8cc_source.html#l00115">ValidateFail()</a>, and <a class="el" href="udf-test_8cc_source.html#l00108">ValidateUdf()</a>.</p>
</div>
</div>
<a class="anchor" id="a14904de2d63cac14b1a1ef09b0653a14"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FunctionContext::Free </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>buffer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Frees a buffer returned from <a class="el" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate()</a> or <a class="el" href="classimpala__udf_1_1FunctionContext.html#a3e07497f8e6e2a9f97c55dc578afcd46">Reallocate()</a> </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00291">291</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="logging_8h_source.html#l00059">VLOG_ROW</a>.</p>
<p>Referenced by <a class="el" href="aggregate-functions_8cc_source.html#l00981">impala::AggregateFunctions::AppxMedianFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00177">impala::AggregateFunctions::AvgFinalize()</a>, <a class="el" href="case-expr_8cc_source.html#l00070">impala::CaseExpr::Close()</a>, <a class="el" href="udf_8cc_source.html#l00182">impala::FunctionContextImpl::Close()</a>, <a class="el" href="test-udfs_8cc_source.html#l00217">ConstantArgClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00189">CountClose()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00315">impala::AggregateFunctions::DecimalAvgFinalize()</a>, <a class="el" href="test-udfs_8cc_source.html#l00278">DoubleFreeTest()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00453">impala::UdfBuiltins::ExtractClose()</a>, <a class="el" href="uda-test-harness-impl_8h_source.html#l00060">impala_udf::UdaTestHarnessUtil::FreeIntermediate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00957">impala::AggregateFunctions::HistogramFinalize()</a>, <a class="el" href="hyperloglog-uda_8cc_source.html#l00094">HllFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01069">impala::AggregateFunctions::HllFinalize()</a>, <a class="el" href="hyperloglog-uda_8cc_source.html#l00086">HllSerialize()</a>, <a class="el" href="incr-stats-util_8cc_source.html#l00039">IncrementNdvFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01261">impala::AggregateFunctions::LastValRemove()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01237">impala::AggregateFunctions::LastValUpdate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00417">impala::AggregateFunctions::Max()</a>, <a class="el" href="test-udfs_8cc_source.html#l00268">MemTestClose()</a>, <a class="el" href="test-udas_8cc_source.html#l00089">MemTestFinalize()</a>, <a class="el" href="test-udas_8cc_source.html#l00083">MemTestSerialize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00405">impala::AggregateFunctions::Min()</a>, <a class="el" href="uda-test_8cc_source.html#l00136">MinFinalize()</a>, <a class="el" href="uda-test_8cc_source.html#l00116">MinSerialize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00712">impala::AggregateFunctions::PcFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00719">impala::AggregateFunctions::PcsaFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01221">impala::AggregateFunctions::RankFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00938">impala::AggregateFunctions::ReservoirSampleFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00819">impala::AggregateFunctions::ReservoirSampleSerialize()</a>, <a class="el" href="uda-test_8cc_source.html#l00083">MinState::Set()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00533">impala::AggregateFunctions::StringConcatFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00086">impala::AggregateFunctions::StringValSerializeOrFinalize()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00216">impala::AggregateFunctions::TimestampAvgFinalize()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00320">impala::UdfBuiltins::TruncClose()</a>, <a class="el" href="udf-test_8cc_source.html#l00124">ValidateMem()</a>, <a class="el" href="test-udfs_8cc_source.html#l00241">ValidateOpenClose()</a>, and <a class="el" href="udf-test_8cc_source.html#l00165">ValidateSharedStateClose()</a>.</p>
</div>
</div>
<a class="anchor" id="a41a17bd6e2f3c420d747c2226a1a1de3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FunctionContext::Free </td>
<td>(</td>
<td class="paramtype">int64_t&#160;</td>
<td class="paramname"><em>byte_size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00318">318</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
</div>
</div>
<a class="anchor" id="a982cd2abfd09cd038eb51fbc3d89366c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">FunctionContext::TypeDesc</a> * FunctionContext::GetArgType </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>arg_idx</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the type information for the arg_idx-th argument (0-indexed, not including the FunctionContext* argument). Returns NULL if arg_idx is invalid. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00425">425</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00156">impala::FunctionContextImpl::arg_types_</a>, and <a class="el" href="udf_8h_source.html#l00214">impl_</a>.</p>
<p>Referenced by <a class="el" href="decimal-functions_8cc_source.html#l00035">impala::DecimalFunctions::Abs()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00534">impala::DecimalOperators::CastToBooleanVal()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00478">impala::DecimalOperators::CastToStringVal()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00502">impala::DecimalOperators::CastToTimestampVal()</a>, <a class="el" href="string-functions_8cc_source.html#l00148">impala::StringFunctions::CharLength()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00245">impala::AggregateFunctions::DecimalAvgAddOrRemove()</a>, <a class="el" href="utility-functions_8cc_source.html#l00053">impala::UtilityFunctions::FnvHashDecimal()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01007">impala::AggregateFunctions::HllUpdate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00444">impala::AggregateFunctions::Max()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00429">impala::AggregateFunctions::Min()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01301">impala::AggregateFunctions::OffsetFnInit()</a>, <a class="el" href="string-functions_8cc_source.html#l00471">impala::StringFunctions::ParseUrlPrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00620">impala::AggregateFunctions::PcsaUpdate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00604">impala::AggregateFunctions::PcUpdate()</a>, <a class="el" href="decimal-functions_8cc_source.html#l00027">impala::DecimalFunctions::Precision()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="string-functions_8cc_source.html#l00327">impala::StringFunctions::RegexpPrepare()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00425">impala::DecimalOperators::RoundDecimal()</a>, <a class="el" href="decimal-functions_8cc_source.html#l00063">impala::DecimalFunctions::RoundTo()</a>, <a class="el" href="decimal-functions_8cc_source.html#l00031">impala::DecimalFunctions::Scale()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00057">impala::InPredicate::SetLookupPrepare()</a>, <a class="el" href="uda-sample_8cc_source.html#l00119">SumSmallDecimalUpdate()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00086">impala::InPredicate::TemplatedIn()</a>, <a class="el" href="utility-functions_8cc_source.html#l00109">impala::UtilityFunctions::TypeOf()</a>, <a class="el" href="test-udfs_8cc_source.html#l00165">ValidateArgType()</a>, and <a class="el" href="test-udfs_8cc_source.html#l00109">VarSum()</a>.</p>
</div>
</div>
<a class="anchor" id="a80f0af285424f65b0d9f395049f7a75f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structimpala__udf_1_1AnyVal.html">AnyVal</a> * FunctionContext::GetConstantArg </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>arg_idx</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns a pointer to the value of the arg_idx-th input argument (0 indexed, not including the FunctionContext* argument). Returns NULL if the argument is not constant. This function can be used to obtain user-specified constants in a UDF's Init() or Close() functions. </p>
<p>Definition at line <a class="el" href="udf-ir_8cc_source.html#l00025">25</a> of file <a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00161">impala::FunctionContextImpl::constant_args_</a>, and <a class="el" href="udf_8h_source.html#l00214">impl_</a>.</p>
<p>Referenced by <a class="el" href="test-udfs_8cc_source.html#l00198">ConstantArgPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00425">impala::UdfBuiltins::ExtractPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00054">impala::LikePredicate::LikePrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01301">impala::AggregateFunctions::OffsetFnInit()</a>, <a class="el" href="string-functions_8cc_source.html#l00471">impala::StringFunctions::ParseUrlPrepare()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="string-functions_8cc_source.html#l00327">impala::StringFunctions::RegexpPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00111">impala::LikePredicate::RegexPrepare()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00057">impala::InPredicate::SetLookupPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00302">impala::UdfBuiltins::TruncPrepare()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00066">impala::TimestampFunctions::UnixAndFromUnixPrepare()</a>, and <a class="el" href="udf-test_8cc_source.html#l00144">ValidateSharedStatePrepare()</a>.</p>
</div>
</div>
<a class="anchor" id="a9f06f92e1567f5de30969ec17bea757d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void * FunctionContext::GetFunctionState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">FunctionStateScope</a>&#160;</td>
<td class="paramname"><em>scope</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf-ir_8cc_source.html#l00038">38</a> of file <a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00170">impala::FunctionContextImpl::closed_</a>, <a class="el" href="udf_8h_source.html#l00098">FRAGMENT_LOCAL</a>, <a class="el" href="udf-internal_8h_source.html#l00141">impala::FunctionContextImpl::fragment_local_fn_state_</a>, <a class="el" href="udf_8h_source.html#l00214">impl_</a>, <a class="el" href="udf_8h_source.html#l00106">THREAD_LOCAL</a>, and <a class="el" href="udf-internal_8h_source.html#l00140">impala::FunctionContextImpl::thread_local_fn_state_</a>.</p>
<p>Referenced by <a class="el" href="case-expr_8cc_source.html#l00070">impala::CaseExpr::Close()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00232">impala::HiveUdfCall::Close()</a>, <a class="el" href="test-udfs_8cc_source.html#l00211">ConstantArg()</a>, <a class="el" href="test-udfs_8cc_source.html#l00217">ConstantArgClose()</a>, <a class="el" href="like-predicate_8cc_source.html#l00205">impala::LikePredicate::ConstantEndsWithFn()</a>, <a class="el" href="like-predicate_8cc_source.html#l00221">impala::LikePredicate::ConstantEqualsFn()</a>, <a class="el" href="like-predicate_8cc_source.html#l00238">impala::LikePredicate::ConstantRegexFn()</a>, <a class="el" href="like-predicate_8cc_source.html#l00229">impala::LikePredicate::ConstantRegexFnPartial()</a>, <a class="el" href="like-predicate_8cc_source.html#l00191">impala::LikePredicate::ConstantStartsWithFn()</a>, <a class="el" href="like-predicate_8cc_source.html#l00181">impala::LikePredicate::ConstantSubstringFn()</a>, <a class="el" href="like-predicate_8cc_source.html#l00286">impala::LikePredicate::ConvertLikePattern()</a>, <a class="el" href="test-udfs_8cc_source.html#l00183">Count()</a>, <a class="el" href="test-udfs_8cc_source.html#l00189">CountClose()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00074">impala::HiveUdfCall::Evaluate()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00344">impala::UdfBuiltins::Extract()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00453">impala::UdfBuiltins::ExtractClose()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00110">impala::TimestampFunctions::FromUnix()</a>, <a class="el" href="like-predicate_8cc_source.html#l00095">impala::LikePredicate::Like()</a>, <a class="el" href="like-predicate_8cc_source.html#l00102">impala::LikePredicate::LikeClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00260">MemTest()</a>, <a class="el" href="test-udfs_8cc_source.html#l00268">MemTestClose()</a>, <a class="el" href="string-functions_8cc_source.html#l00491">impala::StringFunctions::ParseUrl()</a>, <a class="el" href="string-functions_8cc_source.html#l00522">impala::StringFunctions::ParseUrlClose()</a>, <a class="el" href="string-functions_8cc_source.html#l00531">impala::StringFunctions::ParseUrlKey()</a>, <a class="el" href="math-functions_8cc_source.html#l00142">impala::MathFunctions::Rand()</a>, <a class="el" href="like-predicate_8cc_source.html#l00155">impala::LikePredicate::Regex()</a>, <a class="el" href="like-predicate_8cc_source.html#l00162">impala::LikePredicate::RegexClose()</a>, <a class="el" href="like-predicate_8cc_source.html#l00247">impala::LikePredicate::RegexMatch()</a>, <a class="el" href="string-functions_8cc_source.html#l00344">impala::StringFunctions::RegexpClose()</a>, <a class="el" href="string-functions_8cc_source.html#l00351">impala::StringFunctions::RegexpExtract()</a>, <a class="el" href="string-functions_8cc_source.html#l00384">impala::StringFunctions::RegexpReplace()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00077">impala::InPredicate::SetLookupClose()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00086">impala::InPredicate::TemplatedIn()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00220">impala::UdfBuiltins::Trunc()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00320">impala::UdfBuiltins::TruncClose()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00136">impala::TimestampFunctions::Unix()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00093">impala::TimestampFunctions::UnixAndFromUnixClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00236">ValidateOpen()</a>, <a class="el" href="test-udfs_8cc_source.html#l00241">ValidateOpenClose()</a>, <a class="el" href="udf-test_8cc_source.html#l00158">ValidateSharedState()</a>, and <a class="el" href="udf-test_8cc_source.html#l00165">ValidateSharedStateClose()</a>.</p>
</div>
</div>
<a class="anchor" id="a151ab1a6388213af923e63d4e1c9a048"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">TypeDesc</a>&amp; impala_udf::FunctionContext::GetIntermediateType </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the intermediate type for UDAs, i.e., the one returned by update and merge functions. Returns INVALID_TYPE for UDFs. </p>
</div>
</div>
<a class="anchor" id="a0eb0e2431b2954c02f1bfe97e5e0769a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int FunctionContext::GetNumArgs </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of arguments to this function (not including the FunctionContext* argument). </p>
<p>Definition at line <a class="el" href="udf-ir_8cc_source.html#l00030">30</a> of file <a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00156">impala::FunctionContextImpl::arg_types_</a>, and <a class="el" href="udf_8h_source.html#l00214">impl_</a>.</p>
<p>Referenced by <a class="el" href="aggregate-functions_8cc_source.html#l01301">impala::AggregateFunctions::OffsetFnInit()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, and <a class="el" href="in-predicate-ir_8cc_source.html#l00057">impala::InPredicate::SetLookupPrepare()</a>.</p>
</div>
</div>
<a class="anchor" id="a06c1133689e37fcd9fa104c8654b63bb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structimpala__udf_1_1FunctionContext_1_1TypeDesc.html">FunctionContext::TypeDesc</a> &amp; FunctionContext::GetReturnType </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the return type information of this function. For UDAs, this is the final return type of the UDA (e.g., the type returned by the finalize function). </p>
<p>Definition at line <a class="el" href="udf-ir_8cc_source.html#l00034">34</a> of file <a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a>.</p>
<p>References <a class="el" href="udf_8h_source.html#l00214">impl_</a>, and <a class="el" href="udf-internal_8h_source.html#l00153">impala::FunctionContextImpl::return_type_</a>.</p>
<p>Referenced by <a class="el" href="cast-functions_8cc_source.html#l00173">impala::CastFunctions::CastToChar()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00440">impala::DecimalOperators::CastToDecimalVal()</a>, <a class="el" href="cast-functions_8cc_source.html#l00145">impala::CastFunctions::CastToStringVal()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00290">impala::AggregateFunctions::DecimalAvgGetValue()</a>, <a class="el" href="math-functions_8cc_source.html#l00487">impala::MathFunctions::LeastGreatest()</a>, <a class="el" href="math-functions_8cc_source.html#l00404">impala::MathFunctions::Negative()</a>, <a class="el" href="conditional-functions-ir_8cc_source.html#l00072">impala::ConditionalFunctions::NullIfZero()</a>, <a class="el" href="decimal-operators_8cc_source.html#l00425">impala::DecimalOperators::RoundDecimal()</a>, and <a class="el" href="decimal-functions_8cc_source.html#l00063">impala::DecimalFunctions::RoundTo()</a>.</p>
</div>
</div>
<a class="anchor" id="ac675ff4a1fd6f4e360cca258ac6368e5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classbool.html">bool</a> FunctionContext::has_error </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if there's been an error set. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00253">253</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="uda-test-harness-impl_8h_source.html#l00075">impala_udf::UdaTestHarnessBase&lt; RESULT, INTERMEDIATE &gt;::CheckContext()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00148">impala::ScalarFnCall::Open()</a>, <a class="el" href="udf-test-harness_8h_source.html#l00289">impala_udf::UdfTestHarness::Validate()</a>, <a class="el" href="udf-test-harness_8h_source.html#l00280">impala_udf::UdfTestHarness::ValidateError()</a>, <a class="el" href="udf-test_8cc_source.html#l00115">ValidateFail()</a>, and <a class="el" href="udf-test_8cc_source.html#l00108">ValidateUdf()</a>.</p>
</div>
</div>
<a class="anchor" id="ae700abb05fbec18210b5930aa2efc15a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1FunctionContextImpl.html">impala::FunctionContextImpl</a>* impala_udf::FunctionContext::impl </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>TODO: Add mechanism for UDAs to update stats similar to runtime profile counters. </p>
<p>TODO: Do we need to add arbitrary key/value metadata. This would be plumbed through the query. E.g. "select UDA(col, 'sample=true') from tbl". const char* GetMetadata(const char*) const;TODO: Add mechanism to query for table/column stats Returns the underlying opaque implementation object. The UDF/UDA should not use this. This is used internally. </p>
<p>Definition at line <a class="el" href="udf_8h_source.html#l00202">202</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
<p>References <a class="el" href="udf_8h_source.html#l00214">impl_</a>.</p>
<p>Referenced by <a class="el" href="agg-fn-evaluator_8h_source.html#l00238">impala::AggFnEvaluator::Add()</a>, <a class="el" href="cast-functions_8cc_source.html#l00173">impala::CastFunctions::CastToChar()</a>, <a class="el" href="udf-test-harness_8cc_source.html#l00040">impala_udf::UdfTestHarness::CloseContext()</a>, <a class="el" href="utility-functions_8cc_source.html#l00101">impala::UtilityFunctions::CurrentDatabase()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00493">impala::ScalarFnCall::EvaluateChildren()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01270">impala::AggregateFunctions::FirstValUpdate()</a>, <a class="el" href="agg-fn-evaluator_8cc_source.html#l00314">impala::AggFnEvaluator::Init()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00512">impala::ScalarFnCall::InterpretEval()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01256">impala::AggregateFunctions::LastValRemove()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00281">impala::TimestampFunctions::Now()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00148">impala::ScalarFnCall::Open()</a>, <a class="el" href="agg-fn-evaluator_8cc_source.html#l00214">impala::AggFnEvaluator::Open()</a>, <a class="el" href="utility-functions_8cc_source.html#l00086">impala::UtilityFunctions::Pid()</a>, <a class="el" href="agg-fn-evaluator_8h_source.html#l00243">impala::AggFnEvaluator::Remove()</a>, <a class="el" href="udf-test-harness_8cc_source.html#l00031">impala_udf::UdfTestHarness::SetConstantArgs()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00353">impala::AggregateFunctions::SumDecimalRemove()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00335">impala::AggregateFunctions::SumRemove()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00323">impala::AggregateFunctions::SumUpdate()</a>, and <a class="el" href="timestamp-functions_8cc_source.html#l00167">impala::TimestampFunctions::Unix()</a>.</p>
</div>
</div>
<a class="anchor" id="aad06c7a14658a9a42d5de6e7d01ae136"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classbool.html">bool</a> FunctionContext::IsArgConstant </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>arg_idx</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if the arg_idx-th input argument (0 indexed, not including the FunctionContext* argument) is a constant (e.g. 5, "string", 1 + 1). </p>
<p>Definition at line <a class="el" href="udf-ir_8cc_source.html#l00020">20</a> of file <a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a>.</p>
<p>References <a class="el" href="udf-internal_8h_source.html#l00161">impala::FunctionContextImpl::constant_args_</a>, and <a class="el" href="udf_8h_source.html#l00214">impl_</a>.</p>
<p>Referenced by <a class="el" href="test-udfs_8cc_source.html#l00198">ConstantArgPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00425">impala::UdfBuiltins::ExtractPrepare()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00110">impala::TimestampFunctions::FromUnix()</a>, <a class="el" href="like-predicate_8cc_source.html#l00054">impala::LikePredicate::LikePrepare()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l01301">impala::AggregateFunctions::OffsetFnInit()</a>, <a class="el" href="string-functions_8cc_source.html#l00491">impala::StringFunctions::ParseUrl()</a>, <a class="el" href="string-functions_8cc_source.html#l00531">impala::StringFunctions::ParseUrlKey()</a>, <a class="el" href="string-functions_8cc_source.html#l00471">impala::StringFunctions::ParseUrlPrepare()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00247">impala::LikePredicate::RegexMatch()</a>, <a class="el" href="string-functions_8cc_source.html#l00351">impala::StringFunctions::RegexpExtract()</a>, <a class="el" href="string-functions_8cc_source.html#l00327">impala::StringFunctions::RegexpPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00111">impala::LikePredicate::RegexPrepare()</a>, <a class="el" href="string-functions_8cc_source.html#l00384">impala::StringFunctions::RegexpReplace()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00057">impala::InPredicate::SetLookupPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00302">impala::UdfBuiltins::TruncPrepare()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00136">impala::TimestampFunctions::Unix()</a>, and <a class="el" href="timestamp-functions_8cc_source.html#l00066">impala::TimestampFunctions::UnixAndFromUnixPrepare()</a>.</p>
</div>
</div>
<a class="anchor" id="a0eb5d045d3b354ece396e5104dbff0d0"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a>&amp; impala_udf::FunctionContext::operator= </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a> &amp;&#160;</td>
<td class="paramname"><em>other</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a223486a4836bac2ad0bac4cdd283d347"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structimpala__udf_1_1FunctionContext_1_1UniqueId.html">FunctionContext::UniqueId</a> FunctionContext::query_id </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the query_id for the current query. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00242">242</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="udf_8h_source.html#l00083">impala_udf::FunctionContext::UniqueId::hi</a>.</p>
</div>
</div>
<a class="anchor" id="a3e07497f8e6e2a9f97c55dc578afcd46"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t * FunctionContext::Reallocate </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>byte_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reallocates 'ptr' to the new byte_size. If the currently underlying allocation is big enough, the original ptr will be returned. If the allocation needs to grow, a new allocation is made that is at least 'byte_size' and the contents of 'ptr' will be copied into it. This should be used for buffers that constantly get appended to. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00276">276</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>References <a class="el" href="logging_8h_source.html#l00059">VLOG_ROW</a>.</p>
<p>Referenced by <a class="el" href="aggregate-functions_8cc_source.html#l01237">impala::AggregateFunctions::LastValUpdate()</a>, <a class="el" href="aggregate-functions_8cc_source.html#l00515">impala::AggregateFunctions::StringConcatMerge()</a>, and <a class="el" href="aggregate-functions_8cc_source.html#l00495">impala::AggregateFunctions::StringConcatUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="aa29186643c6b873f95e361b74e54a715"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FunctionContext::SetError </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>error_msg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets an error for this UDF. If this is called, this will trigger the query to fail. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00332">332</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="udf_8cc_source.html#l00182">impala::FunctionContextImpl::Close()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00074">impala::HiveUdfCall::Evaluate()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00344">impala::UdfBuiltins::Extract()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00425">impala::UdfBuiltins::ExtractPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00054">impala::LikePredicate::LikePrepare()</a>, <a class="el" href="string-functions_8cc_source.html#l00471">impala::StringFunctions::ParseUrlPrepare()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00247">impala::LikePredicate::RegexMatch()</a>, <a class="el" href="string-functions_8cc_source.html#l00327">impala::StringFunctions::RegexpPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00111">impala::LikePredicate::RegexPrepare()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00180">impala::TimestampFunctions::ReportBadFormat()</a>, <a class="el" href="udf-test-harness_8cc_source.html#l00031">impala_udf::UdfTestHarness::SetConstantArgs()</a>, <a class="el" href="agg-fn-evaluator_8cc_source.html#l00236">impala::AggFnEvaluator::SetDstSlot()</a>, <a class="el" href="test-udfs_8cc_source.html#l00141">TestError()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00475">impala::UdfBuiltins::ToVector()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00220">impala::UdfBuiltins::Trunc()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00302">impala::UdfBuiltins::TruncPrepare()</a>, <a class="el" href="udf-test_8cc_source.html#l00115">ValidateFail()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00462">ValidateMADlibVector()</a>, and <a class="el" href="test-udfs_8cc_source.html#l00109">VarSum()</a>.</p>
</div>
</div>
<a class="anchor" id="aba396e394b1f685d4453f6afb37959dc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FunctionContext::SetFunctionState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a1e9662a1bbb78daa9923b47412347ffc">FunctionStateScope</a>&#160;</td>
<td class="paramname"><em>scope</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>ptr</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Methods for maintaining state across UDF/UDA function calls. <a class="el" href="classimpala__udf_1_1FunctionContext.html#aba396e394b1f685d4453f6afb37959dc">SetFunctionState()</a> can be used to store a pointer that can then be retreived via <a class="el" href="classimpala__udf_1_1FunctionContext.html#a9f06f92e1567f5de30969ec17bea757d">GetFunctionState()</a>. If <a class="el" href="classimpala__udf_1_1FunctionContext.html#a9f06f92e1567f5de30969ec17bea757d">GetFunctionState()</a> is called when no pointer is set, it will return NULL. <a class="el" href="classimpala__udf_1_1FunctionContext.html#aba396e394b1f685d4453f6afb37959dc">SetFunctionState()</a> does not take ownership of 'ptr'; it is up to the UDF/UDA to clean up any function state if necessary. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00370">370</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="test-udfs_8cc_source.html#l00217">ConstantArgClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00198">ConstantArgPrepare()</a>, <a class="el" href="test-udfs_8cc_source.html#l00189">CountClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00175">CountPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00453">impala::UdfBuiltins::ExtractClose()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00425">impala::UdfBuiltins::ExtractPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00054">impala::LikePredicate::LikePrepare()</a>, <a class="el" href="test-udfs_8cc_source.html#l00268">MemTestClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00251">MemTestPrepare()</a>, <a class="el" href="case-expr_8cc_source.html#l00053">impala::CaseExpr::Open()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00176">impala::HiveUdfCall::Open()</a>, <a class="el" href="string-functions_8cc_source.html#l00471">impala::StringFunctions::ParseUrlPrepare()</a>, <a class="el" href="math-functions_8cc_source.html#l00115">impala::MathFunctions::RandPrepare()</a>, <a class="el" href="string-functions_8cc_source.html#l00327">impala::StringFunctions::RegexpPrepare()</a>, <a class="el" href="like-predicate_8cc_source.html#l00111">impala::LikePredicate::RegexPrepare()</a>, <a class="el" href="in-predicate-ir_8cc_source.html#l00057">impala::InPredicate::SetLookupPrepare()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00320">impala::UdfBuiltins::TruncClose()</a>, <a class="el" href="udf-builtins_8cc_source.html#l00302">impala::UdfBuiltins::TruncPrepare()</a>, <a class="el" href="timestamp-functions_8cc_source.html#l00066">impala::TimestampFunctions::UnixAndFromUnixPrepare()</a>, <a class="el" href="test-udfs_8cc_source.html#l00241">ValidateOpenClose()</a>, <a class="el" href="test-udfs_8cc_source.html#l00228">ValidateOpenPrepare()</a>, <a class="el" href="udf-test_8cc_source.html#l00165">ValidateSharedStateClose()</a>, and <a class="el" href="udf-test_8cc_source.html#l00144">ValidateSharedStatePrepare()</a>.</p>
</div>
</div>
<a class="anchor" id="aece9636fb109a4e034c311b80de6824c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FunctionContext::TrackAllocation </td>
<td>(</td>
<td class="paramtype">int64_t&#160;</td>
<td class="paramname"><em>byte_size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>For allocations that cannot use the <a class="el" href="classimpala__udf_1_1FunctionContext.html#a24a7e63aa708e54ea3c8c9572a00ede2">Allocate()</a> API provided by this object, <a class="el" href="classimpala__udf_1_1FunctionContext.html#aece9636fb109a4e034c311b80de6824c">TrackAllocation()</a>/Free() can be used to just keep count of the byte sizes. For each call to <a class="el" href="classimpala__udf_1_1FunctionContext.html#aece9636fb109a4e034c311b80de6824c">TrackAllocation()</a>, the UDF/UDA must call the corresponding <a class="el" href="classimpala__udf_1_1FunctionContext.html#a14904de2d63cac14b1a1ef09b0653a14" title="Frees a buffer returned from Allocate() or Reallocate() ">Free()</a>. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00312">312</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="test-udfs_8cc_source.html#l00278">DoubleFreeTest()</a>, <a class="el" href="test-udfs_8cc_source.html#l00260">MemTest()</a>, <a class="el" href="test-udas_8cc_source.html#l00073">MemTestMerge()</a>, and <a class="el" href="test-udas_8cc_source.html#l00067">MemTestUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="a8eee8c461d5e9bb7d1c22569ff68b899"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char * FunctionContext::user </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the user that is running the query. Returns NULL if it is not available. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00237">237</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="utility-functions_8cc_source.html#l00076">impala::UtilityFunctions::User()</a>.</p>
</div>
</div>
<a class="anchor" id="a4ed172014a12fc760fb444eeb9eebecf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala__udf_1_1FunctionContext.html#a3c69e8ce595c0d4ce2fd855f8341ca21">FunctionContext::ImpalaVersion</a> FunctionContext::version </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the version of Impala that's currently running. </p>
<p>Definition at line <a class="el" href="udf_8cc_source.html#l00233">233</a> of file <a class="el" href="udf_8cc_source.html">udf.cc</a>.</p>
<p>Referenced by <a class="el" href="udf-test_8cc_source.html#l00108">ValidateUdf()</a>.</p>
</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a class="anchor" id="ac39956e54ea10ada0a665ba7e79a9c72"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classimpala_1_1FunctionContextImpl.html">impala::FunctionContextImpl</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf_8h_source.html#l00207">207</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="ab34d7495d3151d3ff82d5acb66952f91"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1FunctionContextImpl.html">impala::FunctionContextImpl</a>* impala_udf::FunctionContext::impl_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="udf_8h_source.html#l00214">214</a> of file <a class="el" href="udf_8h_source.html">udf.h</a>.</p>
<p>Referenced by <a class="el" href="udf_8cc_source.html#l00147">impala::FunctionContextImpl::Clone()</a>, <a class="el" href="udf_8cc_source.html#l00425">GetArgType()</a>, <a class="el" href="udf-ir_8cc_source.html#l00025">GetConstantArg()</a>, <a class="el" href="udf-ir_8cc_source.html#l00038">GetFunctionState()</a>, <a class="el" href="udf-ir_8cc_source.html#l00030">GetNumArgs()</a>, <a class="el" href="udf-ir_8cc_source.html#l00034">GetReturnType()</a>, <a class="el" href="udf_8h_source.html#l00202">impl()</a>, <a class="el" href="udf-ir_8cc_source.html#l00020">IsArgConstant()</a>, and <a class="el" href="udf_8cc_source.html#l00159">~FunctionContext()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>be/src/udf/<a class="el" href="udf_8h_source.html">udf.h</a></li>
<li>be/src/udf/<a class="el" href="udf-ir_8cc_source.html">udf-ir.cc</a></li>
<li>be/src/udf/<a class="el" href="udf_8cc_source.html">udf.cc</a></li>
</ul>
</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="namespaceimpala__udf.html">impala_udf</a></li><li class="navelem"><a class="el" href="classimpala__udf_1_1FunctionContext.html">FunctionContext</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:51 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>