blob: 699150e5712eacc3b19bc9b8d58beeb759d2631e [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: fe/src/main/java/com/cloudera/impala/analysis/AnalyticExpr.java 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('AnalyticExpr_8java_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">AnalyticExpr.java</div> </div>
</div><!--header-->
<div class="contents">
<a href="AnalyticExpr_8java.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 2014 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="keyword">package </span>com.cloudera.impala.analysis;</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="keyword">import</span> java.math.BigDecimal;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">import</span> java.math.BigInteger;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">import</span> java.util.ArrayList;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">import</span> java.util.List;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">import</span> org.slf4j.Logger;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">import</span> org.slf4j.LoggerFactory;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">com.cloudera.impala.analysis.AnalyticWindow.Boundary</a>;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">import</span> <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType</a>;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">com.cloudera.impala.catalog.AggregateFunction</a>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">com.cloudera.impala.catalog.Function</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">com.cloudera.impala.catalog.Type</a>;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">com.cloudera.impala.common.AnalysisException</a>;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">com.cloudera.impala.common.InternalException</a>;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">import</span> com.cloudera.impala.common.TreeNode;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport.html">com.cloudera.impala.service.FeSupport</a>;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TColumnValue;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TExprNode;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil.html">com.cloudera.impala.util.TColumnValueUtil</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">import</span> com.google.common.base.Joiner;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">import</span> com.google.common.base.Objects;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">import</span> com.google.common.base.Preconditions;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">import</span> com.google.common.collect.Lists;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html"> 60</a></span>&#160;<span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">AnalyticExpr</a> <span class="keyword">extends</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> {</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ae987fe26141aa69a450d43a10202e62b"> 61</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">static</span> Logger <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ae987fe26141aa69a450d43a10202e62b">LOG</a> = LoggerFactory.getLogger(AnalyticExpr.class);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7"> 63</a></span>&#160; <span class="keyword">private</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd"> 64</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> List&lt;Expr&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// These elements are modified to point to the corresponding child exprs to keep them</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// in sync through expr substitutions.</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7"> 67</a></span>&#160; <span class="keyword">private</span> List&lt;OrderByElement&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a> = Lists.newArrayList();</div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7"> 68</a></span>&#160; <span class="keyword">private</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// If set, requires the window to be set to null in resetAnalysisState(). Required for</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// proper substitution/cloning because standardization may set a window that is illegal</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// in SQL, and hence, will fail analysis().</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f"> 73</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// SQL string of this AnalyticExpr before standardization. Returned in toSqlImpl().</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad"> 76</a></span>&#160; <span class="keyword">private</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">sqlString_</a>;</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"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a781afa6319e20f6c4dc2358b948f1eae"> 78</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a781afa6319e20f6c4dc2358b948f1eae">LEAD</a> = <span class="stringliteral">&quot;lead&quot;</span>;</div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa59fdfe2cd527cb5e603caa26d57cc0d"> 79</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa59fdfe2cd527cb5e603caa26d57cc0d">LAG</a> = <span class="stringliteral">&quot;lag&quot;</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1"> 80</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">FIRSTVALUE</a> = <span class="stringliteral">&quot;first_value&quot;</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af5b67a392f0e84de3e94c594cf3178e5"> 81</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af5b67a392f0e84de3e94c594cf3178e5">LASTVALUE</a> = <span class="stringliteral">&quot;last_value&quot;</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5513988b83a4d63043e1cc2bf927abf6"> 82</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5513988b83a4d63043e1cc2bf927abf6">RANK</a> = <span class="stringliteral">&quot;rank&quot;</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa3229736271989002394bfeb89307c8e"> 83</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa3229736271989002394bfeb89307c8e">DENSERANK</a> = <span class="stringliteral">&quot;dense_rank&quot;</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc9060b9bf16051ed0f9194ef84c7ea0"> 84</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc9060b9bf16051ed0f9194ef84c7ea0">ROWNUMBER</a> = <span class="stringliteral">&quot;row_number&quot;</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aebce64d23e068191231fa7294211cf68"> 85</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aebce64d23e068191231fa7294211cf68">MIN</a> = <span class="stringliteral">&quot;min&quot;</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adfb989be2c88b78a7d1379324de20ce1"> 86</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adfb989be2c88b78a7d1379324de20ce1">MAX</a> = <span class="stringliteral">&quot;max&quot;</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Internal function used to implement FIRST_VALUE with a window rewrite and</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// additional null handling in the backend.</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc814cb7972eaaea2d81ab90cb959384"> 90</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc814cb7972eaaea2d81ab90cb959384">FIRST_VALUE_REWRITE</a> = <span class="stringliteral">&quot;first_value_rewrite&quot;</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77"> 92</a></span>&#160; <span class="keyword">public</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77">AnalyticExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a> fnCall, List&lt;Expr&gt; partitionExprs,</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; List&lt;OrderByElement&gt; orderByElements, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a> window) {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; Preconditions.checkNotNull(fnCall);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = fnCall;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a> = partitionExprs != null ? partitionExprs : <span class="keyword">new</span> ArrayList&lt;Expr&gt;();</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (orderByElements != null) orderByElements_.addAll(orderByElements);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = window;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2">setChildren</a>();</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a45956b0886232981f4b712db5251cad8"> 105</a></span>&#160; <span class="keyword">protected</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a45956b0886232981f4b712db5251cad8">AnalyticExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">AnalyticExpr</a> other) {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; super(other);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a>) other.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html#aaf6cf550a3266f48b976e25aaa4487bc">clone</a>();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement.html">OrderByElement</a> e: other.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>) {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; orderByElements_.add(e.clone());</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a> = Expr.cloneList(other.partitionExprs_);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = (other.window_ != null ? other.window_.clone() : null);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = other.resetWindow_;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">sqlString_</a> = other.sqlString_;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2">setChildren</a>();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda"> 118</a></span>&#160; <span class="keyword">public</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>() { <span class="keywordflow">return</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a>; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad58b40be48af423047c6e8c6f42cbc89"> 119</a></span>&#160; <span class="keyword">public</span> List&lt;Expr&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad58b40be48af423047c6e8c6f42cbc89">getPartitionExprs</a>() { <span class="keywordflow">return</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa2c7f3bcd93a9c00c5c9b97844ea779a"> 120</a></span>&#160; <span class="keyword">public</span> List&lt;OrderByElement&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa2c7f3bcd93a9c00c5c9b97844ea779a">getOrderByElements</a>() { <span class="keywordflow">return</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adf65d99f71ac3d901c046d12050e1c10"> 121</a></span>&#160; <span class="keyword">public</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adf65d99f71ac3d901c046d12050e1c10">getWindow</a>() { <span class="keywordflow">return</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>; }</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; @Override</div>
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c"> 124</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(Object obj) {</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (!super.equals(obj)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">AnalyticExpr</a> o = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77">AnalyticExpr</a>)obj;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html#a2bdf3dfcc1eda4658ab3fc4ea74e81d8">equals</a>(o.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>())) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> == null) != (o.window_ == null)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null) {</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a5da70c6affef1900aa4955c479812c80">equals</a>(o.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> orderByElements_.equals(o.orderByElements_);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; @Override</div>
<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a77f6c380799dd694e7be21888c8b3b03"> 139</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a77f6c380799dd694e7be21888c8b3b03">isConstant</a>() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; @Override</div>
<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85556eab28d5680f746432277571c7dd"> 142</a></span>&#160; <span class="keyword">public</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85556eab28d5680f746432277571c7dd">clone</a>() { <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77">AnalyticExpr</a>(<span class="keyword">this</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; @Override</div>
<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acdf9be66137d400577f588c5b9dd3c95"> 145</a></span>&#160; <span class="keyword">public</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acdf9be66137d400577f588c5b9dd3c95">toSqlImpl</a>() {</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">sqlString_</a> != null) <span class="keywordflow">return</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">sqlString_</a>;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; StringBuilder sb = <span class="keyword">new</span> StringBuilder();</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; sb.append(fnCall_.toSql()).append(<span class="stringliteral">&quot; OVER (&quot;</span>);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">boolean</span> needsSpace = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>.isEmpty()) {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; sb.append(<span class="stringliteral">&quot;PARTITION BY &quot;</span>).append(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>));</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; needsSpace = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>.isEmpty()) {</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; List&lt;String&gt; orderByStrings = Lists.newArrayList();</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement.html">OrderByElement</a> e: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>) {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; orderByStrings.add(e.toSql());</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; <span class="keywordflow">if</span> (needsSpace) sb.append(<span class="stringliteral">&quot; &quot;</span>);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; sb.append(<span class="stringliteral">&quot;ORDER BY &quot;</span>).append(Joiner.on(<span class="stringliteral">&quot;, &quot;</span>).join(orderByStrings));</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; needsSpace = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null) {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (needsSpace) sb.append(<span class="stringliteral">&quot; &quot;</span>);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; sb.append(window_.toSql());</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; sb.append(<span class="stringliteral">&quot;)&quot;</span>);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> sb.toString();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; @Override</div>
<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ab0739b4037275dc52e2fb7b6a2d34ef8"> 172</a></span>&#160; <span class="keyword">public</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ab0739b4037275dc52e2fb7b6a2d34ef8">debugString</a>() {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> Objects.toStringHelper(<span class="keyword">this</span>)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; .add(<span class="stringliteral">&quot;fn&quot;</span>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>())</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; .add(<span class="stringliteral">&quot;window&quot;</span>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>)</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; .addValue(super.debugString())</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; .toString();</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</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; @Override</div>
<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7695e9263052e3a97f375e6d1ce11f07"> 181</a></span>&#160; <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7695e9263052e3a97f375e6d1ce11f07">toThrift</a>(TExprNode msg) {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div>
<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293"> 184</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn) {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> fn instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">AggregateFunction</a></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; &amp;&amp; ((<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">AggregateFunction</a>) fn).isAnalyticFn();</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"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a3d2071735c8a1d89d9f08ed3ba8fbacd"> 189</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a3d2071735c8a1d89d9f08ed3ba8fbacd">isAggregateFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn) {</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> fn instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">AggregateFunction</a></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; &amp;&amp; ((<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">AggregateFunction</a>) fn).isAggregateFn();</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div>
<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977"> 194</a></span>&#160; <span class="keyword">static</span> <span class="keyword">private</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn) {</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(fn)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a781afa6319e20f6c4dc2358b948f1eae">LEAD</a>) || fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa59fdfe2cd527cb5e603caa26d57cc0d">LAG</a>);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5b8927e746bf6007220921c976499585"> 199</a></span>&#160; <span class="keyword">static</span> <span class="keyword">private</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5b8927e746bf6007220921c976499585">isMinMax</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn) {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(fn)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">return</span> fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aebce64d23e068191231fa7294211cf68">MIN</a>) || fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adfb989be2c88b78a7d1379324de20ce1">MAX</a>);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div>
<div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6117dff10ca679c677db4f73c3e6b9b3"> 204</a></span>&#160; <span class="keyword">static</span> <span class="keyword">private</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6117dff10ca679c677db4f73c3e6b9b3">isRankingFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(fn)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5513988b83a4d63043e1cc2bf927abf6">RANK</a>)</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; || fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa3229736271989002394bfeb89307c8e">DENSERANK</a>)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; || fn.functionName().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">equals</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc9060b9bf16051ed0f9194ef84c7ea0">ROWNUMBER</a>);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad83db26dc85d4d0de1ed49f79b0f57f3"> 215</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad83db26dc85d4d0de1ed49f79b0f57f3">checkRangeOffsetBoundaryExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>.Boundary boundary)</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; throws <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a> {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Preconditions.checkState(boundary.getType().isOffset());</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>.size() &gt; 1) {</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> AnalysisException(<span class="stringliteral">&quot;Only one ORDER BY expression allowed if used with &quot;</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; + <span class="stringliteral">&quot;a RANGE window with PRECEDING/FOLLOWING: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> rangeExpr = boundary.getExpr();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">Type</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#a6abc12c804b16fb0cb4efeb9c3b41969">isImplicitlyCastable</a>(</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; rangeExpr.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#aa13f302aaf889778a8f16beb116d4292">getType</a>(), orderByElements_.get(0).getExpr().getType())) {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> AnalysisException(</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="stringliteral">&quot;The value expression of a PRECEDING/FOLLOWING clause of a RANGE window must &quot;</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; + <span class="stringliteral">&quot;be implicitly convertable to the ORDER BY expression&#39;s type: &quot;</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; + rangeExpr.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot; cannot be implicitly converted to &quot;</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; + orderByElements_.get(0).getExpr().getType().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6827149530e70a3197856bb3fd8334af"> 236</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6827149530e70a3197856bb3fd8334af">checkOffset</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) <span class="keywordflow">throws</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a> {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a27a6a233a9a12dfb41cf4908054f01f4">getFn</a>()));</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() &gt; 1);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> <a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChild(1);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; Preconditions.checkState(offset.getType().isIntegerType());</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">boolean</span> isPosConstant = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (!offset.isConstant()) {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; isPosConstant = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; TColumnValue val = FeSupport.EvalConstExpr(<a class="code" href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a>, analyzer.getQueryCtx());</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil.html">TColumnValueUtil</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil.html#a0ed58516d1c40685bc17ad6ade971c7d">getNumericVal</a>(val) &lt;= 0) isPosConstant = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; } <span class="keywordflow">catch</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">InternalException</a> exc) {</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="stringliteral">&quot;Couldn&#39;t evaluate LEAD/LAG offset: &quot;</span> + exc.getMessage());</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span> (!isPosConstant) {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="stringliteral">&quot;The offset parameter of LEAD/LAG must be a constant positive integer: &quot;</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; @Override</div>
<div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aaa4e2ce4513d5c9af46bde240cd95f3d"> 261</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aaa4e2ce4513d5c9af46bde240cd95f3d">analyze</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) <span class="keywordflow">throws</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a> {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8b745173008a9c04bd8892ca365d24af">isAnalyzed_</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; fnCall_.analyze(analyzer);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; super.analyze(analyzer);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#ab1fff80d4023e8f93e42b230550917db">type_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getType();</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> e: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>) {</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span> (e.isConstant()) {</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="stringliteral">&quot;Expressions in the PARTITION BY clause must not be constant: &quot;</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; + e.toSql() + <span class="stringliteral">&quot; (in &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot;)&quot;</span>);</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"> 274</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement.html">OrderByElement</a> e: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>) {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (e.getExpr().isConstant()) {</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="stringliteral">&quot;Expressions in the ORDER BY clause must not be constant: &quot;</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; + e.getExpr().toSql() + <span class="stringliteral">&quot; (in &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getParams().isDistinct()) {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="stringliteral">&quot;DISTINCT not allowed in analytic function: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// check for correct composition of analytic expr</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">Function</a> fn = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getFn();</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (!(fn instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">AggregateFunction</a>)) {</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="stringliteral">&quot;OVER clause requires aggregate or analytic function: &quot;</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// check for non-analytic aggregate functions</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(fn)) {</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; String.format(<span class="stringliteral">&quot;Aggregate function &#39;%s&#39; not supported with OVER clause.&quot;</span>,</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>()));</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">isAnalyticFn</a>(fn) &amp;&amp; !<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a3d2071735c8a1d89d9f08ed3ba8fbacd">isAggregateFn</a>(fn)) {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (orderByElements_.isEmpty()) {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot;&#39; requires an ORDER BY clause&quot;</span>);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6117dff10ca679c677db4f73c3e6b9b3">isRankingFn</a>(fn) || <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(fn)) &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null) {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="stringliteral">&quot;Windowing clause not allowed with &#39;&quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot;&#39;&quot;</span>);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(fn) &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() &gt; 1) {</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6827149530e70a3197856bb3fd8334af">checkOffset</a>(analyzer);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// check the default, which needs to be a constant at the moment</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// TODO: remove this check when the backend can handle non-constants</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() &gt; 2) {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChild(2).<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a77f6c380799dd694e7be21888c8b3b03">isConstant</a>()) {</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="stringliteral">&quot;The default parameter (parameter 3) of LEAD/LAG must be a constant: &quot;</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null) {</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (orderByElements_.isEmpty()) {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(<span class="stringliteral">&quot;Windowing clause requires ORDER BY clause: &quot;</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; window_.analyze(analyzer);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (!orderByElements_.isEmpty()</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; &amp;&amp; window_.getType() == <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>.Type.RANGE) {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// check that preceding/following ranges match ordering</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType().isOffset()) {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad83db26dc85d4d0de1ed49f79b0f57f3">checkRangeOffsetBoundaryExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>());</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>() != null</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; &amp;&amp; window_.getRightBoundary().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#aa13f302aaf889778a8f16beb116d4292">getType</a>().isOffset()) {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad83db26dc85d4d0de1ed49f79b0f57f3">checkRangeOffsetBoundaryExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>());</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// check nesting</span></div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (TreeNode.contains(getChildren(), <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">AnalyticExpr</a>.class)) {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="stringliteral">&quot;Nesting of analytic expressions is not allowed: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>());</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">sqlString_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>();</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a746677b5661617c96ff91a250fefbff5">standardize</a>(analyzer);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">// min/max is not currently supported on sliding windows (i.e. start bound is not</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// unbounded).</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5b8927e746bf6007220921c976499585">isMinMax</a>(fn) &amp;&amp;</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>) {</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a>(</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">toSql</a>() + <span class="stringliteral">&quot;&#39; is only supported with an &quot;</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; + <span class="stringliteral">&quot;UNBOUNDED PRECEDING start bound.&quot;</span>);</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2">setChildren</a>();</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div>
<div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a746677b5661617c96ff91a250fefbff5"> 404</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a746677b5661617c96ff91a250fefbff5">standardize</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) {</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a> analyticFnName = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getFnName();</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// Set a window from UNBOUNDED PRECEDING to CURRENT_ROW for row_number().</span></div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc9060b9bf16051ed0f9194ef84c7ea0">ROWNUMBER</a>)) {</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> == null, <span class="stringliteral">&quot;Unexpected window set for row_numer()&quot;</span>);</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; window_ = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>.Type.ROWS,</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>, null),</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a14d4bbd36c474a243c81408b020357c7">CURRENT_ROW</a>, null));</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// Explicitly set the default arguments to lead()/lag() for BE simplicity.</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Set a window for lead(): UNBOUNDED PRECEDING to OFFSET FOLLOWING,</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// Set a window for lag(): UNBOUNDED PRECEDING to OFFSET PRECEDING.</span></div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a27a6a233a9a12dfb41cf4908054f01f4">getFn</a>())) {</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> == null);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// If necessary, create a new fn call with the default args explicitly set.</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; List&lt;Expr&gt; newExprParams = null;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() == 1) {</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; newExprParams = Lists.newArrayListWithExpectedSize(3);</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; newExprParams.addAll(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren());</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// Default offset is 1.</span></div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; newExprParams.add(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral.html">NumericLiteral</a>(BigDecimal.valueOf(1)));</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// Default default value is NULL.</span></div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; newExprParams.add(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NullLiteral.html">NullLiteral</a>());</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() == 2) {</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; newExprParams = Lists.newArrayListWithExpectedSize(3);</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; newExprParams.addAll(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren());</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// Default default value is NULL.</span></div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; newExprParams.add(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NullLiteral.html">NullLiteral</a>());</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getChildren().size() == 3);</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (newExprParams != null) {</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getFnName(),</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionParams.html">FunctionParams</a>(newExprParams));</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; fnCall_.setIsAnalyticFnCall(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; fnCall_.analyzeNoThrow(analyzer);</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// Set the window.</span></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a> rightBoundaryType = <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a96dedeb312724458f4572273faff7267">BoundaryType.FOLLOWING</a>;</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa59fdfe2cd527cb5e603caa26d57cc0d">LAG</a>)) {</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; rightBoundaryType = <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a3ced630d6ec5c31f513de453569a46d0">BoundaryType.PRECEDING</a>;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; window_ = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>.Type.ROWS,</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>, null),</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(rightBoundaryType, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a497030d56f8a8315ea167278dc330a9e">getOffsetExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>())));</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; window_.analyze(analyzer);</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; } <span class="keywordflow">catch</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a> e) {</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> IllegalStateException(e);</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">FIRSTVALUE</a>)</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>) {</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a3ced630d6ec5c31f513de453569a46d0">PRECEDING</a>) {</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#ac96eee79135d0df162ab2bef682cefcf">getType</a>(), window_.getLeftBoundary(),</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>());</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a>(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a>(<span class="stringliteral">&quot;last_value&quot;</span>),</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getParams());</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; List&lt;Expr&gt; paramExprs = Expr.cloneList(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getParams().exprs());</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>().getType() == <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a3ced630d6ec5c31f513de453569a46d0">PRECEDING</a>) {</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// The number of rows preceding for the end bound determines the number of</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// rows at the beginning of each partition that should have a NULL value.</span></div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; paramExprs.add(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral.html">NumericLiteral</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>().getOffsetValue(),</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">Type</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#aac9963d35d8ba3e584476c5a37fe131a">BIGINT</a>));</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// -1 indicates that no NULL values are inserted even though we set the end</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// bound to the start bound (which is PRECEDING) below; this is different from</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// the default behavior of windows with an end bound PRECEDING.</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; paramExprs.add(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral.html">NumericLiteral</a>(BigInteger.valueOf(-1), <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#aac9963d35d8ba3e584476c5a37fe131a">Type.BIGINT</a>));</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">AnalyticWindow</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#ac96eee79135d0df162ab2bef682cefcf">getType</a>(),</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>, null),</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; window_.getLeftBoundary());</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a>(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a>(<span class="stringliteral">&quot;first_value_rewrite&quot;</span>),</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionParams.html">FunctionParams</a>(paramExprs));</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; fnCall_.setIsInternalFnCall(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; fnCall_.setIsAnalyticFnCall(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; fnCall_.analyzeNoThrow(analyzer);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#ab1fff80d4023e8f93e42b230550917db">type_</a> = fnCall_.getReturnType();</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; analyticFnName = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getFnName();</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// Reverse the ordering and window for windows ending with UNBOUNDED FOLLOWING,</span></div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// and and not starting with UNBOUNDED PRECEDING.</span></div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>().getType() == <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a6d5fde0a178e2ce435bce294e14375c8">UNBOUNDED_FOLLOWING</a></div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a>) {</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a> = OrderByElement.reverse(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>);</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = window_.reverse();</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// Also flip first_value()/last_value(). For other analytic functions there is no</span></div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// need to also change the function.</span></div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a> reversedFnName = null;</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">FIRSTVALUE</a>)) {</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; reversedFnName = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af5b67a392f0e84de3e94c594cf3178e5">LASTVALUE</a>);</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af5b67a392f0e84de3e94c594cf3178e5">LASTVALUE</a>)) {</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; reversedFnName = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">FunctionName</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">FIRSTVALUE</a>);</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (reversedFnName != null) {</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a> = <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a>(reversedFnName, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getParams());</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; fnCall_.setIsAnalyticFnCall(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; fnCall_.analyzeNoThrow(analyzer);</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; analyticFnName = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().getFnName();</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Set the upper boundary to CURRENT_ROW for first_value() if the lower boundary</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// is UNBOUNDED_PRECEDING.</span></div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getType() == <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">UNBOUNDED_PRECEDING</a></div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>().getType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a3ced630d6ec5c31f513de453569a46d0">PRECEDING</a></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; &amp;&amp; analyticFnName.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">getFunction</a>().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">FIRSTVALUE</a>)) {</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; window_.setRightBoundary(<span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">Boundary</a>(<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">BoundaryType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a14d4bbd36c474a243c81408b020357c7">CURRENT_ROW</a>, null));</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// Set the default window.</span></div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>.isEmpty() &amp;&amp; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> == null) {</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#acfe33c074b2da552b99a9e6a4f43bc78">AnalyticWindow.DEFAULT_WINDOW</a>;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div>
<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a497030d56f8a8315ea167278dc330a9e"> 542</a></span>&#160; <span class="keyword">private</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a497030d56f8a8315ea167278dc330a9e">getOffsetExpr</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">FunctionCallExpr</a> offsetFnCall) {</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; Preconditions.checkState(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">isOffsetFn</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">getFnCall</a>().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a27a6a233a9a12dfb41cf4908054f01f4">getFn</a>()));</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span> (offsetFnCall.getChild(1) != null) <span class="keywordflow">return</span> offsetFnCall.getChild(1);</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// The default offset is 1.</span></div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral.html">NumericLiteral</a>(BigDecimal.valueOf(1));</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;</div>
<div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a001413fb2cfc582db935fe719e8b1b3a"> 552</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a001413fb2cfc582db935fe719e8b1b3a">syncWithChildren</a>() {</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordtype">int</span> numArgs = fnCall_.getChildren().size();</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numArgs; ++i) {</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; fnCall_.setChild(i, getChild(i));</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordtype">int</span> numPartitionExprs = partitionExprs_.size();</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numPartitionExprs; ++i) {</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; partitionExprs_.set(i, getChild(numArgs + i));</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; orderByElements_.size(); ++i) {</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; orderByElements_.get(i).setExpr(getChild(numArgs + numPartitionExprs + i));</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;</div>
<div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2"> 569</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2">setChildren</a>() {</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; getChildren().clear();</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; addChildren(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">fnCall_</a>.getChildren());</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; addChildren(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">partitionExprs_</a>);</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement.html">OrderByElement</a> e: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">orderByElements_</a>) {</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; addChild(e.getExpr());</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> != null) {</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getExpr() != null) {</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; addChild(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">getLeftBoundary</a>().getExpr());</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>() != null</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; &amp;&amp; window_.getRightBoundary().getExpr() != null) {</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; addChild(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">getRightBoundary</a>().getExpr());</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; @Override</div>
<div class="line"><a name="l00588"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa598c53ac5456a48bd61601ad5ecc37d"> 588</a></span>&#160; <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa598c53ac5456a48bd61601ad5ecc37d">resetAnalysisState</a>() {</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; super.resetAnalysisState();</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; fnCall_.resetAnalysisState();</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">window_</a> = null;</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">resetWindow_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// sync with children, now that they&#39;ve been reset</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a001413fb2cfc582db935fe719e8b1b3a">syncWithChildren</a>();</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; @Override</div>
<div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad3cd5358daf73dcce13b3961aed9bc67"> 598</a></span>&#160; <span class="keyword">protected</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad3cd5358daf73dcce13b3961aed9bc67">substituteImpl</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1ExprSubstitutionMap.html">ExprSubstitutionMap</a> smap, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer)</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">throws</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">AnalysisException</a> {</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> e = super.substituteImpl(smap, analyzer);</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (!(e instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">AnalyticExpr</a>)) <span class="keywordflow">return</span> e;</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// Re-sync state after possible child substitution.</span></div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; ((<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77">AnalyticExpr</a>) e).syncWithChildren();</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span> e;</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;}</div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html_a14d4bbd36c474a243c81408b020357c7"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a14d4bbd36c474a243c81408b020357c7">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType.CURRENT_ROW</a></div><div class="ttdeci">CURRENT_ROW</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00061">AnalyticWindow.java:61</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionParams_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionParams.html">com.cloudera.impala.analysis.FunctionParams</a></div><div class="ttdef"><b>Definition:</b> <a href="FunctionParams_8java_source.html#l00023">FunctionParams.java:23</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_af8817ec0aa4192ff4157b6b47f6feec7"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af8817ec0aa4192ff4157b6b47f6feec7">com.cloudera.impala.analysis.AnalyticExpr.fnCall_</a></div><div class="ttdeci">FunctionCallExpr fnCall_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00063">AnalyticExpr.java:63</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a45956b0886232981f4b712db5251cad8"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a45956b0886232981f4b712db5251cad8">com.cloudera.impala.analysis.AnalyticExpr.AnalyticExpr</a></div><div class="ttdeci">AnalyticExpr(AnalyticExpr other)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00105">AnalyticExpr.java:105</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html_ac96eee79135d0df162ab2bef682cefcf"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#ac96eee79135d0df162ab2bef682cefcf">com.cloudera.impala.analysis.AnalyticWindow.getType</a></div><div class="ttdeci">Type getType()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00188">AnalyticWindow.java:188</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a9bf22758109c687ba6d0185452f27f77"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a9bf22758109c687ba6d0185452f27f77">com.cloudera.impala.analysis.AnalyticExpr.AnalyticExpr</a></div><div class="ttdeci">AnalyticExpr(FunctionCallExpr fnCall, List&lt; Expr &gt; partitionExprs, List&lt; OrderByElement &gt; orderByElements, AnalyticWindow window)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00092">AnalyticExpr.java:92</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html_a5da70c6affef1900aa4955c479812c80"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a5da70c6affef1900aa4955c479812c80">com.cloudera.impala.analysis.AnalyticWindow.equals</a></div><div class="ttdeci">boolean equals(Object obj)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00258">AnalyticWindow.java:258</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a6e7816043caa4600c2b4ad0d630cde9c"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6e7816043caa4600c2b4ad0d630cde9c">com.cloudera.impala.analysis.AnalyticExpr.equals</a></div><div class="ttdeci">boolean equals(Object obj)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00124">AnalyticExpr.java:124</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a2395bc0a739b49a8e7ed86dcdf646ec7"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a2395bc0a739b49a8e7ed86dcdf646ec7">com.cloudera.impala.analysis.AnalyticExpr.window_</a></div><div class="ttdeci">AnalyticWindow window_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00068">AnalyticExpr.java:68</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a5513988b83a4d63043e1cc2bf927abf6"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5513988b83a4d63043e1cc2bf927abf6">com.cloudera.impala.analysis.AnalyticExpr.RANK</a></div><div class="ttdeci">static String RANK</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00082">AnalyticExpr.java:82</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type_html_aac9963d35d8ba3e584476c5a37fe131a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#aac9963d35d8ba3e584476c5a37fe131a">com.cloudera.impala.catalog.Type.BIGINT</a></div><div class="ttdeci">static final ScalarType BIGINT</div><div class="ttdef"><b>Definition:</b> <a href="Type_8java_source.html#l00050">Type.java:50</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">com.cloudera.impala.catalog.Type</a></div><div class="ttdef"><b>Definition:</b> <a href="Type_8java_source.html#l00042">Type.java:42</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html">com.cloudera.impala.analysis.FunctionCallExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="FunctionCallExpr_8java_source.html#l00037">FunctionCallExpr.java:37</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_acdf9be66137d400577f588c5b9dd3c95"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acdf9be66137d400577f588c5b9dd3c95">com.cloudera.impala.analysis.AnalyticExpr.toSqlImpl</a></div><div class="ttdeci">String toSqlImpl()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00145">AnalyticExpr.java:145</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html_a8a7f3127d58f9b9e03cd2a5855311dc8"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8a7f3127d58f9b9e03cd2a5855311dc8">com.cloudera.impala.analysis.Expr.toSql</a></div><div class="ttdeci">String toSql()</div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00449">Expr.java:449</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1AggregateFunction.html">com.cloudera.impala.catalog.AggregateFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="AggregateFunction_8java_source.html#l00030">AggregateFunction.java:30</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html_aa13f302aaf889778a8f16beb116d4292"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#aa13f302aaf889778a8f16beb116d4292">com.cloudera.impala.analysis.Expr.getType</a></div><div class="ttdeci">Type getType()</div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00188">Expr.java:188</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a3d2071735c8a1d89d9f08ed3ba8fbacd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a3d2071735c8a1d89d9f08ed3ba8fbacd">com.cloudera.impala.analysis.AnalyticExpr.isAggregateFn</a></div><div class="ttdeci">static boolean isAggregateFn(Function fn)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00189">AnalyticExpr.java:189</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html_a3ced630d6ec5c31f513de453569a46d0"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a3ced630d6ec5c31f513de453569a46d0">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType.PRECEDING</a></div><div class="ttdeci">PRECEDING</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00062">AnalyticWindow.java:62</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aa89778ae1d2e20df6b9c2fc3ff40505f"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa89778ae1d2e20df6b9c2fc3ff40505f">com.cloudera.impala.analysis.AnalyticExpr.resetWindow_</a></div><div class="ttdeci">boolean resetWindow_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00073">AnalyticExpr.java:73</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html_a36865a2630f4ea61f79b29ad34519f54"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#a36865a2630f4ea61f79b29ad34519f54">com.cloudera.impala.analysis.AnalyticWindow.getLeftBoundary</a></div><div class="ttdeci">Boundary getLeftBoundary()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00189">AnalyticWindow.java:189</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport.html">com.cloudera.impala.service.FeSupport</a></div><div class="ttdef"><b>Definition:</b> <a href="FeSupport_8java_source.html#l00060">FeSupport.java:60</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1common_1_1AnalysisException.html">com.cloudera.impala.common.AnalysisException</a></div><div class="ttdef"><b>Definition:</b> <a href="AnalysisException_8java_source.html#l00021">AnalysisException.java:21</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a781afa6319e20f6c4dc2358b948f1eae"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a781afa6319e20f6c4dc2358b948f1eae">com.cloudera.impala.analysis.AnalyticExpr.LEAD</a></div><div class="ttdeci">static String LEAD</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00078">AnalyticExpr.java:78</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ad58b40be48af423047c6e8c6f42cbc89"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad58b40be48af423047c6e8c6f42cbc89">com.cloudera.impala.analysis.AnalyticExpr.getPartitionExprs</a></div><div class="ttdeci">List&lt; Expr &gt; getPartitionExprs()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00119">AnalyticExpr.java:119</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html_acfe33c074b2da552b99a9e6a4f43bc78"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#acfe33c074b2da552b99a9e6a4f43bc78">com.cloudera.impala.analysis.AnalyticWindow.DEFAULT_WINDOW</a></div><div class="ttdeci">static final AnalyticWindow DEFAULT_WINDOW</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00037">AnalyticWindow.java:37</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html">com.cloudera.impala.analysis.AnalyticWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00035">AnalyticWindow.java:35</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a104118a3b31560af585e01815f77b6ad"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a104118a3b31560af585e01815f77b6ad">com.cloudera.impala.analysis.AnalyticExpr.sqlString_</a></div><div class="ttdeci">String sqlString_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00076">AnalyticExpr.java:76</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_afc814cb7972eaaea2d81ab90cb959384"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc814cb7972eaaea2d81ab90cb959384">com.cloudera.impala.analysis.AnalyticExpr.FIRST_VALUE_REWRITE</a></div><div class="ttdeci">static String FIRST_VALUE_REWRITE</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00090">AnalyticExpr.java:90</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a497030d56f8a8315ea167278dc330a9e"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a497030d56f8a8315ea167278dc330a9e">com.cloudera.impala.analysis.AnalyticExpr.getOffsetExpr</a></div><div class="ttdeci">Expr getOffsetExpr(FunctionCallExpr offsetFnCall)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00542">AnalyticExpr.java:542</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type_html_a6abc12c804b16fb0cb4efeb9c3b41969"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#a6abc12c804b16fb0cb4efeb9c3b41969">com.cloudera.impala.catalog.Type.isImplicitlyCastable</a></div><div class="ttdeci">static boolean isImplicitlyCastable(Type t1, Type t2)</div><div class="ttdef"><b>Definition:</b> <a href="Type_8java_source.html#l00259">Type.java:259</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aa3229736271989002394bfeb89307c8e"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa3229736271989002394bfeb89307c8e">com.cloudera.impala.analysis.AnalyticExpr.DENSERANK</a></div><div class="ttdeci">static String DENSERANK</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00083">AnalyticExpr.java:83</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aa598c53ac5456a48bd61601ad5ecc37d"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa598c53ac5456a48bd61601ad5ecc37d">com.cloudera.impala.analysis.AnalyticExpr.resetAnalysisState</a></div><div class="ttdeci">void resetAnalysisState()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00588">AnalyticExpr.java:588</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_acd60c79aaeb617cdf467aa5785db1bd7"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#acd60c79aaeb617cdf467aa5785db1bd7">com.cloudera.impala.analysis.AnalyticExpr.orderByElements_</a></div><div class="ttdeci">List&lt; OrderByElement &gt; orderByElements_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00067">AnalyticExpr.java:67</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aa2c7f3bcd93a9c00c5c9b97844ea779a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa2c7f3bcd93a9c00c5c9b97844ea779a">com.cloudera.impala.analysis.AnalyticExpr.getOrderByElements</a></div><div class="ttdeci">List&lt; OrderByElement &gt; getOrderByElements()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00120">AnalyticExpr.java:120</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html_a27a6a233a9a12dfb41cf4908054f01f4"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a27a6a233a9a12dfb41cf4908054f01f4">com.cloudera.impala.analysis.Expr.getFn</a></div><div class="ttdeci">Function getFn()</div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00197">Expr.java:197</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html_a6d5fde0a178e2ce435bce294e14375c8"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a6d5fde0a178e2ce435bce294e14375c8">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType.UNBOUNDED_FOLLOWING</a></div><div class="ttdeci">UNBOUNDED_FOLLOWING</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00060">AnalyticWindow.java:60</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_adfb989be2c88b78a7d1379324de20ce1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adfb989be2c88b78a7d1379324de20ce1">com.cloudera.impala.analysis.AnalyticExpr.MAX</a></div><div class="ttdeci">static String MAX</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00086">AnalyticExpr.java:86</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">com.cloudera.impala.analysis.Expr</a></div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00048">Expr.java:48</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType</a></div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00058">AnalyticWindow.java:58</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName_html_a99e282e81e0de413237c41aaba6545fe"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html#a99e282e81e0de413237c41aaba6545fe">com.cloudera.impala.analysis.FunctionName.getFunction</a></div><div class="ttdeci">String getFunction()</div><div class="ttdef"><b>Definition:</b> <a href="FunctionName_8java_source.html#l00071">FunctionName.java:71</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a0063621b8b36f875a1989e4db1987977"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a0063621b8b36f875a1989e4db1987977">com.cloudera.impala.analysis.AnalyticExpr.isOffsetFn</a></div><div class="ttdeci">static boolean isOffsetFn(Function fn)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00194">AnalyticExpr.java:194</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html_ab1fff80d4023e8f93e42b230550917db"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#ab1fff80d4023e8f93e42b230550917db">com.cloudera.impala.analysis.Expr.type_</a></div><div class="ttdeci">Type type_</div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00142">Expr.java:142</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ae987fe26141aa69a450d43a10202e62b"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ae987fe26141aa69a450d43a10202e62b">com.cloudera.impala.analysis.AnalyticExpr.LOG</a></div><div class="ttdeci">static final Logger LOG</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00061">AnalyticExpr.java:61</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_af5b67a392f0e84de3e94c594cf3178e5"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#af5b67a392f0e84de3e94c594cf3178e5">com.cloudera.impala.analysis.AnalyticExpr.LASTVALUE</a></div><div class="ttdeci">static String LASTVALUE</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00081">AnalyticExpr.java:81</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a5b8927e746bf6007220921c976499585"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a5b8927e746bf6007220921c976499585">com.cloudera.impala.analysis.AnalyticExpr.isMinMax</a></div><div class="ttdeci">static boolean isMinMax(Function fn)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00199">AnalyticExpr.java:199</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aaa4e2ce4513d5c9af46bde240cd95f3d"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aaa4e2ce4513d5c9af46bde240cd95f3d">com.cloudera.impala.analysis.AnalyticExpr.analyze</a></div><div class="ttdeci">void analyze(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00261">AnalyticExpr.java:261</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Function.html">com.cloudera.impala.catalog.Function</a></div><div class="ttdef"><b>Definition:</b> <a href="Function_8java_source.html#l00041">Function.java:41</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NumericLiteral.html">com.cloudera.impala.analysis.NumericLiteral</a></div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8java_source.html#l00036">NumericLiteral.java:36</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">com.cloudera.impala.common.InternalException</a></div><div class="ttdef"><b>Definition:</b> <a href="InternalException_8java_source.html#l00021">InternalException.java:21</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a001413fb2cfc582db935fe719e8b1b3a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a001413fb2cfc582db935fe719e8b1b3a">com.cloudera.impala.analysis.AnalyticExpr.syncWithChildren</a></div><div class="ttdeci">void syncWithChildren()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00552">AnalyticExpr.java:552</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil_html_a0ed58516d1c40685bc17ad6ade971c7d"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil.html#a0ed58516d1c40685bc17ad6ade971c7d">com.cloudera.impala.util.TColumnValueUtil.getNumericVal</a></div><div class="ttdeci">static double getNumericVal(TColumnValue val)</div><div class="ttdef"><b>Definition:</b> <a href="TColumnValueUtil_8java_source.html#l00026">TColumnValueUtil.java:26</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html">com.cloudera.impala.analysis.AnalyticExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00060">AnalyticExpr.java:60</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionName.html">com.cloudera.impala.analysis.FunctionName</a></div><div class="ttdef"><b>Definition:</b> <a href="FunctionName_8java_source.html#l00030">FunctionName.java:30</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NullLiteral_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1NullLiteral.html">com.cloudera.impala.analysis.NullLiteral</a></div><div class="ttdef"><b>Definition:</b> <a href="NullLiteral_8java_source.html#l00023">NullLiteral.java:23</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a746677b5661617c96ff91a250fefbff5"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a746677b5661617c96ff91a250fefbff5">com.cloudera.impala.analysis.AnalyticExpr.standardize</a></div><div class="ttdeci">void standardize(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00404">AnalyticExpr.java:404</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">com.cloudera.impala.analysis.Analyzer</a></div><div class="ttdef"><b>Definition:</b> <a href="Analyzer_8java_source.html#l00105">Analyzer.java:105</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a022c19548915db218acbfe56bba28eda"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a022c19548915db218acbfe56bba28eda">com.cloudera.impala.analysis.AnalyticExpr.getFnCall</a></div><div class="ttdeci">FunctionCallExpr getFnCall()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00118">AnalyticExpr.java:118</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_afc9060b9bf16051ed0f9194ef84c7ea0"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#afc9060b9bf16051ed0f9194ef84c7ea0">com.cloudera.impala.analysis.AnalyticExpr.ROWNUMBER</a></div><div class="ttdeci">static String ROWNUMBER</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00084">AnalyticExpr.java:84</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ab0739b4037275dc52e2fb7b6a2d34ef8"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ab0739b4037275dc52e2fb7b6a2d34ef8">com.cloudera.impala.analysis.AnalyticExpr.debugString</a></div><div class="ttdeci">String debugString()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00172">AnalyticExpr.java:172</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_html_aad3774b2305d13484626425eee3d63dd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow.html#aad3774b2305d13484626425eee3d63dd">com.cloudera.impala.analysis.AnalyticWindow.getRightBoundary</a></div><div class="ttdeci">Boundary getRightBoundary()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00190">AnalyticWindow.java:190</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html_a8b745173008a9c04bd8892ca365d24af"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html#a8b745173008a9c04bd8892ca365d24af">com.cloudera.impala.analysis.Expr.isAnalyzed_</a></div><div class="ttdeci">boolean isAnalyzed_</div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00143">Expr.java:143</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1util_1_1TColumnValueUtil.html">com.cloudera.impala.util.TColumnValueUtil</a></div><div class="ttdef"><b>Definition:</b> <a href="TColumnValueUtil_8java_source.html#l00022">TColumnValueUtil.java:22</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1Boundary.html">com.cloudera.impala.analysis.AnalyticWindow.Boundary</a></div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00112">AnalyticWindow.java:112</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a7f96eb69343ebc3691c5c6cf4a4e06b1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7f96eb69343ebc3691c5c6cf4a4e06b1">com.cloudera.impala.analysis.AnalyticExpr.FIRSTVALUE</a></div><div class="ttdeci">static String FIRSTVALUE</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00080">AnalyticExpr.java:80</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1OrderByElement.html">com.cloudera.impala.analysis.OrderByElement</a></div><div class="ttdef"><b>Definition:</b> <a href="OrderByElement_8java_source.html#l00025">OrderByElement.java:25</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a6117dff10ca679c677db4f73c3e6b9b3"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6117dff10ca679c677db4f73c3e6b9b3">com.cloudera.impala.analysis.AnalyticExpr.isRankingFn</a></div><div class="ttdeci">static boolean isRankingFn(Function fn)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00204">AnalyticExpr.java:204</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html_ae20a6eb6190876e3df6ec7cf69e1b67e"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#ae20a6eb6190876e3df6ec7cf69e1b67e">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType.UNBOUNDED_PRECEDING</a></div><div class="ttdeci">UNBOUNDED_PRECEDING</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00059">AnalyticWindow.java:59</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1ExprSubstitutionMap_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1ExprSubstitutionMap.html">com.cloudera.impala.analysis.ExprSubstitutionMap</a></div><div class="ttdef"><b>Definition:</b> <a href="ExprSubstitutionMap_8java_source.html#l00020">ExprSubstitutionMap.java:20</a></div></div>
<div class="ttc" id="partitioning-throughput-test_8cc_html_ad172ecfd5c31c5df6282c2b4bc322bf7"><div class="ttname"><a href="partitioning-throughput-test_8cc.html#ad172ecfd5c31c5df6282c2b4bc322bf7">offset</a></div><div class="ttdeci">uint8_t offset[7 *64-sizeof(uint64_t)]</div><div class="ttdef"><b>Definition:</b> <a href="partitioning-throughput-test_8cc_source.html#l00037">partitioning-throughput-test.cc:37</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a77f6c380799dd694e7be21888c8b3b03"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a77f6c380799dd694e7be21888c8b3b03">com.cloudera.impala.analysis.AnalyticExpr.isConstant</a></div><div class="ttdeci">boolean isConstant()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00139">AnalyticExpr.java:139</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ad3cd5358daf73dcce13b3961aed9bc67"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad3cd5358daf73dcce13b3961aed9bc67">com.cloudera.impala.analysis.AnalyticExpr.substituteImpl</a></div><div class="ttdeci">Expr substituteImpl(ExprSubstitutionMap smap, Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00598">AnalyticExpr.java:598</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aebce64d23e068191231fa7294211cf68"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aebce64d23e068191231fa7294211cf68">com.cloudera.impala.analysis.AnalyticExpr.MIN</a></div><div class="ttdeci">static String MIN</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00085">AnalyticExpr.java:85</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_adf65d99f71ac3d901c046d12050e1c10"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#adf65d99f71ac3d901c046d12050e1c10">com.cloudera.impala.analysis.AnalyticExpr.getWindow</a></div><div class="ttdeci">AnalyticWindow getWindow()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00121">AnalyticExpr.java:121</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a7695e9263052e3a97f375e6d1ce11f07"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a7695e9263052e3a97f375e6d1ce11f07">com.cloudera.impala.analysis.AnalyticExpr.toThrift</a></div><div class="ttdeci">void toThrift(TExprNode msg)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00181">AnalyticExpr.java:181</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a85d3d347158411736ee7f2c60e7787b2"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85d3d347158411736ee7f2c60e7787b2">com.cloudera.impala.analysis.AnalyticExpr.setChildren</a></div><div class="ttdeci">void setChildren()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00569">AnalyticExpr.java:569</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ad83db26dc85d4d0de1ed49f79b0f57f3"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad83db26dc85d4d0de1ed49f79b0f57f3">com.cloudera.impala.analysis.AnalyticExpr.checkRangeOffsetBoundaryExpr</a></div><div class="ttdeci">void checkRangeOffsetBoundaryExpr(AnalyticWindow.Boundary boundary)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00215">AnalyticExpr.java:215</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType_html_a96dedeb312724458f4572273faff7267"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticWindow_1_1BoundaryType.html#a96dedeb312724458f4572273faff7267">com.cloudera.impala.analysis.AnalyticWindow.BoundaryType.FOLLOWING</a></div><div class="ttdeci">FOLLOWING</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticWindow_8java_source.html#l00063">AnalyticWindow.java:63</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_aa59fdfe2cd527cb5e603caa26d57cc0d"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#aa59fdfe2cd527cb5e603caa26d57cc0d">com.cloudera.impala.analysis.AnalyticExpr.LAG</a></div><div class="ttdeci">static String LAG</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00079">AnalyticExpr.java:79</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a6827149530e70a3197856bb3fd8334af"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a6827149530e70a3197856bb3fd8334af">com.cloudera.impala.analysis.AnalyticExpr.checkOffset</a></div><div class="ttdeci">void checkOffset(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00236">AnalyticExpr.java:236</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a85556eab28d5680f746432277571c7dd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a85556eab28d5680f746432277571c7dd">com.cloudera.impala.analysis.AnalyticExpr.clone</a></div><div class="ttdeci">Expr clone()</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00142">AnalyticExpr.java:142</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_a613bcbca96d5004e83d22ad5db5a1293"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#a613bcbca96d5004e83d22ad5db5a1293">com.cloudera.impala.analysis.AnalyticExpr.isAnalyticFn</a></div><div class="ttdeci">static boolean isAnalyticFn(Function fn)</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00184">AnalyticExpr.java:184</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr_html_aaf6cf550a3266f48b976e25aaa4487bc"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html#aaf6cf550a3266f48b976e25aaa4487bc">com.cloudera.impala.analysis.FunctionCallExpr.clone</a></div><div class="ttdeci">Expr clone()</div><div class="ttdef"><b>Definition:</b> <a href="FunctionCallExpr_8java_source.html#l00483">FunctionCallExpr.java:483</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr_html_a2bdf3dfcc1eda4658ab3fc4ea74e81d8"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1FunctionCallExpr.html#a2bdf3dfcc1eda4658ab3fc4ea74e81d8">com.cloudera.impala.analysis.FunctionCallExpr.equals</a></div><div class="ttdeci">boolean equals(Object obj)</div><div class="ttdef"><b>Definition:</b> <a href="FunctionCallExpr_8java_source.html#l00139">FunctionCallExpr.java:139</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr_html_ad08a0fff1f539eb1b69e391022cebdbd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1AnalyticExpr.html#ad08a0fff1f539eb1b69e391022cebdbd">com.cloudera.impala.analysis.AnalyticExpr.partitionExprs_</a></div><div class="ttdeci">final List&lt; Expr &gt; partitionExprs_</div><div class="ttdef"><b>Definition:</b> <a href="AnalyticExpr_8java_source.html#l00064">AnalyticExpr.java:64</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_ca2797c59c2e868cd2eca72571423f6a.html">fe</a></li><li class="navelem"><a class="el" href="dir_9456c03c9c6e5a96e843b28fc5c6395b.html">src</a></li><li class="navelem"><a class="el" href="dir_31c8d7a6e8855be2d8d6fa4227c487c3.html">main</a></li><li class="navelem"><a class="el" href="dir_d2615d3423c50009d0fa2801d3e0150c.html">java</a></li><li class="navelem"><a class="el" href="dir_df2af9fb37a2f3aedd0dd3e7b116eedc.html">com</a></li><li class="navelem"><a class="el" href="dir_48ee7e70be44cce637301d7ac948c4e1.html">cloudera</a></li><li class="navelem"><a class="el" href="dir_c062777d65f1b5dc463ca31df638b83a.html">impala</a></li><li class="navelem"><a class="el" href="dir_5a28c2814222b20468ce1cf07f052735.html">analysis</a></li><li class="navelem"><a class="el" href="AnalyticExpr_8java.html">AnalyticExpr.java</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:38 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>