blob: fcac16eaba4cdeb208b8f1745af0e7859d913bca [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/exec/catalog-op-executor.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('catalog-op-executor_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">catalog-op-executor.cc</div> </div>
</div><!--header-->
<div class="contents">
<a href="catalog-op-executor_8cc.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2012 Cloudera Inc.</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// limitations under the License.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="catalog-op-executor_8h.html">exec/catalog-op-executor.h</a>&quot;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="incr-stats-util_8h.html">exec/incr-stats-util.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="status_8h.html">common/status.h</a>&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="lib-cache_8h.html">runtime/lib-cache.h</a>&quot;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="impala-server_8h.html">service/impala-server.h</a>&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="hs2-util_8h.html">service/hs2-util.h</a>&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="string-parser_8h.html">util/string-parser.h</a>&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;gen-cpp/CatalogService.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;gen-cpp/CatalogService_types.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;gen-cpp/CatalogObjects_types.h&quot;</span></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="preprocessor">#include &lt;thrift/protocol/TDebugProtocol.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;thrift/Thrift.h&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;gutil/strings/substitute.h&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</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="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>impala;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span>apache::hive::service::cli::thrift;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>apache::thrift;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using</span> strings::Substitute;</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"> 39</span>&#160;<a class="code" href="catalog-op-executor_8cc.html#a1cc883db76970aa57f5ca24637d40856">DECLARE_int32</a>(catalog_service_port);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="catalog-op-executor_8cc.html#ac7142413f4e038a1b45bfa51d1149d13">DECLARE_string</a>(catalog_service_host);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#a1b2e875087e35605fd9c34c29e3fb118"> 42</a></span>&#160;<a class="code" href="classimpala_1_1Status.html">Status</a> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#a1b2e875087e35605fd9c34c29e3fb118">CatalogOpExecutor::Exec</a>(<span class="keyword">const</span> TCatalogOpRequest&amp; request) {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; DCHECK_NOTNULL(profile_);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* exec_timer = <a class="code" href="runtime-profile_8h.html#a8841ca205b2a05d608e82d443bad3a77">ADD_TIMER</a>(profile_, <span class="stringliteral">&quot;CatalogOpExecTimer&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="runtime-profile_8h.html#aaa9a2971c6368e3ddd3f5140a0295eb7">SCOPED_TIMER</a>(exec_timer);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> TNetworkAddress&amp; address =</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="namespaceimpala.html#a309108c8b3eaf4e5b154bc4eb4624880">MakeNetworkAddress</a>(FLAGS_catalog_service_host, FLAGS_catalog_service_port);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classimpala_1_1ClientConnection.html">CatalogServiceConnection</a> client(env_-&gt;catalogd_client_cache(), address, &amp;status);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(status);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">switch</span> (request.op_type) {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">case</span> TCatalogOpType::DDL: {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Compute stats stmts must be executed via ExecComputeStats().</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; DCHECK(request.ddl_params.ddl_type != TDdlType::COMPUTE_STATS);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; exec_response_.reset(<span class="keyword">new</span> TDdlExecResponse());</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(client.DoRpc(&amp;CatalogServiceClient::ExecDdl, request.ddl_params,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; exec_response_.get()));</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; catalog_update_result_.reset(</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">new</span> TCatalogUpdateResult(exec_response_.get()-&gt;result));</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status(exec_response_-&gt;result.status);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (request.ddl_params.ddl_type == TDdlType::DROP_FUNCTION) {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; HandleDropFunction(request.ddl_params.drop_fn_params);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (request.ddl_params.ddl_type == TDdlType::DROP_DATA_SOURCE) {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; HandleDropDataSource(request.ddl_params.drop_data_source_params);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> status;</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="keywordflow">case</span> TCatalogOpType::RESET_METADATA: {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; TResetMetadataResponse response;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(client.DoRpc(&amp;CatalogServiceClient::ResetMetadata,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; request.reset_metadata_params, &amp;response));</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; catalog_update_result_.reset(<span class="keyword">new</span> TCatalogUpdateResult(response.result));</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html">Status</a>(response.result.status);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">default</span>: {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html">Status</a>(Substitute(<span class="stringliteral">&quot;TCatalogOpType: $0 does not support execution against the&quot;</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot; CatalogService&quot;</span>, request.op_type));</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</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"> 83</span>&#160;}</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#aae3f72490d779d480c5c785b3de74d58"> 85</a></span>&#160;<a class="code" href="classimpala_1_1Status.html">Status</a> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#aae3f72490d779d480c5c785b3de74d58">CatalogOpExecutor::ExecComputeStats</a>(</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> TComputeStatsParams&amp; compute_stats_params,</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> TTableSchema&amp; tbl_stats_schema, <span class="keyword">const</span> TRowSet&amp; tbl_stats_data,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> TTableSchema&amp; col_stats_schema, <span class="keyword">const</span> TRowSet&amp; col_stats_data) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Create a new DDL request to alter the table&#39;s statistics.</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; TCatalogOpRequest catalog_op_req;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; catalog_op_req.__isset.ddl_params = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; catalog_op_req.__set_op_type(TCatalogOpType::DDL);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; TDdlExecRequest&amp; update_stats_req = catalog_op_req.ddl_params;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; update_stats_req.__set_ddl_type(TDdlType::ALTER_TABLE);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; TAlterTableUpdateStatsParams&amp; update_stats_params =</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; update_stats_req.alter_table_params.update_stats_params;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; update_stats_req.__isset.alter_table_params = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; update_stats_req.alter_table_params.__set_alter_type(TAlterTableType::UPDATE_STATS);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; update_stats_req.alter_table_params.__set_table_name(compute_stats_params.table_name);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; update_stats_req.alter_table_params.__isset.update_stats_params = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; update_stats_params.__set_table_name(compute_stats_params.table_name);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; update_stats_params.__set_expect_all_partitions(</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; compute_stats_params.expect_all_partitions);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; update_stats_params.__set_is_incremental(compute_stats_params.is_incremental);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// Fill the alteration request based on the child-query results.</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; SetTableStats(tbl_stats_schema, tbl_stats_data,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; compute_stats_params.existing_part_stats, &amp;update_stats_params);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// col_stats_schema and col_stats_data will be empty if there was no column stats query.</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (!col_stats_schema.columns.empty()) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (compute_stats_params.is_incremental) {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* incremental_finalize_timer =</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="runtime-profile_8h.html#a8841ca205b2a05d608e82d443bad3a77">ADD_TIMER</a>(profile_, <span class="stringliteral">&quot;FinalizeIncrementalStatsTimer&quot;</span>);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="runtime-profile_8h.html#aaa9a2971c6368e3ddd3f5140a0295eb7">SCOPED_TIMER</a>(incremental_finalize_timer);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespaceimpala.html#a1a02780a0ef5ef9c20f452b39db5f446">FinalizePartitionedColumnStats</a>(col_stats_schema,</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; compute_stats_params.existing_part_stats,</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; compute_stats_params.expected_partitions,</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; col_stats_data, compute_stats_params.num_partition_cols, &amp;update_stats_params);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; SetColumnStats(col_stats_schema, col_stats_data, &amp;update_stats_params);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// Execute the &#39;alter table update stats&#39; request.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(<a class="code" href="namespaceimpala.html#a8173907db7b6f1785b33db9d4e253be7">Exec</a>(catalog_op_req));</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html#a580565665ea944eb64f3f495b1bee1e0">Status::OK</a>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#ae25ca4703e12e4953a781b7bb35e0650"> 130</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#ae25ca4703e12e4953a781b7bb35e0650">CatalogOpExecutor::HandleDropFunction</a>(<span class="keyword">const</span> TDropFunctionParams&amp; request) {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; DCHECK(fe_ != NULL) &lt;&lt; <span class="stringliteral">&quot;FE tests should not be calling this&quot;</span>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// Can only be called after successfully processing a catalog update.</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; DCHECK(catalog_update_result_ != NULL);</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">// Lookup in the local catalog the metadata for the function.</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; TCatalogObject obj;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; obj.type = TCatalogObjectType::FUNCTION;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; obj.fn.name = request.fn_name;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; obj.fn.arg_types = request.arg_types;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; obj.fn.signature = request.signature;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; obj.__isset.fn = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; obj.fn.__isset.signature = <span class="keyword">true</span>;</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; TCatalogObject fn;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status = fe_-&gt;GetCatalogObject(obj, &amp;fn);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (!status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// This can happen if the function was dropped by another impalad.</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="logging_8h.html#a916e38366cee7c32fd5fae7e2ee5e4a9">VLOG_QUERY</a> &lt;&lt; <span class="stringliteral">&quot;Could not lookup function catalog object: &quot;</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; &lt;&lt; apache::thrift::ThriftDebugString(request);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// This function may have been dropped and re-created. To avoid removing the re-created</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// function&#39;s entry from the cache verify the existing function has a catalog</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// version &lt;= the dropped version. This may happen if the update from the statestore</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// gets applied *before* the result of a direct-DDL drop function command.</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (fn.catalog_version &lt;= catalog_update_result_-&gt;version) {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classimpala_1_1LibCache.html#ae5378f8eacb0a7cb0fb4f5105a652ef0">LibCache::instance</a>()-&gt;<a class="code" href="classimpala_1_1LibCache.html#a480bc9d2c5b653810109cfe68dd7e8c0">RemoveEntry</a>(fn.fn.hdfs_location);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
<div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#a266d368595095ead9c7a19398bbe7438"> 161</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#a266d368595095ead9c7a19398bbe7438">CatalogOpExecutor::HandleDropDataSource</a>(<span class="keyword">const</span> TDropDataSourceParams&amp; request) {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; DCHECK(fe_ != NULL) &lt;&lt; <span class="stringliteral">&quot;FE tests should not be calling this&quot;</span>;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// Can only be called after successfully processing a catalog update.</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; DCHECK(catalog_update_result_ != NULL);</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; <span class="comment">// Lookup in the local catalog the metadata for the data source.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; TCatalogObject obj;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; obj.type = TCatalogObjectType::DATA_SOURCE;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; obj.data_source.name = request.data_source;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; obj.__isset.data_source = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; TCatalogObject ds;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status = fe_-&gt;GetCatalogObject(obj, &amp;ds);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (!status.<a class="code" href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">ok</a>()) {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// This can happen if the data source was dropped by another impalad.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="logging_8h.html#a916e38366cee7c32fd5fae7e2ee5e4a9">VLOG_QUERY</a> &lt;&lt; <span class="stringliteral">&quot;Could not lookup data source catalog object: &quot;</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; &lt;&lt; apache::thrift::ThriftDebugString(request);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// This data source may have been dropped and re-created. To avoid removing the</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// re-created data source&#39;s entry from the cache verify the existing data source has a</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// catalog version &lt;= the dropped version. This may happen if the update from the</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// statestore gets applied *before* the result of a direct-DDL drop data source</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// command.</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (ds.catalog_version &lt;= catalog_update_result_-&gt;version) {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classimpala_1_1LibCache.html#ae5378f8eacb0a7cb0fb4f5105a652ef0">LibCache::instance</a>()-&gt;<a class="code" href="classimpala_1_1LibCache.html#a480bc9d2c5b653810109cfe68dd7e8c0">RemoveEntry</a>(ds.data_source.hdfs_location);</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"> 188</span>&#160;}</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#a376b9be657580325d261ab2cfccd30ed"> 190</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#a376b9be657580325d261ab2cfccd30ed">CatalogOpExecutor::SetTableStats</a>(<span class="keyword">const</span> TTableSchema&amp; tbl_stats_schema,</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">const</span> TRowSet&amp; tbl_stats_data, <span class="keyword">const</span> vector&lt;TPartitionStats&gt;&amp; existing_part_stats,</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; TAlterTableUpdateStatsParams* params) {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// Accumulate total number of rows in the table.</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">long</span> total_num_rows = 0;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Set per-partition stats.</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> TRow&amp; row, tbl_stats_data.rows) {</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; DCHECK_GT(row.colVals.size(), 0);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// The first column is the COUNT(*) expr of the original query.</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; DCHECK(row.colVals[0].__isset.i64Val);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; int64_t num_rows = row.colVals[0].i64Val.value;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// The remaining columns are partition columns that the results are grouped by.</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; vector&lt;string&gt; partition_key_vals;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; partition_key_vals.reserve(row.colVals.size());</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 1; j &lt; row.colVals.size(); ++j) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; stringstream ss;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="namespaceimpala.html#a3d439da3c73d5f3a86b0c7df3436eda5">PrintTColumnValue</a>(row.colVals[j], &amp;ss);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; partition_key_vals.push_back(ss.str());</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; params-&gt;partition_stats[partition_key_vals].stats.__set_num_rows(num_rows);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; total_num_rows += num_rows;</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"> 213</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> TPartitionStats&amp; existing_stats, existing_part_stats) {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; total_num_rows += existing_stats.stats.num_rows;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; params-&gt;__isset.partition_stats = <span class="keyword">true</span>;</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; <span class="comment">// Set per-table stats.</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; params-&gt;table_stats.__set_num_rows(total_num_rows);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; params-&gt;__isset.table_stats = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#afbb978459bb7cc4803a8bdf1073fc706"> 224</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#afbb978459bb7cc4803a8bdf1073fc706">CatalogOpExecutor::SetColumnStats</a>(<span class="keyword">const</span> TTableSchema&amp; col_stats_schema,</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">const</span> TRowSet&amp; col_stats_data, TAlterTableUpdateStatsParams* params) {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Expect exactly one result row.</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; DCHECK_EQ(1, col_stats_data.rows.size());</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keyword">const</span> TRow&amp; col_stats_row = col_stats_data.rows[0];</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"> 230</span>&#160; <span class="comment">// Set per-column stats. For a column at position i in its source table,</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// the NDVs and the number of NULLs are at position i and i + 1 of the</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// col_stats_row, respectively. Positions i + 2 and i + 3 contain the max/avg</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// length for string columns, and -1 for non-string columns.</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; col_stats_row.colVals.size(); i += 4) {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; TColumnStats col_stats;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; col_stats.__set_num_distinct_values(col_stats_row.colVals[i].i64Val.value);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; col_stats.__set_num_nulls(col_stats_row.colVals[i + 1].i64Val.value);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; col_stats.__set_max_size(col_stats_row.colVals[i + 2].i32Val.value);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; col_stats.__set_avg_size(col_stats_row.colVals[i + 3].doubleVal.value);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; params-&gt;column_stats[col_stats_schema.columns[i].columnName] = col_stats;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; params-&gt;__isset.column_stats = <span class="keyword">true</span>;</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;</div>
<div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#a88c3c623b0fa476068b6552f051f20f6"> 245</a></span>&#160;<a class="code" href="classimpala_1_1Status.html">Status</a> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#a88c3c623b0fa476068b6552f051f20f6">CatalogOpExecutor::GetCatalogObject</a>(<span class="keyword">const</span> TCatalogObject&amp; object_desc,</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; TCatalogObject* result) {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">const</span> TNetworkAddress&amp; address =</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="namespaceimpala.html#a309108c8b3eaf4e5b154bc4eb4624880">MakeNetworkAddress</a>(FLAGS_catalog_service_host, FLAGS_catalog_service_port);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classimpala_1_1ClientConnection.html">CatalogServiceConnection</a> client(env_-&gt;catalogd_client_cache(), address, &amp;status);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(status);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; TGetCatalogObjectRequest request;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; request.__set_object_desc(object_desc);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; TGetCatalogObjectResponse response;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; client.DoRpc(&amp;CatalogServiceClient::GetCatalogObject, request, &amp;response));</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; *result = response.catalog_object;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html#a580565665ea944eb64f3f495b1bee1e0">Status::OK</a>;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;}</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div>
<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#a3b1e6fc06cc1db9fc8021470b9331d9e"> 263</a></span>&#160;<a class="code" href="classimpala_1_1Status.html">Status</a> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#a3b1e6fc06cc1db9fc8021470b9331d9e">CatalogOpExecutor::PrioritizeLoad</a>(<span class="keyword">const</span> TPrioritizeLoadRequest&amp; req,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; TPrioritizeLoadResponse* result) {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">const</span> TNetworkAddress&amp; address =</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="namespaceimpala.html#a309108c8b3eaf4e5b154bc4eb4624880">MakeNetworkAddress</a>(FLAGS_catalog_service_host, FLAGS_catalog_service_port);</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> status;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classimpala_1_1ClientConnection.html">CatalogServiceConnection</a> client(env_-&gt;catalogd_client_cache(), address, &amp;status);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(status);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(client.DoRpc(&amp;CatalogServiceClient::PrioritizeLoad, req, result));</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html#a580565665ea944eb64f3f495b1bee1e0">Status::OK</a>;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;}</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classimpala_1_1CatalogOpExecutor.html#afc49bf0ab361525fe4b0db71e095d845"> 274</a></span>&#160;<a class="code" href="classimpala_1_1Status.html">Status</a> <a class="code" href="classimpala_1_1CatalogOpExecutor.html#afc49bf0ab361525fe4b0db71e095d845">CatalogOpExecutor::SentryAdminCheck</a>(<span class="keyword">const</span> TSentryAdminCheckRequest&amp; req) {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> TNetworkAddress&amp; address =</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespaceimpala.html#a309108c8b3eaf4e5b154bc4eb4624880">MakeNetworkAddress</a>(FLAGS_catalog_service_host, FLAGS_catalog_service_port);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classimpala_1_1Status.html">Status</a> cnxn_status;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classimpala_1_1ClientConnection.html">CatalogServiceConnection</a> client(env_-&gt;catalogd_client_cache(), address, &amp;cnxn_status);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(cnxn_status);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; TSentryAdminCheckResponse resp;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a>(client.DoRpc(&amp;CatalogServiceClient::SentryAdminCheck, req, &amp;resp));</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classimpala_1_1Status.html">Status</a>(resp.status);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_a88c3c623b0fa476068b6552f051f20f6"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#a88c3c623b0fa476068b6552f051f20f6">impala::CatalogOpExecutor::GetCatalogObject</a></div><div class="ttdeci">Status GetCatalogObject(const TCatalogObject &amp;object_desc, TCatalogObject *result)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00245">catalog-op-executor.cc:245</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_a1b2e875087e35605fd9c34c29e3fb118"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#a1b2e875087e35605fd9c34c29e3fb118">impala::CatalogOpExecutor::Exec</a></div><div class="ttdeci">Status Exec(const TCatalogOpRequest &amp;catalog_op)</div><div class="ttdoc">Executes the given catalog operation against the catalog server. </div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00042">catalog-op-executor.cc:42</a></div></div>
<div class="ttc" id="lib-cache_8h_html"><div class="ttname"><a href="lib-cache_8h.html">lib-cache.h</a></div></div>
<div class="ttc" id="classimpala_1_1ClientConnection_html"><div class="ttname"><a href="classimpala_1_1ClientConnection.html">impala::ClientConnection</a></div><div class="ttdef"><b>Definition:</b> <a href="client-cache_8h_source.html#l00192">client-cache.h:192</a></div></div>
<div class="ttc" id="status_8h_html_a85f7d0e774e15eb35b74f53264305e16"><div class="ttname"><a href="status_8h.html#a85f7d0e774e15eb35b74f53264305e16">RETURN_IF_ERROR</a></div><div class="ttdeci">#define RETURN_IF_ERROR(stmt)</div><div class="ttdoc">some generally useful macros </div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00242">status.h:242</a></div></div>
<div class="ttc" id="runtime-profile_8h_html_a8841ca205b2a05d608e82d443bad3a77"><div class="ttname"><a href="runtime-profile_8h.html#a8841ca205b2a05d608e82d443bad3a77">ADD_TIMER</a></div><div class="ttdeci">#define ADD_TIMER(profile, name)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00050">runtime-profile.h:50</a></div></div>
<div class="ttc" id="catalog-op-executor_8h_html"><div class="ttname"><a href="catalog-op-executor_8h.html">catalog-op-executor.h</a></div></div>
<div class="ttc" id="namespaceimpala_html_a3d439da3c73d5f3a86b0c7df3436eda5"><div class="ttname"><a href="namespaceimpala.html#a3d439da3c73d5f3a86b0c7df3436eda5">impala::PrintTColumnValue</a></div><div class="ttdeci">void PrintTColumnValue(const apache::hive::service::cli::thrift::TColumnValue &amp;colval, std::stringstream *out)</div></div>
<div class="ttc" id="impala-server_8h_html"><div class="ttname"><a href="impala-server_8h.html">impala-server.h</a></div></div>
<div class="ttc" id="namespaceimpala_html_a309108c8b3eaf4e5b154bc4eb4624880"><div class="ttname"><a href="namespaceimpala.html#a309108c8b3eaf4e5b154bc4eb4624880">impala::MakeNetworkAddress</a></div><div class="ttdeci">TNetworkAddress MakeNetworkAddress(const string &amp;hostname, int port)</div><div class="ttdef"><b>Definition:</b> <a href="network-util_8cc_source.html#l00096">network-util.cc:96</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html">impala::RuntimeProfile::Counter</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00085">runtime-profile.h:85</a></div></div>
<div class="ttc" id="runtime-profile_8h_html_aaa9a2971c6368e3ddd3f5140a0295eb7"><div class="ttname"><a href="runtime-profile_8h.html#aaa9a2971c6368e3ddd3f5140a0295eb7">SCOPED_TIMER</a></div><div class="ttdeci">#define SCOPED_TIMER(c)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00053">runtime-profile.h:53</a></div></div>
<div class="ttc" id="namespaceimpala_html_a8173907db7b6f1785b33db9d4e253be7"><div class="ttname"><a href="namespaceimpala.html#a8173907db7b6f1785b33db9d4e253be7">impala::Exec</a></div><div class="ttdeci">Status Exec(QuerySchedule &amp;schedule, std::vector&lt; ExprContext * &gt; *output_expr_ctxs)</div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_a376b9be657580325d261ab2cfccd30ed"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#a376b9be657580325d261ab2cfccd30ed">impala::CatalogOpExecutor::SetTableStats</a></div><div class="ttdeci">static void SetTableStats(const apache::hive::service::cli::thrift::TTableSchema &amp;tbl_stats_schema, const apache::hive::service::cli::thrift::TRowSet &amp;tbl_stats_data, const std::vector&lt; TPartitionStats &gt; &amp;existing_part_stats, TAlterTableUpdateStatsParams *params)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00190">catalog-op-executor.cc:190</a></div></div>
<div class="ttc" id="classimpala_1_1Status_html"><div class="ttname"><a href="classimpala_1_1Status.html">impala::Status</a></div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00081">status.h:81</a></div></div>
<div class="ttc" id="incr-stats-util_8h_html"><div class="ttname"><a href="incr-stats-util_8h.html">incr-stats-util.h</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_ae25ca4703e12e4953a781b7bb35e0650"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#ae25ca4703e12e4953a781b7bb35e0650">impala::CatalogOpExecutor::HandleDropFunction</a></div><div class="ttdeci">void HandleDropFunction(const TDropFunctionParams &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00130">catalog-op-executor.cc:130</a></div></div>
<div class="ttc" id="logging_8h_html_a916e38366cee7c32fd5fae7e2ee5e4a9"><div class="ttname"><a href="logging_8h.html#a916e38366cee7c32fd5fae7e2ee5e4a9">VLOG_QUERY</a></div><div class="ttdeci">#define VLOG_QUERY</div><div class="ttdef"><b>Definition:</b> <a href="logging_8h_source.html#l00057">logging.h:57</a></div></div>
<div class="ttc" id="classimpala_1_1LibCache_html_a480bc9d2c5b653810109cfe68dd7e8c0"><div class="ttname"><a href="classimpala_1_1LibCache.html#a480bc9d2c5b653810109cfe68dd7e8c0">impala::LibCache::RemoveEntry</a></div><div class="ttdeci">void RemoveEntry(const std::string &amp;hdfs_lib_file)</div><div class="ttdoc">Removes the cache entry for &#39;hdfs_lib_file&#39;. </div><div class="ttdef"><b>Definition:</b> <a href="lib-cache_8cc_source.html#l00232">lib-cache.cc:232</a></div></div>
<div class="ttc" id="catalog-op-executor_8cc_html_a1cc883db76970aa57f5ca24637d40856"><div class="ttname"><a href="catalog-op-executor_8cc.html#a1cc883db76970aa57f5ca24637d40856">DECLARE_int32</a></div><div class="ttdeci">DECLARE_int32(catalog_service_port)</div></div>
<div class="ttc" id="string-parser_8h_html"><div class="ttname"><a href="string-parser_8h.html">string-parser.h</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_afc49bf0ab361525fe4b0db71e095d845"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#afc49bf0ab361525fe4b0db71e095d845">impala::CatalogOpExecutor::SentryAdminCheck</a></div><div class="ttdeci">Status SentryAdminCheck(const TSentryAdminCheckRequest &amp;re)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00274">catalog-op-executor.cc:274</a></div></div>
<div class="ttc" id="classimpala_1_1LibCache_html_ae5378f8eacb0a7cb0fb4f5105a652ef0"><div class="ttname"><a href="classimpala_1_1LibCache.html#ae5378f8eacb0a7cb0fb4f5105a652ef0">impala::LibCache::instance</a></div><div class="ttdeci">static LibCache * instance()</div><div class="ttdef"><b>Definition:</b> <a href="lib-cache_8h_source.html#l00063">lib-cache.h:63</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_afbb978459bb7cc4803a8bdf1073fc706"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#afbb978459bb7cc4803a8bdf1073fc706">impala::CatalogOpExecutor::SetColumnStats</a></div><div class="ttdeci">static void SetColumnStats(const apache::hive::service::cli::thrift::TTableSchema &amp;col_stats_schema, const apache::hive::service::cli::thrift::TRowSet &amp;col_stats_data, TAlterTableUpdateStatsParams *params)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00224">catalog-op-executor.cc:224</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_aae3f72490d779d480c5c785b3de74d58"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#aae3f72490d779d480c5c785b3de74d58">impala::CatalogOpExecutor::ExecComputeStats</a></div><div class="ttdeci">Status ExecComputeStats(const TComputeStatsParams &amp;compute_stats_params, const apache::hive::service::cli::thrift::TTableSchema &amp;tbl_stats_schema, const apache::hive::service::cli::thrift::TRowSet &amp;tbl_stats_data, const apache::hive::service::cli::thrift::TTableSchema &amp;col_stats_schema, const apache::hive::service::cli::thrift::TRowSet &amp;col_stats_data)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00085">catalog-op-executor.cc:85</a></div></div>
<div class="ttc" id="status_8h_html"><div class="ttname"><a href="status_8h.html">status.h</a></div></div>
<div class="ttc" id="classimpala_1_1Status_html_a580565665ea944eb64f3f495b1bee1e0"><div class="ttname"><a href="classimpala_1_1Status.html#a580565665ea944eb64f3f495b1bee1e0">impala::Status::OK</a></div><div class="ttdeci">static const Status OK</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00087">status.h:87</a></div></div>
<div class="ttc" id="hs2-util_8h_html"><div class="ttname"><a href="hs2-util_8h.html">hs2-util.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_1_1CatalogOpExecutor_html_a3b1e6fc06cc1db9fc8021470b9331d9e"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#a3b1e6fc06cc1db9fc8021470b9331d9e">impala::CatalogOpExecutor::PrioritizeLoad</a></div><div class="ttdeci">Status PrioritizeLoad(const TPrioritizeLoadRequest &amp;req, TPrioritizeLoadResponse *result)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00263">catalog-op-executor.cc:263</a></div></div>
<div class="ttc" id="classimpala_1_1CatalogOpExecutor_html_a266d368595095ead9c7a19398bbe7438"><div class="ttname"><a href="classimpala_1_1CatalogOpExecutor.html#a266d368595095ead9c7a19398bbe7438">impala::CatalogOpExecutor::HandleDropDataSource</a></div><div class="ttdeci">void HandleDropDataSource(const TDropDataSourceParams &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="catalog-op-executor_8cc_source.html#l00161">catalog-op-executor.cc:161</a></div></div>
<div class="ttc" id="catalog-op-executor_8cc_html_ac7142413f4e038a1b45bfa51d1149d13"><div class="ttname"><a href="catalog-op-executor_8cc.html#ac7142413f4e038a1b45bfa51d1149d13">DECLARE_string</a></div><div class="ttdeci">DECLARE_string(catalog_service_host)</div></div>
<div class="ttc" id="classimpala_1_1Status_html_a95ba859e42fe93445b340533220836ac"><div class="ttname"><a href="classimpala_1_1Status.html#a95ba859e42fe93445b340533220836ac">impala::Status::ok</a></div><div class="ttdeci">bool ok() const </div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00172">status.h:172</a></div></div>
<div class="ttc" id="namespaceimpala_html_a1a02780a0ef5ef9c20f452b39db5f446"><div class="ttname"><a href="namespaceimpala.html#a1a02780a0ef5ef9c20f452b39db5f446">impala::FinalizePartitionedColumnStats</a></div><div class="ttdeci">void FinalizePartitionedColumnStats(const TTableSchema &amp;col_stats_schema, const vector&lt; TPartitionStats &gt; &amp;existing_part_stats, const vector&lt; vector&lt; string &gt; &gt; &amp;expected_partitions, const TRowSet &amp;rowset, int32_t num_partition_cols, TAlterTableUpdateStatsParams *params)</div><div class="ttdef"><b>Definition:</b> <a href="incr-stats-util_8cc_source.html#l00188">incr-stats-util.cc:188</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_479336c0a15f2c0737bcafcf969f884c.html">exec</a></li><li class="navelem"><a class="el" href="catalog-op-executor_8cc.html">catalog-op-executor.cc</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:35 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>