blob: 96495f37e2d3459dad8d0092f90e214397e83fab [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>SqlAdvisor (Apache Calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SqlAdvisor (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":9,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SqlAdvisor.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.sql.advise</a></div>
<h2 title="Class SqlAdvisor" class="title">Class SqlAdvisor</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.sql.advise.SqlAdvisor</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">SqlAdvisor</span>
extends java.lang.Object</pre>
<div class="block">An assistant which offers hints and corrections to a partially-formed SQL
statement. It is used in the SQL editor user-interface.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SqlAdvisor.ValidateErrorInfo.html" title="class in org.apache.calcite.sql.advise">SqlAdvisor.ValidateErrorInfo</a></span></code></th>
<td class="colLast">
<div class="block">An inner class that represents error message text and position info of a
validator or parser exception</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#HINT_TOKEN">HINT_TOKEN</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static org.slf4j.Logger</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#LOGGER">LOGGER</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../parser/SqlParser.Config.html" title="interface in org.apache.calcite.sql.parser">SqlParser.Config</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#parserConfig">parserConfig</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private org.apache.calcite.avatica.util.Casing</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prevPreferredCasing">prevPreferredCasing</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prevWord">prevWord</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reservedWordsList">reservedWordsList</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private java.util.Set&lt;java.lang.String&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reservedWordsSet">reservedWordsSet</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#UPPER_HINT_TOKEN">UPPER_HINT_TOKEN</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validator">validator</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.sql.validate.SqlValidatorWithHints)">SqlAdvisor</a></span>&#8203;(<a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a>&nbsp;validator)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">use <a href="#%3Cinit%3E(org.apache.calcite.sql.validate.SqlValidatorWithHints,org.apache.calcite.sql.parser.SqlParser.Config)"><code>SqlAdvisor(SqlValidatorWithHints, SqlParser.Config)</code></a></div>
</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.sql.validate.SqlValidatorWithHints,org.apache.calcite.sql.parser.SqlParser.Config)">SqlAdvisor</a></span>&#8203;(<a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a>&nbsp;validator,
<a href="../parser/SqlParser.Config.html" title="interface in org.apache.calcite.sql.parser">SqlParser.Config</a>&nbsp;parserConfig)</code></th>
<td class="colLast">
<div class="block">Creates a SqlAdvisor with a validator instance and given parser configuration</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>private java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#applyCasing(java.lang.String,org.apache.calcite.avatica.util.Casing)">applyCasing</a></span>&#8203;(java.lang.String&nbsp;value,
org.apache.calcite.avatica.util.Casing&nbsp;casing)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected <a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#collectParserError(java.lang.String,java.util.List)">collectParserError</a></span>&#8203;(java.lang.String&nbsp;sql,
java.util.List&lt;<a href="SqlAdvisor.ValidateErrorInfo.html" title="class in org.apache.calcite.sql.advise">SqlAdvisor.ValidateErrorInfo</a>&gt;&nbsp;errorList)</code></th>
<td class="colLast">
<div class="block">Attempts to parse a SQL statement and adds to the errorList if any syntax
error is found.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>private void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ensureReservedAndKeyWords()">ensureReservedAndKeyWords</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCompletionHints(java.lang.String,int,java.lang.String%5B%5D)">getCompletionHints</a></span>&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor,
java.lang.String[]&nbsp;replaced)</code></th>
<td class="colLast">
<div class="block">Gets completion hints for a partially completed or syntactically incorrect
sql statement with cursor pointing to the position where completion hints
are requested.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCompletionHints(java.lang.String,org.apache.calcite.sql.parser.SqlParserPos)">getCompletionHints</a></span>&#8203;(java.lang.String&nbsp;sql,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos)</code></th>
<td class="colLast">
<div class="block">Gets completion hints for a syntactically correct sql statement with dummy
SqlIdentifier</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCompletionHints0(java.lang.String,int)">getCompletionHints0</a></span>&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected <a href="../parser/SqlAbstractParserImpl.Metadata.html" title="interface in org.apache.calcite.sql.parser">SqlAbstractParserImpl.Metadata</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getParserMetadata()">getParserMetadata</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the underlying Parser metadata.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>private org.apache.calcite.avatica.util.Casing</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPreferredCasing(java.lang.String)">getPreferredCasing</a></span>&#8203;(java.lang.String&nbsp;word)</code></th>
<td class="colLast">
<div class="block">Returns casing which is preferred for replacement.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getQualifiedName(java.lang.String,int)">getQualifiedName</a></span>&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</code></th>
<td class="colLast">
<div class="block">Gets the fully qualified name for a <a href="../SqlIdentifier.html" title="class in org.apache.calcite.sql"><code>SqlIdentifier</code></a> at a given
position of a sql statement.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getReplacement(org.apache.calcite.sql.validate.SqlMoniker,boolean,org.apache.calcite.avatica.util.Casing)">getReplacement</a></span>&#8203;(<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&nbsp;hint,
boolean&nbsp;quoted,
org.apache.calcite.avatica.util.Casing&nbsp;preferredCasing)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getReplacement(org.apache.calcite.sql.validate.SqlMoniker,java.lang.String)">getReplacement</a></span>&#8203;(<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&nbsp;hint,
java.lang.String&nbsp;word)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;java.lang.String&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getReservedAndKeyWords()">getReservedAndKeyWords</a></span>()</code></th>
<td class="colLast">
<div class="block">Return an array of SQL reserved and keywords</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>private java.util.Set&lt;java.lang.String&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getReservedAndKeyWordsSet()">getReservedAndKeyWordsSet</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>private static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isSelectListItem(org.apache.calcite.sql.SqlNode,org.apache.calcite.sql.parser.SqlParserPos,java.lang.String)">isSelectListItem</a></span>&#8203;(<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>&nbsp;root,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos,
java.lang.String&nbsp;hintToken)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isValid(java.lang.String)">isValid</a></span>&#8203;(java.lang.String&nbsp;sql)</code></th>
<td class="colLast">
<div class="block">Attempts to complete and validate a given partially completed sql
statement, and returns whether it is valid.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#matchesUnquoted(java.lang.String,java.lang.String)">matchesUnquoted</a></span>&#8203;(java.lang.String&nbsp;name,
java.lang.String&nbsp;idToAppend)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>protected <a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#parseQuery(java.lang.String)">parseQuery</a></span>&#8203;(java.lang.String&nbsp;sql)</code></th>
<td class="colLast">
<div class="block">Wrapper function to parse a SQL query (SELECT or VALUES, but not INSERT,
UPDATE, DELETE, CREATE, DROP etc.), throwing a <a href="../parser/SqlParseException.html" title="class in org.apache.calcite.sql.parser"><code>SqlParseException</code></a>
if the statement is not syntactically valid.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>private char</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#quoteEnd()">quoteEnd</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>private char</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#quoteStart()">quoteStart</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#simplifySql(java.lang.String,int)">simplifySql</a></span>&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</code></th>
<td class="colLast">
<div class="block">Turns a partially completed or syntactically incorrect sql statement into
a simplified, valid one that can be passed into getCompletionHints()</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>private <a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#tryParse(java.lang.String,java.util.List)">tryParse</a></span>&#8203;(java.lang.String&nbsp;sql,
java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;&nbsp;hintList)</code></th>
<td class="colLast">
<div class="block">Tries to parse a SQL statement.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>java.util.List&lt;<a href="SqlAdvisor.ValidateErrorInfo.html" title="class in org.apache.calcite.sql.advise">SqlAdvisor.ValidateErrorInfo</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validate(java.lang.String)">validate</a></span>&#8203;(java.lang.String&nbsp;sql)</code></th>
<td class="colLast">
<div class="block">Attempts to parse and validate a SQL statement.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="LOGGER">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LOGGER</h4>
<pre>public static final&nbsp;org.slf4j.Logger LOGGER</pre>
</li>
</ul>
<a id="HINT_TOKEN">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HINT_TOKEN</h4>
<pre>private static final&nbsp;java.lang.String HINT_TOKEN</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.calcite.sql.advise.SqlAdvisor.HINT_TOKEN">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="UPPER_HINT_TOKEN">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>UPPER_HINT_TOKEN</h4>
<pre>private static final&nbsp;java.lang.String UPPER_HINT_TOKEN</pre>
</li>
</ul>
<a id="validator">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validator</h4>
<pre>private final&nbsp;<a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a> validator</pre>
</li>
</ul>
<a id="parserConfig">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parserConfig</h4>
<pre>private final&nbsp;<a href="../parser/SqlParser.Config.html" title="interface in org.apache.calcite.sql.parser">SqlParser.Config</a> parserConfig</pre>
</li>
</ul>
<a id="prevWord">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prevWord</h4>
<pre>private&nbsp;java.lang.String prevWord</pre>
</li>
</ul>
<a id="prevPreferredCasing">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prevPreferredCasing</h4>
<pre>private&nbsp;org.apache.calcite.avatica.util.Casing prevPreferredCasing</pre>
</li>
</ul>
<a id="reservedWordsSet">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reservedWordsSet</h4>
<pre>private&nbsp;java.util.Set&lt;java.lang.String&gt; reservedWordsSet</pre>
</li>
</ul>
<a id="reservedWordsList">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>reservedWordsList</h4>
<pre>private&nbsp;java.util.List&lt;java.lang.String&gt; reservedWordsList</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(org.apache.calcite.sql.validate.SqlValidatorWithHints)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SqlAdvisor</h4>
<pre>@Deprecated
public&nbsp;SqlAdvisor&#8203;(<a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a>&nbsp;validator)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">use <a href="#%3Cinit%3E(org.apache.calcite.sql.validate.SqlValidatorWithHints,org.apache.calcite.sql.parser.SqlParser.Config)"><code>SqlAdvisor(SqlValidatorWithHints, SqlParser.Config)</code></a></div>
</div>
<div class="block">Creates a SqlAdvisor with a validator instance</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>validator</code> - Validator</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(org.apache.calcite.sql.validate.SqlValidatorWithHints,org.apache.calcite.sql.parser.SqlParser.Config)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SqlAdvisor</h4>
<pre>public&nbsp;SqlAdvisor&#8203;(<a href="../validate/SqlValidatorWithHints.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorWithHints</a>&nbsp;validator,
<a href="../parser/SqlParser.Config.html" title="interface in org.apache.calcite.sql.parser">SqlParser.Config</a>&nbsp;parserConfig)</pre>
<div class="block">Creates a SqlAdvisor with a validator instance and given parser configuration</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>validator</code> - Validator</dd>
<dd><code>parserConfig</code> - parser config</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="quoteStart()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>quoteStart</h4>
<pre class="methodSignature">private&nbsp;char&nbsp;quoteStart()</pre>
</li>
</ul>
<a id="quoteEnd()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>quoteEnd</h4>
<pre class="methodSignature">private&nbsp;char&nbsp;quoteEnd()</pre>
</li>
</ul>
<a id="getCompletionHints(java.lang.String,int,java.lang.String[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCompletionHints</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;&nbsp;getCompletionHints&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor,
java.lang.String[]&nbsp;replaced)</pre>
<div class="block">Gets completion hints for a partially completed or syntactically incorrect
sql statement with cursor pointing to the position where completion hints
are requested.
<p>Writes into <code>replaced[0]</code> the string that is being
replaced. Includes the cursor and the preceding identifier. For example,
if <code>sql</code> is "select abc^de from t", sets <code>
replaced[0]</code> to "abc". If the cursor is in the middle of
whitespace, the replaced string is empty. The replaced string is never
null.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A partial or syntactically incorrect sql statement for
which to retrieve completion hints</dd>
<dd><code>cursor</code> - to indicate the 0-based cursor position in the query at</dd>
<dd><code>replaced</code> - String which is being replaced (output)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>completion hints</dd>
</dl>
</li>
</ul>
<a id="getCompletionHints0(java.lang.String,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCompletionHints0</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;&nbsp;getCompletionHints0&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</pre>
</li>
</ul>
<a id="getPreferredCasing(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPreferredCasing</h4>
<pre class="methodSignature">private&nbsp;org.apache.calcite.avatica.util.Casing&nbsp;getPreferredCasing&#8203;(java.lang.String&nbsp;word)</pre>
<div class="block">Returns casing which is preferred for replacement.
For instance, <code>en =&gt; ename, EN =&gt; ENAME</code>.
When input has mixed case, <code>Casing.UNCHANGED</code> is returned.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>word</code> - input word</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>preferred casing when replacing input word</dd>
</dl>
</li>
</ul>
<a id="getReplacement(org.apache.calcite.sql.validate.SqlMoniker,java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getReplacement</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getReplacement&#8203;(<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&nbsp;hint,
java.lang.String&nbsp;word)</pre>
</li>
</ul>
<a id="getReplacement(org.apache.calcite.sql.validate.SqlMoniker,boolean,org.apache.calcite.avatica.util.Casing)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getReplacement</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getReplacement&#8203;(<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&nbsp;hint,
boolean&nbsp;quoted,
org.apache.calcite.avatica.util.Casing&nbsp;preferredCasing)</pre>
</li>
</ul>
<a id="matchesUnquoted(java.lang.String,java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>matchesUnquoted</h4>
<pre class="methodSignature">private&nbsp;boolean&nbsp;matchesUnquoted&#8203;(java.lang.String&nbsp;name,
java.lang.String&nbsp;idToAppend)</pre>
</li>
</ul>
<a id="applyCasing(java.lang.String,org.apache.calcite.avatica.util.Casing)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>applyCasing</h4>
<pre class="methodSignature">private&nbsp;java.lang.String&nbsp;applyCasing&#8203;(java.lang.String&nbsp;value,
org.apache.calcite.avatica.util.Casing&nbsp;casing)</pre>
</li>
</ul>
<a id="getCompletionHints(java.lang.String,org.apache.calcite.sql.parser.SqlParserPos)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCompletionHints</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;&nbsp;getCompletionHints&#8203;(java.lang.String&nbsp;sql,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos)</pre>
<div class="block">Gets completion hints for a syntactically correct sql statement with dummy
SqlIdentifier</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A syntactically correct sql statement for which to retrieve
completion hints</dd>
<dd><code>pos</code> - to indicate the line and column position in the query at which
completion hints need to be retrieved. For example, "select
a.ename, b.deptno from sales.emp a join sales.dept b "on
a.deptno=b.deptno where empno=1"; setting pos to 'Line 1, Column
17' returns all the possible column names that can be selected
from sales.dept table setting pos to 'Line 1, Column 31' returns
all the possible table names in 'sales' schema</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an array of hints (<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate"><code>SqlMoniker</code></a>) that can fill in at the
indicated position</dd>
</dl>
</li>
</ul>
<a id="isSelectListItem(org.apache.calcite.sql.SqlNode,org.apache.calcite.sql.parser.SqlParserPos,java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSelectListItem</h4>
<pre class="methodSignature">private static&nbsp;boolean&nbsp;isSelectListItem&#8203;(<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>&nbsp;root,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos,
java.lang.String&nbsp;hintToken)</pre>
</li>
</ul>
<a id="tryParse(java.lang.String,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tryParse</h4>
<pre class="methodSignature">private&nbsp;<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>&nbsp;tryParse&#8203;(java.lang.String&nbsp;sql,
java.util.List&lt;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&gt;&nbsp;hintList)</pre>
<div class="block">Tries to parse a SQL statement.
<p>If succeeds, returns the parse tree node; if fails, populates the list
of hints and returns null.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - SQL statement</dd>
<dd><code>hintList</code> - List of hints suggesting allowable tokens at the point of
failure</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Parse tree if succeeded, null if parse failed</dd>
</dl>
</li>
</ul>
<a id="getQualifiedName(java.lang.String,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getQualifiedName</h4>
<pre class="methodSignature">public&nbsp;<a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate">SqlMoniker</a>&nbsp;getQualifiedName&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</pre>
<div class="block">Gets the fully qualified name for a <a href="../SqlIdentifier.html" title="class in org.apache.calcite.sql"><code>SqlIdentifier</code></a> at a given
position of a sql statement.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A syntactically correct sql statement for which to retrieve a
fully qualified SQL identifier name</dd>
<dd><code>cursor</code> - to indicate the 0-based cursor position in the query that
represents a SQL identifier for which its fully qualified
name is to be returned.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a <a href="../validate/SqlMoniker.html" title="interface in org.apache.calcite.sql.validate"><code>SqlMoniker</code></a> that contains the fully qualified name of
the specified SQL identifier, returns null if none is found or the SQL
statement is invalid.</dd>
</dl>
</li>
</ul>
<a id="isValid(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isValid</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isValid&#8203;(java.lang.String&nbsp;sql)</pre>
<div class="block">Attempts to complete and validate a given partially completed sql
statement, and returns whether it is valid.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A partial or syntactically incorrect sql statement to validate</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether SQL statement is valid</dd>
</dl>
</li>
</ul>
<a id="validate(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validate</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;<a href="SqlAdvisor.ValidateErrorInfo.html" title="class in org.apache.calcite.sql.advise">SqlAdvisor.ValidateErrorInfo</a>&gt;&nbsp;validate&#8203;(java.lang.String&nbsp;sql)</pre>
<div class="block">Attempts to parse and validate a SQL statement. Throws the first
exception encountered. The error message of this exception is to be
displayed on the UI</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A user-input sql statement to be validated</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a List of ValidateErrorInfo (null if sql is valid)</dd>
</dl>
</li>
</ul>
<a id="simplifySql(java.lang.String,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>simplifySql</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;simplifySql&#8203;(java.lang.String&nbsp;sql,
int&nbsp;cursor)</pre>
<div class="block">Turns a partially completed or syntactically incorrect sql statement into
a simplified, valid one that can be passed into getCompletionHints()</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A partial or syntactically incorrect sql statement</dd>
<dd><code>cursor</code> - to indicate column position in the query at which
completion hints need to be retrieved.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a completed, valid (and possibly simplified SQL statement</dd>
</dl>
</li>
</ul>
<a id="getReservedAndKeyWords()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getReservedAndKeyWords</h4>
<pre class="methodSignature">public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getReservedAndKeyWords()</pre>
<div class="block">Return an array of SQL reserved and keywords</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an of SQL reserved and keywords</dd>
</dl>
</li>
</ul>
<a id="getReservedAndKeyWordsSet()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getReservedAndKeyWordsSet</h4>
<pre class="methodSignature">private&nbsp;java.util.Set&lt;java.lang.String&gt;&nbsp;getReservedAndKeyWordsSet()</pre>
</li>
</ul>
<a id="ensureReservedAndKeyWords()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ensureReservedAndKeyWords</h4>
<pre class="methodSignature">private&nbsp;void&nbsp;ensureReservedAndKeyWords()</pre>
</li>
</ul>
<a id="getParserMetadata()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getParserMetadata</h4>
<pre class="methodSignature">protected&nbsp;<a href="../parser/SqlAbstractParserImpl.Metadata.html" title="interface in org.apache.calcite.sql.parser">SqlAbstractParserImpl.Metadata</a>&nbsp;getParserMetadata()</pre>
<div class="block">Returns the underlying Parser metadata.
<p>To use a different parser (recognizing a different dialect of SQL),
derived class should override.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>metadata</dd>
</dl>
</li>
</ul>
<a id="parseQuery(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parseQuery</h4>
<pre class="methodSignature">protected&nbsp;<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>&nbsp;parseQuery&#8203;(java.lang.String&nbsp;sql)
throws <a href="../parser/SqlParseException.html" title="class in org.apache.calcite.sql.parser">SqlParseException</a></pre>
<div class="block">Wrapper function to parse a SQL query (SELECT or VALUES, but not INSERT,
UPDATE, DELETE, CREATE, DROP etc.), throwing a <a href="../parser/SqlParseException.html" title="class in org.apache.calcite.sql.parser"><code>SqlParseException</code></a>
if the statement is not syntactically valid.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - SQL statement</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>parse tree</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../parser/SqlParseException.html" title="class in org.apache.calcite.sql.parser">SqlParseException</a></code> - if not syntactically valid</dd>
</dl>
</li>
</ul>
<a id="collectParserError(java.lang.String,java.util.List)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>collectParserError</h4>
<pre class="methodSignature">protected&nbsp;<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>&nbsp;collectParserError&#8203;(java.lang.String&nbsp;sql,
java.util.List&lt;<a href="SqlAdvisor.ValidateErrorInfo.html" title="class in org.apache.calcite.sql.advise">SqlAdvisor.ValidateErrorInfo</a>&gt;&nbsp;errorList)</pre>
<div class="block">Attempts to parse a SQL statement and adds to the errorList if any syntax
error is found. This implementation uses <a href="../parser/SqlParser.html" title="class in org.apache.calcite.sql.parser"><code>SqlParser</code></a>. Subclass can
re-implement this with a different parser implementation</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sql</code> - A user-input sql statement to be parsed</dd>
<dd><code>errorList</code> - A <code>List</code> of error to be added to</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><a href="../SqlNode.html" title="class in org.apache.calcite.sql"><code>SqlNode</code></a> that is root of the parse tree, null if the sql
is not valid</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SqlAdvisor.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2012&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>